Skip to content

Commit 2de9d14

Browse files
committed
Adjust starknet contracts
1 parent 9b1d30f commit 2de9d14

File tree

6 files changed

+90
-81
lines changed

6 files changed

+90
-81
lines changed

.tool-versions

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
scarb 2.11.4
2-
starknet-foundry 0.46.0
2+
starknet-foundry 0.53.0-rc.0

cairo/Scarb.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,15 @@ checksum = "sha256:44f32d242af1e43982decc49c563e613a9b67ade552f5c3d5cde504e92f74
131131

132132
[[package]]
133133
name = "snforge_scarb_plugin"
134-
version = "0.46.0"
134+
version = "0.52.0"
135135
source = "registry+https://scarbs.xyz/"
136-
checksum = "sha256:6ffa10fe0ff525678138afd584fc2012e7b248f9c8e7b44aeae033cef3ee7826"
136+
checksum = "sha256:c33027f8ac078e4bbfc0bd1b7e7849ffe2e6bdd6c24649d0b5ede145095b4743"
137137

138138
[[package]]
139139
name = "snforge_std"
140-
version = "0.46.0"
140+
version = "0.52.0"
141141
source = "registry+https://scarbs.xyz/"
142-
checksum = "sha256:a4d4b4d3e8506a3907d1eabacb058c390aa13a70132f475cba5e3dcd7a60d0bb"
142+
checksum = "sha256:db8d395191bb2b526c44cee65b10a4044dc59e23a1c1d8009a73c7035760ed6b"
143143
dependencies = [
144144
"snforge_scarb_plugin",
145145
]

cairo/Scarb.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ openzeppelin = "0.20.0"
1212
integrity = { git = "https://github.com/HerodotusDev/integrity.git" }
1313

1414
[dev-dependencies]
15-
snforge_std = "0.46.0"
15+
snforge_std = "0.52.0"
1616
assert_macros = "2.11.4"
1717

1818
[[target.starknet-contract]]

cairo/deploy.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
[[call]]
22
call_type = "deploy"
3-
class_hash = "0x19ed1f90f98ede33ad93ee15a82759afa27c270169a4a3af80c3ea7915bed0c"
3+
class_hash = "0x33d8074c4d5283cbad5d8b6c8d7b261b9bf11a56f6195f0c65f49f45a289c6b"
44
inputs = [
5-
"$CHAIN_ID",
5+
"393402133025997798000961",
66
"0",
7-
"$OWNER"
7+
"0x5a6c0f84179d695f0b598cc5d0be50421c247da95cfe63e4cd66fc27f32dfe6"
88
# "0x07e4986c03d8a4fea74db3fa5a31467bea98d622570ae9daa74a94fb8dc71817"
99
]
1010
id = "satellite"
@@ -14,11 +14,11 @@ unique = false
1414
call_type = "invoke"
1515
contract_address = "satellite"
1616
function = "setL1MessageSender"
17-
inputs = ["$L1_ADDRESS"]
17+
inputs = ["0x0"]
1818

1919
[[call]]
2020
call_type = "deploy"
21-
class_hash = "0x438e4f756b6339f3ec78c93daf15a9ab69b42836eae40b2f75defe0f04158a6"
21+
class_hash = "0x1a3b5f5e4d864a1a4f5ea6f63d65a6d7efbad80ef5a0ed2a5f99bff3f2a132"
2222
inputs = []
2323
id = "evm-growing-inner"
2424
unique = false

cairo/src/evm_growing.cairo

Lines changed: 78 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,24 @@ use starknet::ContractAddress;
99
// Growing module is separated into different contract to reduce class size of the Satellite
1010
// contract.
1111

12+
#[derive(Drop, Serde)]
13+
struct FromMmrProof {
14+
mmr_index: MmrSize,
15+
mmr_proof: Proof,
16+
proof_mmr_peaks: Peaks,
17+
}
18+
19+
#[derive(Drop, Serde)]
20+
struct FromParentHashProof {
21+
reference_block: u256,
22+
}
23+
24+
#[derive(Drop, Serde)]
25+
enum ProofType {
26+
FromMmr: FromMmrProof,
27+
FromParentHash: FromParentHashProof,
28+
}
29+
1230
#[starknet::interface]
1331
pub trait IEvmGrowing<TContractState> {
1432
fn _setGrowingInnerContractAddress(
@@ -19,11 +37,9 @@ pub trait IEvmGrowing<TContractState> {
1937
ref self: TContractState,
2038
chain_id: u256,
2139
headers_rlp: Span<Words64>,
22-
mmr_peaks: Peaks,
23-
mmr_id: u256,
24-
reference_block: Option<u256>,
25-
mmr_index: Option<MmrSize>,
26-
mmr_proof: Option<Proof>,
40+
grow_mmr_peaks: Peaks,
41+
grow_mmr_id: u256,
42+
proof_type: ProofType,
2743
);
2844
}
2945

@@ -81,18 +97,16 @@ pub mod evm_growing_component {
8197
fn onchainEvmAppendBlocksBatch(
8298
ref self: ComponentState<TContractState>,
8399
chain_id: u256,
84-
mut headers_rlp: Span<Words64>,
85-
mmr_peaks: Peaks,
86-
mmr_id: u256,
87-
reference_block: Option<u256>,
88-
mmr_index: Option<MmrSize>,
89-
mmr_proof: Option<Proof>,
100+
headers_rlp: Span<Words64>,
101+
grow_mmr_peaks: Peaks,
102+
grow_mmr_id: u256,
103+
proof_type: ProofType,
90104
) {
91105
let mut state = get_dep_component_mut!(ref self, State);
92106
let mut mmr_data = state
93107
.mmrs
94108
.entry(chain_id)
95-
.entry(mmr_id)
109+
.entry(grow_mmr_id)
96110
.entry(POSEIDON_HASHING_FUNCTION);
97111

98112
let mmr_size = mmr_data.latest_size.read();
@@ -105,18 +119,18 @@ pub mod evm_growing_component {
105119
.expect('ROOT_DOES_NOT_FIT'),
106120
};
107121

108-
let initial_blockhash = if mmr_proof.is_none() {
109-
let reference_block = reference_block.unwrap();
110-
Some(
111-
state
112-
.received_parent_hashes
113-
.entry(chain_id)
114-
.entry(POSEIDON_HASHING_FUNCTION)
115-
.entry(reference_block)
116-
.read(),
117-
)
118-
} else {
119-
None
122+
let initial_blockhash = match @proof_type {
123+
ProofType::FromParentHash(FromParentHashProof { reference_block }) => {
124+
Some(
125+
state
126+
.received_parent_hashes
127+
.entry(chain_id)
128+
.entry(POSEIDON_HASHING_FUNCTION)
129+
.entry(*reference_block)
130+
.read(),
131+
)
132+
},
133+
_ => None
120134
};
121135

122136
let (mmr, start_block, end_block) = IEvmGrowingInternalDispatcher {
@@ -125,11 +139,9 @@ pub mod evm_growing_component {
125139
.inner_onchainEvmAppendBlocksBatch(
126140
chain_id,
127141
headers_rlp,
128-
mmr_peaks,
129-
mmr_id,
130-
reference_block,
131-
mmr_index,
132-
mmr_proof,
142+
grow_mmr_peaks,
143+
grow_mmr_id,
144+
proof_type,
133145
mmr,
134146
initial_blockhash,
135147
);
@@ -151,7 +163,7 @@ pub mod evm_growing_component {
151163
]
152164
.span(),
153165
mmr_size: mmr.last_pos,
154-
mmr_id,
166+
mmr_id: grow_mmr_id,
155167
accumulated_chain_id: chain_id,
156168
grown_by: GrownBy::EvmOnChainGrowing,
157169
},
@@ -167,11 +179,9 @@ trait IEvmGrowingInternal<TContractState> {
167179
self: @TContractState,
168180
chain_id: u256,
169181
headers_rlp: Span<Words64>,
170-
mmr_peaks: Peaks,
171-
mmr_id: u256,
172-
reference_block: Option<u256>,
173-
mmr_index: Option<MmrSize>,
174-
mmr_proof: Option<Proof>,
182+
grow_mmr_peaks: Peaks,
183+
grow_mmr_id: u256,
184+
proof_type: ProofType,
175185
mmr: MMR,
176186
initial_blockhash: Option<u256>,
177187
) -> (MMR, u256, u256);
@@ -192,11 +202,9 @@ pub mod evm_growing_contract {
192202
self: @ContractState,
193203
chain_id: u256,
194204
mut headers_rlp: Span<Words64>,
195-
mmr_peaks: Peaks,
196-
mmr_id: u256,
197-
reference_block: Option<u256>,
198-
mmr_index: Option<MmrSize>,
199-
mmr_proof: Option<Proof>,
205+
grow_mmr_peaks: Peaks,
206+
grow_mmr_id: u256,
207+
proof_type: ProofType,
200208
mut mmr: MMR,
201209
initial_blockhash: Option<u256>,
202210
) -> (MMR, u256, u256) {
@@ -205,49 +213,50 @@ pub mod evm_growing_contract {
205213
let headers_rlp_len = headers_rlp.len();
206214
let header_rlp_first = *headers_rlp.pop_front().unwrap();
207215
let poseidon_hash = hash_words64(header_rlp_first);
208-
let mut peaks = mmr_peaks;
216+
let mut peaks = grow_mmr_peaks;
209217
let mut start_block: u256 = 0;
210218
let mut end_block: u256 = 0;
211219

212220
let mut previous_parent_hash: u256 = 0;
213221

214-
if mmr_proof.is_some() {
215-
// Start from block that is present in different mmr
216-
// requires mmr_proof and mmr_index, reference_block to be None
222+
match proof_type {
223+
ProofType::FromMmr(FromMmrProof { mmr_index, mmr_proof, proof_mmr_peaks }) => {
224+
// Start from block that is present in different mmr
225+
// requires mmr_proof and mmr_index, reference_block to be None
217226

218-
assert(reference_block.is_none(), 'PROOF_AND_REF_BLOCK_NOT_ALLOWED');
219-
assert(headers_rlp_len >= 2, 'INVALID_HEADER_RLP');
227+
assert(headers_rlp_len >= 2, 'INVALID_HEADER_RLP');
220228

221-
let (d, _) = decode_rlp(
222-
header_rlp_first,
223-
[header_rlp_index::PARENT_HASH, header_rlp_index::BLOCK_NUMBER].span(),
224-
);
225-
previous_parent_hash = decode_parent_hash(*d.at(0));
226-
start_block = decode_block_number(*d.at(1)) - 1;
229+
let (d, _) = decode_rlp(
230+
header_rlp_first,
231+
[header_rlp_index::PARENT_HASH, header_rlp_index::BLOCK_NUMBER].span(),
232+
);
233+
previous_parent_hash = decode_parent_hash(*d.at(0));
234+
start_block = decode_block_number(*d.at(1)) - 1;
227235

228-
mmr
229-
.verify_proof(mmr_index.unwrap(), poseidon_hash, mmr_peaks, mmr_proof.unwrap())
230-
.expect('INVALID_MMR_PROOF');
236+
mmr
237+
.verify_proof(mmr_index, poseidon_hash, proof_mmr_peaks, mmr_proof)
238+
.expect('INVALID_MMR_PROOF');
231239

232-
end_block = (start_block + 2) - headers_rlp_len.into();
233-
} else {
234-
// Start from block for which we know the parent hash
240+
end_block = (start_block + 2) - headers_rlp_len.into();
241+
},
242+
ProofType::FromParentHash(FromParentHashProof { reference_block }) => {
243+
// Start from block for which we know the parent hash
235244

236-
assert(headers_rlp_len >= 1, 'INVALID_HEADER_RLP');
245+
assert(headers_rlp_len >= 1, 'INVALID_HEADER_RLP');
237246

238-
let (d, _) = decode_rlp(header_rlp_first, [header_rlp_index::PARENT_HASH].span());
239-
previous_parent_hash = decode_parent_hash(*d.at(0));
247+
let (d, _) = decode_rlp(header_rlp_first, [header_rlp_index::PARENT_HASH].span());
248+
previous_parent_hash = decode_parent_hash(*d.at(0));
240249

241-
let reference_block = reference_block.unwrap();
242-
start_block = reference_block - 1;
243-
end_block = (start_block + 1) - headers_rlp_len.into();
250+
start_block = reference_block - 1;
251+
end_block = (start_block + 1) - headers_rlp_len.into();
244252

245-
let initial_blockhash = initial_blockhash.unwrap();
246-
assert(initial_blockhash != 0, 'BLOCK_NOT_RECEIVED');
247-
assert(initial_blockhash == poseidon_hash.into(), 'INVALID_INITIAL_HEADER_RLP');
253+
let initial_blockhash = initial_blockhash.unwrap();
254+
assert(initial_blockhash != 0, 'BLOCK_NOT_RECEIVED');
255+
assert(initial_blockhash == poseidon_hash.into(), 'INVALID_INITIAL_HEADER_RLP');
248256

249-
let (_, p) = mmr.append(poseidon_hash, mmr_peaks).expect('MMR_APPEND_FAILED');
250-
peaks = p;
257+
let (_, p) = mmr.append(poseidon_hash, peaks).expect('MMR_APPEND_FAILED');
258+
peaks = p;
259+
}
251260
}
252261

253262
for header_rlp in headers_rlp {

cairo/upgrade.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
call_type = "invoke"
33
contract_address = "0x06d523b16d7f6f71e250fc7f8d95df3e9e987a120878ea1a25ff312d92f42c8e"
44
function = "upgrade"
5-
inputs = ["0x19ed1f90f98ede33ad93ee15a82759afa27c270169a4a3af80c3ea7915bed0c"]
5+
inputs = ["0x33d8074c4d5283cbad5d8b6c8d7b261b9bf11a56f6195f0c65f49f45a289c6b"]

0 commit comments

Comments
 (0)