From 37b6de9c0cda77a5e371dd7bf1d0002646c5cd17 Mon Sep 17 00:00:00 2001 From: Luke Parker Date: Sat, 26 Aug 2023 21:37:54 -0400 Subject: [PATCH] Add SRI balanace/transfer functions to serai_client --- substrate/client/src/serai/mod.rs | 26 +++++++++++++++++++++++++- substrate/node/src/chain_spec.rs | 2 +- substrate/runtime/src/lib.rs | 1 + 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/substrate/client/src/serai/mod.rs b/substrate/client/src/serai/mod.rs index c2cf2c92..10ea17ae 100644 --- a/substrate/client/src/serai/mod.rs +++ b/substrate/client/src/serai/mod.rs @@ -24,7 +24,7 @@ use subxt::{ }; pub use serai_runtime::primitives; -pub use primitives::{Signature, SeraiAddress}; +pub use primitives::{SeraiAddress, Signature, Amount}; pub use serai_runtime as runtime; use serai_runtime::{ @@ -306,6 +306,30 @@ impl Serai { // If we are to return something, it should be block included in and position within block self.0.rpc().submit_extrinsic(tx).await.map(|_| ()).map_err(SeraiError::RpcError) } + + pub async fn get_sri_balance( + &self, + block: [u8; 32], + address: SeraiAddress, + ) -> Result { + let data: Option< + serai_runtime::system::AccountInfo>, + > = self.storage("System", "Account", Some(vec![scale_value(address)]), block).await?; + Ok(data.map(|data| data.data.free).unwrap_or(0)) + } + + pub fn transfer_sri(to: SeraiAddress, amount: Amount) -> Payload> { + Payload::new( + "Balances", + // TODO: Use transfer_allow_death? + // TODO: Replace the Balances pallet with something much simpler + "transfer", + scale_composite(serai_runtime::balances::Call::::transfer { + dest: to, + value: amount.0, + }), + ) + } } #[derive(Clone)] diff --git a/substrate/node/src/chain_spec.rs b/substrate/node/src/chain_spec.rs index 3fbdee67..41a73df5 100644 --- a/substrate/node/src/chain_spec.rs +++ b/substrate/node/src/chain_spec.rs @@ -34,7 +34,7 @@ fn testnet_genesis( system: SystemConfig { code: wasm_binary.to_vec(), _config: PhantomData }, balances: BalancesConfig { - balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(), + balances: endowed_accounts.into_iter().map(|k| (k, 1 << 60)).collect(), }, transaction_payment: Default::default(), diff --git a/substrate/runtime/src/lib.rs b/substrate/runtime/src/lib.rs index a57b2906..fe206018 100644 --- a/substrate/runtime/src/lib.rs +++ b/substrate/runtime/src/lib.rs @@ -232,6 +232,7 @@ impl balances::Config for Runtime { type DustRemoval = (); type ExistentialDeposit = ConstU64<1>; + // TODO: What's the benefit to this? type AccountStore = System; type WeightInfo = balances::weights::SubstrateWeight; }