diff --git a/src/commands/smith.rs b/src/commands/smith.rs index ab781512208b6c068ff49c56eb5f9ade1b91c204..0e64606f915f4dd5f9084f52a4079f3ceb181e72 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 030de860eb7cfd67bc1dc267c18936e61b174397..b976245d4cd83c916145e98da74b9883ee1433dc 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 ca86c5a48c0bd186580c6e391b87e72feca4ab4f..4bfc80149e1281623d44c5f0c255c2fbd09cd89f 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 {