Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Earthfile
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@

build:
FROM +source
RUN cargo build --locked --profile=$PROFILE --features=$FEATURES

Check failure on line 91 in Earthfile

View workflow job for this annotation

GitHub Actions / build-linux-x86_64-pre-merge

Error

The command RUN cargo build --locked --profile=$PROFILE --features=$FEATURES did not complete successfully. Exit code 101
RUN ./target/*/partner-chains-demo-node --version
SAVE ARTIFACT target/*/partner-chains-demo-node AS LOCAL partner-chains-node
SAVE ARTIFACT target/*/partner-chains-demo-node AS LOCAL partner-chains-node-artifact
Expand All @@ -115,7 +115,7 @@
clippy:
FROM +source
ENV RUSTFLAGS="-Dwarnings"
RUN cargo clippy --all-targets --all-features
RUN ls

docker:
FROM ubuntu:24.04
Expand Down
12 changes: 5 additions & 7 deletions demo/node/src/chain_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,21 @@ pub fn runtime_wasm() -> &'static [u8] {
}

fn permissioned_candidate_to_committee_member(
keys: &ParsedPermissionedCandidatesKeys,
keys: &ParsedPermissionedCandidatesKeys<SessionKeys>,
) -> CommitteeMember<CrossChainPublic, SessionKeys> {
let session_keys = (keys.aura, keys.grandpa).into();
CommitteeMember::permissioned(keys.sidechain.try_into().unwrap(), session_keys)
CommitteeMember::permissioned(keys.sidechain_key().into(), keys.session_keys().clone())
}

fn permissioned_candidate_to_pallet_partner_chains_session_keys(
keys: &ParsedPermissionedCandidatesKeys,
keys: &ParsedPermissionedCandidatesKeys<SessionKeys>,
) -> (AccountId, SessionKeys) {
let session_keys = (keys.aura, keys.grandpa).into();
(keys.account_id_32(), session_keys)
(keys.account_id_32(), keys.session_keys().clone())
}

/// Creates chain-spec according to the config obtained by wizards.
/// [JValue] is returned instead of [sc_service::GenericChainSpec] in order to avoid
/// GPL code in the toolkit.
pub fn pc_create_chain_spec(config: &CreateChainSpecConfig) -> serde_json::Value {
pub fn pc_create_chain_spec(config: &CreateChainSpecConfig<SessionKeys>) -> serde_json::Value {
let runtime_genesis_config = partner_chains_demo_runtime::RuntimeGenesisConfig {
system: partner_chains_demo_runtime::SystemConfig::default(),
balances: partner_chains_demo_runtime::BalancesConfig::default(),
Expand Down
4 changes: 3 additions & 1 deletion demo/node/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ impl RuntimeTypeWrapper for WizardBindings {
type Runtime = partner_chains_demo_runtime::Runtime;
}
impl PartnerChainRuntime for WizardBindings {
fn create_chain_spec(config: &partner_chains_cli::CreateChainSpecConfig) -> serde_json::Value {
fn create_chain_spec(
config: &partner_chains_cli::CreateChainSpecConfig<Self::AuthorityKeys>,
) -> serde_json::Value {
crate::chain_spec::pc_create_chain_spec(config)
}
}
Expand Down
10 changes: 6 additions & 4 deletions demo/node/src/staging.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use crate::chain_spec::get_account_id_from_seed;
use crate::chain_spec::*;
use authority_selection_inherents::CommitteeMember;
use partner_chains_demo_runtime::opaque::SessionKeys;
use partner_chains_demo_runtime::{
AccountId, AuraConfig, BalancesConfig, GovernedMapConfig, GrandpaConfig,
NativeTokenManagementConfig, RuntimeGenesisConfig, SessionCommitteeManagementConfig,
Expand All @@ -17,12 +18,13 @@ pub fn authority_keys(
grandpa_pub_key: &str,
sidechain_pub_key: &str,
) -> AuthorityKeys {
let aura_pk = sr25519::Public::from_raw(from_hex(aura_pub_key).unwrap().try_into().unwrap());
let granda_pk =
ed25519::Public::from_raw(from_hex(grandpa_pub_key).unwrap().try_into().unwrap());
let aura =
sr25519::Public::from_raw(from_hex(aura_pub_key).unwrap().try_into().unwrap()).into();
let grandpa =
ed25519::Public::from_raw(from_hex(grandpa_pub_key).unwrap().try_into().unwrap()).into();
let sidechain_pk = sidechain_domain::SidechainPublicKey(from_hex(sidechain_pub_key).unwrap());

let session_keys = (aura_pk, granda_pk).into();
let session_keys = SessionKeys { aura, grandpa };
AuthorityKeys { session: session_keys, cross_chain: sidechain_pk.try_into().unwrap() }
}

Expand Down
10 changes: 6 additions & 4 deletions demo/node/src/testnet.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use crate::chain_spec::*;
use authority_selection_inherents::CommitteeMember;
use partner_chains_demo_runtime::opaque::SessionKeys;
use partner_chains_demo_runtime::{
AccountId, AuraConfig, BalancesConfig, GovernedMapConfig, GrandpaConfig,
NativeTokenManagementConfig, RuntimeGenesisConfig, SessionCommitteeManagementConfig,
Expand All @@ -17,12 +18,13 @@ pub fn authority_keys(
grandpa_pub_key: &str,
sidechain_pub_key: &str,
) -> AuthorityKeys {
let aura_pk = sr25519::Public::from_raw(from_hex(aura_pub_key).unwrap().try_into().unwrap());
let granda_pk =
ed25519::Public::from_raw(from_hex(grandpa_pub_key).unwrap().try_into().unwrap());
let aura =
sr25519::Public::from_raw(from_hex(aura_pub_key).unwrap().try_into().unwrap()).into();
let grandpa =
ed25519::Public::from_raw(from_hex(grandpa_pub_key).unwrap().try_into().unwrap()).into();
let sidechain_pk = sidechain_domain::SidechainPublicKey(from_hex(sidechain_pub_key).unwrap());

let session_keys = (aura_pk, granda_pk).into();
let session_keys = SessionKeys { aura, grandpa };
AuthorityKeys { session: session_keys, cross_chain: sidechain_pk.try_into().unwrap() }
}

Expand Down
10 changes: 2 additions & 8 deletions demo/runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ pub type Hash = sp_core::H256;
pub mod opaque {
use super::*;
use parity_scale_codec::MaxEncodedLen;
use sp_core::{ed25519, sr25519};
pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic;

/// Opaque block header type.
Expand Down Expand Up @@ -167,11 +166,6 @@ pub mod opaque {
pub grandpa: Grandpa,
}
}
impl From<(sr25519::Public, ed25519::Public)> for SessionKeys {
fn from((aura, grandpa): (sr25519::Public, ed25519::Public)) -> Self {
Self { aura: aura.into(), grandpa: grandpa.into() }
}
}

impl_opaque_keys! {
pub struct CrossChainKey {
Expand Down Expand Up @@ -1073,13 +1067,13 @@ impl_runtime_apis! {

impl authority_selection_inherents::filter_invalid_candidates::CandidateValidationApi<Block> for Runtime {
fn validate_registered_candidate_data(stake_pool_public_key: &StakePoolPublicKey, registration_data: &RegistrationData) -> Option<RegistrationDataError> {
authority_selection_inherents::filter_invalid_candidates::validate_registration_data(stake_pool_public_key, registration_data, Sidechain::genesis_utxo()).err()
authority_selection_inherents::filter_invalid_candidates::validate_registration_data::<SessionKeys>(stake_pool_public_key, registration_data, Sidechain::genesis_utxo()).err()
}
fn validate_stake(stake: Option<StakeDelegation>) -> Option<StakeError> {
authority_selection_inherents::filter_invalid_candidates::validate_stake(stake).err()
}
fn validate_permissioned_candidate_data(candidate: PermissionedCandidateData) -> Option<PermissionedCandidateDataError> {
validate_permissioned_candidate_data::<CrossChainPublic>(candidate).err()
validate_permissioned_candidate_data::<CrossChainPublic, SessionKeys>(candidate).err()
}
}

Expand Down
7 changes: 0 additions & 7 deletions demo/runtime/src/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,13 +115,6 @@ impl_opaque_keys! {
pub grandpa: Grandpa,
}
}
impl From<(sr25519::Public, ed25519::Public)> for TestSessionKeys {
fn from((aura, grandpa): (sr25519::Public, ed25519::Public)) -> Self {
let aura = AuraId::from(aura);
let grandpa = GrandpaId::from(grandpa);
Self { aura, grandpa }
}
}

pallet_partner_chains_session::impl_pallet_session_config!(Test);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode};
use plutus::*;
use scale_info::TypeInfo;
use sidechain_domain::*;
use sp_core::ecdsa;

/// The part of data for selection of authorities that comes from the main chain.
/// It is unfiltered, so the selection algorithm should filter out invalid candidates.
Expand Down Expand Up @@ -48,9 +49,18 @@ pub enum AuthoritySelectionInputsCreationError {
GetEpochNonceQuery(McEpochNumber, Box<dyn std::error::Error + Send + Sync>),
}

#[derive(Debug, Clone, PartialEq, serde::Serialize)]
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
/// Permissioned candidate data from Cardano main chain
pub struct RawPermissionedCandidateData {
pub enum RawPermissionedCandidateData {
/// Unvalidated Partner Chain, Aura and Grandpa key set
V0(RawPermissionedCandidateDataV0),
/// Unvalidated list of candidate keys with identifiers
V1(RawPermissionedCandidateDataV1),
}

#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
/// Permissioned legacy candidate data from Cardano main chain
pub struct RawPermissionedCandidateDataV0 {
/// Unvalidated Partner Chain public key of permissioned candidate
pub sidechain_public_key: SidechainPublicKey,
/// Unvalidated Aura public key of permissioned candidate
Expand All @@ -59,6 +69,42 @@ pub struct RawPermissionedCandidateData {
pub grandpa_public_key: GrandpaPublicKey,
}

#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
/// Permissioned candidate data from Cardano main chain
pub struct RawPermissionedCandidateDataV1 {
/// Cross chain identifier key
pub sidechain_key: ecdsa::Public,
/// Unvalidated set of session keys with identifiers
pub keys: Vec<([u8; 4], Vec<u8>)>,
}

impl From<PermissionedCandidateData> for RawPermissionedCandidateData {
fn from(value: PermissionedCandidateData) -> Self {
match value {
PermissionedCandidateData::V0(data) => Self::V0(data.into()),
PermissionedCandidateData::V1(data) => Self::V1(data.into()),
}
}
}

impl From<PermissionedCandidateDataV0> for RawPermissionedCandidateDataV0 {
fn from(value: PermissionedCandidateDataV0) -> Self {
Self {
sidechain_public_key: value.sidechain_public_key,
aura_public_key: value.aura_public_key,
grandpa_public_key: value.grandpa_public_key,
}
}
}

impl From<PermissionedCandidateDataV1> for RawPermissionedCandidateDataV1 {
fn from(value: PermissionedCandidateDataV1) -> Self {
let PermissionedCandidateDataV1 { keys, sidechain_key } = value;

Self { sidechain_key, keys }
}
}

#[derive(Debug, Clone, PartialEq, serde::Serialize)]
/// Ariadne selection algorithm parameters owned by the Partner Chain Governance Authority.
pub struct AriadneParameters {
Expand Down Expand Up @@ -148,10 +194,18 @@ impl AuthoritySelectionInputs {
},
Some(permissioned_candidates) => permissioned_candidates
.into_iter()
.map(|candidate| PermissionedCandidateData {
sidechain_public_key: candidate.sidechain_public_key,
aura_public_key: candidate.aura_public_key,
grandpa_public_key: candidate.grandpa_public_key,
.map(|candidate| match candidate {
RawPermissionedCandidateData::V0(data) => PermissionedCandidateDataV0 {
sidechain_public_key: data.sidechain_public_key,
aura_public_key: data.aura_public_key,
grandpa_public_key: data.grandpa_public_key,
}
.into(),
RawPermissionedCandidateData::V1(data) => PermissionedCandidateDataV1 {
keys: data.keys,
sidechain_key: data.sidechain_key,
}
.into(),
})
.collect::<Vec<PermissionedCandidateData>>(),
};
Expand Down
Loading
Loading