Skip to main content

sbpf_runtime/
config.rs

1use {
2    solana_clock::Clock, solana_epoch_schedule::EpochSchedule,
3    solana_last_restart_slot::LastRestartSlot, solana_rent::Rent,
4};
5
6#[derive(Debug, Clone)]
7pub struct RuntimeConfig {
8    pub compute_budget: u64,
9    pub max_call_depth: usize,
10    pub heap_size: usize,
11    pub max_cpi_depth: usize,
12}
13
14impl Default for RuntimeConfig {
15    fn default() -> Self {
16        Self {
17            compute_budget: 200_000,
18            max_call_depth: 64,
19            heap_size: 32 * 1024,
20            max_cpi_depth: 4,
21        }
22    }
23}
24
25#[derive(Debug, Clone, Default)]
26pub struct SysvarContext {
27    pub clock: Clock,
28    pub rent: Rent,
29    pub epoch_schedule: EpochSchedule,
30    pub last_restart_slot: LastRestartSlot,
31}
32
33/// Reference: https://github.com/anza-xyz/agave/blob/master/program-runtime/src/execution_budget.rs
34#[derive(Debug, Clone)]
35pub struct ExecutionCost {
36    pub syscall_base_cost: u64,
37    pub log_64_units: u64,
38    pub log_pubkey_units: u64,
39    pub create_program_address_units: u64,
40    pub invoke_units: u64,
41    pub max_cpi_instruction_size: u64,
42    pub cpi_bytes_per_unit: u64,
43    pub max_instruction_stack_depth: usize,
44    pub max_instruction_trace_length: usize,
45    pub sha256_base_cost: u64,
46    pub sha256_byte_cost: u64,
47    pub sha256_max_slices: u64,
48    pub sysvar_base_cost: u64,
49    pub secp256k1_recover_cost: u64,
50    pub curve25519_edwards_validate_point_cost: u64,
51    pub curve25519_edwards_add_cost: u64,
52    pub curve25519_edwards_subtract_cost: u64,
53    pub curve25519_edwards_multiply_cost: u64,
54    pub curve25519_edwards_msm_base_cost: u64,
55    pub curve25519_edwards_msm_incremental_cost: u64,
56    pub curve25519_ristretto_validate_point_cost: u64,
57    pub curve25519_ristretto_add_cost: u64,
58    pub curve25519_ristretto_subtract_cost: u64,
59    pub curve25519_ristretto_multiply_cost: u64,
60    pub curve25519_ristretto_msm_base_cost: u64,
61    pub curve25519_ristretto_msm_incremental_cost: u64,
62    pub heap_size: u64,
63    pub heap_cost: u64,
64    pub mem_op_base_cost: u64,
65    pub alt_bn128_addition_cost: u64,
66    pub alt_bn128_multiplication_cost: u64,
67    pub alt_bn128_pairing_one_pair_cost_first: u64,
68    pub alt_bn128_pairing_one_pair_cost_other: u64,
69    pub alt_bn128_g1_compress: u64,
70    pub alt_bn128_g1_decompress: u64,
71    pub alt_bn128_g2_compress: u64,
72    pub alt_bn128_g2_decompress: u64,
73    pub big_modular_exponentiation_cost: u64,
74    pub poseidon_cost_coefficient_a: u64,
75    pub poseidon_cost_coefficient_c: u64,
76    pub get_remaining_compute_units_cost: u64,
77}
78
79impl Default for ExecutionCost {
80    fn default() -> Self {
81        Self {
82            syscall_base_cost: 100,
83            log_64_units: 100,
84            log_pubkey_units: 100,
85            create_program_address_units: 1500,
86            invoke_units: 946,
87            max_cpi_instruction_size: 46 * 1024,
88            cpi_bytes_per_unit: 250,
89            max_instruction_stack_depth: 9,
90            max_instruction_trace_length: 64,
91            sha256_base_cost: 85,
92            sha256_byte_cost: 1,
93            sha256_max_slices: 20_000,
94            sysvar_base_cost: 100,
95            secp256k1_recover_cost: 25_000,
96            curve25519_edwards_validate_point_cost: 159,
97            curve25519_edwards_add_cost: 473,
98            curve25519_edwards_subtract_cost: 475,
99            curve25519_edwards_multiply_cost: 2_177,
100            curve25519_edwards_msm_base_cost: 2_273,
101            curve25519_edwards_msm_incremental_cost: 758,
102            curve25519_ristretto_validate_point_cost: 169,
103            curve25519_ristretto_add_cost: 521,
104            curve25519_ristretto_subtract_cost: 519,
105            curve25519_ristretto_multiply_cost: 2_208,
106            curve25519_ristretto_msm_base_cost: 2_303,
107            curve25519_ristretto_msm_incremental_cost: 788,
108            heap_size: 32 * 1024,
109            heap_cost: 8,
110            mem_op_base_cost: 10,
111            alt_bn128_addition_cost: 334,
112            alt_bn128_multiplication_cost: 3_840,
113            alt_bn128_pairing_one_pair_cost_first: 36_364,
114            alt_bn128_pairing_one_pair_cost_other: 12_121,
115            alt_bn128_g1_compress: 30,
116            alt_bn128_g1_decompress: 398,
117            alt_bn128_g2_compress: 86,
118            alt_bn128_g2_decompress: 13_610,
119            big_modular_exponentiation_cost: 33,
120            poseidon_cost_coefficient_a: 61,
121            poseidon_cost_coefficient_c: 542,
122            get_remaining_compute_units_cost: 100,
123        }
124    }
125}