From d86db1b1ee94253400d63ed817130ecfa72595dd Mon Sep 17 00:00:00 2001 From: Hugo Trentesaux <hugo@trentesaux.fr> Date: Mon, 19 Jun 2023 16:53:02 +0200 Subject: [PATCH] refac membership renewal --- src/commands/smith.rs | 25 +++++-------------------- src/main.rs | 3 ++- src/utils.rs | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/commands/smith.rs b/src/commands/smith.rs index ab78151..0e64606 100644 --- a/src/commands/smith.rs +++ b/src/commands/smith.rs @@ -198,7 +198,7 @@ pub async fn claim_smith_membership(data: &Data) -> Result<(), subxt::Error> { .client() .tx() .sign_and_submit_then_watch( - &runtime::tx().smith_membership().claim_membership(), + &runtime::tx().smith_membership().claim_membership(), &PairSigner::new(data.keypair()), BaseExtrinsicParamsBuilder::new(), ) @@ -217,25 +217,10 @@ pub async fn claim_smith_membership(data: &Data) -> Result<(), subxt::Error> { /// renew smith membership pub async fn renew_smith_membership(data: &Data) -> Result<(), subxt::Error> { - let progress = data - .client() - .tx() - .sign_and_submit_then_watch( - &runtime::tx().smith_membership().renew_membership(), - &PairSigner::new(data.keypair()), - BaseExtrinsicParamsBuilder::new(), - ) - .await?; - - if data.args.no_wait { - return Ok(()); - } - let events = track_progress(progress).await?; - if let Some(e) = events.find_first::<runtime::smith_membership::events::MembershipRenewed>()? { - println!("{e:?}"); - } - - Ok(()) + submit_call_and_look_event::< + runtime::smith_membership::events::MembershipRenewed, + StaticTxPayload< runtime::smith_membership::calls::RenewMembership>, + >(data, &runtime::tx().smith_membership().renew_membership()).await } /// submit go_offline diff --git a/src/main.rs b/src/main.rs index 030de86..b976245 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,7 +16,8 @@ use runtime_config::*; use serde::Deserialize; use sp_core::{sr25519::Pair, Pair as _}; use subxt::blocks::ExtrinsicEvents; -use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner, TxStatus}; +use subxt::events::StaticEvent; +use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner, TxPayload, TxStatus, StaticTxPayload}; use utils::*; /// define command line arguments diff --git a/src/utils.rs b/src/utils.rs index ca86c5a..4bfc801 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -23,6 +23,32 @@ pub async fn track_progress( .await } +/// generic extrinsic submitter +pub async fn submit_call_and_look_event<E: std::fmt::Debug + StaticEvent, Call: TxPayload>( + data: &Data, + call: &Call, +) -> Result<(), subxt::Error> { + let progress = data + .client() + .tx() + .sign_and_submit_then_watch( + call, + &PairSigner::new(data.keypair()), + BaseExtrinsicParamsBuilder::new(), + ) + .await?; + + if data.args.no_wait { + return Ok(()); + } + let events = track_progress(progress).await?; + if let Some(e) = events.find_first::<E>()? { + println!("{e:?}"); + } + + Ok(()) +} + /// custom error type intended to provide more convenient error message to user #[derive(Debug)] pub enum GcliError { -- GitLab