sui_rpc_loadgen/payload/
multi_get_transaction_blocks.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use anyhow::Result;
5
6use crate::payload::{MultiGetTransactionBlocks, ProcessPayload, RpcCommandProcessor, SignerInfo};
7use async_trait::async_trait;
8use futures::future::join_all;
9
10use super::validation::{check_transactions, chunk_entities};
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}