use crate::*; use sp_core::{crypto::AccountId32, sr25519::Pair}; use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner}; pub async fn create_oneshot_account( pair: Pair, client: &Client, balance: u64, dest: AccountId32, ) -> Result<TxProgress, subxt::Error> { client .tx() .sign_and_submit_then_watch( &runtime::tx() .oneshot_account() .create_oneshot_account(dest.into(), balance), &PairSigner::new(pair), BaseExtrinsicParamsBuilder::new(), ) .await } pub async fn consume_oneshot_account( pair: Pair, client: &Client, dest: AccountId32, dest_oneshot: bool, ) -> Result<TxProgress, subxt::Error> { let number = client .storage() .fetch(&runtime::storage().system().number(), None) .await? .unwrap(); client .tx() .sign_and_submit_then_watch( &runtime::tx().oneshot_account().consume_oneshot_account( number, if dest_oneshot { runtime::runtime_types::pallet_oneshot_account::types::Account::Oneshot( dest.into(), ) } else { runtime::runtime_types::pallet_oneshot_account::types::Account::Normal( dest.into(), ) }, ), &PairSigner::new(pair), BaseExtrinsicParamsBuilder::new(), ) .await } pub async fn consume_oneshot_account_with_remaining( pair: Pair, client: &Client, balance: u64, dest: AccountId32, dest_oneshot: bool, remaining_to: AccountId32, remaining_to_oneshot: bool, ) -> Result<TxProgress, subxt::Error> { let number = client .storage() .fetch(&runtime::storage().system().number(), None) .await? .unwrap(); client .tx() .sign_and_submit_then_watch( &runtime::tx() .oneshot_account() .consume_oneshot_account_with_remaining( number, if dest_oneshot { runtime::runtime_types::pallet_oneshot_account::types::Account::Oneshot( dest.into(), ) } else { runtime::runtime_types::pallet_oneshot_account::types::Account::Normal( dest.into(), ) }, if remaining_to_oneshot { runtime::runtime_types::pallet_oneshot_account::types::Account::Oneshot( remaining_to.into(), ) } else { runtime::runtime_types::pallet_oneshot_account::types::Account::Normal( remaining_to.into(), ) }, balance, ), &PairSigner::new(pair), BaseExtrinsicParamsBuilder::new(), ) .await } pub async fn oneshot_account_balance(client: &Client, account: AccountId32) -> Result<(), anyhow::Error> { log::info!( "{}", client .storage() .fetch( &runtime::storage() .oneshot_account() .oneshot_accounts(&account), None ) .await? .unwrap_or(0) ); Ok(()) }