Skip to content

Commit d3a91a8

Browse files
authored
feat: add migrated class hashes in state update (#379)
Adds a new field to the state diff types for class hashes whose CASM hash has been migrated to the new hash function. This changes are part of the RPC v0.10.0 and Starknet 0.14.1 update. ## Database Changes Introduces a new table, `MigratedCompiledClassHash` - a dupsort table for indexing the list of migrated class hashes according to the block number where the migration occurred. This change doesn't require bumping the database version as it is backward compatible. Queries performed on the table would not fail and simply return an empty result. Which is still the expected behaviour considering that this table only make sense for Katana with 0.14.1 support which versions prior to this PR have no support for. ## References * Starknet 0.14.1 pre-release notes. https://community.starknet.io/t/starknet-v0-14-1-prerelease-notes/116032 * SNIP34 proposal for CASM hash change. https://community.starknet.io/t/snip-34-more-efficient-casm-hashes/115979
1 parent bbce8c4 commit d3a91a8

File tree

21 files changed

+1125
-321
lines changed

21 files changed

+1125
-321
lines changed

bin/katana/tests/fixtures.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,13 @@ fn populate_db(db: &TempDb) {
7878
classes.insert(hash, ContractClass::Legacy(Default::default()));
7979
}
8080

81+
let mut migrated_compiled_classes = BTreeMap::new();
82+
for _ in 0..10 {
83+
let hash = arbitrary!(ClassHash);
84+
let compiled_class_hash = arbitrary!(ClassHash);
85+
migrated_compiled_classes.insert(hash, compiled_class_hash);
86+
}
87+
8188
let mut nonce_updates = BTreeMap::new();
8289
for _ in 0..10 {
8390
nonce_updates.insert(arbitrary!(ContractAddress), arbitrary!(Nonce));
@@ -110,9 +117,12 @@ fn populate_db(db: &TempDb) {
110117
replaced_classes,
111118
deployed_contracts,
112119
deprecated_declared_classes,
120+
migrated_compiled_classes,
113121
};
114122

115-
provider.trie_insert_declared_classes(num, &state_updates.declared_classes).unwrap();
123+
provider
124+
.trie_insert_declared_classes(num, state_updates.declared_classes.clone().into_iter())
125+
.unwrap();
116126
provider.trie_insert_contract_updates(num, &state_updates).unwrap();
117127

118128
let mut block = Block::default();

crates/core/src/backend/mod.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::collections::{BTreeMap, HashMap};
1+
use std::collections::HashMap;
22
use std::sync::Arc;
33

44
use anyhow::{anyhow, Context};
@@ -525,7 +525,10 @@ impl<'a, P: TrieWriter> UncommittedBlock<'a, P> {
525525
fn compute_new_state_root(&self) -> Felt {
526526
let class_trie_root = self
527527
.provider
528-
.trie_insert_declared_classes(self.header.number, &self.state_updates.declared_classes)
528+
.trie_insert_declared_classes(
529+
self.header.number,
530+
self.state_updates.declared_classes.clone().into_iter(),
531+
)
529532
.expect("failed to update class trie");
530533

531534
let contract_trie_root = self
@@ -676,12 +679,12 @@ impl TrieWriter for GenesisTrieWriter {
676679
fn trie_insert_declared_classes(
677680
&self,
678681
block_number: BlockNumber,
679-
updates: &BTreeMap<ClassHash, CompiledClassHash>,
682+
updates: impl Iterator<Item = (ClassHash, CompiledClassHash)>,
680683
) -> katana_provider::ProviderResult<Felt> {
681684
let mut trie = ClassesTrie::new(HashMapDb::default());
682685

683686
for (class_hash, compiled_hash) in updates {
684-
trie.insert(*class_hash, *compiled_hash);
687+
trie.insert(class_hash, compiled_hash);
685688
}
686689

687690
trie.commit(block_number);

crates/executor/src/implementation/blockifier/utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,7 @@ pub(super) fn state_update_from_cached_state(state: &CachedState<'_>) -> StateUp
564564
deployed_contracts,
565565
deprecated_declared_classes,
566566
replaced_classes: BTreeMap::default(),
567+
migrated_compiled_classes: BTreeMap::default(),
567568
},
568569
}
569570
}
Lines changed: 330 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,330 @@
1+
{
2+
"block_hash": "0x1935ec0e5c7758fdc11a78ed9d4cadd4225eab826aabd98fe2d04b45ca4c150",
3+
"new_root": "0x7e72ca880e4fa1f4987257d90b2642860a4574a03b79ac830f6fb5968520977",
4+
"old_root": "0x484d8010568613b1878e03085989536d9112d89e2979297f0fbd741a3f73138",
5+
"state_diff": {
6+
"storage_diffs": {
7+
"0x1": [
8+
{
9+
"key": "0x3f04c6",
10+
"value": "0x3e53fff98965235e64b766ad713b1d9730027c6cf41ffb2ace60c1979b02bc7"
11+
}
12+
],
13+
"0x2": [
14+
{
15+
"key": "0x0",
16+
"value": "0x78b0fb7"
17+
},
18+
{
19+
"key": "0xd58a4bdab51dbf1e5c9178814cc4adf01ebe0c872d0ed61b4e54922cc1b996",
20+
"value": "0x78b0fb1"
21+
},
22+
{
23+
"key": "0x37a3f18631ffdfbc04751ecf46226bcca4194f7ee3743da23d45503e78a8031",
24+
"value": "0x78b0fb4"
25+
},
26+
{
27+
"key": "0x37a3f18631ffdfbc04751ecf46226bcca4194f7ee3743da23d45503e78a8032",
28+
"value": "0x78b0fb5"
29+
},
30+
{
31+
"key": "0x3ee4ba0f59886159d92a35f96ded219dd7f69c30953f9b68d333f10a27e312b",
32+
"value": "0x78b0fb2"
33+
},
34+
{
35+
"key": "0x51434bb3f996080c738de8a0ef10304fa880084fd55cb896c136e4873854f0b",
36+
"value": "0x78b0fad"
37+
},
38+
{
39+
"key": "0x51434bb3f996080c738de8a0ef10304fa880084fd55cb896c136e4873854f0c",
40+
"value": "0x78b0fae"
41+
},
42+
{
43+
"key": "0x51434bb3f996080c738de8a0ef10304fa880084fd55cb896c136e4873854f0d",
44+
"value": "0x78b0faf"
45+
},
46+
{
47+
"key": "0x51434bb3f996080c738de8a0ef10304fa880084fd55cb896c136e4873854f0e",
48+
"value": "0x78b0fb0"
49+
},
50+
{
51+
"key": "0x5e4542324cd70f0da676f0418afaecd12405976d2356fec26293a460a48bf13",
52+
"value": "0x78b0fb6"
53+
},
54+
{
55+
"key": "0x67e2b7df13c81d03441781ccd8f64bfdb0fce02f5ddc22cb35c8144c59c02f6",
56+
"value": "0x78b0fb3"
57+
},
58+
{
59+
"key": "0x6d410d47be5497b0dafef14e24c8767731a6e50126ff8fa99f25a0d0ee02788",
60+
"value": "0x78b0fac"
61+
}
62+
],
63+
"0x3df887ee9fcdbde0d5cee8bd63fa66dee1662a1f44b075f744952cc99b6b13": [
64+
{
65+
"key": "0xfc7fce0137ef0fdf47d2297ba791a15d3f3f1801dc7ef0b2aa311ad5d4034c",
66+
"value": "0x155d5ef96092800c8f58"
67+
},
68+
{
69+
"key": "0x29904f220cd5d7c3928339c9760e0459aa13e8f35214b3e510f51042a8e027d",
70+
"value": "0x744d8b7db6286804a"
71+
},
72+
{
73+
"key": "0x29904f220cd5d7c3928339c9760e0459aa13e8f35214b3e510f51042a8e027f",
74+
"value": "0xeddb83"
75+
},
76+
{
77+
"key": "0x29904f220cd5d7c3928339c9760e0459aa13e8f35214b3e510f51042a8e0281",
78+
"value": "0x69393984"
79+
},
80+
{
81+
"key": "0x29904f220cd5d7c3928339c9760e0459aa13e8f35214b3e510f51042a8e0284",
82+
"value": "0xd09a27d0809e1caf7"
83+
}
84+
],
85+
"0x12f173ebf374db69c33c4176b4c2bd4cde1bca1ceb7ff88b52dc42e7c5f66f1": [
86+
{
87+
"key": "0x3342fa999fea16067b1f01baf96673f31a25f2b1443e6754d93fc40b57e8df2",
88+
"value": "0x1682fb66a5adc2bb"
89+
},
90+
{
91+
"key": "0x3342fa999fea16067b1f01baf96673f31a25f2b1443e6754d93fc40b57e8df6",
92+
"value": "0x69393984"
93+
}
94+
],
95+
"0x18469ed2d40a016a602371173c7287e25f85cb6abb6fc0866d3c444e2837603": [
96+
{
97+
"key": "0x6d410d47be5497b0dafef14e24c8767731a6e50126ff8fa99f25a0d0ee02788",
98+
"value": "0x1"
99+
}
100+
],
101+
"0x1b14326182638866e10d804d7a9e9fd51a522c8ac59ab9b1b11975d21fae9c7": [
102+
{
103+
"key": "0xefb0884a0332bee3218e5114a1f5a8b94b7f3a0aa4b620ecd81bc37c64598f",
104+
"value": "0x5880301"
105+
},
106+
{
107+
"key": "0x329c7ad716328e6d50f9ca0db199b7680edd1f9888de9e870e256b4d829dd57",
108+
"value": "0x75585"
109+
},
110+
{
111+
"key": "0x51434bb3f996080c738de8a0ef10304fa880084fd55cb896c136e4873854f0b",
112+
"value": "0xa90224"
113+
},
114+
{
115+
"key": "0x51434bb3f996080c738de8a0ef10304fa880084fd55cb896c136e4873854f0c",
116+
"value": "0x3f04d0"
117+
},
118+
{
119+
"key": "0x51434bb3f996080c738de8a0ef10304fa880084fd55cb896c136e4873854f0d",
120+
"value": "0x69393933"
121+
},
122+
{
123+
"key": "0x51434bb3f996080c738de8a0ef10304fa880084fd55cb896c136e4873854f0e",
124+
"value": "0x69393984"
125+
}
126+
],
127+
"0x223e2f1b09f495eb4784de5da08751eef6339294e3e02f525c49b3c4df38880": [
128+
{
129+
"key": "0x324fce85c2297d7ff9c265222108145baf05cde91f2da32b3877560d78916ac",
130+
"value": "0xdff7d"
131+
}
132+
],
133+
"0x2ef591697f0fd9adc0ba9dbe0ca04dabad80cf95f08ba02e435d9cb6698a28a": [
134+
{
135+
"key": "0x1379c436357371c42e43fedcbd051f6fe836d50df1d57bd62bedc69f7a9ca03",
136+
"value": "0xe00000921c0000db955581216d5f5521415f20c1210e100000c02647b"
137+
}
138+
],
139+
"0x377c2d65debb3978ea81904e7d59740da1f07412e30d01c5ded1c5d6f1ddc43": [
140+
{
141+
"key": "0xd58a4bdab51dbf1e5c9178814cc4adf01ebe0c872d0ed61b4e54922cc1b996",
142+
"value": "0x69dcb48a56745cdc27194572d04f1e5a95781371c95244bd4588669488a6ca0"
143+
},
144+
{
145+
"key": "0x3ee4ba0f59886159d92a35f96ded219dd7f69c30953f9b68d333f10a27e312b",
146+
"value": "0x18469ed2d40a016a602371173c7287e25f85cb6abb6fc0866d3c444e2837603"
147+
},
148+
{
149+
"key": "0x484b46148d37383593029fa3b4c09a5e0e3cb66bbcf5fc66529fa452ccc6e34",
150+
"value": "0x8"
151+
},
152+
{
153+
"key": "0x6e1a3e69a0abb3927c8349aee9a5d839de8053af580fdfa7ad5f22c0fe663fb",
154+
"value": "0xae"
155+
}
156+
],
157+
"0x3c4b9713e7d408681f8f541b999cfba9d0a85cd4152140e75d97353d5ecc8f0": [
158+
{
159+
"key": "0x2208eb7142b20a00788438f9ba35fdef173c7680ba652fbfa239fef3addf2b1",
160+
"value": "0x1e52d71"
161+
},
162+
{
163+
"key": "0x33043a6019faaaacd896299801314dabcc91bc7d39ce3e8d557f431280a456b",
164+
"value": "0x3c557401365e136ba378b"
165+
},
166+
{
167+
"key": "0x3fc73af821c877aa6ced977a0bc34de21bb584b2954c82c06c80d3bc0cce026",
168+
"value": "0x8139fd44b2b34049169b3c5b5da"
169+
}
170+
],
171+
"0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d": [
172+
{
173+
"key": "0x129226399a3e8e88b4c9f04e61229c79b33bcd6e6204fce73b383cf5c93fc33",
174+
"value": "0x2e8c2f263c8319c36b"
175+
},
176+
{
177+
"key": "0x232431de833901e6d877a0ac4bfd9e1d4a2ccafee5f9dfd8b9e1ba5575a48db",
178+
"value": "0x56a660814c34e396"
179+
},
180+
{
181+
"key": "0x32d1ea410b5bc194a70d11ed61ed4ccd46fb14c08014c3dae9d0b43eefa5426",
182+
"value": "0x168dc46f10f91510"
183+
},
184+
{
185+
"key": "0x341b8d18ee008343d6a5ca5b846c332e31416d9a531473330016d5a4bedcd88",
186+
"value": "0x744d8b7db6286804a"
187+
},
188+
{
189+
"key": "0x3d7ccfb9e9c5944c7a3226921716da0d42239892dbde7b12c1e5597d31c4124",
190+
"value": "0x3138ac97ca17d45c7515"
191+
},
192+
{
193+
"key": "0x428b8bf52f845d23614a1144ecb19fec6156cdb86ed63f4ffa89d467c9d56f0",
194+
"value": "0x9e18c2326c4c9ec30c"
195+
},
196+
{
197+
"key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a",
198+
"value": "0x131fb601e0da1c14012ed"
199+
},
200+
{
201+
"key": "0x54c222c4c7612af283391cc175e9ba95b706989f0ebf07502f9ac5ed89f1d6c",
202+
"value": "0x2aca9acc8480ec7ac"
203+
},
204+
{
205+
"key": "0x69156455e9666009c6db030647b6779b5137551d6f5b16c4ea53a1b3a425561",
206+
"value": "0xc2a36c4dd1c70ace0"
207+
},
208+
{
209+
"key": "0x71b83ef0f4cb2ccaa36ef634622714589223ed6e67ad6eae365827a5f829161",
210+
"value": "0x9c5d62bbf9a9466b88"
211+
},
212+
{
213+
"key": "0x7baedaf13ef4d370383337a289792e2ae5747607cf278d8ceeb30274355c1e1",
214+
"value": "0x9bc76445c15ef04128"
215+
}
216+
],
217+
"0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7": [
218+
{
219+
"key": "0x3d7ccfb9e9c5944c7a3226921716da0d42239892dbde7b12c1e5597d31c4124",
220+
"value": "0x6ba79cb95c262a20"
221+
},
222+
{
223+
"key": "0x4ce9e044cc4ea3671f19777c34fbb4e6c42f40b39b409fe794602732b423e35",
224+
"value": "0x7584268fc4b3fe2"
225+
}
226+
],
227+
"0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8": [
228+
{
229+
"key": "0x28635d134a5c3c8534adbf4b3fcf41028eac53e6f04a6835290b78cbef31807",
230+
"value": "0xba"
231+
},
232+
{
233+
"key": "0x32d1ea410b5bc194a70d11ed61ed4ccd46fb14c08014c3dae9d0b43eefa5426",
234+
"value": "0x0"
235+
},
236+
{
237+
"key": "0x38e0503b87211df933ca34a5a6f1677f88d16890ec6fb843e975e273e80467e",
238+
"value": "0x2078dcd414"
239+
},
240+
{
241+
"key": "0x4ce9e044cc4ea3671f19777c34fbb4e6c42f40b39b409fe794602732b423e35",
242+
"value": "0x8d29f2be"
243+
},
244+
{
245+
"key": "0x4e1c1355394243f72d1536f721b2b63aed57a67a5b60817cde5e3af9faa194f",
246+
"value": "0x5bb128bb54c5"
247+
}
248+
],
249+
"0x5a7a86d6113c8860f90f96ea1c8e70a747333feabb40b0584c3936fa6f86717": [
250+
{
251+
"key": "0x67e2b7df13c81d03441781ccd8f64bfdb0fce02f5ddc22cb35c8144c59c02f6",
252+
"value": "0x1"
253+
}
254+
],
255+
"0x62da0780fae50d68cecaa5a051606dc21217ba290969b302db4dd99d2e9b470": [
256+
{
257+
"key": "0x37a3f18631ffdfbc04751ecf46226bcca4194f7ee3743da23d45503e78a8031",
258+
"value": "0x3"
259+
},
260+
{
261+
"key": "0x37a3f18631ffdfbc04751ecf46226bcca4194f7ee3743da23d45503e78a8032",
262+
"value": "0x69393984"
263+
}
264+
],
265+
"0x68400056dccee818caa7e8a2c305f9a60d255145bac22d6c5c9bf9e2e046b71": [
266+
{
267+
"key": "0x3e9df762c67f04c3d19de6f877d7906e3a52e992c3f97013dc2450ab7851c9",
268+
"value": "0x6ba79cb95c262a20"
269+
},
270+
{
271+
"key": "0x1f5dba4f0e386fe3e03022985e50076614214c29faad4f1a66fd553c39c47ed",
272+
"value": "0x3138ac97ca17d45c7515"
273+
}
274+
],
275+
"0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8": [
276+
{
277+
"key": "0x32d1ea410b5bc194a70d11ed61ed4ccd46fb14c08014c3dae9d0b43eefa5426",
278+
"value": "0x85a2e"
279+
},
280+
{
281+
"key": "0x341b8d18ee008343d6a5ca5b846c332e31416d9a531473330016d5a4bedcd88",
282+
"value": "0xeddb83"
283+
},
284+
{
285+
"key": "0x493875a3926558b908441a8fd6642a9f5b85f7fc5e39289c3a83b72b2eca837",
286+
"value": "0x2ad3b8411"
287+
}
288+
],
289+
"0x69dcb48a56745cdc27194572d04f1e5a95781371c95244bd4588669488a6ca0": [
290+
{
291+
"key": "0x5e4542324cd70f0da676f0418afaecd12405976d2356fec26293a460a48bf13",
292+
"value": "0x1"
293+
}
294+
],
295+
"0x7229d1454093674673a530cd0d37beef3fc0f1b3116d95c62c5c032f1827d87": [
296+
{
297+
"key": "0x38c22f06d1a1a3c7432edc69ea247f27fe02c8463b142118b802c9791bbc2ba",
298+
"value": "0x11237d6a"
299+
},
300+
{
301+
"key": "0x52239ed1307efbb7852382b35cd1328f3ae408fc01d99ca882db67a61ee1407",
302+
"value": "0x0"
303+
},
304+
{
305+
"key": "0x52239ed1307efbb7852382b35cd1328f3ae408fc01d99ca882db67a61ee1408",
306+
"value": "0x0"
307+
}
308+
]
309+
},
310+
"deployed_contracts": [],
311+
"old_declared_contracts": [],
312+
"declared_classes": [],
313+
"nonces": {
314+
"0x338e702f015198672d2e087c93b403b35e7c90c2ba436f8397a03a661830fe": "0x51b3f",
315+
"0x10aeeaa11d863f2e53373106e6807cec1fc6e8ed95a4e8b710665b7068dd8e6": "0xc268",
316+
"0x2d0356738e30a3ce3d7ec6368e64d286ef71fa444990676ef1e083f68edd266": "0x2ac53",
317+
"0x662776dac110a170767d83da4f1d8fae022df7aa8a78252eb9c501c68d49604": "0x1bb63",
318+
"0x70366dd8425e129d7dbd7f6db2bb948bba8616563f83f043507a20c11e0d187": "0x1bb7f",
319+
"0x7c0b8a20b433194608a907c6666ecd532991ac3d90a571d38547b62ebc5e21a": "0x3b",
320+
"0x7c183208cf2fc08503ed1edb44694295a07d0adc25bb6dad1b40f4540a427fa": "0x1baee"
321+
},
322+
"replaced_classes": [],
323+
"migrated_compiled_classes": [
324+
{
325+
"class_hash": "0x4ac055f14361bb6f7bf4b9af6e96ca68825e6037e9bdf87ea0b2c641dea73ae",
326+
"compiled_class_hash": "0x17f3b8f7225a160ec0542ea5c44ee876f2b132e7dee00ec36f2422d8155a4e4"
327+
}
328+
]
329+
}
330+
}

0 commit comments

Comments
 (0)