iota_rpc_loadgen/payload/
multi_get_transaction_blocks.rs1use anyhow::Result;
6use async_trait::async_trait;
7use futures::future::join_all;
8
9use super::validation::{check_transactions, chunk_entities};
10use crate::payload::{MultiGetTransactionBlocks, ProcessPayload, RpcCommandProcessor, SignerInfo};
11
12#[async_trait]
13impl<'a> ProcessPayload<'a, &'a MultiGetTransactionBlocks> for RpcCommandProcessor {
14 async fn process(
15 &'a self,
16 op: &'a MultiGetTransactionBlocks,
17 _signer_info: &Option<SignerInfo>,
18 ) -> Result<()> {
19 let clients = self.get_clients().await?;
20 let digests = &op.digests;
21
22 if op.digests.is_empty() {
23 panic!("No digests provided, skipping query");
24 }
25
26 let chunks = chunk_entities(digests, None);
27 let chunk_futures = chunks.into_iter().map(|chunk| {
28 let clients = clients.clone();
29 async move {
30 check_transactions(&clients, &chunk, false, false).await;
31 }
32 });
33 join_all(chunk_futures).await;
34
35 Ok(())
36 }
37}