Skip to content
Snippets Groups Projects
oneshot.rs 2.55 KiB
Newer Older
Hugo Trentesaux's avatar
Hugo Trentesaux committed
use crate::*;

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(
Hugo Trentesaux's avatar
Hugo Trentesaux committed
			&runtime::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()
Hugo Trentesaux's avatar
Hugo Trentesaux committed
		.fetch(&runtime::storage().system().number(), None)
		.await?
		.unwrap();
	client
		.tx()
		.sign_and_submit_then_watch(
Hugo Trentesaux's avatar
Hugo Trentesaux committed
			&runtime::tx().oneshot_account().consume_oneshot_account(
				number,
				if dest_oneshot {
Hugo Trentesaux's avatar
Hugo Trentesaux committed
					runtime::runtime_types::pallet_oneshot_account::types::Account::Oneshot(
						dest.into(),
					)
				} else {
Hugo Trentesaux's avatar
Hugo Trentesaux committed
					runtime::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()
Hugo Trentesaux's avatar
Hugo Trentesaux committed
		.fetch(&runtime::storage().system().number(), None)
		.await?
		.unwrap();
	client
		.tx()
		.sign_and_submit_then_watch(
Hugo Trentesaux's avatar
Hugo Trentesaux committed
			&runtime::tx()
				.oneshot_account()
				.consume_oneshot_account_with_remaining(
					number,
					if dest_oneshot {
Hugo Trentesaux's avatar
Hugo Trentesaux committed
						runtime::runtime_types::pallet_oneshot_account::types::Account::Oneshot(
							dest.into(),
						)
					} else {
Hugo Trentesaux's avatar
Hugo Trentesaux committed
						runtime::runtime_types::pallet_oneshot_account::types::Account::Normal(
							dest.into(),
						)
					},
					if remaining_to_oneshot {
Hugo Trentesaux's avatar
Hugo Trentesaux committed
						runtime::runtime_types::pallet_oneshot_account::types::Account::Oneshot(
							remaining_to.into(),
						)
					} else {
Hugo Trentesaux's avatar
Hugo Trentesaux committed
						runtime::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(
Hugo Trentesaux's avatar
Hugo Trentesaux committed
				&runtime::storage()
					.oneshot_account()
					.oneshot_accounts(&account),
				None
			)
			.await?
			.unwrap_or(0)
	);
	Ok(())