Batching for sends

This commit is contained in:
Bogdan-Ștefan Neacșu
2021-12-03 19:04:56 +01:00
parent b809eb6c5f
commit f542c28e89
2 changed files with 42 additions and 0 deletions
@@ -319,6 +319,33 @@ pub trait SigningCosmWasmClient: CosmWasmClient {
.await
}
async fn send_tokens_multiple<I>(
&self,
sender_address: &AccountId,
msgs: I,
fee: Fee,
memo: impl Into<String> + Send + 'static,
) -> Result<broadcast::tx_commit::Response, NymdError>
where
I: IntoIterator<Item = (AccountId, Vec<Coin>)> + 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::<Result<_, _>>()?;
self.sign_and_broadcast_commit(sender_address, messages, fee, memo)
.await
}
async fn delegate_tokens(
&self,
delegator_address: &AccountId,
@@ -486,6 +486,21 @@ impl<C> NymdClient<C> {
.await
}
/// Send funds from one address to multiple others
pub async fn send_multiple(
&self,
msgs: Vec<(AccountId, Vec<CosmosCoin>)>,
memo: impl Into<String> + Send + 'static,
) -> Result<broadcast::tx_commit::Response, NymdError>
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<M>(
&self,
contract_address: &AccountId,