From f542c28e89d4e9b88fae6406974561ce0d7f6c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogdan-=C8=98tefan=20Neac=C8=99u?= Date: Fri, 3 Dec 2021 19:04:56 +0100 Subject: [PATCH] Batching for sends --- .../nymd/cosmwasm_client/signing_client.rs | 27 +++++++++++++++++++ .../validator-client/src/nymd/mod.rs | 15 +++++++++++ 2 files changed, 42 insertions(+) diff --git a/common/client-libs/validator-client/src/nymd/cosmwasm_client/signing_client.rs b/common/client-libs/validator-client/src/nymd/cosmwasm_client/signing_client.rs index ab650b36c0..acc7a33765 100644 --- a/common/client-libs/validator-client/src/nymd/cosmwasm_client/signing_client.rs +++ b/common/client-libs/validator-client/src/nymd/cosmwasm_client/signing_client.rs @@ -319,6 +319,33 @@ pub trait SigningCosmWasmClient: CosmWasmClient { .await } + async fn send_tokens_multiple( + &self, + sender_address: &AccountId, + msgs: I, + fee: Fee, + memo: impl Into + Send + 'static, + ) -> Result + where + I: IntoIterator)> + Send, + { + let messages = msgs + .into_iter() + .map(|(to_address, amount)| { + MsgSend { + from_address: sender_address.clone(), + to_address, + amount, + } + .to_any() + .map_err(|_| NymdError::SerializationError("MsgExecuteContract".to_owned())) + }) + .collect::>()?; + + self.sign_and_broadcast_commit(sender_address, messages, fee, memo) + .await + } + async fn delegate_tokens( &self, delegator_address: &AccountId, diff --git a/common/client-libs/validator-client/src/nymd/mod.rs b/common/client-libs/validator-client/src/nymd/mod.rs index 27264bd448..50cb73677b 100644 --- a/common/client-libs/validator-client/src/nymd/mod.rs +++ b/common/client-libs/validator-client/src/nymd/mod.rs @@ -486,6 +486,21 @@ impl NymdClient { .await } + /// Send funds from one address to multiple others + pub async fn send_multiple( + &self, + msgs: Vec<(AccountId, Vec)>, + memo: impl Into + Send + 'static, + ) -> Result + where + C: SigningCosmWasmClient + Sync, + { + let fee = self.get_fee_multiple(Operation::Send, msgs.len() as u64); + self.client + .send_tokens_multiple(self.address(), msgs, fee, memo) + .await + } + pub async fn execute( &self, contract_address: &AccountId,