Skip to content

Commit 5945995

Browse files
blockifier,apollo_starknet_os_program: support linear message cost
1 parent 1cc8b43 commit 5945995

17 files changed

Lines changed: 80 additions & 34 deletions

File tree

crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/constants.cairo

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ const ALLOWED_VIRTUAL_OS_PROGRAM_HASHES_1 = (
7272
0x06ecb73d21c7d98ddd4148f5bcd91cc2747c65364245fbf32a63b05cca1685c2
7373
);
7474
const ALLOWED_VIRTUAL_OS_PROGRAM_HASHES_2 = (
75-
0x0531d387113cc4b96b8f5151c7b17515a2e909a15442f1f12fd113f7c10777cd
75+
0x026ed490d325bff4c3951ad418bc46e59536633b9a369bda562bf316be1de11f
7676
);
7777
const ALLOWED_VIRTUAL_OS_PROGRAM_HASHES_LEN = 3;
7878

@@ -119,7 +119,8 @@ const REPLACE_CLASS_GAS_COST = 10000;
119119
const STORAGE_READ_GAS_COST = 24070;
120120
const STORAGE_WRITE_GAS_COST = 59970;
121121
const EMIT_EVENT_GAS_COST = 10000;
122-
const SEND_MESSAGE_TO_L1_GAS_COST = 12470;
122+
const SEND_MESSAGE_TO_L1_GAS_COST = 12770;
123+
const SEND_MESSAGE_TO_L1_PAYLOAD_FACTOR_GAS_COST = 800;
123124
const META_TX_V0_GAS_COST = 168550;
124125
const META_TX_V0_CALLDATA_FACTOR_GAS_COST = 4850;
125126

crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/constants_template.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ const STORAGE_READ_GAS_COST = {STORAGE_READ_GAS_COST};
9999
const STORAGE_WRITE_GAS_COST = {STORAGE_WRITE_GAS_COST};
100100
const EMIT_EVENT_GAS_COST = {EMIT_EVENT_GAS_COST};
101101
const SEND_MESSAGE_TO_L1_GAS_COST = {SEND_MESSAGE_TO_L1_GAS_COST};
102+
const SEND_MESSAGE_TO_L1_PAYLOAD_FACTOR_GAS_COST = {SEND_MESSAGE_TO_L1_PAYLOAD_FACTOR_GAS_COST};
102103
const META_TX_V0_GAS_COST = {META_TX_V0_GAS_COST};
103104
const META_TX_V0_CALLDATA_FACTOR_GAS_COST = {META_TX_V0_CALLDATA_FACTOR_GAS_COST};
104105

crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/execution/syscall_impls.cairo

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ from starkware.starknet.core.os.constants import (
115115
SECP256R1_MUL_GAS_COST,
116116
SECP256R1_NEW_GAS_COST,
117117
SEND_MESSAGE_TO_L1_GAS_COST,
118+
SEND_MESSAGE_TO_L1_PAYLOAD_FACTOR_GAS_COST,
118119
SHA256_PROCESS_BLOCK_GAS_COST,
119120
SHA512_PROCESS_BLOCK_GAS_COST,
120121
SIERRA_ARRAY_LEN_BOUND,
@@ -1403,17 +1404,20 @@ func execute_send_message_to_l1{range_check_ptr, syscall_ptr: felt*, outputs: Os
14031404
) {
14041405
alloc_locals;
14051406
let request = cast(syscall_ptr + RequestHeader.SIZE, SendMessageToL1Request*);
1407+
1408+
tempvar payload_start = request.payload_start;
1409+
tempvar payload_size = request.payload_end - payload_start;
1410+
1411+
let total_gas_cost = SEND_MESSAGE_TO_L1_GAS_COST + SEND_MESSAGE_TO_L1_PAYLOAD_FACTOR_GAS_COST *
1412+
payload_size;
14061413
let success = reduce_syscall_gas_and_write_response_header(
1407-
total_gas_cost=SEND_MESSAGE_TO_L1_GAS_COST, request_struct_size=SendMessageToL1Request.SIZE
1414+
total_gas_cost=total_gas_cost, request_struct_size=SendMessageToL1Request.SIZE
14081415
);
14091416
if (success == FALSE) {
14101417
// Not enough gas to execute the syscall.
14111418
return ();
14121419
}
14131420

1414-
tempvar payload_start = request.payload_start;
1415-
tempvar payload_size = request.payload_end - payload_start;
1416-
14171421
assert [outputs.messages_to_l1] = MessageToL1Header(
14181422
from_address=contract_address, to_address=request.to_address, payload_size=payload_size
14191423
);

crates/apollo_starknet_os_program/src/constants_test.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,9 @@ fn generate_constants_file() -> String {
164164
base_only_syscall_cost(SyscallSelector::StorageWrite, os_constants),
165165
EMIT_EVENT_GAS_COST = base_only_syscall_cost(SyscallSelector::EmitEvent, os_constants),
166166
SEND_MESSAGE_TO_L1_GAS_COST =
167-
base_only_syscall_cost(SyscallSelector::SendMessageToL1, os_constants),
167+
os_constants.gas_costs.syscalls.send_message_to_l1.get_syscall_cost(0),
168+
SEND_MESSAGE_TO_L1_PAYLOAD_FACTOR_GAS_COST =
169+
os_constants.gas_costs.syscalls.send_message_to_l1.linear_syscall_cost(),
168170
META_TX_V0_GAS_COST = os_constants.gas_costs.syscalls.meta_tx_v0.get_syscall_cost(0),
169171
META_TX_V0_CALLDATA_FACTOR_GAS_COST =
170172
os_constants.gas_costs.syscalls.meta_tx_v0.linear_syscall_cost(),
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"os": "0x444730bad97d2dd8c243fad2887bfd5ab98babaddaec38653bab90a41bf1fc2",
3-
"virtual_os": "0x531d387113cc4b96b8f5151c7b17515a2e909a15442f1f12fd113f7c10777cd",
2+
"os": "0x61152c9c3dd68d0a683b2a50c42c5d863b28e188f8efd35f71e52b67ede994b",
3+
"virtual_os": "0x26ed490d325bff4c3951ad418bc46e59536633b9a369bda562bf316be1de11f",
44
"aggregator": "0x700786d51b3854af43d8e12180380bda3029be6c1767e007858de6ca2edac40",
55
"aggregator_with_prefix": "0xe08d300e3f5996e43d6d7cc5a20068e0e58cf1309089f2348317ac580f6c1f"
66
}

crates/apollo_starknet_os_program/src/virtual_os_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ fn test_virtual_os_swapped_files() {
1919
#[test]
2020
fn test_program_bytecode_lengths() {
2121
expect![[r#"
22-
16395
22+
16399
2323
"#]]
2424
.assert_debug_eq(&OS_PROGRAM.data_len());
2525
expect![[r#"
26-
11443
26+
11447
2727
"#]]
2828
.assert_debug_eq(&VIRTUAL_OS_PROGRAM.data_len());
2929
}

crates/blockifier/resources/blockifier_versioned_constants_0_14_4.json

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@
129129
"allowed_virtual_os_program_hashes": [
130130
"0x3e98c2d7703b03a7edb73ed7f075f97f1dcbaa8f717cdf6e1a57bf058265473",
131131
"0x6ecb73d21c7d98ddd4148f5bcd91cc2747c65364245fbf32a63b05cca1685c2",
132-
"0x531d387113cc4b96b8f5151c7b17515a2e909a15442f1f12fd113f7c10777cd"
132+
"0x26ed490d325bff4c3951ad418bc46e59536633b9a369bda562bf316be1de11f"
133133
],
134134
"constructor_entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194",
135135
"default_entry_point_selector": "0x0",
@@ -455,10 +455,17 @@
455455
}
456456
},
457457
"SendMessageToL1": {
458-
"n_steps": 124,
459-
"n_memory_holes": 0,
460-
"builtin_instance_counter": {
461-
"range_check_builtin": 1
458+
"constant": {
459+
"n_steps": 127,
460+
"n_memory_holes": 0,
461+
"builtin_instance_counter": {
462+
"range_check_builtin": 1
463+
}
464+
},
465+
"calldata_factor": {
466+
"n_steps": 8,
467+
"n_memory_holes": 0,
468+
"builtin_instance_counter": {}
462469
}
463470
},
464471
"Sha256ProcessBlock": {

crates/blockifier/resources/versioned_constants_diff_regression/0.14.3_0.14.4.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
+ /os_constants/allowed_virtual_os_program_hashes/2: "0x531d387113cc4b96b8f5151c7b17515a2e909a15442f1f12fd113f7c10777cd"
1+
+ /os_constants/allowed_virtual_os_program_hashes/2: "0x26ed490d325bff4c3951ad418bc46e59536633b9a369bda562bf316be1de11f"
22
~ /os_resources/execute_syscalls/CallContract/n_steps: 901
33
~ /os_resources/execute_syscalls/EmitEvent/n_steps: 47
44
~ /os_resources/execute_syscalls/GetBlockHash/builtin_instance_counter/range_check_builtin: 3
@@ -9,5 +9,9 @@
99
~ /os_resources/execute_syscalls/LibraryCall/n_steps: 874
1010
~ /os_resources/execute_syscalls/MetaTxV0/constant/n_steps: 1307
1111
~ /os_resources/execute_syscalls/ReplaceClass/n_steps: 92
12-
~ /os_resources/execute_syscalls/SendMessageToL1/n_steps: 124
12+
+ /os_resources/execute_syscalls/SendMessageToL1/calldata_factor: {"builtin_instance_counter":{},"n_memory_holes":0,"n_steps":8}
13+
+ /os_resources/execute_syscalls/SendMessageToL1/constant: {"builtin_instance_counter":{"range_check_builtin":1},"n_memory_holes":0,"n_steps":127}
14+
- /os_resources/execute_syscalls/SendMessageToL1/builtin_instance_counter
15+
- /os_resources/execute_syscalls/SendMessageToL1/n_memory_holes
16+
- /os_resources/execute_syscalls/SendMessageToL1/n_steps
1317
~ /os_resources/execute_syscalls/Sha256ProcessBlock/n_steps: 1854

crates/blockifier/src/execution/deprecated_syscalls/hint_processor.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,15 @@ impl DeprecatedSyscallExecutor for DeprecatedSyscallHintProcessor<'_> {
815815
if !execution_context.tx_context.block_context.chain_info.is_l3 {
816816
EthAddress::try_from(request.message.to_address)?;
817817
}
818+
819+
// Increment the SendMessageToL1 syscall's linear cost counter by the number of elements in
820+
// the payload.
821+
let syscall_usage = syscall_handler
822+
.syscalls_usage
823+
.get_mut(&DeprecatedSyscallSelector::SendMessageToL1)
824+
.expect("syscalls_usage entry for SendMessageToL1 must be initialized");
825+
syscall_usage.linear_factor += request.message.payload.0.len();
826+
818827
let ordered_message_to_l1 = OrderedL2ToL1Message {
819828
order: execution_context.n_sent_messages_to_l1,
820829
message: request.message,

crates/blockifier/src/execution/native/syscall_handler.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -623,11 +623,12 @@ impl StarknetSyscallHandler for &mut NativeSyscallHandler<'_> {
623623
payload: &[Felt],
624624
remaining_gas: &mut u64,
625625
) -> SyscallResult<()> {
626-
self.pre_execute_syscall(
627-
remaining_gas,
628-
self.gas_costs().syscalls.send_message_to_l1.base_syscall_cost(),
629-
SyscallSelector::SendMessageToL1,
630-
)?;
626+
let total_gas_cost = self
627+
.gas_costs()
628+
.syscalls
629+
.send_message_to_l1
630+
.get_syscall_cost(u64_from_usize(payload.len()));
631+
self.pre_execute_syscall(remaining_gas, total_gas_cost, SyscallSelector::SendMessageToL1)?;
631632

632633
let to_address = L1Address::from(to_address);
633634
let message = MessageToL1 { to_address, payload: L2ToL1Payload(payload.to_vec()) };

0 commit comments

Comments
 (0)