@@ -2,13 +2,16 @@ use std::time::Duration;
22
33use anyhow:: Result ;
44use katana_primitives:: block:: BlockNumber ;
5- use katana_primitives:: class:: { CasmContractClass , ClassHash , CompiledClass , ContractClass } ;
5+ use katana_primitives:: class:: {
6+ CasmContractClass , ClassHash , CompiledClass , ContractClass , SierraContractClass ,
7+ } ;
68use katana_primitives:: conversion:: rpc:: { legacy_rpc_to_class, StarknetRsLegacyContractClass } ;
7- use katana_provider:: traits:: contract:: ContractClassWriter ;
9+ use katana_provider:: traits:: contract:: { ContractClassWriter , ContractClassWriterExt } ;
810use katana_provider:: traits:: state_update:: StateUpdateProvider ;
11+ use katana_rpc_types:: class:: RpcSierraContractClass ;
912use starknet:: providers:: sequencer:: models:: { BlockId , DeployedClass } ;
1013use starknet:: providers:: { ProviderError , SequencerGatewayProvider } ;
11- use tracing:: debug ;
14+ use tracing:: info ;
1215
1316use super :: { Stage , StageExecutionInput , StageResult } ;
1417
@@ -35,44 +38,31 @@ where
3538 P : StateUpdateProvider + ContractClassWriter ,
3639{
3740 #[ allow( deprecated) ]
38- async fn get_class (
39- & self ,
40- hash : ClassHash ,
41- block : BlockNumber ,
42- ) -> Result < ( ContractClass , Option < CompiledClass > ) , Error > {
43- let block_id = BlockId :: Number ( block) ;
41+ async fn get_class ( & self , hash : ClassHash , block : BlockNumber ) -> Result < ContractClass , Error > {
42+ let class = self . feeder_gateway . get_class_by_hash ( hash, BlockId :: Number ( block) ) . await ?;
4443
45- let ( class, casm) = tokio:: join!(
46- self . feeder_gateway. get_class_by_hash( hash, block_id) ,
47- self . feeder_gateway. get_compiled_class_by_class_hash( hash, block_id)
48- ) ;
49-
50- let ( class, casm) = ( class?, casm?) ;
51-
52- let ( class, casm) = match class {
44+ let class = match class {
5345 DeployedClass :: LegacyClass ( legacy) => {
5446 let class = to_inner_legacy_class ( legacy) . unwrap ( ) ;
55- ( class, None )
47+ class
5648 }
5749
50+ // TODO: implement our own fgw client using our own types for easier conversion
5851 DeployedClass :: SierraClass ( sierra) => {
59- // TODO: change this shyte
60- let value = serde_json:: to_value ( casm) . unwrap ( ) ;
61- let casm = serde_json:: from_value :: < CasmContractClass > ( value) . unwrap ( ) ;
62- let compiled = CompiledClass :: Class ( casm) ;
63-
64- ( ContractClass :: Class ( sierra) , Some ( compiled) )
52+ let rpc_class = RpcSierraContractClass :: try_from ( sierra) . unwrap ( ) ;
53+ let class = SierraContractClass :: try_from ( rpc_class) . unwrap ( ) ;
54+ ContractClass :: Class ( class)
6555 }
6656 } ;
6757
68- Ok ( ( class, casm ) )
58+ Ok ( class)
6959 }
7060}
7161
7262#[ async_trait:: async_trait]
7363impl < P > Stage for Classes < P >
7464where
75- P : StateUpdateProvider + ContractClassWriter ,
65+ P : StateUpdateProvider + ContractClassWriter + ContractClassWriterExt ,
7666{
7767 fn id ( & self ) -> & ' static str {
7868 "Classes"
@@ -84,16 +74,12 @@ where
8474 let class_hashes = self . provider . declared_classes ( i. into ( ) ) ?. unwrap ( ) ;
8575
8676 // TODO: do this in parallel
87- for class_hash in class_hashes. keys ( ) {
88- debug ! ( target: "pipeline" , "Fetching class artifacts for class hash {class_hash :#x}") ;
77+ for hash in class_hashes. keys ( ) {
78+ info ! ( target: "pipeline" , class_hash = format! ( "{hash :#x}" ) , "Fetching class artifacts. ") ;
8979
9080 // 1. fetch sierra and casm class from fgw
91- let ( class, compiled) = self . get_class ( * class_hash, i) . await ?;
92-
93- self . provider . set_class ( * class_hash, class) ?;
94- if let Some ( casm) = compiled {
95- self . provider . set_compiled_class ( * class_hash, casm) ?;
96- }
81+ let class = self . get_class ( * hash, i) . await ?;
82+ self . provider . set_class ( * hash, class) ?;
9783
9884 tokio:: time:: sleep ( Duration :: from_secs ( 1 ) ) . await ;
9985 }
0 commit comments