1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Copyright (c) 2022 MASSA LABS <info@massa.net>

//! This module provides the structures used to provide configuration parameters to the Execution system

use massa_models::amount::Amount;
use massa_sc_runtime::{CondomLimits, GasCosts};
use massa_time::MassaTime;
use num::rational::Ratio;
use std::path::PathBuf;

/// Storage cost constants
#[derive(Debug, Clone, Copy)]
pub struct StorageCostsConstants {
    /// Cost per byte in ledger
    pub ledger_cost_per_byte: Amount,
    /// Ledger entry base cost
    pub ledger_entry_base_cost: Amount,
    /// Ledger entry datastore base cost
    pub ledger_entry_datastore_base_cost: Amount,
}

/// Execution module configuration
#[derive(Debug, Clone)]
pub struct ExecutionConfig {
    /// read-only execution request queue length
    pub readonly_queue_length: usize,
    /// maximum number of SC output events kept in cache
    pub max_final_events: usize,
    /// maximum available gas for asynchronous messages execution
    pub max_async_gas: u64,
    /// constant cost for async messages
    pub async_msg_cst_gas_cost: u64,
    /// maximum gas per block
    pub max_gas_per_block: u64,
    /// number of threads
    pub thread_count: u8,
    /// price of a roll inside the network
    pub roll_price: Amount,
    /// extra lag to add on the execution cursor to improve performance
    pub cursor_delay: MassaTime,
    /// genesis timestamp
    pub genesis_timestamp: MassaTime,
    /// period duration
    pub t0: MassaTime,
    /// block creation reward
    pub block_reward: Amount,
    /// operation validity period
    pub operation_validity_period: u64,
    /// endorsement count
    pub endorsement_count: u64,
    /// periods per cycle
    pub periods_per_cycle: u64,
    /// duration of the statistics time window
    pub stats_time_window_duration: MassaTime,
    /// Max miss ratio for auto roll sell
    pub max_miss_ratio: Ratio<u64>,
    /// Max function length in call sc
    pub max_function_length: u16,
    /// Max parameter length in call sc
    pub max_parameter_length: u32,
    /// Max size of a datastore key
    pub max_datastore_key_length: u8,
    /// Max bytecode size
    pub max_bytecode_size: u64,
    /// Max datastore value size
    pub max_datastore_value_size: u64,
    /// Storage cost constants
    pub storage_costs_constants: StorageCostsConstants,
    /// Max gas for read only executions
    pub max_read_only_gas: u64,
    /// Gas costs
    pub gas_costs: GasCosts,
    /// Gas used by a transaction, a roll buy or a roll sell)
    pub base_operation_gas_cost: u64,
    /// last start period, used to attach to the correct execution slot if the network has restarted
    pub last_start_period: u64,
    /// Path to the hard drive cache storage
    pub hd_cache_path: PathBuf,
    /// Maximum number of entries we want to keep in the LRU cache
    pub lru_cache_size: u32,
    /// Maximum number of entries we want to keep in the HD cache
    pub hd_cache_size: usize,
    /// Amount of entries removed when `hd_cache_size` is reached
    pub snip_amount: usize,
    /// Number of roll to remove per denunciation
    pub roll_count_to_slash_on_denunciation: u64,
    /// Denunciation expire delta
    pub denunciation_expire_periods: u64,
    /// whether slot execution outputs broadcast is enabled
    pub broadcast_enabled: bool,
    /// slot execution outputs channel capacity
    pub broadcast_slot_execution_output_channel_capacity: usize,
    /// max size of event data, in bytes
    pub max_event_size_v0: usize,
    /// max size of event data, in bytes
    pub max_event_size_v1: usize,
    /// chain id
    pub chain_id: u64,
    /// whether slot execution traces broadcast is enabled
    pub broadcast_traces_enabled: bool,
    /// slot execution traces channel capacity
    pub broadcast_slot_execution_traces_channel_capacity: usize,
    /// Max execution traces slot to keep in trace history cache
    pub max_execution_traces_slot_limit: usize,
    /// Where to dump blocks
    pub block_dump_folder_path: PathBuf,
    /// Max recursive calls depth in SC
    /// Used to limit the recursion_counter value in the context, to avoid stack overflow issues.
    pub max_recursive_calls_depth: u16,
    /// Runtime condom middleware limits
    pub condom_limits: CondomLimits,
    /// Maximum number of event that an operation can emit
    pub max_event_per_operation: usize,
}