Skip to content

Commit 02530ac

Browse files
committed
fix: add domaining logic to tx and receipt memorizers
1 parent c5b02db commit 02530ac

File tree

8 files changed

+72
-32
lines changed

8 files changed

+72
-32
lines changed

crates/sound_hint_processor/src/syscall_handler/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,14 @@ impl traits::SyscallHandler for CallContractHandlerRelay {
104104
type Response = CallContractResponse;
105105

106106
fn read_request(&mut self, vm: &VirtualMachine, ptr: &mut Relocatable) -> SyscallResult<Self::Request> {
107+
println!("reading request");
107108
let ret = Self::Request::from_memory(vm, *ptr)?;
108109
*ptr = (*ptr + Self::Request::cairo_size())?;
109110
Ok(ret)
110111
}
111112

112113
async fn execute(&mut self, request: Self::Request, vm: &mut VirtualMachine) -> SyscallResult<Self::Response> {
114+
println!("executing request");
113115
match request.contract_address {
114116
v if v == call_contract::debug::CONTRACT_ADDRESS => self.debug_call_contract_handler.execute(request, vm).await,
115117
_ => {

crates/types/src/keys/evm/receipt.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,37 @@ use crate::cairo::traits::CairoType;
1313
#[derive(Debug, Clone)]
1414
pub struct CairoKey {
1515
chain_id: Felt252,
16+
domain: Felt252,
1617
block_number: Felt252,
1718
transaction_index: Felt252,
1819
}
1920

2021
impl CairoKey {
2122
pub fn hash(&self) -> Felt252 {
22-
poseidon_hash_many(&[self.chain_id, self.block_number, self.transaction_index])
23+
poseidon_hash_many(&[self.chain_id, self.domain, self.block_number, self.transaction_index])
2324
}
2425
}
2526

2627
impl CairoType for CairoKey {
2728
fn from_memory(vm: &VirtualMachine, ptr: Relocatable) -> Result<Self, MemoryError> {
2829
Ok(Self {
2930
chain_id: *vm.get_integer((ptr + 0)?)?,
30-
block_number: *vm.get_integer((ptr + 1)?)?,
31-
transaction_index: *vm.get_integer((ptr + 2)?)?,
31+
domain: *vm.get_integer((ptr + 1)?)?,
32+
block_number: *vm.get_integer((ptr + 2)?)?,
33+
transaction_index: *vm.get_integer((ptr + 3)?)?,
3234
})
3335
}
3436

3537
fn to_memory(&self, vm: &mut VirtualMachine, address: Relocatable) -> Result<(), MemoryError> {
3638
vm.insert_value((address + 0)?, self.chain_id)?;
37-
vm.insert_value((address + 1)?, self.block_number)?;
38-
vm.insert_value((address + 2)?, self.transaction_index)?;
39+
vm.insert_value((address + 1)?, self.domain)?;
40+
vm.insert_value((address + 2)?, self.block_number)?;
41+
vm.insert_value((address + 3)?, self.transaction_index)?;
3942
Ok(())
4043
}
4144

4245
fn n_fields() -> usize {
43-
3
46+
4
4447
}
4548
}
4649

crates/types/src/keys/evm/transaction.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,38 @@ use crate::cairo::traits::CairoType;
1313
#[derive(Debug, Clone)]
1414
pub struct CairoKey {
1515
chain_id: Felt252,
16+
domain: Felt252,
1617
block_number: Felt252,
1718
transaction_index: Felt252,
1819
}
1920

2021
impl CairoKey {
2122
pub fn hash(&self) -> Felt252 {
22-
poseidon_hash_many(&[self.chain_id, self.block_number, self.transaction_index])
23+
poseidon_hash_many(&[self.chain_id, self.domain, self.block_number, self.transaction_index])
2324
}
2425
}
2526

2627
impl CairoType for CairoKey {
2728
fn from_memory(vm: &VirtualMachine, ptr: Relocatable) -> Result<Self, MemoryError> {
29+
println!("tx key from memory: {:?}", ptr);
2830
Ok(Self {
2931
chain_id: *vm.get_integer((ptr + 0)?)?,
30-
block_number: *vm.get_integer((ptr + 1)?)?,
31-
transaction_index: *vm.get_integer((ptr + 2)?)?,
32+
domain: *vm.get_integer((ptr + 1)?)?,
33+
block_number: *vm.get_integer((ptr + 2)?)?,
34+
transaction_index: *vm.get_integer((ptr + 3)?)?,
3235
})
3336
}
3437

3538
fn to_memory(&self, vm: &mut VirtualMachine, address: Relocatable) -> Result<(), MemoryError> {
3639
vm.insert_value((address + 0)?, self.chain_id)?;
37-
vm.insert_value((address + 1)?, self.block_number)?;
38-
vm.insert_value((address + 2)?, self.transaction_index)?;
40+
vm.insert_value((address + 1)?, self.domain)?;
41+
vm.insert_value((address + 2)?, self.block_number)?;
42+
vm.insert_value((address + 3)?, self.transaction_index)?;
3943
Ok(())
4044
}
4145

4246
fn n_fields() -> usize {
43-
3
47+
4
4448
}
4549
}
4650

examples/src/lib.cairo

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
#[starknet::contract]
22
mod example {
3-
use hdp_cairo::evm::storage::StorageTrait;
4-
use hdp_cairo::{HDP, evm::storage::{StorageKey, StorageImpl}};
3+
use hdp_cairo::{
4+
HDP, evm::block_receipt::{BlockReceiptTrait, BlockReceiptKey, BlockReceiptImpl},
5+
evm::block_tx::{BlockTxTrait, BlockTxKey, BlockTxImpl}
6+
};
7+
8+
use hdp_cairo::debug::{print, print_array};
9+
use core::fmt::{Display, Formatter, Error};
510

611
#[storage]
712
struct Storage {}
@@ -11,14 +16,25 @@ mod example {
1116
assert!(
1217
hdp
1318
.evm
14-
.storage_get_slot(
15-
StorageKey {
16-
chain_id: 11155111,
17-
block_number: 6000000,
18-
address: 0x75cec1db9dceb703200eaa6595f66885c962b920,
19-
storage_slot: 0x1,
19+
.block_receipt_get_cumulative_gas_used(
20+
BlockReceiptKey {
21+
chain_id: 11155111, block_number: 5382809, transaction_index: 217,
22+
},
23+
) == u256 { low: 0x1a4bd13, high: 0x0 },
24+
);
25+
26+
print(1);
27+
28+
assert!(
29+
hdp
30+
.evm
31+
.block_tx_get_nonce(
32+
BlockTxKey {
33+
chain_id: 11155111, block_number: 5382809, transaction_index: 217,
2034
},
21-
) == u256 { low: 0x12309ce54000, high: 0x0 },
22-
)
35+
) == u256 { low: 0x3, high: 0x0 },
36+
);
37+
38+
print(2);
2339
}
24-
}
40+
}

hdp_cairo/src/evm/block_receipt.cairo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ pub impl BlockReceiptImpl of BlockReceiptTrait {
3939
*self.dict.segment_index,
4040
*self.dict.offset,
4141
key.chain_id,
42+
'block_receipt',
4243
key.block_number,
4344
key.transaction_index,
4445
]

hdp_cairo/src/evm/block_tx.cairo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ pub impl BlockTxImpl of BlockTxTrait {
109109
*self.dict.segment_index,
110110
*self.dict.offset,
111111
key.chain_id,
112+
'block_tx',
112113
key.block_number,
113114
key.transaction_index,
114115
]

src/memorizers/evm/memorizer.cairo

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,32 +48,34 @@ namespace EvmPackParams {
4848
return (params=params, params_len=5);
4949
}
5050
51-
const BLOCK_TX_PARAMS_LEN = 3;
51+
const BLOCK_TX_PARAMS_LEN = 4;
5252
func block_tx(chain_id: felt, block_number: felt, index: felt) -> (
5353
params: felt*, params_len: felt
5454
) {
5555
alloc_locals;
5656
5757
local params: felt* = nondet %{ segments.add() %};
5858
assert params[0] = chain_id;
59-
assert params[1] = block_number;
60-
assert params[2] = index;
59+
assert params[1] = 'block_tx';
60+
assert params[2] = block_number;
61+
assert params[3] = index;
6162
62-
return (params=params, params_len=3);
63+
return (params=params, params_len=4);
6364
}
6465
65-
const BLOCK_RECEIPT_PARAMS_LEN = 3;
66-
func block_receipt{poseidon_ptr: PoseidonBuiltin*}(
66+
const BLOCK_RECEIPT_PARAMS_LEN = 4;
67+
func block_receipt(
6768
chain_id: felt, block_number: felt, index: felt
6869
) -> (params: felt*, params_len: felt) {
6970
alloc_locals;
7071
7172
local params: felt* = nondet %{ segments.add() %};
7273
assert params[0] = chain_id;
73-
assert params[1] = block_number;
74-
assert params[2] = index;
74+
assert params[1] = 'block_receipt';
75+
assert params[2] = block_number;
76+
assert params[3] = index;
7577
76-
return (params=params, params_len=3);
78+
return (params=params, params_len=4);
7779
}
7880
}
7981

tests/src/evm/receipt_modules.cairo

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ mod receipts_get_status {
6666
mod receipts_get_cumulative_gas_used {
6767
use hdp_cairo::{
6868
HDP, evm::block_receipt::{BlockReceiptTrait, BlockReceiptKey, BlockReceiptImpl},
69+
evm::block_tx::{BlockTxTrait, BlockTxKey, BlockTxImpl}
6970
};
7071

7172
#[storage]
@@ -82,5 +83,15 @@ mod receipts_get_cumulative_gas_used {
8283
},
8384
) == u256 { low: 0x1a4bd13, high: 0x0 },
8485
);
86+
87+
assert!(
88+
hdp
89+
.evm
90+
.block_tx_get_nonce(
91+
BlockTxKey {
92+
chain_id: 11155111, block_number: 5382809, transaction_index: 217,
93+
},
94+
) == u256 { low: 0x3, high: 0x0 },
95+
);
8596
}
8697
}

0 commit comments

Comments
 (0)