mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Rework validator-collator interaction
1) Remove config 41, move "full collated data" to capabilities 2) Whitelist on collator nodes 3) "Ping" request for collator nodes 4) More customizable collators list for validators 5) CollationManager
This commit is contained in:
parent
7d2110c8b0
commit
b3bea413e3
34 changed files with 1204 additions and 319 deletions
|
@ -26,29 +26,58 @@ namespace ton {
|
|||
|
||||
namespace validator {
|
||||
|
||||
void CollatorsList::unpack(const ton_api::engine_validator_collatorsList& obj) {
|
||||
td::Status CollatorsList::unpack(const ton_api::engine_validator_collatorsList& obj) {
|
||||
shards.clear();
|
||||
self_collate = obj.self_collate_;
|
||||
use_config_41 = obj.use_config_41_;
|
||||
self_collate = false;
|
||||
for (const auto& shard_obj : obj.shards_) {
|
||||
ShardIdFull shard_id = create_shard_id(shard_obj->shard_id_);
|
||||
if (shard_id.is_masterchain()) {
|
||||
return td::Status::Error("masterchain shard in collators list");
|
||||
}
|
||||
if (!shard_id.is_valid_ext()) {
|
||||
return td::Status::Error(PSTRING() << "invalid shard " << shard_id.to_str());
|
||||
}
|
||||
shards.emplace_back();
|
||||
Shard& shard = shards.back();
|
||||
shard.shard_id = create_shard_id(shard_obj->shard_id_);
|
||||
shard.shard_id = shard_id;
|
||||
shard.self_collate = shard_obj->self_collate_;
|
||||
if (shard.self_collate) {
|
||||
self_collate = true;
|
||||
}
|
||||
if (shard_obj->select_mode_.empty() || shard_obj->select_mode_ == "random") {
|
||||
shard.select_mode = mode_random;
|
||||
} else if (shard_obj->select_mode_ == "ordered") {
|
||||
shard.select_mode = mode_ordered;
|
||||
} else if (shard_obj->select_mode_ == "round_robin") {
|
||||
shard.select_mode = mode_round_robin;
|
||||
} else {
|
||||
return td::Status::Error(PSTRING() << "invalid select mode '" << shard_obj->select_mode_
|
||||
<< "' (allowed: 'random', 'ordered', 'round_robin')");
|
||||
}
|
||||
for (const auto& collator : shard_obj->collators_) {
|
||||
shard.collators.push_back({adnl::AdnlNodeIdShort{collator->adnl_id_}, collator->trusted_});
|
||||
shard.collators.push_back(adnl::AdnlNodeIdShort{collator->adnl_id_});
|
||||
}
|
||||
}
|
||||
return td::Status::OK();
|
||||
}
|
||||
|
||||
td::Ref<ValidatorManagerOptions> ValidatorManagerOptions::create(
|
||||
BlockIdExt zero_block_id, BlockIdExt init_block_id,
|
||||
std::function<bool(ShardIdFull)> check_shard, bool allow_blockchain_init,
|
||||
double sync_blocks_before, double block_ttl, double state_ttl, double max_mempool_num,
|
||||
double archive_ttl, double key_proof_ttl, bool initial_sync_disabled) {
|
||||
CollatorsList CollatorsList::default_list() {
|
||||
CollatorsList list;
|
||||
list.shards.push_back(
|
||||
{.shard_id = ShardIdFull{basechainId, shardIdAll}, .select_mode = mode_random, .self_collate = true});
|
||||
list.self_collate = true;
|
||||
return list;
|
||||
}
|
||||
|
||||
td::Ref<ValidatorManagerOptions> ValidatorManagerOptions::create(BlockIdExt zero_block_id, BlockIdExt init_block_id,
|
||||
std::function<bool(ShardIdFull)> check_shard,
|
||||
bool allow_blockchain_init, double sync_blocks_before,
|
||||
double block_ttl, double state_ttl,
|
||||
double max_mempool_num, double archive_ttl,
|
||||
double key_proof_ttl, bool initial_sync_disabled) {
|
||||
return td::make_ref<ValidatorManagerOptionsImpl>(zero_block_id, init_block_id, std::move(check_shard),
|
||||
allow_blockchain_init, sync_blocks_before, block_ttl, state_ttl,
|
||||
max_mempool_num,
|
||||
archive_ttl, key_proof_ttl, initial_sync_disabled);
|
||||
max_mempool_num, archive_ttl, key_proof_ttl, initial_sync_disabled);
|
||||
}
|
||||
|
||||
} // namespace validator
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue