mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Flag "full collated data" in mc config; fix accept-block
This commit is contained in:
parent
81d32ba5d6
commit
011e97f53c
17 changed files with 76 additions and 55 deletions
|
@ -734,15 +734,15 @@ misbehaviour_punishment_config_v1#01
|
||||||
= MisbehaviourPunishmentConfig;
|
= MisbehaviourPunishmentConfig;
|
||||||
_ MisbehaviourPunishmentConfig = ConfigParam 40;
|
_ MisbehaviourPunishmentConfig = ConfigParam 40;
|
||||||
|
|
||||||
|
// collator_nodes: each collator is (workchain:int32 shard:uint64 adnl_id:uint256)
|
||||||
|
colator_config#a0 full_collated_data:Bool collator_nodes:(HashmapE 352 Unit) = CollatorConfig;
|
||||||
|
_ CollatorConfig = ConfigParam 41;
|
||||||
|
|
||||||
oracle_bridge_params#_ bridge_address:bits256 oracle_mutlisig_address:bits256 oracles:(HashmapE 256 uint256) external_chain_address:bits256 = OracleBridgeParams;
|
oracle_bridge_params#_ bridge_address:bits256 oracle_mutlisig_address:bits256 oracles:(HashmapE 256 uint256) external_chain_address:bits256 = OracleBridgeParams;
|
||||||
_ OracleBridgeParams = ConfigParam 71; // Ethereum bridge
|
_ OracleBridgeParams = ConfigParam 71; // Ethereum bridge
|
||||||
_ OracleBridgeParams = ConfigParam 72; // Binance Smart Chain bridge
|
_ OracleBridgeParams = ConfigParam 72; // Binance Smart Chain bridge
|
||||||
_ OracleBridgeParams = ConfigParam 73; // Polygon bridge
|
_ OracleBridgeParams = ConfigParam 73; // Polygon bridge
|
||||||
|
|
||||||
// Set of collators: each collator is (workchain:int32 shard:int64 adnl_id:int256)
|
|
||||||
colator_set#a0 collators:(HashmapE 352 Unit) = CollatorSet;
|
|
||||||
_ CollatorSet = ConfigParam 81;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// PROOFS
|
// PROOFS
|
||||||
//
|
//
|
||||||
|
|
|
@ -2132,4 +2132,28 @@ Ref<vm::Cell> ConfigInfo::lookup_library(td::ConstBitPtr root_hash) const {
|
||||||
return lib;
|
return lib;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CollatorConfig Config::get_collator_config(bool need_collator_nodes) const {
|
||||||
|
CollatorConfig collator_config;
|
||||||
|
gen::CollatorConfig::Record rec;
|
||||||
|
auto cell = get_config_param(41);
|
||||||
|
if (cell.is_null() || !tlb::unpack_cell(std::move(cell), rec)) {
|
||||||
|
return collator_config;
|
||||||
|
}
|
||||||
|
collator_config.full_collated_data = rec.full_collated_data;
|
||||||
|
if (need_collator_nodes) {
|
||||||
|
vm::Dictionary dict{rec.collator_nodes->prefetch_ref(), 32 + 64 + 256};
|
||||||
|
dict.check_for_each([&](Ref<vm::CellSlice>, td::ConstBitPtr key, int n) {
|
||||||
|
CHECK(n == 32 + 64 + 256);
|
||||||
|
auto workchain = (td::int32)key.get_int(32);
|
||||||
|
key.advance(32);
|
||||||
|
td::uint64 shard = key.get_uint(64);
|
||||||
|
key.advance(64);
|
||||||
|
td::Bits256 adnl_id(key);
|
||||||
|
collator_config.collator_nodes.push_back({ton::ShardIdFull(workchain, shard), adnl_id});
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return collator_config;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace block
|
} // namespace block
|
||||||
|
|
|
@ -482,6 +482,16 @@ class ShardConfig {
|
||||||
bool set_shard_info(ton::ShardIdFull shard, Ref<vm::Cell> value);
|
bool set_shard_info(ton::ShardIdFull shard, Ref<vm::Cell> value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct CollatorNodeDescr {
|
||||||
|
ton::ShardIdFull shard;
|
||||||
|
ton::NodeIdShort adnl_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CollatorConfig {
|
||||||
|
bool full_collated_data = false;
|
||||||
|
std::vector<CollatorNodeDescr> collator_nodes;
|
||||||
|
};
|
||||||
|
|
||||||
class Config {
|
class Config {
|
||||||
enum {
|
enum {
|
||||||
default_mc_catchain_lifetime = 200,
|
default_mc_catchain_lifetime = 200,
|
||||||
|
@ -593,6 +603,7 @@ class Config {
|
||||||
std::vector<ton::ValidatorDescr> compute_validator_set(ton::ShardIdFull shard, ton::UnixTime time,
|
std::vector<ton::ValidatorDescr> compute_validator_set(ton::ShardIdFull shard, ton::UnixTime time,
|
||||||
ton::CatchainSeqno cc_seqno) const;
|
ton::CatchainSeqno cc_seqno) const;
|
||||||
std::vector<ton::ValidatorDescr> compute_total_validator_set(int next) const;
|
std::vector<ton::ValidatorDescr> compute_total_validator_set(int next) const;
|
||||||
|
CollatorConfig get_collator_config(bool need_collator_nodes) const;
|
||||||
static std::vector<ton::ValidatorDescr> do_compute_validator_set(const block::CatchainValidatorsConfig& ccv_conf,
|
static std::vector<ton::ValidatorDescr> do_compute_validator_set(const block::CatchainValidatorsConfig& ccv_conf,
|
||||||
ton::ShardIdFull shard,
|
ton::ShardIdFull shard,
|
||||||
const block::ValidatorSet& vset, ton::UnixTime time,
|
const block::ValidatorSet& vset, ton::UnixTime time,
|
||||||
|
|
|
@ -484,9 +484,4 @@ struct ValidatorSessionConfig {
|
||||||
static const td::uint32 BLOCK_HASH_COVERS_DATA_FROM_VERSION = 2;
|
static const td::uint32 BLOCK_HASH_COVERS_DATA_FROM_VERSION = 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CollatorNodeDescr {
|
|
||||||
ShardIdFull shard;
|
|
||||||
NodeIdShort adnl_id;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace ton
|
} // namespace ton
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace ton {
|
||||||
|
|
||||||
namespace validator {
|
namespace validator {
|
||||||
|
|
||||||
enum ValidateMode { fake = 1, lite = 2 };
|
enum ValidateMode { fake = 1, full_collated_data = 2 };
|
||||||
|
|
||||||
td::actor::ActorOwn<Db> create_db_actor(td::actor::ActorId<ValidatorManager> manager, std::string db_root_);
|
td::actor::ActorOwn<Db> create_db_actor(td::actor::ActorId<ValidatorManager> manager, std::string db_root_);
|
||||||
td::actor::ActorOwn<LiteServerCache> create_liteserver_cache_actor(td::actor::ActorId<ValidatorManager> manager,
|
td::actor::ActorOwn<LiteServerCache> create_liteserver_cache_actor(td::actor::ActorId<ValidatorManager> manager,
|
||||||
|
|
|
@ -144,6 +144,7 @@ bool AcceptBlockQuery::precheck_header() {
|
||||||
if (is_fork_ && !info.key_block) {
|
if (is_fork_ && !info.key_block) {
|
||||||
return fatal_error("fork block is not a key block");
|
return fatal_error("fork block is not a key block");
|
||||||
}
|
}
|
||||||
|
before_split_ = info.before_split;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -538,6 +539,7 @@ void AcceptBlockQuery::written_state(td::Ref<ShardState> upd_state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//handle_->set_masterchain_block(prev_[0]);
|
//handle_->set_masterchain_block(prev_[0]);
|
||||||
|
handle_->set_split(before_split_);
|
||||||
handle_->set_state_root_hash(state_hash_);
|
handle_->set_state_root_hash(state_hash_);
|
||||||
handle_->set_logical_time(lt_);
|
handle_->set_logical_time(lt_);
|
||||||
handle_->set_unix_time(created_at_);
|
handle_->set_unix_time(created_at_);
|
||||||
|
|
|
@ -115,6 +115,7 @@ class AcceptBlockQuery : public td::actor::Actor {
|
||||||
UnixTime created_at_;
|
UnixTime created_at_;
|
||||||
RootHash state_keep_old_hash_, state_old_hash_, state_hash_;
|
RootHash state_keep_old_hash_, state_old_hash_, state_hash_;
|
||||||
BlockIdExt mc_blkid_, prev_mc_blkid_;
|
BlockIdExt mc_blkid_, prev_mc_blkid_;
|
||||||
|
bool before_split_;
|
||||||
|
|
||||||
Ref<MasterchainStateQ> last_mc_state_;
|
Ref<MasterchainStateQ> last_mc_state_;
|
||||||
BlockIdExt last_mc_id_;
|
BlockIdExt last_mc_id_;
|
||||||
|
|
|
@ -128,6 +128,7 @@ class Collator final : public td::actor::Actor {
|
||||||
void alarm() override;
|
void alarm() override;
|
||||||
int verbosity{3 * 0};
|
int verbosity{3 * 0};
|
||||||
int verify{1};
|
int verify{1};
|
||||||
|
bool full_collated_data_ = false;
|
||||||
ton::LogicalTime start_lt, max_lt;
|
ton::LogicalTime start_lt, max_lt;
|
||||||
ton::UnixTime now_;
|
ton::UnixTime now_;
|
||||||
ton::UnixTime prev_now_;
|
ton::UnixTime prev_now_;
|
||||||
|
|
|
@ -572,6 +572,8 @@ bool Collator::unpack_last_mc_state() {
|
||||||
<< " have been enabled in global configuration, but we support only " << supported_version()
|
<< " have been enabled in global configuration, but we support only " << supported_version()
|
||||||
<< " (upgrade validator software?)";
|
<< " (upgrade validator software?)";
|
||||||
}
|
}
|
||||||
|
full_collated_data_ = config_->get_collator_config(false).full_collated_data;
|
||||||
|
LOG(DEBUG) << "full_collated_data is " << full_collated_data_;
|
||||||
// TODO: extract start_lt and end_lt from prev_mc_block as well
|
// TODO: extract start_lt and end_lt from prev_mc_block as well
|
||||||
// std::cerr << " block::gen::ShardState::print_ref(mc_state_root) = ";
|
// std::cerr << " block::gen::ShardState::print_ref(mc_state_root) = ";
|
||||||
// block::gen::t_ShardState.print_ref(std::cerr, mc_state_root, 2);
|
// block::gen::t_ShardState.print_ref(std::cerr, mc_state_root, 2);
|
||||||
|
@ -3982,6 +3984,9 @@ bool Collator::create_collated_data() {
|
||||||
}
|
}
|
||||||
collated_roots_.push_back(std::move(cell));
|
collated_roots_.push_back(std::move(cell));
|
||||||
}
|
}
|
||||||
|
if (!full_collated_data_) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
// 2. Proofs for hashes of states: previous states + neighbors
|
// 2. Proofs for hashes of states: previous states + neighbors
|
||||||
for (const auto& p : block_state_proofs_) {
|
for (const auto& p : block_state_proofs_) {
|
||||||
collated_roots_.push_back(p.second);
|
collated_roots_.push_back(p.second);
|
||||||
|
|
|
@ -511,27 +511,6 @@ bool MasterchainStateQ::check_old_mc_block_id(const ton::BlockIdExt& blkid, bool
|
||||||
return config_ && config_->check_old_mc_block_id(blkid, strict);
|
return config_ && config_->check_old_mc_block_id(blkid, strict);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CollatorNodeDescr> MasterchainStateQ::get_collator_set() const {
|
|
||||||
block::gen::CollatorSet::Record rec;
|
|
||||||
auto cell = config_->get_config_param(81);
|
|
||||||
if (cell.is_null() || !tlb::unpack_cell(std::move(cell), rec)) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
vm::Dictionary dict{rec.collators->prefetch_ref(), 32 + 64 + 256};
|
|
||||||
std::vector<CollatorNodeDescr> collators;
|
|
||||||
dict.check_for_each([&](Ref<vm::CellSlice>, td::ConstBitPtr key, int n) {
|
|
||||||
CHECK(n == 32 + 64 + 256);
|
|
||||||
auto workchain = (td::int32)key.get_int(32);
|
|
||||||
key.advance(32);
|
|
||||||
td::uint64 shard = key.get_uint(64);
|
|
||||||
key.advance(64);
|
|
||||||
td::Bits256 adnl_id(key);
|
|
||||||
collators.push_back({ShardIdFull(workchain, shard), adnl_id});
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
return collators;
|
|
||||||
}
|
|
||||||
|
|
||||||
td::uint32 MasterchainStateQ::min_split_depth(WorkchainId workchain_id) const {
|
td::uint32 MasterchainStateQ::min_split_depth(WorkchainId workchain_id) const {
|
||||||
if (!config_) {
|
if (!config_) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -150,7 +150,9 @@ class MasterchainStateQ : public MasterchainState, public ShardStateQ {
|
||||||
block::WorkchainSet get_workchain_list() const override {
|
block::WorkchainSet get_workchain_list() const override {
|
||||||
return config_ ? config_->get_workchain_list() : block::WorkchainSet();
|
return config_ ? config_->get_workchain_list() : block::WorkchainSet();
|
||||||
}
|
}
|
||||||
std::vector<CollatorNodeDescr> get_collator_set() const override;
|
block::CollatorConfig get_collator_config(bool need_collator_nodes) const override {
|
||||||
|
return config_ ? config_->get_collator_config(need_collator_nodes) : block::CollatorConfig();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ZeroStateIdExt zerostate_id_;
|
ZeroStateIdExt zerostate_id_;
|
||||||
|
|
|
@ -63,10 +63,9 @@ ValidateQuery::ValidateQuery(ShardIdFull shard, BlockIdExt min_masterchain_block
|
||||||
, timeout(timeout)
|
, timeout(timeout)
|
||||||
, main_promise(std::move(promise))
|
, main_promise(std::move(promise))
|
||||||
, is_fake_(mode & ValidateMode::fake)
|
, is_fake_(mode & ValidateMode::fake)
|
||||||
, is_lite_(mode & ValidateMode::lite)
|
, full_collated_data_(mode & ValidateMode::full_collated_data)
|
||||||
, shard_pfx_(shard_.shard)
|
, shard_pfx_(shard_.shard)
|
||||||
, shard_pfx_len_(ton::shard_prefix_length(shard_)) {
|
, shard_pfx_len_(ton::shard_prefix_length(shard_)) {
|
||||||
proc_hash_.zero();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ValidateQuery::alarm() {
|
void ValidateQuery::alarm() {
|
||||||
|
@ -158,6 +157,7 @@ void ValidateQuery::finish_query() {
|
||||||
|
|
||||||
void ValidateQuery::start_up() {
|
void ValidateQuery::start_up() {
|
||||||
LOG(INFO) << "validate query for " << block_candidate.id.to_str() << " started";
|
LOG(INFO) << "validate query for " << block_candidate.id.to_str() << " started";
|
||||||
|
LOG(DEBUG) << "full_collated_data is " << full_collated_data_;
|
||||||
alarm_timestamp() = timeout;
|
alarm_timestamp() = timeout;
|
||||||
rand_seed_.set_zero();
|
rand_seed_.set_zero();
|
||||||
created_by_ = block_candidate.pubkey;
|
created_by_ = block_candidate.pubkey;
|
||||||
|
@ -258,9 +258,9 @@ void ValidateQuery::start_up() {
|
||||||
td::actor::send_closure_later(
|
td::actor::send_closure_later(
|
||||||
std::move(self), &ValidateQuery::after_get_latest_mc_state, std::move(res));
|
std::move(self), &ValidateQuery::after_get_latest_mc_state, std::move(res));
|
||||||
});
|
});
|
||||||
// 3. load state(s) corresponding to previous block(s) (non-lite mode or masterchain)
|
// 3. load state(s) corresponding to previous block(s) (not full-collaoted-data or masterchain)
|
||||||
prev_states.resize(prev_blocks.size());
|
prev_states.resize(prev_blocks.size());
|
||||||
if (is_masterchain() || !is_lite_) {
|
if (is_masterchain() || !full_collated_data_) {
|
||||||
for (int i = 0; (unsigned)i < prev_blocks.size(); i++) {
|
for (int i = 0; (unsigned)i < prev_blocks.size(); i++) {
|
||||||
// 3.1. load state
|
// 3.1. load state
|
||||||
LOG(DEBUG) << "sending wait_block_state() query #" << i << " for " << prev_blocks[i].to_str() << " to Manager";
|
LOG(DEBUG) << "sending wait_block_state() query #" << i << " for " << prev_blocks[i].to_str() << " to Manager";
|
||||||
|
@ -991,8 +991,8 @@ bool ValidateQuery::check_this_shard_mc_info() {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool ValidateQuery::compute_prev_state() {
|
bool ValidateQuery::compute_prev_state() {
|
||||||
if (!is_masterchain() && is_lite_) {
|
if (!is_masterchain() && full_collated_data_) {
|
||||||
return compute_prev_state_lite_mode();
|
return compute_prev_state_from_collated_data();
|
||||||
}
|
}
|
||||||
CHECK(prev_states.size() == 1u + after_merge_);
|
CHECK(prev_states.size() == 1u + after_merge_);
|
||||||
prev_state_root_ = prev_states[0]->root_cell();
|
prev_state_root_ = prev_states[0]->root_cell();
|
||||||
|
@ -1012,7 +1012,7 @@ bool ValidateQuery::compute_prev_state() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ValidateQuery::compute_prev_state_lite_mode() {
|
bool ValidateQuery::compute_prev_state_from_collated_data() {
|
||||||
td::Bits256 state_hash;
|
td::Bits256 state_hash;
|
||||||
if (id_.seqno() == 1) {
|
if (id_.seqno() == 1) {
|
||||||
if (prev_blocks.size() != 1) {
|
if (prev_blocks.size() != 1) {
|
||||||
|
@ -1255,7 +1255,7 @@ bool ValidateQuery::request_neighbor_queues() {
|
||||||
neighbors_.emplace_back(*shard_ptr);
|
neighbors_.emplace_back(*shard_ptr);
|
||||||
}
|
}
|
||||||
int i = 0;
|
int i = 0;
|
||||||
if (is_lite_) {
|
if (full_collated_data_) {
|
||||||
for (block::McShardDescr& descr : neighbors_) {
|
for (block::McShardDescr& descr : neighbors_) {
|
||||||
LOG(DEBUG) << "getting outbound queue of neighbor #" << i << " from collated data : " << descr.blk_.to_str();
|
LOG(DEBUG) << "getting outbound queue of neighbor #" << i << " from collated data : " << descr.blk_.to_str();
|
||||||
td::Bits256 state_root_hash;
|
td::Bits256 state_root_hash;
|
||||||
|
|
|
@ -141,7 +141,7 @@ class ValidateQuery : public td::actor::Actor {
|
||||||
bool is_key_block_{false};
|
bool is_key_block_{false};
|
||||||
bool update_shard_cc_{false};
|
bool update_shard_cc_{false};
|
||||||
bool is_fake_{false};
|
bool is_fake_{false};
|
||||||
bool is_lite_{false};
|
bool full_collated_data_{false};
|
||||||
bool prev_key_block_exists_{false};
|
bool prev_key_block_exists_{false};
|
||||||
bool debug_checks_{false};
|
bool debug_checks_{false};
|
||||||
bool outq_cleanup_partial_{false};
|
bool outq_cleanup_partial_{false};
|
||||||
|
@ -221,7 +221,7 @@ class ValidateQuery : public td::actor::Actor {
|
||||||
td::RefInt256 import_fees_;
|
td::RefInt256 import_fees_;
|
||||||
|
|
||||||
ton::LogicalTime proc_lt_{0}, claimed_proc_lt_{0}, min_enq_lt_{~0ULL};
|
ton::LogicalTime proc_lt_{0}, claimed_proc_lt_{0}, min_enq_lt_{~0ULL};
|
||||||
ton::Bits256 proc_hash_, claimed_proc_hash_, min_enq_hash_;
|
ton::Bits256 proc_hash_ = ton::Bits256::zero(), claimed_proc_hash_, min_enq_hash_;
|
||||||
bool inbound_queues_empty_{false};
|
bool inbound_queues_empty_{false};
|
||||||
|
|
||||||
std::vector<std::tuple<Bits256, LogicalTime, LogicalTime>> msg_proc_lt_;
|
std::vector<std::tuple<Bits256, LogicalTime, LogicalTime>> msg_proc_lt_;
|
||||||
|
@ -286,7 +286,7 @@ class ValidateQuery : public td::actor::Actor {
|
||||||
bool extract_collated_data();
|
bool extract_collated_data();
|
||||||
bool try_validate();
|
bool try_validate();
|
||||||
bool compute_prev_state();
|
bool compute_prev_state();
|
||||||
bool compute_prev_state_lite_mode();
|
bool compute_prev_state_from_collated_data();
|
||||||
bool compute_next_state();
|
bool compute_next_state();
|
||||||
bool unpack_merge_prev_state();
|
bool unpack_merge_prev_state();
|
||||||
bool unpack_prev_state();
|
bool unpack_prev_state();
|
||||||
|
|
|
@ -82,7 +82,7 @@ class MasterchainState : virtual public ShardState {
|
||||||
virtual bool check_old_mc_block_id(const ton::BlockIdExt& blkid, bool strict = false) const = 0;
|
virtual bool check_old_mc_block_id(const ton::BlockIdExt& blkid, bool strict = false) const = 0;
|
||||||
virtual td::Result<td::Ref<ConfigHolder>> get_config_holder() const = 0;
|
virtual td::Result<td::Ref<ConfigHolder>> get_config_holder() const = 0;
|
||||||
virtual block::WorkchainSet get_workchain_list() const = 0;
|
virtual block::WorkchainSet get_workchain_list() const = 0;
|
||||||
virtual std::vector<CollatorNodeDescr> get_collator_set() const = 0;
|
virtual block::CollatorConfig get_collator_config(bool need_collator_nodes) const = 0;
|
||||||
virtual td::Status prepare() {
|
virtual td::Status prepare() {
|
||||||
return td::Status::OK();
|
return td::Status::OK();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2117,10 +2117,10 @@ td::actor::ActorOwn<ValidatorGroup> ValidatorManagerImpl::create_validator_group
|
||||||
auto validator_id = get_validator(shard, validator_set);
|
auto validator_id = get_validator(shard, validator_set);
|
||||||
CHECK(!validator_id.is_zero());
|
CHECK(!validator_id.is_zero());
|
||||||
auto G = td::actor::create_actor<ValidatorGroup>(
|
auto G = td::actor::create_actor<ValidatorGroup>(
|
||||||
"validatorgroup", shard, validator_id, session_id, validator_set, last_masterchain_state_->get_collator_set(),
|
"validatorgroup", shard, validator_id, session_id, validator_set,
|
||||||
opts, keyring_, adnl_, rldp_, overlays_,
|
last_masterchain_state_->get_collator_config(true), opts, keyring_, adnl_, rldp_, overlays_, db_root_,
|
||||||
db_root_, actor_id(this), init_session,
|
actor_id(this), init_session, opts_->check_unsafe_resync_allowed(validator_set->get_catchain_seqno()),
|
||||||
opts_->check_unsafe_resync_allowed(validator_set->get_catchain_seqno()), opts_->validator_lite_mode());
|
opts_->validator_lite_mode());
|
||||||
return G;
|
return G;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ void ValidatorGroup::generate_block_candidate(td::uint32 round_id, td::Promise<B
|
||||||
}
|
}
|
||||||
run_collate_query(shard_, min_masterchain_block_id_, prev_block_ids_,
|
run_collate_query(shard_, min_masterchain_block_id_, prev_block_ids_,
|
||||||
Ed25519_PublicKey{local_id_full_.ed25519_value().raw()}, validator_set_, manager_,
|
Ed25519_PublicKey{local_id_full_.ed25519_value().raw()}, validator_set_, manager_,
|
||||||
td::Timestamp::in(10.0), std::move(promise));
|
td::Timestamp::in(20.0), std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ValidatorGroup::validate_block_candidate(td::uint32 round_id, BlockCandidate block,
|
void ValidatorGroup::validate_block_candidate(td::uint32 round_id, BlockCandidate block,
|
||||||
|
@ -102,7 +102,8 @@ void ValidatorGroup::validate_block_candidate(td::uint32 round_id, BlockCandidat
|
||||||
}
|
}
|
||||||
VLOG(VALIDATOR_DEBUG) << "validating block candidate " << next_block_id;
|
VLOG(VALIDATOR_DEBUG) << "validating block candidate " << next_block_id;
|
||||||
run_validate_query(shard_, min_masterchain_block_id_, prev_block_ids_, std::move(block), validator_set_, manager_,
|
run_validate_query(shard_, min_masterchain_block_id_, prev_block_ids_, std::move(block), validator_set_, manager_,
|
||||||
td::Timestamp::in(10.0), std::move(P), lite_mode_ ? ValidateMode::lite : 0);
|
td::Timestamp::in(10.0), std::move(P),
|
||||||
|
collator_config_.full_collated_data ? ValidateMode::full_collated_data : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ValidatorGroup::update_approve_cache(td::uint32 round_id, CacheKey key, UnixTime value) {
|
void ValidatorGroup::update_approve_cache(td::uint32 round_id, CacheKey key, UnixTime value) {
|
||||||
|
@ -360,9 +361,9 @@ void ValidatorGroup::send_collate_query(td::uint32 round_id, td::Timestamp timeo
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
adnl::AdnlNodeIdShort collator = adnl::AdnlNodeIdShort::zero();
|
adnl::AdnlNodeIdShort collator = adnl::AdnlNodeIdShort::zero();
|
||||||
// TODO: some other way for storing and choosing collators for real network
|
// TODO: some way to choose node (similar to "unreliability" in full-node)
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
for (const CollatorNodeDescr& c : collator_set_) {
|
for (const block::CollatorNodeDescr& c : collator_config_.collator_nodes) {
|
||||||
if (shard_is_ancestor(shard_, c.shard) && td::Random::fast(0, cnt) == 0) {
|
if (shard_is_ancestor(shard_, c.shard) && td::Random::fast(0, cnt) == 0) {
|
||||||
collator = adnl::AdnlNodeIdShort(c.adnl_id);
|
collator = adnl::AdnlNodeIdShort(c.adnl_id);
|
||||||
++cnt;
|
++cnt;
|
||||||
|
|
|
@ -60,7 +60,7 @@ class ValidatorGroup : public td::actor::Actor {
|
||||||
void get_session_info(td::Promise<tl_object_ptr<ton_api::engine_validator_validatorSessionInfo>> promise);
|
void get_session_info(td::Promise<tl_object_ptr<ton_api::engine_validator_validatorSessionInfo>> promise);
|
||||||
|
|
||||||
ValidatorGroup(ShardIdFull shard, PublicKeyHash local_id, ValidatorSessionId session_id,
|
ValidatorGroup(ShardIdFull shard, PublicKeyHash local_id, ValidatorSessionId session_id,
|
||||||
td::Ref<ValidatorSet> validator_set, std::vector<CollatorNodeDescr> collator_set,
|
td::Ref<ValidatorSet> validator_set, block::CollatorConfig collator_config,
|
||||||
validatorsession::ValidatorSessionOptions config,
|
validatorsession::ValidatorSessionOptions config,
|
||||||
td::actor::ActorId<keyring::Keyring> keyring, td::actor::ActorId<adnl::Adnl> adnl,
|
td::actor::ActorId<keyring::Keyring> keyring, td::actor::ActorId<adnl::Adnl> adnl,
|
||||||
td::actor::ActorId<rldp::Rldp> rldp, td::actor::ActorId<overlay::Overlays> overlays,
|
td::actor::ActorId<rldp::Rldp> rldp, td::actor::ActorId<overlay::Overlays> overlays,
|
||||||
|
@ -70,7 +70,7 @@ class ValidatorGroup : public td::actor::Actor {
|
||||||
, local_id_(std::move(local_id))
|
, local_id_(std::move(local_id))
|
||||||
, session_id_(session_id)
|
, session_id_(session_id)
|
||||||
, validator_set_(std::move(validator_set))
|
, validator_set_(std::move(validator_set))
|
||||||
, collator_set_(std::move(collator_set))
|
, collator_config_(std::move(collator_config))
|
||||||
, config_(std::move(config))
|
, config_(std::move(config))
|
||||||
, keyring_(keyring)
|
, keyring_(keyring)
|
||||||
, adnl_(adnl)
|
, adnl_(adnl)
|
||||||
|
@ -110,7 +110,7 @@ class ValidatorGroup : public td::actor::Actor {
|
||||||
BlockIdExt min_masterchain_block_id_;
|
BlockIdExt min_masterchain_block_id_;
|
||||||
|
|
||||||
td::Ref<ValidatorSet> validator_set_;
|
td::Ref<ValidatorSet> validator_set_;
|
||||||
std::vector<CollatorNodeDescr> collator_set_;
|
block::CollatorConfig collator_config_;
|
||||||
validatorsession::ValidatorSessionOptions config_;
|
validatorsession::ValidatorSessionOptions config_;
|
||||||
|
|
||||||
td::actor::ActorId<keyring::Keyring> keyring_;
|
td::actor::ActorId<keyring::Keyring> keyring_;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue