Skip to content

Commit c64eafb

Browse files
feat(apollo_starknet_os_program): add OS constants template file
1 parent beff0f1 commit c64eafb

File tree

3 files changed

+145
-0
lines changed

3 files changed

+145
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
// Autogenerated file.
2+
3+
// An entry point offset that indicates that nothing needs to be done.
4+
// Used to implement an empty constructor.
5+
const NOP_ENTRY_POINT_OFFSET = {NOP_ENTRY_POINT_OFFSET};
6+
7+
const ENTRY_POINT_TYPE_EXTERNAL = {ENTRY_POINT_TYPE_EXTERNAL};
8+
const ENTRY_POINT_TYPE_L1_HANDLER = {ENTRY_POINT_TYPE_L1_HANDLER};
9+
const ENTRY_POINT_TYPE_CONSTRUCTOR = {ENTRY_POINT_TYPE_CONSTRUCTOR};
10+
11+
const L1_HANDLER_VERSION = {L1_HANDLER_VERSION};
12+
const L1_HANDLER_L2_GAS_MAX_AMOUNT = {L1_HANDLER_L2_GAS_MAX_AMOUNT};
13+
14+
const SIERRA_ARRAY_LEN_BOUND = {SIERRA_ARRAY_LEN_BOUND}; // 2^32
15+
16+
// get_selector_from_name('constructor').
17+
const CONSTRUCTOR_ENTRY_POINT_SELECTOR = ({CONSTRUCTOR_ENTRY_POINT_SELECTOR});
18+
19+
// get_selector_from_name('__execute__').
20+
const EXECUTE_ENTRY_POINT_SELECTOR = ({EXECUTE_ENTRY_POINT_SELECTOR});
21+
22+
// get_selector_from_name('__validate__').
23+
const VALIDATE_ENTRY_POINT_SELECTOR = ({VALIDATE_ENTRY_POINT_SELECTOR});
24+
25+
// get_selector_from_name('__validate_declare__').
26+
const VALIDATE_DECLARE_ENTRY_POINT_SELECTOR = ({VALIDATE_DECLARE_ENTRY_POINT_SELECTOR});
27+
28+
// get_selector_from_name('__validate_deploy__').
29+
const VALIDATE_DEPLOY_ENTRY_POINT_SELECTOR = ({VALIDATE_DEPLOY_ENTRY_POINT_SELECTOR});
30+
31+
// get_selector_from_name('transfer').
32+
const TRANSFER_ENTRY_POINT_SELECTOR = ({TRANSFER_ENTRY_POINT_SELECTOR});
33+
34+
const DEFAULT_ENTRY_POINT_SELECTOR = {DEFAULT_ENTRY_POINT_SELECTOR};
35+
36+
// OS reserved contract addresses.
37+
38+
// This contract stores the block number -> block hash mapping.
39+
const BLOCK_HASH_CONTRACT_ADDRESS = {BLOCK_HASH_CONTRACT_ADDRESS};
40+
// This contract stores the aliases mapping used for stateful compression.
41+
const ALIAS_CONTRACT_ADDRESS = {ALIAS_CONTRACT_ADDRESS};
42+
// Future reserved contract address.
43+
const RESERVED_CONTRACT_ADDRESS = {RESERVED_CONTRACT_ADDRESS};
44+
// The block number -> block hash mapping is written for the current block number minus this number.
45+
const STORED_BLOCK_HASH_BUFFER = {STORED_BLOCK_HASH_BUFFER};
46+
47+
// Gas constants.
48+
const STEP_GAS_COST = {STEP_GAS_COST};
49+
const RANGE_CHECK_GAS_COST = {RANGE_CHECK_GAS_COST};
50+
const RANGE_CHECK96_GAS_COST = {RANGE_CHECK96_GAS_COST};
51+
const KECCAK_BUILTIN_GAS_COST = {KECCAK_BUILTIN_GAS_COST};
52+
const PEDERSEN_GAS_COST = {PEDERSEN_GAS_COST};
53+
const BITWISE_BUILTIN_GAS_COST = {BITWISE_BUILTIN_GAS_COST};
54+
const ECOP_GAS_COST = {ECOP_GAS_COST};
55+
const POSEIDON_GAS_COST = {POSEIDON_GAS_COST};
56+
const ADD_MOD_GAS_COST = {ADD_MOD_GAS_COST};
57+
const MUL_MOD_GAS_COST = {MUL_MOD_GAS_COST};
58+
const ECDSA_GAS_COST = {ECDSA_GAS_COST};
59+
const MEMORY_HOLE_GAS_COST = {MEMORY_HOLE_GAS_COST};
60+
61+
const DEFAULT_INITIAL_GAS_COST = {DEFAULT_INITIAL_GAS_COST};
62+
const VALIDATE_MAX_SIERRA_GAS = {VALIDATE_MAX_SIERRA_GAS};
63+
const EXECUTE_MAX_SIERRA_GAS = {EXECUTE_MAX_SIERRA_GAS};
64+
const DEFAULT_INITIAL_GAS_COST_NO_L2 = VALIDATE_MAX_SIERRA_GAS + EXECUTE_MAX_SIERRA_GAS;
65+
66+
// Compiler gas costs.
67+
68+
// The initial budget at an entry point. This needs to be high enough to cover the initial get_gas.
69+
// The entry point may refund whatever remains from the initial budget.
70+
const ENTRY_POINT_INITIAL_BUDGET = {ENTRY_POINT_INITIAL_BUDGET};
71+
// The gas cost of each syscall libfunc (this value is hard-coded by the compiler).
72+
// This needs to be high enough to cover OS costs in the case of failure due to out of gas.
73+
const SYSCALL_BASE_GAS_COST = {SYSCALL_BASE_GAS_COST};
74+
75+
// Syscall gas costs.
76+
const CALL_CONTRACT_GAS_COST = {CALL_CONTRACT_GAS_COST};
77+
const DEPLOY_GAS_COST = {DEPLOY_GAS_COST};
78+
const DEPLOY_CALLDATA_FACTOR_GAS_COST = {DEPLOY_CALLDATA_FACTOR_GAS_COST};
79+
const GET_BLOCK_HASH_GAS_COST = {GET_BLOCK_HASH_GAS_COST};
80+
const GET_CLASS_HASH_AT_GAS_COST = {GET_CLASS_HASH_AT_GAS_COST};
81+
const GET_EXECUTION_INFO_GAS_COST = {GET_EXECUTION_INFO_GAS_COST};
82+
const LIBRARY_CALL_GAS_COST = {LIBRARY_CALL_GAS_COST};
83+
const REPLACE_CLASS_GAS_COST = {REPLACE_CLASS_GAS_COST};
84+
const STORAGE_READ_GAS_COST = {STORAGE_READ_GAS_COST};
85+
const STORAGE_WRITE_GAS_COST = {STORAGE_WRITE_GAS_COST};
86+
const EMIT_EVENT_GAS_COST = {EMIT_EVENT_GAS_COST};
87+
const SEND_MESSAGE_TO_L1_GAS_COST = {SEND_MESSAGE_TO_L1_GAS_COST};
88+
const META_TX_V0_GAS_COST = {META_TX_V0_GAS_COST};
89+
const META_TX_V0_CALLDATA_FACTOR_GAS_COST = {META_TX_V0_CALLDATA_FACTOR_GAS_COST};
90+
91+
// Note the the following costs include `SYSCALL_BASE_GAS_COST` implicitly.
92+
const SECP256K1_ADD_GAS_COST = {SECP256K1_ADD_GAS_COST};
93+
const SECP256K1_GET_POINT_FROM_X_GAS_COST = {SECP256K1_GET_POINT_FROM_X_GAS_COST};
94+
const SECP256K1_GET_XY_GAS_COST = {SECP256K1_GET_XY_GAS_COST};
95+
const SECP256K1_MUL_GAS_COST = {SECP256K1_MUL_GAS_COST};
96+
const SECP256K1_NEW_GAS_COST = {SECP256K1_NEW_GAS_COST};
97+
const SECP256R1_ADD_GAS_COST = {SECP256R1_ADD_GAS_COST};
98+
const SECP256R1_GET_POINT_FROM_X_GAS_COST = {SECP256R1_GET_POINT_FROM_X_GAS_COST};
99+
const SECP256R1_GET_XY_GAS_COST = {SECP256R1_GET_XY_GAS_COST};
100+
const SECP256R1_MUL_GAS_COST = {SECP256R1_MUL_GAS_COST};
101+
const SECP256R1_NEW_GAS_COST = {SECP256R1_NEW_GAS_COST};
102+
103+
const KECCAK_GAS_COST = {KECCAK_GAS_COST};
104+
const KECCAK_ROUND_COST_GAS_COST = {KECCAK_ROUND_COST_GAS_COST};
105+
const SHA256_PROCESS_BLOCK_GAS_COST = {SHA256_PROCESS_BLOCK_GAS_COST};
106+
107+
// Cairo 1.0 error codes.
108+
const ERROR_BLOCK_NUMBER_OUT_OF_RANGE = {ERROR_BLOCK_NUMBER_OUT_OF_RANGE};
109+
const ERROR_OUT_OF_GAS = {ERROR_OUT_OF_GAS};
110+
const ERROR_ENTRY_POINT_FAILED = {ERROR_ENTRY_POINT_FAILED};
111+
const ERROR_ENTRY_POINT_NOT_FOUND = {ERROR_ENTRY_POINT_NOT_FOUND};
112+
const ERROR_INVALID_INPUT_LEN = {ERROR_INVALID_INPUT_LEN};
113+
const ERROR_INVALID_ARGUMENT = {ERROR_INVALID_ARGUMENT};
114+
115+
// The expected return value of the `__validate*__` functions of a Cairo 1.0 account contract.
116+
const VALIDATED = {VALIDATED};
117+
118+
// Resources
119+
const L1_GAS = {L1_GAS};
120+
const L2_GAS = {L2_GAS};
121+
const L1_DATA_GAS = {L1_DATA_GAS};
122+
const L1_GAS_INDEX = {L1_GAS_INDEX};
123+
const L2_GAS_INDEX = {L2_GAS_INDEX};
124+
const L1_DATA_GAS_INDEX = {L1_DATA_GAS_INDEX};
125+
126+
// Round down the block number and timestamp when queried inside `__validate__`.
127+
const VALIDATE_BLOCK_NUMBER_ROUNDING = {VALIDATE_BLOCK_NUMBER_ROUNDING};
128+
const VALIDATE_TIMESTAMP_ROUNDING = {VALIDATE_TIMESTAMP_ROUNDING};
129+
130+
// List of CairoZero account contracts that require the transaction version to be 1.
131+
{V1_BOUND_ACCOUNTS_CAIRO0}
132+
133+
// List of Cairo1 account contracts that require the transaction version to be 1.
134+
{V1_BOUND_ACCOUNTS_CAIRO1}
135+
136+
// Max transaction tip for which a v3 transaction can be replaced with a v1 transaction.
137+
const V1_BOUND_ACCOUNTS_MAX_TIP = {V1_BOUND_ACCOUNTS_MAX_TIP};
138+
139+
// List of Cairo1 account contracts that require the resource bounds to exclude data gas.
140+
{DATA_GAS_ACCOUNTS}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const _CONSTS_CONTENTS: &str = include_str!("cairo/starkware/starknet/core/os/constants.cairo");
2+
const _CONSTS_TEMPLATE: &str =
3+
include_str!("cairo/starkware/starknet/core/os/constants_template.txt");

crates/apollo_starknet_os_program/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ use cairo_vm::types::program::Program;
55

66
use crate::program_hash::{ProgramHash, PROGRAM_HASH_PATH};
77

8+
#[cfg(test)]
9+
pub mod constants_test;
810
pub mod program_hash;
911
#[cfg(feature = "test_programs")]
1012
pub mod test_programs;

0 commit comments

Comments
 (0)