From 56ebb044394157d72926846e4c516c80f3621325 Mon Sep 17 00:00:00 2001 From: Hugo Trentesaux <hugo@trentesaux.fr> Date: Wed, 17 Jan 2024 11:10:01 +0100 Subject: [PATCH] update to runtime 702 --- res/metadata.scale | Bin 133159 -> 128356 bytes src/commands/certification.rs | 8 +-- src/commands/distance.rs | 22 -------- src/commands/expire.rs | 46 ++-------------- src/commands/identity.rs | 28 ++-------- src/commands/runtime.rs | 6 +-- src/commands/smith.rs | 98 ---------------------------------- src/commands/sudo.rs | 10 +--- src/display.rs | 39 +------------- 9 files changed, 20 insertions(+), 237 deletions(-) diff --git a/res/metadata.scale b/res/metadata.scale index 9b04918d2b88645a3e41c6d1ac9339d222188b2e..4f75555d61b51bfad4efd4f2d66048694ccefb78 100644 GIT binary patch delta 17510 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 delta 19938 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 diff --git a/src/commands/certification.rs b/src/commands/certification.rs index 1376b10..c1d2999 100644 --- a/src/commands/certification.rs +++ b/src/commands/certification.rs @@ -4,7 +4,9 @@ use crate::*; pub async fn certify(data: &Data, receiver: IdtyId) -> Result<(), anyhow::Error> { let progress = submit_call( data, - &runtime::tx().cert().add_cert(data.idty_index(), receiver), + &runtime::tx() + .certification() + .add_cert(data.idty_index(), receiver), ) .await?; if data.args.no_wait { @@ -12,7 +14,7 @@ pub async fn certify(data: &Data, receiver: IdtyId) -> Result<(), anyhow::Error> } let events = track_progress(progress).await?; // look for the expected event - look_event::<runtime::cert::events::NewCert>(data, &events)?; - look_event::<runtime::cert::events::RenewedCert>(data, &events)?; + look_event::<runtime::certification::events::CertAdded>(data, &events)?; + look_event::<runtime::certification::events::CertRenewed>(data, &events)?; Ok(()) } diff --git a/src/commands/distance.rs b/src/commands/distance.rs index 6eaaf4c..fb80955 100644 --- a/src/commands/distance.rs +++ b/src/commands/distance.rs @@ -13,25 +13,3 @@ pub async fn request_distance_evaluation(data: &Data) -> Result<(), subxt::Error let _ = track_progress(progress).await?; Ok(()) } - -/// get identity distance status -pub async fn get_identity_distance_status( - data: &Data, -) -> Result< - Option<( - AccountId, - runtime::runtime_types::pallet_distance::types::DistanceStatus, - )>, - subxt::Error, -> { - data.client() - .storage() - .at_latest() - .await? - .fetch( - &runtime::storage() - .distance() - .identity_distance_status(data.idty_index()), - ) - .await -} diff --git a/src/commands/expire.rs b/src/commands/expire.rs index f6b4963..d8f7bf0 100644 --- a/src/commands/expire.rs +++ b/src/commands/expire.rs @@ -33,7 +33,7 @@ pub async fn monitor_expirations(data: &Data, blocks: u32, _sessions: u32) -> an let mut basic_certs_iter = client .storage() .at(parent_hash) - .iter(runtime::storage().cert().storage_certs_removable_on_iter()) + .iter(runtime::storage().certification().certs_removable_on_iter()) .await?; let mut basic_certs = BTreeMap::new(); while let Some(Ok((k, v))) = basic_certs_iter.next().await { @@ -43,27 +43,7 @@ pub async fn monitor_expirations(data: &Data, blocks: u32, _sessions: u32) -> an } } - let mut smith_certs_iter = client - .storage() - .at(parent_hash) - .iter( - runtime::storage() - .smith_cert() - .storage_certs_removable_on_iter(), - ) - .await?; - let mut smith_certs = BTreeMap::new(); - while let Some(Ok((k, v))) = smith_certs_iter.next().await { - let block_number = BlockNumber::from_le_bytes(k[40..44].try_into().unwrap()); - if block_number < end_block { - smith_certs.insert(block_number - current_block, v); - } - } - - for (title, certs) in [ - ("Certifications", basic_certs), - ("Smith certifications", smith_certs), - ] { + for (title, certs) in [("Certifications", basic_certs)] { println!("\n{title}:"); for (blocks_left, certs) in certs { println!("{blocks_left} blocks before expiration:"); @@ -102,27 +82,7 @@ pub async fn monitor_expirations(data: &Data, blocks: u32, _sessions: u32) -> an } } - let mut smith_membership_iter = client - .storage() - .at(parent_hash) - .iter( - runtime::storage() - .smith_membership() - .memberships_expire_on_iter(), - ) - .await?; - let mut smith_memberships = BTreeMap::new(); - while let Some(Ok((k, v))) = smith_membership_iter.next().await { - let block_number = BlockNumber::from_le_bytes(k[40..44].try_into().unwrap()); - if block_number < end_block { - smith_memberships.insert(block_number - current_block, v); - } - } - - for (title, memberships) in [ - ("Memberships", basic_memberships), - ("Smith memberships", smith_memberships), - ] { + for (title, memberships) in [("Memberships", basic_memberships)] { println!("\n{title}:"); for (blocks_left, membership) in memberships { println!("{blocks_left} blocks before expiration:"); diff --git a/src/commands/identity.rs b/src/commands/identity.rs index fc4e7ba..9543c57 100644 --- a/src/commands/identity.rs +++ b/src/commands/identity.rs @@ -31,14 +31,9 @@ pub enum Subcommand { /// /// To be called by the certified not-yet-member account, to become member. Confirm { name: String }, - /// Validate an identity - /// Should be called when the distance has been evaluated positively - Validate { index: IdtyId }, /// Request distance evaluation /// make sure that it's ok otherwise currency is slashed RequestDistanceEvaluation, - /// Get distance status - DistanceStatus, /// Renew membership /// When membership comes to and end, it should be renewed for the identity to stay member RenewMembership, @@ -96,16 +91,9 @@ pub async fn handle_command(data: Data, command: Subcommand) -> Result<(), GcliE Subcommand::Confirm { name } => { confirm_identity(&data, name).await?; } - Subcommand::Validate { index } => { - validate_identity(&data, index).await?; - } Subcommand::RequestDistanceEvaluation => { commands::distance::request_distance_evaluation(&data).await?; } - Subcommand::DistanceStatus => { - data = data.fetch_idty_index().await?; - dbg!(commands::distance::get_identity_distance_status(&data).await?); - } Subcommand::RenewMembership => { renew_membership(&data).await?; } @@ -288,21 +276,15 @@ pub async fn confirm_identity(data: &Data, name: String) -> Result<(), subxt::Er .await } -/// confirm identity -pub async fn validate_identity(data: &Data, index: IdtyId) -> Result<(), subxt::Error> { - submit_call_and_look_event::< - runtime::identity::events::IdtyValidated, - Payload<runtime::identity::calls::types::ValidateIdentity>, - >(data, &runtime::tx().identity().validate_identity(index)) - .await -} - /// renew membership pub async fn renew_membership(data: &Data) -> Result<(), subxt::Error> { submit_call_and_look_event::< runtime::membership::events::MembershipRenewed, - Payload<runtime::membership::calls::types::RenewMembership>, - >(data, &runtime::tx().membership().renew_membership()) + Payload<runtime::distance::calls::types::RequestDistanceEvaluation>, + >( + data, + &runtime::tx().distance().request_distance_evaluation(), + ) .await } diff --git a/src/commands/runtime.rs b/src/commands/runtime.rs index 2f51e6f..afed9ab 100644 --- a/src/commands/runtime.rs +++ b/src/commands/runtime.rs @@ -6,15 +6,15 @@ pub async fn runtime_info(data: Data) { // certifications let cert_period = api .constants() - .at(&runtime::constants().cert().cert_period()) + .at(&runtime::constants().certification().cert_period()) .unwrap(); let max_by_issuer = api .constants() - .at(&runtime::constants().cert().max_by_issuer()) + .at(&runtime::constants().certification().max_by_issuer()) .unwrap(); let validity_period = api .constants() - .at(&runtime::constants().cert().validity_period()) + .at(&runtime::constants().certification().validity_period()) .unwrap(); println!("certification period: {cert_period} blocks"); diff --git a/src/commands/smith.rs b/src/commands/smith.rs index efd32d4..2009d3c 100644 --- a/src/commands/smith.rs +++ b/src/commands/smith.rs @@ -36,16 +36,6 @@ fn session_keys_decode(session_keys: SessionKeys) -> RuntimeSessionKeys { /// define smith subcommands #[derive(Clone, Default, Debug, clap::Parser)] pub enum Subcommand { - /// Request smith membership - Request, - /// Emit a smith certification - Cert { to: IdtyId }, - /// Claim smith membership - Claim, - /// Renew smith membership - Renew, - /// Revoke smith membership - Revoke, /// go online GoOnline, /// go offline @@ -66,36 +56,18 @@ pub enum Subcommand { }, /// List online authorities ShowOnline, - /// count of smith member - MemberCount, } /// handle smith commands pub async fn handle_command(data: Data, command: Subcommand) -> Result<(), GcliError> { let mut data = data.build_client().await?; match command { - Subcommand::Request => { - request_smith_membership(&data).await?; - } - Subcommand::Claim => { - claim_smith_membership(&data).await?; - } - Subcommand::Renew => { - renew_smith_membership(&data).await?; - } - Subcommand::Revoke => { - revoke_smith_membership(&data).await?; - } Subcommand::GoOnline => { go_online(&data).await?; } Subcommand::GoOffline => { go_offline(&data).await?; } - Subcommand::Cert { to } => { - data = data.fetch_idty_index().await?; - cert(&data, to).await? - } Subcommand::UpdateKeys => { update_session_keys(&data).await?; } @@ -116,21 +88,6 @@ pub async fn handle_command(data: Data, command: Subcommand) -> Result<(), GcliE data = data.build_client().await?; online(&data).await? } - Subcommand::MemberCount => { - println!( - "smith member count: {:?}", - data.client() - .storage() - .at_latest() - .await? - .fetch( - &runtime::storage() - .smith_membership() - .counter_for_membership(), - ) - .await? - ) - } }; Ok(()) @@ -154,15 +111,6 @@ pub async fn rotate_keys(data: &Data) -> Result<SessionKeys, anyhow::Error> { .map_err(|e| anyhow!("Session keys have wrong length: {:?}", e)) } -/// request smith membership -pub async fn request_smith_membership(data: &Data) -> Result<(), subxt::Error> { - submit_call_and_look_event::< - runtime::smith_membership::events::MembershipRequested, - Payload<runtime::smith_membership::calls::types::RequestMembership>, - >(data, &runtime::tx().smith_membership().request_membership()) - .await -} - /// set session keys pub async fn set_session_keys( data: &Data, @@ -217,33 +165,6 @@ pub async fn go_online(data: &Data) -> Result<(), GcliError> { .map_err(|e| e.into()) } -/// claim smith membership -pub async fn claim_smith_membership(data: &Data) -> Result<(), subxt::Error> { - submit_call_and_look_event::< - runtime::smith_membership::events::MembershipAcquired, - Payload<runtime::smith_membership::calls::types::ClaimMembership>, - >(data, &runtime::tx().smith_membership().claim_membership()) - .await -} - -/// renew smith membership -pub async fn renew_smith_membership(data: &Data) -> Result<(), subxt::Error> { - submit_call_and_look_event::< - runtime::smith_membership::events::MembershipRenewed, - Payload<runtime::smith_membership::calls::types::RenewMembership>, - >(data, &runtime::tx().smith_membership().renew_membership()) - .await -} - -/// revoke smith membership -pub async fn revoke_smith_membership(data: &Data) -> Result<(), subxt::Error> { - submit_call_and_look_event::< - runtime::smith_membership::events::MembershipRevoked, - Payload<runtime::smith_membership::calls::types::RevokeMembership>, - >(data, &runtime::tx().smith_membership().revoke_membership()) - .await -} - /// submit go_offline pub async fn go_offline(data: &Data) -> Result<(), subxt::Error> { submit_call_and_look_event::< @@ -333,22 +254,3 @@ pub async fn online(data: &Data) -> Result<(), anyhow::Error> { Ok(()) } - -/// submit a smith certification and track progress -pub async fn cert(data: &Data, receiver: IdtyId) -> Result<(), anyhow::Error> { - let progress = submit_call( - data, - &runtime::tx() - .smith_cert() - .add_cert(data.idty_index(), receiver), - ) - .await?; - if data.args.no_wait { - return Ok(()); - } - let events = track_progress(progress).await?; - // look for the expected event - look_event::<runtime::smith_cert::events::NewCert>(data, &events)?; - look_event::<runtime::smith_cert::events::RenewedCert>(data, &events)?; - Ok(()) -} diff --git a/src/commands/sudo.rs b/src/commands/sudo.rs index b9fce46..5c172b1 100644 --- a/src/commands/sudo.rs +++ b/src/commands/sudo.rs @@ -9,7 +9,7 @@ pub enum Subcommand { Nothing, /// set sudo keys SetKey { new_key: AccountId }, - /// force set distance status to DistanceStatus::Valid + /// force valid distance status SetDistanceOk { identity: IdtyId }, } @@ -40,13 +40,7 @@ pub async fn set_key(data: &Data, new_key: AccountId) -> Result<(), subxt::Error /// set distance ok pub async fn set_distance_ok(data: &Data, identity: IdtyId) -> Result<(), subxt::Error> { - let inner = runtime::distance::Call::force_set_distance_status { - identity, - status: Some(( - data.address(), - runtime::runtime_types::pallet_distance::types::DistanceStatus::Valid, - )), - }; + let inner = runtime::distance::Call::force_valid_distance_status { identity }; let inner = runtime::Call::Distance(inner); submit_call_and_look_event::< runtime::sudo::events::Sudid, diff --git a/src/display.rs b/src/display.rs index 3320ab4..bcfb3e9 100644 --- a/src/display.rs +++ b/src/display.rs @@ -14,26 +14,16 @@ impl DisplayEvent for runtime::universal_dividend::events::UdsClaimed { ) } } -impl DisplayEvent for runtime::cert::events::NewCert { +impl DisplayEvent for runtime::certification::events::CertAdded { fn display(&self, _data: &Data) -> String { format!("new certification {} → {}", self.issuer, self.receiver) } } -impl DisplayEvent for runtime::cert::events::RenewedCert { +impl DisplayEvent for runtime::certification::events::CertRenewed { fn display(&self, _data: &Data) -> String { format!("renewed cert {:?}", self) } } -impl DisplayEvent for runtime::smith_cert::events::NewCert { - fn display(&self, _data: &Data) -> String { - format!("certified as smith {:?}", self) - } -} -impl DisplayEvent for runtime::smith_cert::events::RenewedCert { - fn display(&self, _data: &Data) -> String { - format!("renewed smith cert {:?}", self) - } -} impl DisplayEvent for runtime::account::events::AccountUnlinked { fn display(&self, _data: &Data) -> String { format!("account unlinked: {}", self.0) @@ -60,11 +50,6 @@ impl DisplayEvent for runtime::identity::events::IdtyConfirmed { ) } } -impl DisplayEvent for runtime::identity::events::IdtyValidated { - fn display(&self, _data: &Data) -> String { - format!("identity validated {:?}", self) - } -} impl DisplayEvent for runtime::identity::events::IdtyChangedOwnerKey { fn display(&self, _data: &Data) -> String { format!("identity changed owner key {:?}", self) @@ -95,31 +80,11 @@ impl DisplayEvent for runtime::oneshot_account::events::OneshotAccountConsumed { format!("oneshot {:?}", self) } } -impl DisplayEvent for runtime::smith_membership::events::MembershipRequested { - fn display(&self, _data: &Data) -> String { - format!("smith membership requested {:?}", self) - } -} impl DisplayEvent for runtime::authority_members::events::MemberGoOnline { fn display(&self, _data: &Data) -> String { format!("smith went online {:?}", self) } } -impl DisplayEvent for runtime::smith_membership::events::MembershipAcquired { - fn display(&self, _data: &Data) -> String { - format!("smith membership aquired {:?}", self) - } -} -impl DisplayEvent for runtime::smith_membership::events::MembershipRenewed { - fn display(&self, _data: &Data) -> String { - format!("smith membership renewed {:?}", self) - } -} -impl DisplayEvent for runtime::smith_membership::events::MembershipRevoked { - fn display(&self, _data: &Data) -> String { - format!("smith membership revoked {:?}", self) - } -} impl DisplayEvent for runtime::authority_members::events::MemberGoOffline { fn display(&self, _data: &Data) -> String { format!("smith went offline {:?}", self) -- GitLab