sui_single_node_benchmark/
workload.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::benchmark_context::BenchmarkContext;
5use crate::command::WorkloadKind;
6use crate::tx_generator::{
7    MoveTxGenerator, PackagePublishTxGenerator, SendFundsTxGenerator, TxGenerator,
8};
9use std::path::PathBuf;
10use std::sync::Arc;
11use sui_test_transaction_builder::PublishData;
12
13#[derive(Clone)]
14pub struct Workload {
15    pub tx_count: u64,
16    pub workload_kind: WorkloadKind,
17}
18
19impl Workload {
20    pub fn new(tx_count: u64, workload_kind: WorkloadKind) -> Self {
21        Self {
22            tx_count,
23            workload_kind,
24        }
25    }
26
27    pub(crate) fn num_accounts(&self) -> u64 {
28        self.tx_count
29    }
30
31    pub(crate) fn gas_object_num_per_account(&self) -> u64 {
32        self.workload_kind.gas_object_num_per_account()
33    }
34
35    pub(crate) async fn create_tx_generator(
36        &self,
37        ctx: &mut BenchmarkContext,
38    ) -> Arc<dyn TxGenerator> {
39        match &self.workload_kind {
40            WorkloadKind::PTB {
41                num_transfers,
42                use_native_transfer,
43                num_dynamic_fields,
44                computation,
45                num_shared_objects,
46                num_mints,
47                nft_size,
48                use_batch_mint,
49            } => {
50                let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
51                path.extend(["move_package"]);
52                let move_package = ctx.publish_package(PublishData::Source(path, false)).await;
53                let root_objects = ctx
54                    .preparing_dynamic_fields(move_package.0, *num_dynamic_fields)
55                    .await;
56                let shared_objects = ctx
57                    .prepare_shared_objects(move_package.0, *num_shared_objects)
58                    .await;
59                Arc::new(MoveTxGenerator::new(
60                    move_package.0,
61                    *num_transfers,
62                    *use_native_transfer,
63                    *computation,
64                    root_objects,
65                    shared_objects,
66                    *num_mints,
67                    *nft_size,
68                    *use_batch_mint,
69                ))
70            }
71            WorkloadKind::Publish {
72                manifest_file: manifest_path,
73            } => Arc::new(PackagePublishTxGenerator::new(ctx, manifest_path.clone()).await),
74            WorkloadKind::SendFunds {
75                seed_amount,
76                transfer_amount,
77            } => {
78                ctx.seed_address_balances(*seed_amount).await;
79                let chain_identifier = ctx.get_chain_identifier();
80                let epoch = ctx.get_epoch();
81                Arc::new(SendFundsTxGenerator::new(
82                    chain_identifier,
83                    epoch,
84                    *transfer_amount,
85                ))
86            }
87        }
88    }
89}