iota_rpc_loadgen/payload/
multi_get_transaction_blocks.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use 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}