mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Merge pull request #7 from newton-blockchain/versionedConfig
Upgrade to new proto version
This commit is contained in:
commit
43096dfa7f
5 changed files with 65 additions and 9 deletions
|
@ -307,6 +307,8 @@ validatorSession.candidate src:int256 round:int root_hash:int256 data:bytes coll
|
||||||
|
|
||||||
validatorSession.config catchain_idle_timeout:double catchain_max_deps:int round_candidates:int next_candidate_delay:double round_attempt_duration:int
|
validatorSession.config catchain_idle_timeout:double catchain_max_deps:int round_candidates:int next_candidate_delay:double round_attempt_duration:int
|
||||||
max_round_attempts:int max_block_size:int max_collated_data_size:int = validatorSession.Config;
|
max_round_attempts:int max_block_size:int max_collated_data_size:int = validatorSession.Config;
|
||||||
|
validatorSession.configVersioned catchain_idle_timeout:double catchain_max_deps:int round_candidates:int next_candidate_delay:double round_attempt_duration:int
|
||||||
|
max_round_attempts:int max_block_size:int max_collated_data_size:int version:int = validatorSession.Config;
|
||||||
validatorSession.configNew catchain_idle_timeout:double catchain_max_deps:int round_candidates:int next_candidate_delay:double round_attempt_duration:int
|
validatorSession.configNew catchain_idle_timeout:double catchain_max_deps:int round_candidates:int next_candidate_delay:double round_attempt_duration:int
|
||||||
max_round_attempts:int max_block_size:int max_collated_data_size:int new_catchain_ids:Bool = validatorSession.Config;
|
max_round_attempts:int max_block_size:int max_collated_data_size:int new_catchain_ids:Bool = validatorSession.Config;
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -53,6 +53,8 @@ struct ValidatorSessionOptions {
|
||||||
|
|
||||||
bool new_catchain_ids = false;
|
bool new_catchain_ids = false;
|
||||||
|
|
||||||
|
td::uint32 proto_version = 0;
|
||||||
|
|
||||||
td::Bits256 get_hash() const;
|
td::Bits256 get_hash() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -881,19 +881,26 @@ td::actor::ActorOwn<ValidatorSession> ValidatorSession::create(
|
||||||
}
|
}
|
||||||
|
|
||||||
td::Bits256 ValidatorSessionOptions::get_hash() const {
|
td::Bits256 ValidatorSessionOptions::get_hash() const {
|
||||||
if (!new_catchain_ids) {
|
if(!proto_version) {
|
||||||
return create_hash_tl_object<ton_api::validatorSession_config>(
|
if (!new_catchain_ids) {
|
||||||
catchain_idle_timeout, catchain_max_deps, round_candidates, next_candidate_delay, round_attempt_duration,
|
return create_hash_tl_object<ton_api::validatorSession_config>(
|
||||||
max_round_attempts, max_block_size, max_collated_data_size);
|
catchain_idle_timeout, catchain_max_deps, round_candidates, next_candidate_delay, round_attempt_duration,
|
||||||
|
max_round_attempts, max_block_size, max_collated_data_size);
|
||||||
|
} else {
|
||||||
|
return create_hash_tl_object<ton_api::validatorSession_configNew>(
|
||||||
|
catchain_idle_timeout, catchain_max_deps, round_candidates, next_candidate_delay, round_attempt_duration,
|
||||||
|
max_round_attempts, max_block_size, max_collated_data_size, new_catchain_ids);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return create_hash_tl_object<ton_api::validatorSession_configNew>(
|
return create_hash_tl_object<ton_api::validatorSession_configVersioned>(
|
||||||
catchain_idle_timeout, catchain_max_deps, round_candidates, next_candidate_delay, round_attempt_duration,
|
catchain_idle_timeout, catchain_max_deps, round_candidates, next_candidate_delay, round_attempt_duration,
|
||||||
max_round_attempts, max_block_size, max_collated_data_size, new_catchain_ids);
|
max_round_attempts, max_block_size, max_collated_data_size, proto_version);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ValidatorSessionOptions::ValidatorSessionOptions(const ValidatorSessionConfig &conf) {
|
ValidatorSessionOptions::ValidatorSessionOptions(const ValidatorSessionConfig &conf) {
|
||||||
CHECK(!conf.proto_version);
|
proto_version = conf.proto_version;
|
||||||
catchain_idle_timeout = conf.catchain_idle_timeout;
|
catchain_idle_timeout = conf.catchain_idle_timeout;
|
||||||
catchain_max_deps = conf.catchain_max_deps;
|
catchain_max_deps = conf.catchain_max_deps;
|
||||||
max_block_size = conf.max_block_size;
|
max_block_size = conf.max_block_size;
|
||||||
|
|
|
@ -1692,6 +1692,12 @@ void ValidatorManagerImpl::update_shards() {
|
||||||
auto exp_vec = last_masterchain_state_->get_shards();
|
auto exp_vec = last_masterchain_state_->get_shards();
|
||||||
auto config = last_masterchain_state_->get_consensus_config();
|
auto config = last_masterchain_state_->get_consensus_config();
|
||||||
validatorsession::ValidatorSessionOptions opts{config};
|
validatorsession::ValidatorSessionOptions opts{config};
|
||||||
|
uint threshold = 9344000;
|
||||||
|
bool force_group_id_upgrade = last_masterchain_seqno_ == threshold;
|
||||||
|
auto legacy_opts_hash = opts.get_hash();
|
||||||
|
if(last_masterchain_seqno_ >= threshold) { //TODO move to get_consensus_config()
|
||||||
|
opts.proto_version = 1;
|
||||||
|
}
|
||||||
auto opts_hash = opts.get_hash();
|
auto opts_hash = opts.get_hash();
|
||||||
|
|
||||||
std::map<ShardIdFull, std::vector<BlockIdExt>> new_shards;
|
std::map<ShardIdFull, std::vector<BlockIdExt>> new_shards;
|
||||||
|
@ -1766,6 +1772,45 @@ void ValidatorManagerImpl::update_shards() {
|
||||||
|
|
||||||
BlockSeqno key_seqno = last_key_block_handle_->id().seqno();
|
BlockSeqno key_seqno = last_key_block_handle_->id().seqno();
|
||||||
|
|
||||||
|
if (force_group_id_upgrade) {
|
||||||
|
for (auto &desc : new_shards) {
|
||||||
|
auto shard = desc.first;
|
||||||
|
auto prev = desc.second;
|
||||||
|
for (auto &p : prev) {
|
||||||
|
CHECK(p.is_valid());
|
||||||
|
}
|
||||||
|
auto val_set = last_masterchain_state_->get_validator_set(shard);
|
||||||
|
auto validator_id = get_validator(shard, val_set);
|
||||||
|
|
||||||
|
if (!validator_id.is_zero()) {
|
||||||
|
auto legacy_val_group_id = get_validator_set_id(shard, val_set, legacy_opts_hash, key_seqno, opts);
|
||||||
|
auto val_group_id = get_validator_set_id(shard, val_set, opts_hash, key_seqno, opts);
|
||||||
|
|
||||||
|
|
||||||
|
auto it = validator_groups_.find(legacy_val_group_id);
|
||||||
|
if (it != validator_groups_.end()) {
|
||||||
|
new_validator_groups_.emplace(val_group_id, std::move(it->second));
|
||||||
|
} else {
|
||||||
|
auto it2 = next_validator_groups_.find(legacy_val_group_id);
|
||||||
|
if (it2 != next_validator_groups_.end()) {
|
||||||
|
if (!it2->second.empty()) {
|
||||||
|
td::actor::send_closure(it2->second, &ValidatorGroup::start, prev, last_masterchain_block_id_,
|
||||||
|
last_masterchain_state_->get_unix_time());
|
||||||
|
}
|
||||||
|
new_validator_groups_.emplace(val_group_id, std::move(it2->second));
|
||||||
|
} else {
|
||||||
|
auto G = create_validator_group(val_group_id, shard, val_set, opts, started_);
|
||||||
|
if (!G.empty()) {
|
||||||
|
td::actor::send_closure(G, &ValidatorGroup::start, prev, last_masterchain_block_id_,
|
||||||
|
last_masterchain_state_->get_unix_time());
|
||||||
|
}
|
||||||
|
new_validator_groups_.emplace(val_group_id, std::move(G));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (allow_validate_) {
|
if (allow_validate_) {
|
||||||
for (auto &desc : new_shards) {
|
for (auto &desc : new_shards) {
|
||||||
auto shard = desc.first;
|
auto shard = desc.first;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue