1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-02-13 11:42:18 +00:00

Allow queries to collator from validators only

This commit is contained in:
SpyCheese 2023-01-17 21:02:47 +03:00
parent 225f71238b
commit 5ad7f8c246
2 changed files with 20 additions and 0 deletions

View file

@ -100,6 +100,22 @@ void CollatorNode::new_masterchain_block_notification(td::Ref<MasterchainState>
} }
} }
} }
if (validators_.empty() || state->is_key_state()) {
validators_.clear();
for (int next : {-1, 0, 1}) {
td::Ref<ValidatorSet> vals = state->get_total_validator_set(next);
if (vals.not_null()) {
for (const ValidatorDescr& descr : vals->export_vector()) {
if (descr.addr.is_zero()) {
validators_.insert(
adnl::AdnlNodeIdShort(PublicKey(pubkeys::Ed25519{descr.key.as_bits256()}).compute_short_id()));
} else {
validators_.insert(adnl::AdnlNodeIdShort(descr.addr));
}
}
}
}
}
} }
static td::BufferSlice serialize_error(td::Status error) { static td::BufferSlice serialize_error(td::Status error) {
@ -110,6 +126,9 @@ void CollatorNode::receive_query(adnl::AdnlNodeIdShort src, td::BufferSlice data
td::Promise<td::BufferSlice> promise) { td::Promise<td::BufferSlice> promise) {
auto SelfId = actor_id(this); auto SelfId = actor_id(this);
auto status = [&]() -> td::Status { auto status = [&]() -> td::Status {
if (!validators_.count(src)) {
return td::Status::Error("src is not a validator");
}
TRY_RESULT(f, fetch_tl_object<ton_api::collatorNode_generateBlock>(std::move(data), true)); TRY_RESULT(f, fetch_tl_object<ton_api::collatorNode_generateBlock>(std::move(data), true));
ShardIdFull shard(f->workchain_, f->shard_); ShardIdFull shard(f->workchain_, f->shard_);
if (!shard.is_valid_ext()) { if (!shard.is_valid_ext()) {

View file

@ -49,6 +49,7 @@ class CollatorNode : public td::actor::Actor {
td::actor::ActorId<adnl::Adnl> adnl_; td::actor::ActorId<adnl::Adnl> adnl_;
td::actor::ActorId<rldp::Rldp> rldp_; td::actor::ActorId<rldp::Rldp> rldp_;
std::vector<ShardIdFull> shards_; std::vector<ShardIdFull> shards_;
std::set<adnl::AdnlNodeIdShort> validators_;
}; };
} // namespace validator } // namespace validator