mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 09:21:04 +00:00
Override RuntimeApi::authorities() to include past sessions (#2494)
* override authorities runtime call * addressing feedback * addressing feedback and restoring semantics * updated helper function * naming convention + comment Co-authored-by: Parity <parity2305@gmail.com>
This commit is contained in:
@@ -25,11 +25,12 @@ use primitives::v1::{
|
|||||||
Id as ParaId, OccupiedCoreAssumption, SessionIndex, ValidationCode,
|
Id as ParaId, OccupiedCoreAssumption, SessionIndex, ValidationCode,
|
||||||
CommittedCandidateReceipt, ScheduledCore, OccupiedCore, CoreOccupied, CoreIndex,
|
CommittedCandidateReceipt, ScheduledCore, OccupiedCore, CoreOccupied, CoreIndex,
|
||||||
GroupIndex, CandidateEvent, PersistedValidationData, SessionInfo,
|
GroupIndex, CandidateEvent, PersistedValidationData, SessionInfo,
|
||||||
InboundDownwardMessage, InboundHrmpMessage, Hash,
|
InboundDownwardMessage, InboundHrmpMessage, Hash, AuthorityDiscoveryId
|
||||||
};
|
};
|
||||||
use frame_support::debug;
|
use frame_support::debug;
|
||||||
use crate::{initializer, inclusion, scheduler, configuration, paras, session_info, dmp, hrmp, shared};
|
use crate::{initializer, inclusion, scheduler, configuration, paras, session_info, dmp, hrmp, shared};
|
||||||
|
|
||||||
|
|
||||||
/// Implementation for the `validators` function of the runtime API.
|
/// Implementation for the `validators` function of the runtime API.
|
||||||
pub fn validators<T: initializer::Config>() -> Vec<ValidatorId> {
|
pub fn validators<T: initializer::Config>() -> Vec<ValidatorId> {
|
||||||
<inclusion::Module<T>>::validators()
|
<inclusion::Module<T>>::validators()
|
||||||
@@ -231,6 +232,27 @@ pub fn session_index_for_child<T: initializer::Config>() -> SessionIndex {
|
|||||||
<shared::Module<T>>::session_index()
|
<shared::Module<T>>::session_index()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Implementation for the `AuthorityDiscoveryApi::authorities()` function of the runtime API.
|
||||||
|
/// It is a heavy call, but currently only used for authority discovery, so it is fine.
|
||||||
|
/// Gets next, current and some historical authority ids using session_info module.
|
||||||
|
pub fn relevant_authority_ids<T: initializer::Config + pallet_authority_discovery::Config>() -> Vec<AuthorityDiscoveryId> {
|
||||||
|
let current_session_index = session_index_for_child::<T>();
|
||||||
|
let earliest_stored_session = <session_info::Module<T>>::earliest_stored_session();
|
||||||
|
let mut authority_ids = <pallet_authority_discovery::Module<T>>::next_authorities();
|
||||||
|
|
||||||
|
for session_index in earliest_stored_session..=current_session_index {
|
||||||
|
let info = <session_info::Module<T>>::session_info(session_index);
|
||||||
|
if let Some(mut info) = info {
|
||||||
|
authority_ids.append(&mut info.discovery_keys);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
authority_ids.sort();
|
||||||
|
authority_ids.dedup();
|
||||||
|
|
||||||
|
authority_ids
|
||||||
|
}
|
||||||
|
|
||||||
/// Implementation for the `validation_code` function of the runtime API.
|
/// Implementation for the `validation_code` function of the runtime API.
|
||||||
pub fn validation_code<T: initializer::Config>(
|
pub fn validation_code<T: initializer::Config>(
|
||||||
para_id: ParaId,
|
para_id: ParaId,
|
||||||
|
|||||||
@@ -849,7 +849,7 @@ sp_api::impl_runtime_apis! {
|
|||||||
|
|
||||||
impl authority_discovery_primitives::AuthorityDiscoveryApi<Block> for Runtime {
|
impl authority_discovery_primitives::AuthorityDiscoveryApi<Block> for Runtime {
|
||||||
fn authorities() -> Vec<AuthorityDiscoveryId> {
|
fn authorities() -> Vec<AuthorityDiscoveryId> {
|
||||||
AuthorityDiscovery::authorities()
|
runtime_api_impl::relevant_authority_ids::<Runtime>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user