Skip to content

Commit a1de1b4

Browse files
authored
feat: remove full state diff deserialization (#50)
`contracts` and `classes` are not used in the state transition process in any way, and do not contribute to output section transversal as they're at the end of the output stream. There's no reason to parse these and immediately discard them.
1 parent 71253c1 commit a1de1b4

File tree

3 files changed

+0
-180
lines changed

3 files changed

+0
-180
lines changed

piltover/src/bindgen.rs

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -53,67 +53,6 @@ impl<P: starknet::providers::Provider + Sync> AppchainContractReader<P> {
5353
}
5454
}
5555
#[derive()]
56-
pub struct ContractChanges {
57-
pub addr: starknet::core::types::Felt,
58-
pub nonce: starknet::core::types::Felt,
59-
pub class_hash: Option<starknet::core::types::Felt>,
60-
pub storage_changes: Vec<(starknet::core::types::Felt, starknet::core::types::Felt)>,
61-
}
62-
impl cainome::cairo_serde::CairoSerde for ContractChanges {
63-
type RustType = Self;
64-
const SERIALIZED_SIZE: std::option::Option<usize> = None;
65-
#[inline]
66-
fn cairo_serialized_size(__rust: &Self::RustType) -> usize {
67-
let mut __size = 0;
68-
__size += starknet::core::types::Felt::cairo_serialized_size(&__rust.addr);
69-
__size += starknet::core::types::Felt::cairo_serialized_size(&__rust.nonce);
70-
__size += Option::<starknet::core::types::Felt>::cairo_serialized_size(&__rust.class_hash);
71-
__size += Vec :: <
72-
(starknet :: core :: types :: Felt, starknet :: core :: types :: Felt)
73-
> :: cairo_serialized_size(& __rust.storage_changes);
74-
__size
75-
}
76-
fn cairo_serialize(__rust: &Self::RustType) -> Vec<starknet::core::types::Felt> {
77-
let mut __out: Vec<starknet::core::types::Felt> = vec![];
78-
__out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.addr));
79-
__out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.nonce));
80-
__out.extend(Option::<starknet::core::types::Felt>::cairo_serialize(
81-
&__rust.class_hash,
82-
));
83-
__out.extend(Vec::<(
84-
starknet::core::types::Felt,
85-
starknet::core::types::Felt,
86-
)>::cairo_serialize(&__rust.storage_changes));
87-
__out
88-
}
89-
fn cairo_deserialize(
90-
__felts: &[starknet::core::types::Felt],
91-
__offset: usize,
92-
) -> cainome::cairo_serde::Result<Self::RustType> {
93-
let mut __offset = __offset;
94-
let addr = starknet::core::types::Felt::cairo_deserialize(__felts, __offset)?;
95-
__offset += starknet::core::types::Felt::cairo_serialized_size(&addr);
96-
let nonce = starknet::core::types::Felt::cairo_deserialize(__felts, __offset)?;
97-
__offset += starknet::core::types::Felt::cairo_serialized_size(&nonce);
98-
let class_hash =
99-
Option::<starknet::core::types::Felt>::cairo_deserialize(__felts, __offset)?;
100-
__offset += Option::<starknet::core::types::Felt>::cairo_serialized_size(&class_hash);
101-
let storage_changes =
102-
Vec::<(starknet::core::types::Felt, starknet::core::types::Felt)>::cairo_deserialize(
103-
__felts, __offset,
104-
)?;
105-
__offset += Vec :: <
106-
(starknet :: core :: types :: Felt, starknet :: core :: types :: Felt)
107-
> :: cairo_serialized_size(& storage_changes);
108-
Ok(ContractChanges {
109-
addr,
110-
nonce,
111-
class_hash,
112-
storage_changes,
113-
})
114-
}
115-
}
116-
#[derive()]
11756
pub struct LogStateTransitionFact {
11857
pub state_transition_fact: cainome::cairo_serde::U256,
11958
}
@@ -983,8 +922,6 @@ pub struct StarknetOsOutput {
983922
pub full_output: starknet::core::types::Felt,
984923
pub messages_to_l1: Vec<MessageToStarknet>,
985924
pub messages_to_l2: Vec<MessageToAppchain>,
986-
pub contracts: Vec<ContractChanges>,
987-
pub classes: Vec<(starknet::core::types::Felt, starknet::core::types::Felt)>,
988925
}
989926
impl cainome::cairo_serde::CairoSerde for StarknetOsOutput {
990927
type RustType = Self;
@@ -1005,10 +942,6 @@ impl cainome::cairo_serde::CairoSerde for StarknetOsOutput {
1005942
__size += starknet::core::types::Felt::cairo_serialized_size(&__rust.full_output);
1006943
__size += Vec::<MessageToStarknet>::cairo_serialized_size(&__rust.messages_to_l1);
1007944
__size += Vec::<MessageToAppchain>::cairo_serialized_size(&__rust.messages_to_l2);
1008-
__size += Vec::<ContractChanges>::cairo_serialized_size(&__rust.contracts);
1009-
__size += Vec :: <
1010-
(starknet :: core :: types :: Felt, starknet :: core :: types :: Felt)
1011-
> :: cairo_serialized_size(& __rust.classes);
1012945
__size
1013946
}
1014947
fn cairo_serialize(__rust: &Self::RustType) -> Vec<starknet::core::types::Felt> {
@@ -1049,11 +982,6 @@ impl cainome::cairo_serde::CairoSerde for StarknetOsOutput {
1049982
__out.extend(Vec::<MessageToAppchain>::cairo_serialize(
1050983
&__rust.messages_to_l2,
1051984
));
1052-
__out.extend(Vec::<ContractChanges>::cairo_serialize(&__rust.contracts));
1053-
__out.extend(Vec::<(
1054-
starknet::core::types::Felt,
1055-
starknet::core::types::Felt,
1056-
)>::cairo_serialize(&__rust.classes));
1057985
__out
1058986
}
1059987
fn cairo_deserialize(
@@ -1086,15 +1014,6 @@ impl cainome::cairo_serde::CairoSerde for StarknetOsOutput {
10861014
__offset += Vec::<MessageToStarknet>::cairo_serialized_size(&messages_to_l1);
10871015
let messages_to_l2 = Vec::<MessageToAppchain>::cairo_deserialize(__felts, __offset)?;
10881016
__offset += Vec::<MessageToAppchain>::cairo_serialized_size(&messages_to_l2);
1089-
let contracts = Vec::<ContractChanges>::cairo_deserialize(__felts, __offset)?;
1090-
__offset += Vec::<ContractChanges>::cairo_serialized_size(&contracts);
1091-
let classes =
1092-
Vec::<(starknet::core::types::Felt, starknet::core::types::Felt)>::cairo_deserialize(
1093-
__felts, __offset,
1094-
)?;
1095-
__offset += Vec :: <
1096-
(starknet :: core :: types :: Felt, starknet :: core :: types :: Felt)
1097-
> :: cairo_serialized_size(& classes);
10981017
Ok(StarknetOsOutput {
10991018
initial_root,
11001019
final_root,
@@ -1108,8 +1027,6 @@ impl cainome::cairo_serde::CairoSerde for StarknetOsOutput {
11081027
full_output,
11091028
messages_to_l1,
11101029
messages_to_l2,
1111-
contracts,
1112-
classes,
11131030
})
11141031
}
11151032
}

src/snos_output.cairo

Lines changed: 0 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ pub struct StarknetOsOutput {
4141
pub full_output: felt252,
4242
pub messages_to_l1: Span<MessageToStarknet>,
4343
pub messages_to_l2: Span<MessageToAppchain>,
44-
pub contracts: Array<ContractChanges>,
45-
pub classes: Array<(felt252, felt252)>,
4644
}
4745

4846
#[derive(Drop, Serde, Debug)]
@@ -104,14 +102,6 @@ pub fn deserialize_os_output(ref input_iter: SpanIter<felt252>) -> StarknetOsOut
104102
let _ = read_segment(ref input_iter, 2 * 2 * n_blobs);
105103
}
106104
let (messages_to_l1, messages_to_l2) = deserialize_messages(ref input_iter);
107-
let (contracts, classes) = if use_kzg_da.is_zero() {
108-
(
109-
deserialize_contract_state(ref input_iter, *full_output),
110-
deserialize_contract_class_da_changes(ref input_iter, *full_output),
111-
)
112-
} else {
113-
(array![], array![])
114-
};
115105
StarknetOsOutput {
116106
initial_root: *header[PREVIOUS_MERKLE_UPDATE_OFFSET],
117107
final_root: *header[NEW_MERKLE_UPDATE_OFFSET],
@@ -125,8 +115,6 @@ pub fn deserialize_os_output(ref input_iter: SpanIter<felt252>) -> StarknetOsOut
125115
full_output: *full_output,
126116
messages_to_l1: messages_to_l1,
127117
messages_to_l2: messages_to_l2,
128-
contracts,
129-
classes,
130118
}
131119
}
132120

@@ -151,83 +139,6 @@ pub fn deserialize_messages(
151139
(messages_to_l1.span(), messages_to_l2.span())
152140
}
153141

154-
fn deserialize_contract_state(
155-
ref input_iter: SpanIter<felt252>, full_output: felt252,
156-
) -> Array<ContractChanges> {
157-
let output_n_updates: usize = (*(input_iter.next().unwrap()))
158-
.try_into()
159-
.expect('Invalid output_n_updates');
160-
let mut contract_changes = array![];
161-
for _ in 0..output_n_updates {
162-
contract_changes.append(deserialize_contract_state_inner(ref input_iter, full_output));
163-
};
164-
contract_changes
165-
}
166-
167-
fn deserialize_contract_state_inner(
168-
ref input_iter: SpanIter<felt252>, full_output: felt252,
169-
) -> ContractChanges {
170-
let bound: u256 = 18446744073709551616; // 2^64
171-
let addr = *(input_iter.next().unwrap());
172-
let value: u256 = (*(input_iter.next().unwrap())).try_into().expect('Invalid value');
173-
let new_value = value / bound;
174-
let n_actual_updates = value % bound;
175-
let was_class_updated = new_value / bound;
176-
let new_state_nonce = new_value % bound;
177-
let new_state_class_hash = if !full_output.is_zero() {
178-
let _prev_state_class_hash = *(input_iter.next().unwrap());
179-
Option::Some(*(input_iter.next().unwrap()))
180-
} else {
181-
if !was_class_updated.is_zero() {
182-
Option::Some(*(input_iter.next().unwrap()))
183-
} else {
184-
Option::None
185-
}
186-
};
187-
188-
let n_actual_updates: usize = n_actual_updates.try_into().expect('Invalid n_actual_updates');
189-
let storage_changes = deserialize_da_changes(ref input_iter, n_actual_updates, full_output);
190-
ContractChanges {
191-
addr: addr,
192-
nonce: new_state_nonce.try_into().unwrap(),
193-
class_hash: new_state_class_hash,
194-
storage_changes,
195-
}
196-
}
197-
198-
fn deserialize_da_changes(
199-
ref input_iter: SpanIter<felt252>, n_actual_updates: usize, full_output: felt252,
200-
) -> Array<(felt252, felt252)> {
201-
let mut storage_changes = array![];
202-
for _ in 0..n_actual_updates {
203-
let key = *(input_iter.next().unwrap());
204-
if full_output.is_non_zero() {
205-
*(input_iter.next().unwrap());
206-
};
207-
let new_value = *(input_iter.next().unwrap());
208-
storage_changes.append((key, new_value));
209-
};
210-
storage_changes
211-
}
212-
213-
fn deserialize_contract_class_da_changes(
214-
ref input_iter: SpanIter<felt252>, full_output: felt252,
215-
) -> Array<(felt252, felt252)> {
216-
let output_n_updates: usize = (*(input_iter.next().unwrap()))
217-
.try_into()
218-
.expect('Invalid output_n_updates');
219-
let mut contract_changes = array![];
220-
for _ in 0..output_n_updates {
221-
let class_hash = *(input_iter.next().unwrap());
222-
if full_output.is_non_zero() {
223-
*(input_iter.next().unwrap());
224-
};
225-
let compiled_class_hash = *(input_iter.next().unwrap());
226-
contract_changes.append((class_hash, compiled_class_hash));
227-
};
228-
contract_changes
229-
}
230-
231142
fn deserialize_messages_to_l1(ref input_iter: SpanIter<felt252>) -> Array<MessageToStarknet> {
232143
let mut messages_to_starknet = array![];
233144
loop {

src/state/tests/test_state.cairo

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ fn state_update_ok() {
3333
full_output: 0,
3434
messages_to_l1: array![].span(),
3535
messages_to_l2: array![].span(),
36-
contracts: array![],
37-
classes: array![],
3836
};
3937
mock.update(os_output);
4038

@@ -61,8 +59,6 @@ fn genesis_state_update_ok() {
6159
full_output: 0,
6260
messages_to_l1: array![].span(),
6361
messages_to_l2: array![].span(),
64-
contracts: array![],
65-
classes: array![],
6662
};
6763
mock.update(os_output);
6864

@@ -91,8 +87,6 @@ fn state_update_invalid_block_number() {
9187
full_output: 0,
9288
messages_to_l1: array![].span(),
9389
messages_to_l2: array![].span(),
94-
contracts: array![],
95-
classes: array![],
9690
};
9791

9892
mock.update(os_output);
@@ -116,8 +110,6 @@ fn state_update_invalid_previous_root() {
116110
full_output: 0,
117111
messages_to_l1: array![].span(),
118112
messages_to_l2: array![].span(),
119-
contracts: array![],
120-
classes: array![],
121113
};
122114

123115
mock.update(invalid_state_update);

0 commit comments

Comments
 (0)