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,