@@ -5,17 +5,11 @@ use num_traits::Zero;
55use starknet_in_rust:: {
66 core:: contract_address:: compute_casm_class_hash,
77 definitions:: { block_context:: BlockContext , constants:: TRANSACTION_VERSION } ,
8- execution:: {
9- execution_entry_point:: ExecutionEntryPoint , CallType , TransactionExecutionContext ,
10- } ,
118 services:: api:: contract_classes:: compiled_class:: CompiledClass ,
12- state:: {
13- cached_state:: CachedState , in_memory_state_reader:: InMemoryStateReader , state_api:: State ,
14- ExecutionResourcesManager ,
15- } ,
16- transaction:: { DeclareV2 , Deploy , DeployAccount , InvokeFunction , Transaction } ,
17- utils:: { Address , ClassHash } ,
18- CasmContractClass , EntryPointType ,
9+ state:: { cached_state:: CachedState , in_memory_state_reader:: InMemoryStateReader } ,
10+ transaction:: { InvokeFunction , Transaction } ,
11+ utils:: { calculate_sn_keccak, Address } ,
12+ CasmContractClass ,
1913} ;
2014
2115#[ test]
@@ -61,36 +55,60 @@ fn account_panic() {
6155 . insert ( contract_address. clone ( ) , contract_class_hash) ;
6256 state_reader
6357 . address_to_nonce_mut ( )
64- . insert ( contract_address. clone ( ) , 1 . into ( ) ) ;
58+ . insert ( contract_address, 1 . into ( ) ) ;
6559 let mut state = CachedState :: new ( Arc :: new ( state_reader) , contract_class_cache) ;
6660
67- let entrypoints = contract_class. entry_points_by_type ;
68-
69- let entrypoint_selector = & entrypoints. external . get ( 0 ) . unwrap ( ) . selector ;
61+ let selector = Felt252 :: from_bytes_be ( & calculate_sn_keccak ( b"__execute__" ) ) ;
7062
7163 // arguments of contract_a contract
72- let calldata: Vec < _ > = [ 2 . into ( ) ] . to_vec ( ) ;
64+ // calldata is a Vec of Call, which is
65+ /*
66+ #[derive(Drop, Serde)]
67+ struct Call {
68+ to: ContractAddress,
69+ selector: felt252,
70+ calldata: Array<felt252>
71+ }
72+ */
73+ let selector_contract = & contract_class
74+ . entry_points_by_type
75+ . external
76+ . get ( 0 )
77+ . unwrap ( )
78+ . selector ;
79+ // calldata of contract_a is 1 value.
80+ let calldata: Vec < _ > = [
81+ 1 . into ( ) ,
82+ contract_class_hash_felt,
83+ selector_contract. into ( ) ,
84+ 1 . into ( ) ,
85+ 2 . into ( ) ,
86+ ]
87+ . to_vec ( ) ;
7388
7489 // set up remaining structures
7590
7691 let invoke = InvokeFunction :: new (
77- contract_address ,
78- Felt252 :: new ( entrypoint_selector . clone ( ) ) ,
92+ account_address ,
93+ Felt252 :: new ( selector ) ,
7994 0 ,
8095 TRANSACTION_VERSION . clone ( ) ,
8196 calldata,
8297 vec ! [ ] ,
8398 block_context. starknet_os_config ( ) . chain_id ( ) . clone ( ) ,
84- Some ( 1 . into ( ) ) ,
99+ Some ( 0 . into ( ) ) ,
85100 )
86101 . unwrap ( ) ;
87102
88103 let tx = Transaction :: InvokeFunction ( invoke) ;
89- let call_info = tx
104+ let exec_info = tx
90105 . execute ( & mut state, & block_context, u128:: MAX )
91106 . expect ( "failed to invoke" ) ;
107+ let call_info = exec_info. call_info . as_ref ( ) . unwrap ( ) ;
108+
109+ assert_eq ! ( exec_info. revert_error, None ) ;
92110
93- dbg ! ( call_info . revert_error ) ;
94- //dbg !(call_info);
95- panic ! ( )
111+ // 482670963043u128 == 'panic'
112+ assert_eq ! ( call_info. retdata [ 0 ] , 482670963043u128 . into ( ) ) ;
113+ assert ! ( call_info . failure_flag ) ;
96114}
0 commit comments