use crate::*; use sp_core::{crypto::AccountId32, sr25519::Pair}; use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner}; #[cfg(any(feature = "dev", feature = "gdev"))] // find how to get runtime calls type Call = runtime::runtime_types::gdev_runtime::RuntimeCall; type BalancesCall = runtime::runtime_types::pallet_balances::pallet::Call; pub async fn transfer( pair: Pair, client: &Client, balance: u64, dest: AccountId32, keep_alive: bool, ) -> Result<(), subxt::Error> { let progress = if keep_alive { client .tx() .sign_and_submit_then_watch( &runtime::tx().balances().transfer(dest.into(), balance), &PairSigner::new(pair), BaseExtrinsicParamsBuilder::new(), ) .await? } else { client .tx() .sign_and_submit_then_watch( &runtime::tx() .balances() .transfer_keep_alive(dest.into(), balance), &PairSigner::new(pair), BaseExtrinsicParamsBuilder::new(), ) .await? }; let events = track_progress(progress).await?; if let Some(e) = events.find_first::<runtime::balances::events::Transfer>()? { println!("{e:?}"); } Ok(()) } pub async fn transfer_multiple( pair: Pair, client: &Client, amount: u64, dests: Vec<AccountId32>, ) -> Result<(), subxt::Error> { // build the list of transactions from the destination accounts let transactions: Vec<Call> = dests .into_iter() .map(|dest| { Call::Balances(BalancesCall::transfer_keep_alive { dest: dest.into(), value: amount, }) }) .collect(); // wrap these calls in a batch call let progress = client .tx() .sign_and_submit_then_watch( &runtime::tx().utility().batch(transactions), &PairSigner::new(pair.clone()), BaseExtrinsicParamsBuilder::new(), ) .await?; let events = track_progress(progress).await?; // TODO all transfer if let Some(e) = events.find_first::<runtime::balances::events::Transfer>()? { println!("{e:?}"); } Ok(()) }