@@ -13,7 +13,7 @@ use katana_provider::api::transaction::{ReceiptProvider, TransactionProvider};
1313use katana_provider:: providers:: fork:: ForkedProvider ;
1414use katana_provider:: ProviderError ;
1515use katana_rpc_client:: starknet:: Client as StarknetClient ;
16- use katana_rpc_types:: Nodes ;
16+ use katana_rpc_types:: MerkleNode ;
1717
1818const SEPOLIA_RPC_URL : & str = "https://api.cartridge.gg/x/starknet/sepolia" ;
1919const FORK_BLOCK_NUMBER : u64 = 2888618 ;
@@ -298,14 +298,16 @@ async fn historical_fork_state() {
298298 assert ! ( result2. is_some( ) ) ;
299299}
300300
301- #[ ignore]
302301#[ tokio:: test( flavor = "multi_thread" ) ]
303302async fn pre_fork_state_proof ( ) {
304303 let starknet_client = StarknetClient :: new ( SEPOLIA_RPC_URL . try_into ( ) . unwrap ( ) ) ;
305304
306305 // always use the latest block number of the forked chain because most nodes may not support
307306 // proofs for too old blocks
308- let latest_block_number = starknet_client. block_number ( ) . await . unwrap ( ) . block_number ;
307+ //
308+ // we take the previous block because there were some instances where the latest block was not
309+ // available or supported by the node.
310+ let latest_block_number = starknet_client. block_number ( ) . await . unwrap ( ) . block_number - 1 ;
309311 let provider = ForkedProvider :: new_ephemeral ( latest_block_number, starknet_client. clone ( ) ) ;
310312
311313 let state = provider. latest ( ) . unwrap ( ) ;
@@ -318,18 +320,32 @@ async fn pre_fork_state_proof() {
318320 . await
319321 . unwrap ( ) ;
320322
321- assert_eq ! ( Nodes :: from( proofs) , expected_proofs. classes_proof. nodes) ;
323+ // TODO: assert the nodes ordering - ensure they are in the same order. currently, pathfinder
324+ // doesn't return the nodes in the same order as katana.
325+ assert_eq ! ( proofs. 0 . len( ) , expected_proofs. classes_proof. nodes. len( ) ) ;
326+ for expected_node in expected_proofs. classes_proof . nodes . 0 . into_iter ( ) {
327+ let node_hash = expected_node. node_hash ;
328+ let actual_node = proofs. 0 . get ( & node_hash) . cloned ( ) . map ( MerkleNode :: from) ;
329+ assert_eq ! ( Some ( expected_node. node) , actual_node)
330+ }
322331
323332 let contracts =
324- vec ! [ address!( "0x0164b86b8fC5C0c84d3c53Bc95760F290420Ea2a32ed49A44fd046683a1CaAc2 " ) ] ;
333+ vec ! [ address!( "0x04f4e29add19afa12c868ba1f4439099f225403ff9a71fe667eebb50e13518d3 " ) ] ;
325334 let proofs = state. contract_multiproof ( contracts. clone ( ) ) . unwrap ( ) ;
326335
327336 let expected_proofs = starknet_client
328337 . get_storage_proof ( latest_block_number. into ( ) , None , Some ( contracts) , None )
329338 . await
330339 . unwrap ( ) ;
331340
332- assert_eq ! ( Nodes :: from( proofs) , expected_proofs. classes_proof. nodes) ;
341+ // TODO: assert the nodes ordering - ensure they are in the same order. currently, pathfinder
342+ // doesn't return the nodes in the same order as katana.
343+ assert_eq ! ( proofs. 0 . len( ) , expected_proofs. contracts_proof. nodes. len( ) ) ;
344+ for expected_node in expected_proofs. contracts_proof . nodes . 0 . into_iter ( ) {
345+ let node_hash = expected_node. node_hash ;
346+ let actual_node = proofs. 0 . get ( & node_hash) . cloned ( ) . map ( MerkleNode :: from) ;
347+ assert_eq ! ( Some ( expected_node. node) , actual_node)
348+ }
333349}
334350
335351#[ tokio:: test]
0 commit comments