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#[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}