From 97ea3292f80064038019074dc650842ab6f04461 Mon Sep 17 00:00:00 2001 From: Marko Petrlic Date: Wed, 13 Nov 2024 16:57:54 +0100 Subject: [PATCH] Made it compile --- avail-rust/src/transactions/balances.rs | 6 +- avail-rust/src/transactions/da.rs | 35 +++---- avail-rust/src/transactions/mod.rs | 33 ++++++- avail-rust/src/transactions/nom_pools.rs | 116 ++++++++++------------- avail-rust/src/transactions/session.rs | 15 +-- avail-rust/src/transactions/staking.rs | 85 ++++++++--------- 6 files changed, 145 insertions(+), 145 deletions(-) diff --git a/avail-rust/src/transactions/balances.rs b/avail-rust/src/transactions/balances.rs index 882e6ef29..1220e0ed5 100644 --- a/avail-rust/src/transactions/balances.rs +++ b/avail-rust/src/transactions/balances.rs @@ -72,7 +72,7 @@ impl Balances { .await?; let event = find_event_or_return_error::( - "Failed to find Transfer event", + "Failed to find Balances::Transfer event", &details, )?; let event2 = find_event_or_nothing::(&details); @@ -111,7 +111,7 @@ impl Balances { .await?; let event = find_event_or_return_error::( - "Failed to find Transfer event", + "Failed to find Balances::Transfer event", &details, )?; let event2 = find_event_or_nothing::(&details); @@ -150,7 +150,7 @@ impl Balances { .await?; let event = find_event_or_return_error::( - "Failed to find Transfer event", + "Failed to find Balances::Transfer event", &details, )?; diff --git a/avail-rust/src/transactions/da.rs b/avail-rust/src/transactions/da.rs index b71e33d24..87bd6c016 100644 --- a/avail-rust/src/transactions/da.rs +++ b/avail-rust/src/transactions/da.rs @@ -11,7 +11,7 @@ use avail::sudo::events as SudoEvents; use subxt::backend::rpc::RpcClient; use subxt_signer::sr25519::Keypair; -use super::{find_event_or_return_error, TransactionFailed}; +use super::{find_data_or_return_error, find_event_or_return_error, TransactionFailed}; use super::{options::Options, progress_and_parse_transaction, TransactionDetails}; #[derive(Debug)] @@ -78,21 +78,16 @@ impl DataAvailability { .await?; let event = find_event_or_return_error::( - "Failed to find DataSubmitted event", + "Failed to find DataAvailability::DataSubmitted event", &details, )?; - let block = details.fetch_block(&self.online_client).await; - let block = block.map_err(|e| TransactionFailed { - reason: e.into(), - details: Some(details.clone()), - })?; - - let data = block - .transaction_by_index_static::(details.tx_index); - let data = data - .ok_or(String::from("Failed to find transaction data"))? - .value; + let data = find_data_or_return_error::( + &self.online_client, + "Failed to find DataAvailability::SubmitData data", + &details, + ) + .await?; Ok(SubmitDataTx { event, @@ -120,7 +115,7 @@ impl DataAvailability { .await?; let event = find_event_or_return_error::( - "Failed to find ApplicationKeyCreated event", + "Failed to find DataAvailability::ApplicationKeyCreated event", &details, )?; @@ -153,7 +148,7 @@ impl DataAvailability { .await?; let sudo_event = find_event_or_return_error::( - "Failed to find Sudid event", + "Failed to find Sudo::Sudid event", &details, )?; @@ -165,7 +160,7 @@ impl DataAvailability { } let event = find_event_or_return_error::( - "Failed to find ApplicationKeySet event", + "Failed to find DataAvailability::ApplicationKeySet event", &details, )?; @@ -198,7 +193,7 @@ impl DataAvailability { .await?; let sudo_event = find_event_or_return_error::( - "Failed to find Sudid event", + "Failed to find Sudo::Sudid event", &details, )?; @@ -211,7 +206,7 @@ impl DataAvailability { let event = find_event_or_return_error::( - "Failed to find BlockLengthProposalSubmitted event", + "Failed to find DataAvailability::BlockLengthProposalSubmitted event", &details, )?; @@ -242,7 +237,7 @@ impl DataAvailability { .await?; let sudo_event = find_event_or_return_error::( - "Failed to find Sudid event", + "Failed to find Sudo::Sudid event", &details, )?; @@ -254,7 +249,7 @@ impl DataAvailability { } let event = find_event_or_return_error::( - "Failed to find SubmitDataFeeModifierSet event", + "Failed to find DataAvailability::SubmitDataFeeModifierSet event", &details, )?; diff --git a/avail-rust/src/transactions/mod.rs b/avail-rust/src/transactions/mod.rs index 2b81d7c3c..6baeb8ffb 100644 --- a/avail-rust/src/transactions/mod.rs +++ b/avail-rust/src/transactions/mod.rs @@ -8,13 +8,13 @@ pub mod staking; use crate::{ error::ClientError, utils::{self, *}, - AOnlineClient, ATxInBlock, AvailConfig, H256, + AExtrinsicEvents, AOnlineClient, ATxInBlock, AvailConfig, H256, }; pub use options::{Mortality, Nonce, Options}; use std::sync::Arc; -use subxt::{backend::rpc::RpcClient, blocks::ExtrinsicEvents, events::StaticEvent}; +use subxt::{backend::rpc::RpcClient, blocks::StaticExtrinsic, events::StaticEvent}; pub type Params = <::ExtrinsicParams as subxt::config::ExtrinsicParams< @@ -48,7 +48,7 @@ impl Transactions { #[derive(Debug, Clone)] pub struct TransactionDetails { pub tx_in_block: Arc, - pub events: Arc>, + pub events: Arc, pub tx_hash: H256, pub tx_index: u32, pub block_hash: H256, @@ -58,7 +58,7 @@ pub struct TransactionDetails { impl TransactionDetails { pub fn new( tx_in_block: ATxInBlock, - events: ExtrinsicEvents, + events: AExtrinsicEvents, tx_hash: H256, tx_index: u32, block_hash: H256, @@ -158,6 +158,31 @@ impl From<(ClientError, TransactionDetails)> for TransactionFailed { } } +async fn find_data_or_return_error( + client: &AOnlineClient, + error: &str, + details: &TransactionDetails, +) -> Result { + let block = details.fetch_block(client).await; + let block = block.map_err(|e| TransactionFailed { + reason: e.into(), + details: Some(details.clone()), + })?; + + let data = block.transaction_by_index_static::(details.tx_index); + let data = match data { + Some(d) => d.value, + None => { + return Err(TransactionFailed { + reason: error.into(), + details: Some(details.clone()), + }) + }, + }; + + Ok(data) +} + fn find_event_or_return_error( error: &str, details: &TransactionDetails, diff --git a/avail-rust/src/transactions/nom_pools.rs b/avail-rust/src/transactions/nom_pools.rs index 744fcc904..6827633a7 100644 --- a/avail-rust/src/transactions/nom_pools.rs +++ b/avail-rust/src/transactions/nom_pools.rs @@ -14,7 +14,9 @@ use std::str::FromStr; use subxt::backend::rpc::RpcClient; use subxt_signer::sr25519::Keypair; -use super::TransactionFailed; +use super::{ + find_data_or_return_error, find_event_or_nothing, find_event_or_return_error, TransactionFailed, +}; use super::{options::Options, progress_and_parse_transaction, TransactionDetails}; #[derive(Debug)] @@ -151,13 +153,12 @@ impl NominationPools { ) .await?; - let block = details.fetch_block(&self.online_client).await; - let block = block.map_err(|e| e.to_string())?; - let data = - block.transaction_by_index_static::(details.tx_index); - let data = data - .ok_or(String::from("Failed to find transaction data"))? - .value; + let data = find_data_or_return_error::( + &self.online_client, + "Failed to find NominationPools::Nominate data", + &details, + ) + .await?; Ok(NominateTx { data, details }) } @@ -181,10 +182,10 @@ impl NominationPools { ) .await?; - let event = details.events.find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find Bonded event")); - }; + let event = find_event_or_return_error::( + "Failed to find NominationPools::Bonded event", + &details, + )?; Ok(JoinTx { event, details }) } @@ -221,17 +222,15 @@ impl NominationPools { ) .await?; - let event = details - .events - .find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find Created event")); - }; + let event = find_event_or_return_error::( + "Failed to find NominationPools::Created event", + &details, + )?; - let event2 = details.events.find_first::(); - let Some(event2) = event2.ok().flatten() else { - return Err(String::from("Failed to find Bonded event")); - }; + let event2 = find_event_or_return_error::( + "Failed to find NominationPools::Bonded event", + &details, + )?; Ok(CreateWithPoolIdTx { event, @@ -270,17 +269,15 @@ impl NominationPools { ) .await?; - let event = details - .events - .find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find Created event")); - }; + let event = find_event_or_return_error::( + "Failed to find NominationPools::Created event", + &details, + )?; - let event2 = details.events.find_first::(); - let Some(event2) = event2.ok().flatten() else { - return Err(String::from("Failed to find Bonded event")); - }; + let event2 = find_event_or_return_error::( + "Failed to find NominationPools::Bonded event", + &details, + )?; Ok(CreateTx { event, @@ -307,10 +304,10 @@ impl NominationPools { ) .await?; - let event = details.events.find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find Bonded event")); - }; + let event = find_event_or_return_error::( + "Failed to find NominationPools::Bonded event", + &details, + )?; Ok(BondExtraTx { event, details }) } @@ -344,12 +341,10 @@ impl NominationPools { ) .await?; - let event = details - .events - .find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find PoolCommissionUpdated event")); - }; + let event = find_event_or_return_error::( + "Failed to find NominationPools::PoolCommissionUpdated event", + &details, + )?; Ok(SetCommissionTx { event, details }) } @@ -373,10 +368,7 @@ impl NominationPools { ) .await?; - let event = details - .events - .find_first::(); - let event = event.ok().flatten(); + let event = find_event_or_nothing::(&details); Ok(SetStateTx { event, details }) } @@ -398,10 +390,7 @@ impl NominationPools { ) .await?; - let event = details - .events - .find_first::(); - let event = event.ok().flatten(); + let event = find_event_or_nothing::(&details); Ok(ClaimPayoutTx { event, details }) } @@ -467,12 +456,11 @@ impl NominationPools { options, ) .await?; - let event = details - .events - .find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find PoolCommissionClaimed event")); - }; + + let event = find_event_or_return_error::( + "Failed to find NominationPools::PoolCommissionClaimed event", + &details, + )?; Ok(ClaimCommissionTx { event, details }) } @@ -498,10 +486,7 @@ impl NominationPools { ) .await?; - let event = details - .events - .find_first::(); - let event = event.ok().flatten(); + let event = find_event_or_nothing::(&details); Ok(ClaimPayoutOtherTx { event, details }) } @@ -527,10 +512,8 @@ impl NominationPools { options, ) .await?; - let event = details - .events - .find_first::(); - let event = event.ok().flatten(); + + let event = find_event_or_nothing::(&details); Ok(UnbondTx { event, details }) } @@ -581,10 +564,7 @@ impl NominationPools { ) .await?; - let event = details - .events - .find_first::(); - let event = event.ok().flatten(); + let event = find_event_or_nothing::(&details); Ok(WithdrawUnbondedTx { event, details }) } diff --git a/avail-rust/src/transactions/session.rs b/avail-rust/src/transactions/session.rs index dc1e7e2e1..1ef4a46cb 100644 --- a/avail-rust/src/transactions/session.rs +++ b/avail-rust/src/transactions/session.rs @@ -5,6 +5,7 @@ use crate::{avail, AOnlineClient}; use subxt::backend::rpc::RpcClient; use subxt_signer::sr25519::Keypair; +use super::{find_data_or_return_error, TransactionFailed}; use super::{options::Options, progress_and_parse_transaction, TransactionDetails}; use avail::session::calls::types as SessionCalls; @@ -35,7 +36,7 @@ impl Session { wait_for: WaitFor, account: &Keypair, options: Option, - ) -> Result { + ) -> Result { let call = avail::tx().session().set_keys(keys, vec![]); let details = progress_and_parse_transaction( &self.online_client, @@ -47,12 +48,12 @@ impl Session { ) .await?; - let block = details.fetch_block(&self.online_client).await; - let block = block.map_err(|e| e.to_string())?; - let data = block.transaction_by_index_static::(details.tx_index); - let data = data - .ok_or(String::from("Failed to find transaction data"))? - .value; + let data = find_data_or_return_error::( + &self.online_client, + "Failed to find Session::SetKeys data", + &details, + ) + .await?; Ok(SetKeysTxSuccess { data, details }) } diff --git a/avail-rust/src/transactions/staking.rs b/avail-rust/src/transactions/staking.rs index 02deb6ebd..bba6efa76 100644 --- a/avail-rust/src/transactions/staking.rs +++ b/avail-rust/src/transactions/staking.rs @@ -11,6 +11,9 @@ use subxt_signer::sr25519::Keypair; use avail::staking::calls::types as StakingCalls; use avail::staking::events as StakingEvents; +use super::{ + find_data_or_return_error, find_event_or_nothing, find_event_or_return_error, TransactionFailed, +}; use super::{options::Options, progress_and_parse_transaction, TransactionDetails}; #[derive(Debug)] @@ -76,7 +79,7 @@ impl Staking { wait_for: WaitFor, account: &Keypair, options: Option, - ) -> Result { + ) -> Result { let call = avail::tx().staking().bond(value, payee); let details = progress_and_parse_transaction( &self.online_client, @@ -88,11 +91,10 @@ impl Staking { ) .await?; - let event = details.events.find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find Bonded event")); - }; - + let event = find_event_or_return_error::( + "Failed to find Staking::Bonded event", + &details, + )?; Ok(BondTx { event, details }) } @@ -102,7 +104,7 @@ impl Staking { wait_for: WaitFor, account: &Keypair, options: Option, - ) -> Result { + ) -> Result { let call = avail::tx().staking().bond_extra(max_additional); let details = progress_and_parse_transaction( &self.online_client, @@ -114,10 +116,10 @@ impl Staking { ) .await?; - let event = details.events.find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find Bonded event")); - }; + let event = find_event_or_return_error::( + "Failed to find Staking::Bonded event", + &details, + )?; Ok(BondExtraTx { event, details }) } @@ -127,7 +129,7 @@ impl Staking { wait_for: WaitFor, account: &Keypair, options: Option, - ) -> Result { + ) -> Result { let call = avail::tx().staking().chill(); let details = progress_and_parse_transaction( &self.online_client, @@ -139,11 +141,7 @@ impl Staking { ) .await?; - let event = details - .events - .find_first::() - .ok() - .flatten(); + let event = find_event_or_nothing::(&details); Ok(ChillTx { event, details }) } @@ -154,10 +152,10 @@ impl Staking { wait_for: WaitFor, account: &Keypair, options: Option, - ) -> Result { + ) -> Result { let stash = match AccountId::from_str(stash) { Ok(stash) => stash, - Err(error) => return Err(std::format!("{:?}", error)), + Err(error) => return Err(TransactionFailed::from(std::format!("{:?}", error))), }; let call = avail::tx().staking().chill_other(stash); @@ -170,10 +168,11 @@ impl Staking { options, ) .await?; - let event = details.events.find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find Chilled event")); - }; + + let event = find_event_or_return_error::( + "Failed to find Staking::Chilled event", + &details, + )?; Ok(ChillOtherTx { event, details }) } @@ -184,7 +183,7 @@ impl Staking { wait_for: WaitFor, account: &Keypair, options: Option, - ) -> Result { + ) -> Result { let targets: Result, _> = targets .iter() .map(|address| AccountId::from_str(address)) @@ -203,12 +202,12 @@ impl Staking { ) .await?; - let block = details.fetch_block(&self.online_client).await; - let block = block.map_err(|e| e.to_string())?; - let data = block.transaction_by_index_static::(details.tx_index); - let data = data - .ok_or(String::from("Failed to find transaction data"))? - .value; + let data = find_data_or_return_error::( + &self.online_client, + "Failed to find Nominate data", + &details, + ) + .await?; Ok(NominateTx { data, details }) } @@ -219,7 +218,7 @@ impl Staking { wait_for: WaitFor, account: &Keypair, options: Option, - ) -> Result { + ) -> Result { let call = avail::tx().staking().unbond(value); let details = progress_and_parse_transaction( &self.online_client, @@ -231,10 +230,10 @@ impl Staking { ) .await?; - let event = details.events.find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find Unbonded event")); - }; + let event = find_event_or_return_error::( + "Failed to find Staking::Unbonded event", + &details, + )?; Ok(UnbondTx { event, details }) } @@ -246,9 +245,11 @@ impl Staking { wait_for: WaitFor, account: &Keypair, options: Option, - ) -> Result { + ) -> Result { if commission > 100 { - return Err(String::from("Commission cannot be more than 100")); + return Err(TransactionFailed::from( + "Commission cannot be more than 100", + )); } let commission = Perbill(commission as u32); @@ -268,12 +269,10 @@ impl Staking { ) .await?; - let event = details - .events - .find_first::(); - let Some(event) = event.ok().flatten() else { - return Err(String::from("Failed to find ValidatorPrefsSet event")); - }; + let event = find_event_or_return_error::( + "Failed to find Staking::ValidatorPrefsSet event", + &details, + )?; Ok(ValidateTx { event, details }) }