Skip to content

Commit

Permalink
force authority discovery for the given peer set
Browse files Browse the repository at this point in the history
Signed-off-by: iceseer <iceseer@gmail.com>
  • Loading branch information
iceseer committed Aug 15, 2024
1 parent 7063722 commit 59b80b6
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 5 deletions.
5 changes: 5 additions & 0 deletions core/authority_discovery/query/query.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,10 @@ namespace kagome::authority_discovery {
*/
virtual std::optional<primitives::AuthorityDiscoveryId> get(
const libp2p::peer::PeerId &peer_id) const = 0;

/**
* Updates authority discovery set with the givens.
*/
virtual outcome::result<void> update(std::vector<primitives::AuthorityDiscoveryId> &&authorities) = 0;
};
} // namespace kagome::authority_discovery
13 changes: 9 additions & 4 deletions core/authority_discovery/query/query_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,18 +135,23 @@ namespace kagome::authority_discovery {
}

outcome::result<void> QueryImpl::update() {
std::unique_lock lock{mutex_};
OUTCOME_TRY(
authorities,
authority_discovery_api_->authorities(block_tree_->bestBlock().hash));
return update(std::move(authorities));
}

outcome::result<void> QueryImpl::update(std::vector<primitives::AuthorityDiscoveryId> &&authorities) {
OUTCOME_TRY(local_keys,
key_store_->sr25519().getPublicKeys(
crypto::KeyTypes::AUTHORITY_DISCOVERY));

std::unique_lock lock{mutex_};
for (auto &id : authorities) {
if (not hash_to_auth_.contains(id)) {
hash_to_auth_.emplace(crypto::sha256(id), id);
}
}
OUTCOME_TRY(local_keys,
key_store_->sr25519().getPublicKeys(
crypto::KeyTypes::AUTHORITY_DISCOVERY));
auto has = [](const std::vector<primitives::AuthorityDiscoveryId> &keys,
const primitives::AuthorityDiscoveryId &key) {
return std::find(keys.begin(), keys.end(), key) != keys.end();
Expand Down
1 change: 1 addition & 0 deletions core/authority_discovery/query/query_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ namespace kagome::authority_discovery {
const std::vector<libp2p::protocol::kademlia::Value> &) override;

outcome::result<void> update();
outcome::result<void> update(std::vector<primitives::AuthorityDiscoveryId> &&authorities) override;

private:
struct Authority {
Expand Down
23 changes: 22 additions & 1 deletion core/parachain/validator/impl/parachain_processor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1113,11 +1113,32 @@ namespace kagome::parachain {
session_info->validator_groups,
grid::shuffle(session_info->discovery_keys.size(), randomness),
*global_v_index);
Groups groups{session_info->validator_groups, minimum_backing_votes};

std::unordered_set<primitives::AuthorityDiscoveryId> peers;
if (validator_index) {
auto our_group = groups.byValidatorIndex(*validator_index);
if (our_group) {
const auto &group = session_info->validator_groups[*our_group];
for (const auto vi : group) {
peers.insert(session_info->discovery_keys[vi]);
}
}
}
for (const auto &view : grid_view) {
for (const auto vi : view.sending) {
peers.insert(session_info->discovery_keys[vi]);
}
for (const auto vi : view.receiving) {
peers.insert(session_info->discovery_keys[vi]);
}
}

std::ignore = query_audi_->update(std::vector<primitives::AuthorityDiscoveryId>{ peers.begin(), peers.end() });
return RefCache<SessionIndex, PerSessionState>::RefObj(
session_index,
*session_info,
Groups{session_info->validator_groups, minimum_backing_votes},
std::move(groups),
std::move(grid_view),
validator_index,
peer_use_count_);
Expand Down

0 comments on commit 59b80b6

Please sign in to comment.