Skip to main content

sbpf_debugger/
execution_cost.rs

1/// Compute unit costs for syscalls and operations
2/// Reference: https://github.com/anza-xyz/agave/blob/master/program-runtime/src/execution_budget.rs
3#[derive(Debug, Clone)]
4pub struct ExecutionCost {
5    pub syscall_base_cost: u64,
6    pub log_64_units: u64,
7    pub log_pubkey_units: u64,
8    pub create_program_address_units: u64,
9    pub invoke_units: u64,
10    pub max_cpi_instruction_size: u64,
11    pub cpi_bytes_per_unit: u64,
12    pub max_instruction_stack_depth: usize,
13    pub max_instruction_trace_length: usize,
14    pub sha256_base_cost: u64,
15    pub sha256_byte_cost: u64,
16    pub sha256_max_slices: u64,
17    pub sysvar_base_cost: u64,
18    pub secp256k1_recover_cost: u64,
19    pub curve25519_edwards_validate_point_cost: u64,
20    pub curve25519_edwards_add_cost: u64,
21    pub curve25519_edwards_subtract_cost: u64,
22    pub curve25519_edwards_multiply_cost: u64,
23    pub curve25519_edwards_msm_base_cost: u64,
24    pub curve25519_edwards_msm_incremental_cost: u64,
25    pub curve25519_ristretto_validate_point_cost: u64,
26    pub curve25519_ristretto_add_cost: u64,
27    pub curve25519_ristretto_subtract_cost: u64,
28    pub curve25519_ristretto_multiply_cost: u64,
29    pub curve25519_ristretto_msm_base_cost: u64,
30    pub curve25519_ristretto_msm_incremental_cost: u64,
31    pub heap_size: u64,
32    pub heap_cost: u64,
33    pub mem_op_base_cost: u64,
34    pub alt_bn128_addition_cost: u64,
35    pub alt_bn128_multiplication_cost: u64,
36    pub alt_bn128_pairing_one_pair_cost_first: u64,
37    pub alt_bn128_pairing_one_pair_cost_other: u64,
38    pub alt_bn128_g1_compress: u64,
39    pub alt_bn128_g1_decompress: u64,
40    pub alt_bn128_g2_compress: u64,
41    pub alt_bn128_g2_decompress: u64,
42    pub big_modular_exponentiation_cost: u64,
43    pub poseidon_cost_coefficient_a: u64,
44    pub poseidon_cost_coefficient_c: u64,
45    pub get_remaining_compute_units_cost: u64,
46}
47
48impl Default for ExecutionCost {
49    fn default() -> Self {
50        Self {
51            syscall_base_cost: 100,
52            log_64_units: 100,
53            log_pubkey_units: 100,
54            create_program_address_units: 1500,
55            invoke_units: 1000,
56            max_cpi_instruction_size: 46 * 1024,
57            cpi_bytes_per_unit: 250,
58            max_instruction_stack_depth: 5,
59            max_instruction_trace_length: 64,
60            sha256_base_cost: 85,
61            sha256_byte_cost: 1,
62            sha256_max_slices: 20_000,
63            sysvar_base_cost: 100,
64            secp256k1_recover_cost: 25_000,
65            curve25519_edwards_validate_point_cost: 159,
66            curve25519_edwards_add_cost: 473,
67            curve25519_edwards_subtract_cost: 475,
68            curve25519_edwards_multiply_cost: 2_177,
69            curve25519_edwards_msm_base_cost: 2_273,
70            curve25519_edwards_msm_incremental_cost: 758,
71            curve25519_ristretto_validate_point_cost: 169,
72            curve25519_ristretto_add_cost: 521,
73            curve25519_ristretto_subtract_cost: 519,
74            curve25519_ristretto_multiply_cost: 2_208,
75            curve25519_ristretto_msm_base_cost: 2_303,
76            curve25519_ristretto_msm_incremental_cost: 788,
77            heap_size: 32 * 1024,
78            heap_cost: 8,
79            mem_op_base_cost: 10,
80            alt_bn128_addition_cost: 334,
81            alt_bn128_multiplication_cost: 3_840,
82            alt_bn128_pairing_one_pair_cost_first: 36_364,
83            alt_bn128_pairing_one_pair_cost_other: 12_121,
84            alt_bn128_g1_compress: 30,
85            alt_bn128_g1_decompress: 398,
86            alt_bn128_g2_compress: 86,
87            alt_bn128_g2_decompress: 13_610,
88            big_modular_exponentiation_cost: 33,
89            poseidon_cost_coefficient_a: 61,
90            poseidon_cost_coefficient_c: 542,
91            get_remaining_compute_units_cost: 100,
92        }
93    }
94}