Skip to content

Commit 31df310

Browse files
authored
fix(provider): explicitly use state based on the block number (#330)
1 parent e5a2659 commit 31df310

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

bin/katana/tests/db_prune.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ fn prune_keep_last_n_blocks(db: TempDb) {
9191
// block -> (classes root, contracts root)
9292
let mut historical_roots_reg = HashMap::new();
9393

94-
for num in 1..=latest_block {
94+
for num in 0..=latest_block {
9595
let (classes_root, contracts_root) = historical_roots(&provider, num).unwrap();
9696
assert!(classes_root != Felt::ZERO, "classes root for block {num} cannot be zero");
9797
assert!(contracts_root != Felt::ZERO, "contracts root for block {num} cannot be zero");
@@ -148,7 +148,7 @@ fn prune_keep_last_n_blocks_exceeds_available(db: TempDb) {
148148
let mut historical_roots_reg = HashMap::new();
149149

150150
// Verify all historical states are accessible before pruning
151-
for num in 1..=latest_block {
151+
for num in 0..=latest_block {
152152
let (classes_root, contracts_root) = historical_roots(&provider, num).unwrap();
153153
assert!(classes_root != Felt::ZERO, "classes root for block {num} cannot be zero");
154154
assert!(contracts_root != Felt::ZERO, "contracts root for block {num} cannot be zero");
@@ -180,7 +180,7 @@ fn prune_keep_last_n_blocks_exceeds_available(db: TempDb) {
180180
let (final_classes_root, final_contracts_root) = latest_roots(&provider).unwrap();
181181

182182
// Verify that NO pruning occurred - all historical states should still be accessible
183-
for num in 1..=latest_block {
183+
for num in 0..=latest_block {
184184
let (classes_root, contracts_root) = historical_roots(&provider, num).unwrap();
185185
let (expected_classes_root, expected_contracts_root) =
186186
historical_roots_reg.get(&num).unwrap();

bin/katana/tests/fixtures.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ pub fn db() -> TempDb {
6868
fn populate_db(db: &TempDb) {
6969
let provider = db.provider_rw();
7070

71-
for num in 1..=15u64 {
71+
for num in 0..=15u64 {
7272
let mut classes = BTreeMap::new();
7373

7474
let mut declared_classes = BTreeMap::new();

crates/storage/provider/provider/src/providers/db/trie.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,14 @@ impl<Db: Database> TrieWriter for DbProvider<Db> {
8585
let storage_root = storage_trie.root();
8686
leaf.storage_root = Some(storage_root);
8787

88-
let latest_state = self.latest()?;
89-
let leaf_hash = contract_state_leaf_hash(latest_state, &address, &leaf);
88+
let state = if block_number == 0 {
89+
self.latest()? // this will just default to an empty state
90+
} else {
91+
self.historical((block_number - 1).into())?
92+
.expect("historical state should exist")
93+
};
94+
95+
let leaf_hash = contract_state_leaf_hash(state, &address, &leaf);
9096

9197
Ok((address, leaf_hash))
9298
})

0 commit comments

Comments
 (0)