@@ -4,19 +4,18 @@ use anyhow::{anyhow, Context, Result};
44use clap:: Parser ;
55use fixtures:: { db, TempDb } ;
66use katana:: cli:: Cli ;
7- use katana_db:: abstraction:: Database ;
87use katana_primitives:: Felt ;
98use katana_provider:: api:: block:: BlockNumberProvider ;
109use katana_provider:: api:: state:: { StateFactoryProvider , StateRootProvider } ;
11- use katana_provider:: providers :: db :: DbProvider ;
10+ use katana_provider:: ProviderFactory ;
1211use rstest:: * ;
1312
1413mod fixtures;
1514
1615/// Verify that historical state roots can be retrieved for specific blocks
1716/// Returns Ok(()) if the state root can be retrieved, Err if it cannot
18- fn historical_roots < Db : Database > (
19- provider : & DbProvider < Db > ,
17+ fn historical_roots (
18+ provider : impl StateFactoryProvider ,
2019 block_number : u64 ,
2120) -> Result < ( Felt , Felt ) > {
2221 let historical = provider
@@ -33,7 +32,7 @@ fn historical_roots<Db: Database>(
3332}
3433
3534/// Get the current state roots (classes and contracts)
36- fn latest_roots < Db : Database > ( provider : & DbProvider < Db > ) -> Result < ( Felt , Felt ) > {
35+ fn latest_roots ( provider : impl StateFactoryProvider ) -> Result < ( Felt , Felt ) > {
3736 let state_provider = provider. latest ( ) . context ( "failed to get latest state provider" ) ?;
3837 let classes_root = state_provider. classes_root ( ) . context ( "failed to get classes root" ) ?;
3938 let contracts_root = state_provider. contracts_root ( ) . context ( "failed to get contracts root" ) ?;
@@ -42,7 +41,9 @@ fn latest_roots<Db: Database>(provider: &DbProvider<Db>) -> Result<(Felt, Felt)>
4241
4342#[ rstest]
4443fn prune_latest_removes_all_history ( db : TempDb ) {
45- let provider = db. provider_ro ( ) ;
44+ let provider_factory = db. provider_factory ( ) ;
45+ let provider = provider_factory. provider ( ) ;
46+
4647 let latest_block = provider. latest_number ( ) . unwrap ( ) ;
4748
4849 for num in 1 ..=latest_block {
@@ -52,13 +53,16 @@ fn prune_latest_removes_all_history(db: TempDb) {
5253 }
5354
5455 let ( initial_classes_root, initial_contracts_root) = latest_roots ( & provider) . unwrap ( ) ;
56+
5557 drop ( provider) ;
58+ drop ( provider_factory) ;
5659
5760 // Will prune all historical tries (blocks < 15)
5861 let path = db. path_str ( ) ;
5962 Cli :: parse_from ( [ "katana" , "db" , "prune" , "--path" , path, "--latest" , "-y" ] ) . run ( ) . unwrap ( ) ;
6063
61- let provider = db. provider_ro ( ) ;
64+ let provider_factory = db. provider_factory ( ) ;
65+ let provider = provider_factory. provider ( ) ;
6266
6367 // Verify historical states (0 -> 14) are no longer accessible (ie zero)
6468 for num in 0 ..=14u64 {
@@ -85,7 +89,9 @@ fn prune_latest_removes_all_history(db: TempDb) {
8589
8690#[ rstest]
8791fn prune_keep_last_n_blocks ( db : TempDb ) {
88- let provider = db. provider_ro ( ) ;
92+ let provider_factory = db. provider_factory ( ) ;
93+ let provider = provider_factory. provider ( ) ;
94+
8995 let latest_block = provider. latest_number ( ) . unwrap ( ) ;
9096
9197 // block -> (classes root, contracts root)
@@ -99,15 +105,19 @@ fn prune_keep_last_n_blocks(db: TempDb) {
99105 }
100106
101107 let ( initial_classes_root, initial_contracts_root) = latest_roots ( & provider) . unwrap ( ) ;
108+
102109 drop ( provider) ;
110+ drop ( provider_factory) ;
103111
104112 let keep_last_n = 3 ;
105113 let path = db. path_str ( ) ;
106114 Cli :: parse_from ( [ "katana" , "db" , "prune" , "--path" , path, "--keep-last" , "3" , "-y" ] )
107115 . run ( )
108116 . unwrap ( ) ;
109117
110- let provider = db. provider_ro ( ) ;
118+ let provider_factory = db. provider_factory ( ) ;
119+ let provider = provider_factory. provider ( ) ;
120+
111121 let ( final_classes_root, final_contracts_root) = latest_roots ( & provider) . unwrap ( ) ;
112122
113123 // pruned blocks (ie blocks before the cuttoff point) should be zero
@@ -141,7 +151,9 @@ fn prune_keep_last_n_blocks(db: TempDb) {
141151
142152#[ rstest]
143153fn prune_keep_last_n_blocks_exceeds_available ( db : TempDb ) {
144- let provider = db. provider_ro ( ) ;
154+ let provider_factory = db. provider_factory ( ) ;
155+ let provider = provider_factory. provider ( ) ;
156+
145157 let latest_block = provider. latest_number ( ) . unwrap ( ) ;
146158
147159 // block -> (classes root, contracts root)
@@ -156,7 +168,9 @@ fn prune_keep_last_n_blocks_exceeds_available(db: TempDb) {
156168 }
157169
158170 let ( initial_classes_root, initial_contracts_root) = latest_roots ( & provider) . unwrap ( ) ;
171+
159172 drop ( provider) ;
173+ drop ( provider_factory) ;
160174
161175 // Request to keep more blocks than are available
162176 let keep_last_n = latest_block + 10 ;
@@ -176,7 +190,9 @@ fn prune_keep_last_n_blocks_exceeds_available(db: TempDb) {
176190 . run ( )
177191 . unwrap ( ) ;
178192
179- let provider = db. provider_ro ( ) ;
193+ let provider_factory = db. provider_factory ( ) ;
194+ let provider = provider_factory. provider ( ) ;
195+
180196 let ( final_classes_root, final_contracts_root) = latest_roots ( & provider) . unwrap ( ) ;
181197
182198 // Verify that NO pruning occurred - all historical states should still be accessible
0 commit comments