@@ -9,13 +9,17 @@ use cairo_lang_sierra::{
9
9
extensions:: {
10
10
circuit:: CircuitTypeConcrete ,
11
11
core:: { CoreConcreteLibfunc , CoreLibfunc , CoreType , CoreTypeConcrete } ,
12
+ gas:: CostTokenType ,
12
13
starknet:: StarkNetTypeConcrete ,
13
14
ConcreteLibfunc , ConcreteType ,
14
15
} ,
15
16
ids:: { ConcreteLibfuncId , FunctionId , VarId } ,
16
17
program:: { GenFunction , GenStatement , Invocation , Program , StatementIdx } ,
17
18
program_registry:: ProgramRegistry ,
18
19
} ;
20
+ use cairo_lang_starknet_classes:: {
21
+ casm_contract_class:: ENTRY_POINT_COST , contract_class:: ContractEntryPoints ,
22
+ } ;
19
23
use cairo_lang_utils:: ordered_hash_map:: OrderedHashMap ;
20
24
use smallvec:: { smallvec, SmallVec } ;
21
25
use starknet_types_core:: felt:: Felt ;
@@ -79,10 +83,33 @@ impl VirtualMachine {
79
83
}
80
84
81
85
impl < S : StarknetSyscallHandler > VirtualMachine < S > {
82
- pub fn new_starknet ( program : Arc < Program > , syscall_handler : S ) -> Self {
86
+ pub fn new_starknet (
87
+ program : Arc < Program > ,
88
+ entry_points : & ContractEntryPoints ,
89
+ syscall_handler : S ,
90
+ ) -> Self {
83
91
let registry = ProgramRegistry :: new ( & program) . unwrap ( ) ;
84
92
Self {
85
- gas : GasMetadata :: new ( & program, Some ( MetadataComputationConfig :: default ( ) ) ) . unwrap ( ) ,
93
+ gas : GasMetadata :: new (
94
+ & program,
95
+ Some ( MetadataComputationConfig {
96
+ function_set_costs : entry_points
97
+ . constructor
98
+ . iter ( )
99
+ . chain ( entry_points. external . iter ( ) )
100
+ . chain ( entry_points. l1_handler . iter ( ) )
101
+ . map ( |id| {
102
+ (
103
+ program. funcs [ id. function_idx ] . id . clone ( ) ,
104
+ [ ( CostTokenType :: Const , ENTRY_POINT_COST ) ] . into ( ) ,
105
+ )
106
+ } )
107
+ . collect ( ) ,
108
+ linear_gas_solver : true ,
109
+ linear_ap_change_solver : true ,
110
+ } ) ,
111
+ )
112
+ . unwrap ( ) ,
86
113
program,
87
114
registry,
88
115
syscall_handler,
0 commit comments