sui_single_node_benchmark/
workload.rs1use 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}