Skip to content

Commit 881300b

Browse files
authored
feat: use generic account/session keys in authority selection, committee management and runtime (#911)
1 parent 0abb8ea commit 881300b

File tree

15 files changed

+278
-219
lines changed

15 files changed

+278
-219
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/node/src/cli.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub struct WizardBindings;
1919
impl RuntimeTypeWrapper for WizardBindings {
2020
type Runtime = partner_chains_demo_runtime::Runtime;
2121
}
22+
2223
impl PartnerChainRuntime for WizardBindings {
2324
fn create_chain_spec(config: &partner_chains_cli::CreateChainSpecConfig) -> serde_json::Value {
2425
crate::chain_spec::pc_create_chain_spec(config)

demo/runtime/src/lib.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ pub type Hash = sp_core::H256;
9898
/// to even the core data structures.
9999
pub mod opaque {
100100
use super::*;
101+
use authority_selection_inherents::MaybeFromCandidateKeys;
101102
use parity_scale_codec::MaxEncodedLen;
102103
use sp_core::{ed25519, sr25519};
103104
pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic;
@@ -170,6 +171,8 @@ pub mod opaque {
170171
}
171172
}
172173

174+
impl MaybeFromCandidateKeys for SessionKeys {}
175+
173176
impl_opaque_keys! {
174177
pub struct CrossChainKey {
175178
pub account: CrossChainPublic,
@@ -400,7 +403,11 @@ impl pallet_session_validator_management::Config for Runtime {
400403
input: AuthoritySelectionInputs,
401404
sidechain_epoch: ScEpochNumber,
402405
) -> Option<BoundedVec<Self::CommitteeMember, Self::MaxValidators>> {
403-
select_authorities(Sidechain::genesis_utxo(), input, sidechain_epoch)
406+
select_authorities::<opaque::cross_chain_app::Public, SessionKeys, MaxValidators>(
407+
Sidechain::genesis_utxo(),
408+
input,
409+
sidechain_epoch,
410+
)
404411
}
405412

406413
fn current_epoch_number() -> ScEpochNumber {
@@ -1065,13 +1072,13 @@ impl_runtime_apis! {
10651072

10661073
impl authority_selection_inherents::CandidateValidationApi<Block> for Runtime {
10671074
fn validate_registered_candidate_data(stake_pool_public_key: &StakePoolPublicKey, registration_data: &RegistrationData) -> Option<RegistrationDataError> {
1068-
authority_selection_inherents::validate_registration_data(stake_pool_public_key, registration_data, Sidechain::genesis_utxo()).err()
1075+
authority_selection_inherents::validate_registration_data::<SessionKeys>(stake_pool_public_key, registration_data, Sidechain::genesis_utxo()).err()
10691076
}
10701077
fn validate_stake(stake: Option<StakeDelegation>) -> Option<StakeError> {
10711078
authority_selection_inherents::validate_stake(stake).err()
10721079
}
10731080
fn validate_permissioned_candidate_data(candidate: PermissionedCandidateData) -> Option<PermissionedCandidateDataError> {
1074-
validate_permissioned_candidate_data(candidate).err()
1081+
validate_permissioned_candidate_data::<SessionKeys>(candidate).err()
10751082
}
10761083
}
10771084

demo/runtime/src/mock.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use authority_selection_inherents::{
2-
AriadneInherentDataProvider, AuthoritySelectionInputs, RegisterValidatorSignedMessage,
3-
filter_trustless_candidates_registrations,
2+
AriadneInherentDataProvider, AuthoritySelectionInputs, MaybeFromCandidateKeys,
3+
RegisterValidatorSignedMessage, filter_trustless_candidates_registrations,
44
};
55
use frame_support::{
66
Hashable,
@@ -17,6 +17,8 @@ use sp_consensus_grandpa::AuthorityId as GrandpaId;
1717
use sp_core::crypto::CryptoType;
1818
use sp_core::sr25519;
1919
use sp_core::{ByteArray, ConstU128, H256, Pair, crypto::AccountId32, ed25519};
20+
use sp_runtime::KeyTypeId;
21+
use sp_runtime::key_types::{AURA, GRANDPA};
2022
use sp_runtime::{
2123
BuildStorage, Digest, DigestItem, MultiSigner, impl_opaque_keys,
2224
traits::{BlakeTwo256, IdentifyAccount, IdentityLookup, OpaqueKeys},
@@ -114,6 +116,9 @@ impl_opaque_keys! {
114116
pub grandpa: Grandpa,
115117
}
116118
}
119+
120+
impl MaybeFromCandidateKeys for TestSessionKeys {}
121+
117122
impl From<(sr25519::Public, ed25519::Public)> for TestSessionKeys {
118123
fn from((aura, grandpa): (sr25519::Public, ed25519::Public)) -> Self {
119124
let aura = AuraId::from(aura);
@@ -122,6 +127,19 @@ impl From<(sr25519::Public, ed25519::Public)> for TestSessionKeys {
122127
}
123128
}
124129

130+
impl TryFrom<CandidateKeys> for TestSessionKeys {
131+
type Error = KeyTypeId;
132+
fn try_from(value: CandidateKeys) -> Result<Self, Self::Error> {
133+
let aura = <[u8; 32]>::try_from(value.find_or_empty(AURA))
134+
.map_err(|_| AURA)
135+
.map(|bytes| AuraId::from(sr25519::Public::from(bytes)))?;
136+
let grandpa = <[u8; 32]>::try_from(value.find_or_empty(GRANDPA))
137+
.map_err(|_| GRANDPA)
138+
.map(|bytes| GrandpaId::from(ed25519::Public::from(bytes)))?;
139+
Ok(Self { aura, grandpa })
140+
}
141+
}
142+
125143
pallet_partner_chains_session::impl_pallet_session_config!(Test);
126144

127145
impl pallet_partner_chains_session::Config for Test {

toolkit/cli/node-commands/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ static REGISTRATION_STATUS_AFTER_HELP: once_cell::sync::Lazy<String> = once_cell
102102
#[allow(clippy::large_enum_variant)]
103103
/// Entry point for all Partner Chains specific subcommand.
104104
pub enum PartnerChainsSubcommand<
105-
RuntimeBindings: PartnerChainRuntime,
105+
RuntimeBindings: PartnerChainRuntime + Send + Sync,
106106
PartnerchainAddress: Clone + Sync + Send + FromStr + 'static,
107107
> {
108108
/// Returns sidechain parameters.
@@ -151,7 +151,7 @@ pub fn run<
151151
CommitteeMember,
152152
Client,
153153
BlockProducerMetadata,
154-
RuntimeBindings: PartnerChainRuntime,
154+
RuntimeBindings: PartnerChainRuntime + Send + Sync,
155155
PartnerchainAddress,
156156
>(
157157
cli: &Cli,

toolkit/committee-selection/authority-selection-inherents/Cargo.toml

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,26 +40,27 @@ hex-literal = { workspace = true }
4040
num-bigint = { workspace = true }
4141
num-traits = { workspace = true }
4242
tokio = { workspace = true }
43+
sp-application-crypto = { workspace = true }
4344

4445
[features]
4546
default = ["std"]
4647
std = [
4748
"frame-support/std",
4849
"sidechain-domain/std",
4950
"parity-scale-codec/std",
50-
"serde/std",
51-
"sidechain-slots",
52-
"sidechain-slots/std",
53-
"sidechain-slots/serde",
54-
"sp-api/std",
55-
"sp-session-validator-management/std",
56-
"sp-session-validator-management/serde",
57-
"sp-core/std",
58-
"sp-inherents/std",
59-
"sp-runtime/std",
60-
"sp-std/std",
61-
"thiserror",
62-
"async-trait",
63-
"selection/std",
51+
"serde/std",
52+
"sidechain-slots",
53+
"sidechain-slots/std",
54+
"sidechain-slots/serde",
55+
"sp-api/std",
56+
"sp-session-validator-management/std",
57+
"sp-session-validator-management/serde",
58+
"sp-core/std",
59+
"sp-inherents/std",
60+
"sp-runtime/std",
61+
"sp-std/std",
62+
"thiserror",
63+
"async-trait",
64+
"selection/std",
6465
]
6566
mock = []

0 commit comments

Comments
 (0)