1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

added support for config change proposals

- added some fift scripts for the config change proposal voting
- added validator-engine-console support for the config change proposal voting
- additional sanity checks in catchain
- unsafe slow catchain resync method
This commit is contained in:
ton 2020-03-30 17:20:45 +04:00
parent a31f8d4424
commit 4dd5eea11f
35 changed files with 753 additions and 144 deletions

View file

@ -1868,9 +1868,10 @@ td::actor::ActorOwn<ValidatorGroup> ValidatorManagerImpl::create_validator_group
} else {
auto validator_id = get_validator(shard, validator_set);
CHECK(!validator_id.is_zero());
auto G = td::actor::create_actor<ValidatorGroup>("validatorgroup", shard, validator_id, session_id, validator_set,
opts, keyring_, adnl_, rldp_, overlays_, db_root_, actor_id(this),
init_session);
auto G = td::actor::create_actor<ValidatorGroup>(
"validatorgroup", shard, validator_id, session_id, validator_set, opts, keyring_, adnl_, rldp_, overlays_,
db_root_, actor_id(this), init_session,
opts_->check_unsafe_resync_allowed(validator_set->get_catchain_seqno()));
return G;
}
}

View file

@ -242,7 +242,7 @@ void ValidatorGroup::create_session() {
session_ = validatorsession::ValidatorSession::create(session_id_, config_, local_id_, std::move(vec),
make_validator_session_callback(), keyring_, adnl_, rldp_,
overlays_, db_root_);
overlays_, db_root_, allow_unsafe_self_blocks_resync_);
if (prev_block_ids_.size() > 0) {
td::actor::send_closure(session_, &validatorsession::ValidatorSession::start);
}

View file

@ -59,7 +59,8 @@ class ValidatorGroup : public td::actor::Actor {
td::Ref<ValidatorSet> validator_set, validatorsession::ValidatorSessionOptions config,
td::actor::ActorId<keyring::Keyring> keyring, td::actor::ActorId<adnl::Adnl> adnl,
td::actor::ActorId<rldp::Rldp> rldp, td::actor::ActorId<overlay::Overlays> overlays,
std::string db_root, td::actor::ActorId<ValidatorManager> validator_manager, bool create_session)
std::string db_root, td::actor::ActorId<ValidatorManager> validator_manager, bool create_session,
bool allow_unsafe_self_blocks_resync)
: shard_(shard)
, local_id_(std::move(local_id))
, session_id_(session_id)
@ -71,7 +72,8 @@ class ValidatorGroup : public td::actor::Actor {
, overlays_(overlays)
, db_root_(std::move(db_root))
, manager_(validator_manager)
, init_(create_session) {
, init_(create_session)
, allow_unsafe_self_blocks_resync_(allow_unsafe_self_blocks_resync) {
}
private:
@ -98,6 +100,7 @@ class ValidatorGroup : public td::actor::Actor {
td::actor::ActorOwn<validatorsession::ValidatorSession> session_;
bool init_ = false;
bool allow_unsafe_self_blocks_resync_;
td::uint32 last_known_round_id_ = 0;
};

View file

@ -91,6 +91,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions {
td::uint32 get_filedb_depth() const override {
return db_depth_;
}
bool check_unsafe_resync_allowed(CatchainSeqno seqno) const override {
return unsafe_catchains_.count(seqno) > 0;
}
void set_zero_block_id(BlockIdExt block_id) override {
zero_block_id_ = block_id;
@ -129,6 +132,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions {
CHECK(value <= 32);
db_depth_ = value;
}
void add_unsafe_resync_catchain(CatchainSeqno seqno) override {
unsafe_catchains_.insert(seqno);
}
ValidatorManagerOptionsImpl *make_copy() const override {
return new ValidatorManagerOptionsImpl(*this);
@ -164,6 +170,7 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions {
bool initial_sync_disabled_;
std::vector<BlockIdExt> hardforks_;
td::uint32 db_depth_ = 2;
std::set<CatchainSeqno> unsafe_catchains_;
};
} // namespace validator

View file

@ -68,6 +68,7 @@ struct ValidatorManagerOptions : public td::CntObject {
virtual td::uint32 key_block_utime_step() const {
return 86400;
}
virtual bool check_unsafe_resync_allowed(CatchainSeqno seqno) const = 0;
virtual void set_zero_block_id(BlockIdExt block_id) = 0;
virtual void set_init_block_id(BlockIdExt block_id) = 0;
@ -81,6 +82,7 @@ struct ValidatorManagerOptions : public td::CntObject {
virtual void set_initial_sync_disabled(bool value) = 0;
virtual void set_hardforks(std::vector<BlockIdExt> hardforks) = 0;
virtual void set_filedb_depth(td::uint32 value) = 0;
virtual void add_unsafe_resync_catchain(CatchainSeqno seqno) = 0;
static td::Ref<ValidatorManagerOptions> create(
BlockIdExt zero_block_id, BlockIdExt init_block_id,