@@ -7,12 +7,10 @@ use anyhow::{Context, Result};
7
7
use blockifier:: execution:: contract_class:: { CompiledClassV1 , RunnableCompiledClass } ;
8
8
use blockifier:: execution:: native:: contract_class:: NativeCompiledClassV1 ;
9
9
use blockifier:: state:: { errors:: StateError , state_api:: State } ;
10
- use cairo_lang_starknet_classes:: contract_class:: ContractClass ;
11
- use cairo_native:: executor:: AotContractExecutor ;
12
10
use conversions:: IntoConv ;
13
11
use conversions:: serde:: serialize:: CairoSerialize ;
12
+ use scarb_api:: StarknetContractArtifacts ;
14
13
use starknet:: core:: types:: contract:: SierraClass ;
15
- use starknet_api:: contract_class:: SierraVersion ;
16
14
use starknet_api:: core:: { ClassHash , CompiledClassHash } ;
17
15
18
16
#[ derive( CairoSerialize ) ]
@@ -31,41 +29,7 @@ pub fn declare(
31
29
. with_context ( || format ! ( "Failed to get contract artifact for name = {contract_name}." ) )
32
30
. map_err ( EnhancedHintError :: from) ?;
33
31
34
- let sierra_contract_class: ContractClass =
35
- serde_json:: from_str ( & contract_artifact. sierra ) . unwrap ( ) ;
36
-
37
- let sierra_program = sierra_contract_class
38
- . extract_sierra_program ( )
39
- . expect ( "Cannot extract sierra program from sierra contract class" ) ;
40
-
41
- let sierra_version_values = sierra_contract_class
42
- . sierra_program
43
- . iter ( )
44
- . take ( 3 )
45
- . map ( |x| x. value . clone ( ) )
46
- . collect :: < Vec < _ > > ( ) ;
47
-
48
- let sierra_version = SierraVersion :: extract_from_program ( & sierra_version_values)
49
- . expect ( "Cannot extract sierra version from sierra program" ) ;
50
-
51
- let executor = AotContractExecutor :: new (
52
- & sierra_program,
53
- & sierra_contract_class. entry_points_by_type ,
54
- sierra_version. clone ( ) . into ( ) ,
55
- cairo_native:: OptLevel :: Default ,
56
- // `stats` - Passing a [cairo_native::statistics::Statistics] object enables collecting
57
- // compilation statistics.
58
- None ,
59
- )
60
- . expect ( "Cannot compile sierra into native" ) ;
61
-
62
- let contract_class = CompiledClassV1 :: try_from_json_string (
63
- & contract_artifact. casm ,
64
- get_current_sierra_version ( ) ,
65
- )
66
- . expect ( "Failed to read contract class from json" ) ;
67
- let contract_class = NativeCompiledClassV1 :: new ( executor, contract_class) ;
68
- let contract_class = RunnableCompiledClass :: V1Native ( contract_class) ;
32
+ let contract_class = get_contract_class ( contract_artifact) ;
69
33
70
34
let class_hash = * contracts_data
71
35
. get_class_hash ( contract_name)
@@ -101,3 +65,19 @@ pub fn declare(
101
65
pub fn get_class_hash ( sierra_class : & SierraClass ) -> Result < ClassHash > {
102
66
Ok ( sierra_class. class_hash ( ) ?. into_ ( ) )
103
67
}
68
+
69
+ fn get_contract_class ( contract_artifact : & StarknetContractArtifacts ) -> RunnableCompiledClass {
70
+ let contract_class = CompiledClassV1 :: try_from_json_string (
71
+ & contract_artifact. casm ,
72
+ get_current_sierra_version ( ) ,
73
+ )
74
+ . expect ( "Failed to read contract class from json" ) ;
75
+
76
+ match & contract_artifact. executor {
77
+ None => RunnableCompiledClass :: V1 ( contract_class) ,
78
+ Some ( executor) => RunnableCompiledClass :: V1Native ( NativeCompiledClassV1 :: new (
79
+ executor. clone ( ) ,
80
+ contract_class,
81
+ ) ) ,
82
+ }
83
+ }
0 commit comments