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