1
1
use crate :: execution:: execution_entry_point:: ExecutionResult ;
2
- use crate :: services:: api:: contract_classes:: deprecated_contract_class:: EntryPointType ;
2
+ use crate :: services:: api:: contract_classes:: deprecated_contract_class:: {
3
+ ContractClass , EntryPointType ,
4
+ } ;
3
5
use crate :: state:: cached_state:: CachedState ;
4
6
use crate :: syscalls:: syscall_handler_errors:: SyscallHandlerError ;
5
7
use crate :: {
@@ -17,10 +19,7 @@ use crate::{
17
19
} ,
18
20
hash_utils:: calculate_contract_address,
19
21
services:: api:: {
20
- contract_class_errors:: ContractClassError ,
21
- contract_classes:: {
22
- compiled_class:: CompiledClass , deprecated_contract_class:: ContractClass ,
23
- } ,
22
+ contract_class_errors:: ContractClassError , contract_classes:: compiled_class:: CompiledClass ,
24
23
} ,
25
24
state:: state_api:: { State , StateReader } ,
26
25
state:: ExecutionResourcesManager ,
@@ -40,6 +39,7 @@ pub struct Deploy {
40
39
pub contract_address : Address ,
41
40
pub contract_address_salt : Felt252 ,
42
41
pub contract_hash : ClassHash ,
42
+ pub contract_class : CompiledClass ,
43
43
pub constructor_calldata : Vec < Felt252 > ,
44
44
pub tx_type : TransactionType ,
45
45
pub skip_validate : bool ,
@@ -80,6 +80,7 @@ impl Deploy {
80
80
contract_address,
81
81
contract_address_salt,
82
82
contract_hash,
83
+ contract_class : CompiledClass :: Deprecated ( Box :: new ( contract_class) ) ,
83
84
constructor_calldata,
84
85
tx_type : TransactionType :: Deploy ,
85
86
skip_validate : false ,
@@ -113,6 +114,7 @@ impl Deploy {
113
114
contract_address_salt,
114
115
contract_hash,
115
116
constructor_calldata,
117
+ contract_class : CompiledClass :: Deprecated ( Box :: new ( contract_class) ) ,
116
118
tx_type : TransactionType :: Deploy ,
117
119
skip_validate : false ,
118
120
skip_execute : false ,
@@ -147,11 +149,21 @@ impl Deploy {
147
149
state : & mut CachedState < S > ,
148
150
block_context : & BlockContext ,
149
151
) -> Result < TransactionExecutionInfo , TransactionError > {
152
+ match self . contract_class . clone ( ) {
153
+ CompiledClass :: Casm ( contract_class) => {
154
+ state. set_compiled_class (
155
+ & Felt252 :: from_bytes_be ( & self . contract_hash ) ,
156
+ * contract_class,
157
+ ) ?;
158
+ }
159
+ CompiledClass :: Deprecated ( contract_class) => {
160
+ state. set_contract_class ( & self . contract_hash , & contract_class) ?;
161
+ }
162
+ }
163
+
150
164
state. deploy_contract ( self . contract_address . clone ( ) , self . contract_hash ) ?;
151
- let class_hash: ClassHash = self . contract_hash ;
152
- let contract_class = state. get_contract_class ( & class_hash) ?;
153
165
154
- if self . constructor_entry_points_empty ( contract_class) ? {
166
+ if self . constructor_entry_points_empty ( self . contract_class . clone ( ) ) ? {
155
167
// Contract has no constructors
156
168
Ok ( self . handle_empty_constructor ( state) ?)
157
169
} else {
@@ -323,13 +335,9 @@ mod tests {
323
335
//transform class_hash to [u8; 32]
324
336
let class_hash_bytes = class_hash. to_be_bytes ( ) ;
325
337
326
- state
327
- . set_contract_class ( & class_hash_bytes, & contract_class)
328
- . unwrap ( ) ;
329
-
330
338
let internal_deploy = Deploy :: new (
331
339
0 . into ( ) ,
332
- contract_class,
340
+ contract_class. clone ( ) ,
333
341
vec ! [ 10 . into( ) ] ,
334
342
0 . into ( ) ,
335
343
0 . into ( ) ,
@@ -340,6 +348,11 @@ mod tests {
340
348
341
349
let _result = internal_deploy. apply ( & mut state, & block_context) . unwrap ( ) ;
342
350
351
+ assert_eq ! (
352
+ state. get_contract_class( & class_hash_bytes) . unwrap( ) ,
353
+ CompiledClass :: Deprecated ( Box :: new( contract_class) )
354
+ ) ;
355
+
343
356
assert_eq ! (
344
357
state
345
358
. get_class_hash_at( & internal_deploy. contract_address)
0 commit comments