Skip to content

Commit

Permalink
change: include candidate type and MC pkey in committee data
Browse files Browse the repository at this point in the history
Signed-off-by: Nikolaos Dymitriadis <[email protected]>
  • Loading branch information
AmbientTea committed Feb 24, 2025
1 parent 6ab9a35 commit b663279
Show file tree
Hide file tree
Showing 19 changed files with 208 additions and 139 deletions.
2 changes: 1 addition & 1 deletion dev/local-environment/setup.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash

PARTNER_CHAINS_NODE_IMAGE="ghcr.io/input-output-hk/partner-chains/partner-chains-node:v1.5.0"
PARTNER_CHAINS_NODE_IMAGE="ghcr.io/input-output-hk/partner-chains/partner-chains-node:7c6cb681fee47c2ac1e4339822b7a8382f7ee55d"
CARDANO_IMAGE="ghcr.io/intersectmbo/cardano-node:10.1.4"
DBSYNC_IMAGE="ghcr.io/intersectmbo/cardano-db-sync:13.6.0.4"
OGMIOS_IMAGE="cardanosolutions/ogmios:v6.11.0"
Expand Down
14 changes: 6 additions & 8 deletions node/node/src/inherent_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use authority_selection_inherents::ariadne_inherent_data_provider::AriadneInhere
use authority_selection_inherents::authority_selection_inputs::{
AuthoritySelectionDataSource, AuthoritySelectionInputs,
};
use authority_selection_inherents::CommitteeMember;
use derive_new::new;
use jsonrpsee::core::async_trait;
use sc_consensus_aura::{find_pre_digest, SlotDuration};
Expand All @@ -10,10 +11,9 @@ use sidechain_domain::mainchain_epoch::MainchainEpochConfig;
use sidechain_domain::{McBlockHash, ScEpochNumber};
use sidechain_mc_hash::McHashDataSource;
use sidechain_mc_hash::McHashInherentDataProvider as McHashIDP;
use sidechain_runtime::{
opaque::{Block, SessionKeys},
BeneficiaryId, CrossChainPublic,
};
use sidechain_runtime::opaque::SessionKeys;
use sidechain_runtime::CrossChainPublic;
use sidechain_runtime::{opaque::Block, BeneficiaryId};
use sidechain_slots::ScSlotConfig;
use sp_api::ProvideRuntimeApi;
use sp_block_production_log::BlockProducerIdInherentProvider;
Expand Down Expand Up @@ -51,8 +51,7 @@ where
T: HeaderBackend<Block>,
T::Api: SessionValidatorManagementApi<
Block,
SessionKeys,
CrossChainPublic,
CommitteeMember<CrossChainPublic, SessionKeys>,
AuthoritySelectionInputs,
ScEpochNumber,
>,
Expand Down Expand Up @@ -149,8 +148,7 @@ where
T: ProvideRuntimeApi<Block> + Send + Sync + HeaderBackend<Block>,
T::Api: SessionValidatorManagementApi<
Block,
SessionKeys,
CrossChainPublic,
CommitteeMember<CrossChainPublic, SessionKeys>,
AuthoritySelectionInputs,
ScEpochNumber,
>,
Expand Down
10 changes: 5 additions & 5 deletions node/node/src/rpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
#![warn(missing_docs)]

use crate::main_chain_follower::DataSources;
use authority_selection_inherents::authority_selection_inputs::AuthoritySelectionInputs;
use authority_selection_inherents::filter_invalid_candidates::CandidateValidationApi;
use authority_selection_inherents::{
authority_selection_inputs::AuthoritySelectionInputs, CommitteeMember,
};
use jsonrpsee::RpcModule;
use pallet_session_validator_management_rpc::*;
use pallet_sidechain_rpc::*;
Expand All @@ -19,12 +21,11 @@ use sc_rpc::SubscriptionTaskExecutor;
use sc_transaction_pool_api::TransactionPool;
use sidechain_domain::mainchain_epoch::MainchainEpochConfig;
use sidechain_domain::ScEpochNumber;
use sidechain_runtime::CrossChainPublic;
use sidechain_runtime::{
opaque::{Block, SessionKeys},
AccountId, Balance, Nonce,
};
use sidechain_runtime::{BlockNumber, Hash};
use sidechain_runtime::{BlockNumber, CrossChainPublic, Hash};
use sp_api::ProvideRuntimeApi;
use sp_block_builder::BlockBuilder;
use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata};
Expand Down Expand Up @@ -77,8 +78,7 @@ where
C::Api: sp_sidechain::GetSidechainStatus<Block>,
C::Api: sp_session_validator_management::SessionValidatorManagementApi<
Block,
SessionKeys,
CrossChainPublic,
CommitteeMember<CrossChainPublic, SessionKeys>,
AuthoritySelectionInputs,
ScEpochNumber,
>,
Expand Down
11 changes: 6 additions & 5 deletions node/node/src/tests/runtime_api_mock.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use super::mock::mock_genesis_utxo;
use authority_selection_inherents::authority_selection_inputs::AuthoritySelectionInputs;
use authority_selection_inherents::CommitteeMember;
use sidechain_domain::*;
use sidechain_mc_hash::McHashInherentDigest;
use sidechain_runtime::opaque::SessionKeys;
Expand Down Expand Up @@ -58,25 +59,25 @@ sp_api::mock_impl_runtime_apis! {
fn genesis_utxo() -> UtxoId { mock_genesis_utxo() }
}

impl sp_session_validator_management::SessionValidatorManagementApi<Block, SessionKeys, CrossChainPublic, AuthoritySelectionInputs, ScEpochNumber> for TestApi {
fn get_current_committee() -> (ScEpochNumber, Vec<CrossChainPublic>) {
impl sp_session_validator_management::SessionValidatorManagementApi<Block, CommitteeMember<CrossChainPublic, SessionKeys>, AuthoritySelectionInputs, ScEpochNumber> for TestApi {
fn get_current_committee() -> (ScEpochNumber, Vec<CommitteeMember<CrossChainPublic, SessionKeys>>) {
unimplemented!()
}
fn get_next_unset_epoch_number() -> sidechain_domain::ScEpochNumber {
self.next_unset_epoch_number
}
fn calculate_committee(authority_selection_inputs: AuthoritySelectionInputs, _sidechain_epoch: sidechain_domain::ScEpochNumber) -> Option<Vec<(CrossChainPublic, SessionKeys)>> {
fn calculate_committee(authority_selection_inputs: AuthoritySelectionInputs, _sidechain_epoch: sidechain_domain::ScEpochNumber) -> Option<Vec<CommitteeMember<CrossChainPublic, SessionKeys>>> {
if authority_selection_inputs.registered_candidates.is_empty() {
None
} else {
let result: Vec<(CrossChainPublic, SessionKeys)> = authority_selection_inputs.registered_candidates.into_iter().map(|candidate| {
let result = authority_selection_inputs.registered_candidates.into_iter().map(|candidate| {
let registration = candidate.registrations().first().unwrap().clone();
let cross_chain_pub_slice: [u8; 33] = registration.cross_chain_pub_key.0.try_into().unwrap();
let cross_chain_public: CrossChainPublic = CrossChainPublic::from(ecdsa::Public::from(cross_chain_pub_slice));
let aura_pub_key = registration.aura_pub_key.try_into_sr25519().unwrap();
let grandpa_pub_key = registration.grandpa_pub_key.try_into_ed25519().unwrap();
let session_keys = (aura_pub_key, grandpa_pub_key).into();
(cross_chain_public, session_keys)
CommitteeMember::permissioned(cross_chain_public, session_keys)
}).collect();
Some(result)
}
Expand Down
26 changes: 13 additions & 13 deletions node/runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use authority_selection_inherents::filter_invalid_candidates::{
StakeError,
};
use authority_selection_inherents::select_authorities::select_authorities;
use authority_selection_inherents::CommitteeMember;
use frame_support::genesis_builder_helper::{build_state, get_preset};
use frame_support::weights::constants::RocksDbWeight as RuntimeDbWeight;
use frame_support::BoundedVec;
Expand Down Expand Up @@ -43,7 +44,6 @@ use sp_runtime::{
transaction_validity::{TransactionSource, TransactionValidity},
ApplyExtrinsicResult, DispatchResult, MultiSignature, Perbill,
};
use sp_session_validator_management::CommitteeMember;
use sp_sidechain::SidechainStatus;
use sp_std::prelude::*;
#[cfg(feature = "std")]
Expand Down Expand Up @@ -398,8 +398,7 @@ impl pallet_session_validator_management::Config for Runtime {
type AuthoritySelectionInputs = AuthoritySelectionInputs;
type ScEpochNumber = ScEpochNumber;
type WeightInfo = pallet_session_validator_management::weights::SubstrateWeight<Runtime>;
type CommitteeMember =
authority_selection_inherents::CommitteeMember<CrossChainPublic, SessionKeys>;
type CommitteeMember = CommitteeMember<CrossChainPublic, SessionKeys>;

fn select_authorities(
input: AuthoritySelectionInputs,
Expand Down Expand Up @@ -828,23 +827,24 @@ impl_runtime_apis! {
}
}

impl sp_session_validator_management::SessionValidatorManagementApi<Block, SessionKeys, CrossChainPublic, AuthoritySelectionInputs, sidechain_domain::ScEpochNumber> for Runtime {
fn get_current_committee() -> (ScEpochNumber, Vec<CrossChainPublic>) {
#[api_version(2)]
impl sp_session_validator_management::SessionValidatorManagementApi<
Block,
CommitteeMember<CrossChainPublic, SessionKeys>,
AuthoritySelectionInputs,
sidechain_domain::ScEpochNumber
> for Runtime {
fn get_current_committee() -> (ScEpochNumber, Vec<CommitteeMember<CrossChainPublic, SessionKeys>>) {
SessionCommitteeManagement::get_current_committee()
}
fn get_next_committee() -> Option<(ScEpochNumber, Vec<CrossChainPublic>)> {
fn get_next_committee() -> Option<(ScEpochNumber, Vec<CommitteeMember<CrossChainPublic, SessionKeys>>)> {
SessionCommitteeManagement::get_next_committee()
}
fn get_next_unset_epoch_number() -> sidechain_domain::ScEpochNumber {
SessionCommitteeManagement::get_next_unset_epoch_number()
}
fn calculate_committee(authority_selection_inputs: AuthoritySelectionInputs, sidechain_epoch: ScEpochNumber) -> Option<Vec<(CrossChainPublic, SessionKeys)>> {
Some(
SessionCommitteeManagement::calculate_committee(authority_selection_inputs, sidechain_epoch)?
.into_iter()
.map(|member| (member.authority_id(), member.authority_keys()))
.collect()
)
fn calculate_committee(authority_selection_inputs: AuthoritySelectionInputs, sidechain_epoch: ScEpochNumber) -> Option<Vec<CommitteeMember<CrossChainPublic, SessionKeys>>> {
SessionCommitteeManagement::calculate_committee(authority_selection_inputs, sidechain_epoch)
}
fn get_main_chain_scripts() -> sp_session_validator_management::MainChainScripts {
SessionCommitteeManagement::get_main_chain_scripts()
Expand Down
11 changes: 6 additions & 5 deletions toolkit/cli/node-commands/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ use sp_api::ProvideRuntimeApi;
use sp_blockchain::HeaderBackend;
use sp_runtime::traits::Block as BlockT;
use sp_runtime::AccountId32;
use sp_session_validator_management::CommitteeMember as CommitteeMemberT;
use sp_session_validator_management::SessionValidatorManagementApi;
use sp_session_validator_management_query::commands::*;
use sp_session_validator_management_query::SessionValidatorManagementQuery;
Expand Down Expand Up @@ -102,7 +103,7 @@ pub enum PartnerChainsSubcommand {
Wizards(partner_chains_cli::Command),
}

pub fn run<Cli, Block, CrossChainPublic, SessionKeys, Client>(
pub fn run<Cli, Block, CommitteeMember, Client>(
cli: &Cli,
get_deps: impl FnOnce(
sc_service::Configuration,
Expand All @@ -119,15 +120,15 @@ where
+ GetSidechainStatus<Block>
+ SessionValidatorManagementApi<
Block,
SessionKeys,
CrossChainPublic,
CommitteeMember,
AuthoritySelectionInputs,
ScEpochNumber,
> + CandidateValidationApi<Block>,
Block: BlockT,
NumberFor<Block>: From<u32> + Into<u32>,
SessionKeys: Decode + Send + Sync + 'static,
CrossChainPublic: Decode + Encode + AsRef<[u8]> + Send + Sync + 'static,
CommitteeMember: CommitteeMemberT + Encode + Decode + Send + Sync + 'static,
CommitteeMember::AuthorityId: Decode + Encode + AsRef<[u8]> + Send + Sync + 'static,
CommitteeMember::AuthorityKeys: Decode + Encode,
{
match cmd {
PartnerChainsSubcommand::SidechainParams(cmd) => {
Expand Down
30 changes: 6 additions & 24 deletions toolkit/pallets/session-validator-management/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -354,16 +354,12 @@ pub mod pallet {
T::select_authorities(authority_selection_inputs, sidechain_epoch).map(|c| c.to_vec())
}

pub fn rotate_committee_to_next_epoch() -> Option<Vec<(T::AccountId, T::AuthorityKeys)>> {
pub fn rotate_committee_to_next_epoch() -> Option<Vec<T::CommitteeMember>> {
let next_committee = NextCommittee::<T>::take()?;

CurrentCommittee::<T>::put(next_committee.clone());

let validators: Vec<(T::AccountId, T::AuthorityKeys)> = next_committee
.committee
.into_iter()
.map(|member| (member.authority_id().into(), member.authority_keys()))
.collect();
let validators = next_committee.committee.to_vec();
let len = validators.len();
info!(
"Committee rotated: Returning {len} validators, stored in epoch {}",
Expand All @@ -372,28 +368,14 @@ pub mod pallet {
Some(validators)
}

pub fn get_current_committee() -> (T::ScEpochNumber, Vec<T::AuthorityId>) {
pub fn get_current_committee() -> (T::ScEpochNumber, Vec<T::CommitteeMember>) {
let committee_info = CurrentCommittee::<T>::get();
(
committee_info.epoch,
committee_info
.committee
.into_iter()
.map(|member| member.authority_id())
.collect(),
)
(committee_info.epoch, committee_info.committee.to_vec())
}

pub fn get_next_committee() -> Option<(T::ScEpochNumber, Vec<T::AuthorityId>)> {
pub fn get_next_committee() -> Option<(T::ScEpochNumber, Vec<T::CommitteeMember>)> {
let committee_info = NextCommittee::<T>::get()?;
Some((
committee_info.epoch,
committee_info
.committee
.into_iter()
.map(|member| member.authority_id())
.collect(),
))
Some((committee_info.epoch, committee_info.committee.to_vec()))
}

pub fn get_main_chain_scripts() -> MainChainScripts {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
use crate::authority_selection_inputs::AuthoritySelectionDataSource;
use crate::authority_selection_inputs::AuthoritySelectionInputs;
use parity_scale_codec::{Decode, Encode};
use sp_session_validator_management::CommitteeMember as CommitteeMemberT;
#[cfg(feature = "std")]
use {
crate::authority_selection_inputs::AuthoritySelectionInputsCreationError,
Expand Down Expand Up @@ -40,7 +41,7 @@ impl AriadneInherentDataProvider {
})
}

pub async fn new<Block, SessionKeys, CrossChainPublic, T>(
pub async fn new<Block, CommitteeMember, T>(
client: &T,
sc_slot_config: &ScSlotConfig,
mc_epoch_config: &MainchainEpochConfig,
Expand All @@ -50,14 +51,14 @@ impl AriadneInherentDataProvider {
mc_reference_epoch: McEpochNumber,
) -> Result<Self, InherentProviderCreationError>
where
SessionKeys: Decode,
CrossChainPublic: Decode + Encode,
CommitteeMember: CommitteeMemberT + Decode + Encode,
CommitteeMember::AuthorityKeys: Decode + Encode,
CommitteeMember::AuthorityId: Decode + Encode,
Block: BlockT,
T: ProvideRuntimeApi<Block> + Send + Sync,
T::Api: SessionValidatorManagementApi<
Block,
SessionKeys,
CrossChainPublic,
CommitteeMember,
AuthoritySelectionInputs,
ScEpochNumber,
>,
Expand Down Expand Up @@ -103,7 +104,7 @@ pub enum InherentProviderCreationError {
}

#[cfg(feature = "std")]
fn mc_epoch_for_next_ariadne_cidp<Block, SessionKeys, CrossChainPublic, T>(
fn mc_epoch_for_next_ariadne_cidp<Block, CommitteeMember, T>(
client: &T,
sc_slot_config: &ScSlotConfig,
epoch_config: &MainchainEpochConfig,
Expand All @@ -112,13 +113,13 @@ fn mc_epoch_for_next_ariadne_cidp<Block, SessionKeys, CrossChainPublic, T>(
) -> Result<McEpochNumber, InherentProviderCreationError>
where
Block: BlockT,
SessionKeys: Decode,
CrossChainPublic: Decode + Encode,
CommitteeMember: Decode + Encode + CommitteeMemberT,
CommitteeMember::AuthorityKeys: Decode + Encode,
CommitteeMember::AuthorityId: Decode + Encode,
T: ProvideRuntimeApi<Block> + Send + Sync,
T::Api: SessionValidatorManagementApi<
Block,
SessionKeys,
CrossChainPublic,
CommitteeMember,
AuthoritySelectionInputs,
ScEpochNumber,
>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ impl sp_api::ProvideRuntimeApi<Block> for TestApi {
}

sp_api::mock_impl_runtime_apis! {
impl SessionValidatorManagementApi<Block, AccountKeys, CrossChainPublicKey, AuthoritySelectionInputs, ScEpochNumber>
impl SessionValidatorManagementApi<Block, (CrossChainPublicKey, AccountKeys), AuthoritySelectionInputs, ScEpochNumber>
for TestApi
{
fn get_current_committee() -> (ScEpochNumber, Vec<CrossChainPublicKey>) {
fn get_current_committee() -> (ScEpochNumber, Vec<(CrossChainPublicKey, AccountKeys)>) {
unimplemented!()
}
fn get_next_unset_epoch_number() -> sidechain_domain::ScEpochNumber {
Expand Down
5 changes: 4 additions & 1 deletion toolkit/primitives/session-manager/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,10 @@ impl<T: pallet_session_validator_management::Config + pallet_session::Config>
.expect(
"Session should never end without current epoch validators defined. \
Check ShouldEndSession implementation or if it is used before starting new session",
),
)
.into_iter()
.map(|member| (member.authority_id().into(), member.authority_keys()))
.collect(),
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ impl<T: pallet_session_validator_management::Config + pallet_session::Config>
pallet_session_validator_management::Pallet::<T>::rotate_committee_to_next_epoch()
.expect(
"PalletSessionSupport: Session should never end without current epoch validators defined. This may be caused by ShouldEndSession invalid behavior or being called before starting new session",
).into_iter().map(|(id, _)| id).collect::<Vec<_>>(),
).into_iter().map(|member| member.authority_id().into()).collect::<Vec<_>>(),
)
}

Expand Down
5 changes: 4 additions & 1 deletion toolkit/primitives/session-validator-management/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,11 @@ std = [
"sp-inherents/std",
"sp-std/std",
"sp-runtime/std",
"sidechain-domain/std",
"sidechain-domain/serde",
"thiserror",
"envy"
"envy",
"serde"
]
serde = [
"dep:serde",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@ hex-literal = { workspace = true }
minicbor = { workspace = true }
plutus-datum-derive = { workspace = true }
tokio = { workspace = true }
authority-selection-inherents = { workspace = true, features = ["mock"] }
Loading

0 comments on commit b663279

Please sign in to comment.