@@ -1140,18 +1140,63 @@ async fn test_new_class_execution_info(#[values(true, false)] use_kzg_da: bool)
11401140 // Verify that the funded account, the new account and the sequencer all have changed balances.
11411141 test_output. assert_account_balance_change ( * FUNDED_ACCOUNT_ADDRESS ) ;
11421142 test_output. assert_account_balance_change ( contract_address ! ( TEST_SEQUENCER_ADDRESS ) ) ;
1143+ }
1144+
1145+ #[ rstest]
1146+ #[ tokio:: test]
1147+ async fn test_experimental_libfuncs_contract ( #[ values( true , false ) ] use_kzg_da : bool ) {
1148+ let ( mut test_manager, [ ] ) =
1149+ TestManager :: < DictStateReader > :: new_with_default_initial_state ( [ ] ) . await ;
1150+
1151+ // Declare the experimental contract.
1152+ let experimental_contract = FeatureContract :: Experimental ;
1153+ let experimental_contract_sierra = experimental_contract. get_sierra ( ) ;
1154+ let experimental_class_hash = experimental_contract_sierra. calculate_class_hash ( ) ;
1155+ let experimental_compiled_class_hash =
1156+ experimental_contract. get_compiled_class_hash ( & HashVersion :: V2 ) ;
1157+ let declare_tx_args = declare_tx_args ! {
1158+ sender_address: * FUNDED_ACCOUNT_ADDRESS ,
1159+ class_hash: experimental_class_hash,
1160+ compiled_class_hash: experimental_compiled_class_hash,
1161+ resource_bounds: * NON_TRIVIAL_RESOURCE_BOUNDS ,
1162+ nonce: test_manager. next_nonce( * FUNDED_ACCOUNT_ADDRESS ) ,
1163+ } ;
1164+ let account_declare_tx = declare_tx ( declare_tx_args) ;
1165+ let class_info = get_class_info_of_feature_contract ( experimental_contract) ;
1166+ let tx =
1167+ DeclareTransaction :: create ( account_declare_tx, class_info, & CHAIN_ID_FOR_TESTS ) . unwrap ( ) ;
1168+ test_manager. add_cairo1_declare_tx ( tx, & experimental_contract_sierra) ;
1169+
1170+ // Deploy it.
1171+ let salt = ContractAddressSalt ( Felt :: ZERO ) ;
1172+ let ( deploy_tx, _experimental_contract_address) = get_deploy_contract_tx_and_address_with_salt (
1173+ experimental_class_hash,
1174+ Calldata :: default ( ) ,
1175+ test_manager. next_nonce ( * FUNDED_ACCOUNT_ADDRESS ) ,
1176+ * NON_TRIVIAL_RESOURCE_BOUNDS ,
1177+ salt,
1178+ ) ;
1179+ test_manager. add_invoke_tx ( deploy_tx, None ) ;
1180+
1181+ let test_output = test_manager
1182+ . execute_test_with_default_block_contexts ( & TestParameters {
1183+ use_kzg_da,
1184+ ..Default :: default ( )
1185+ } )
1186+ . await ;
1187+ test_output. perform_default_validations ( ) ;
11431188
11441189 // Validate poseidon usage.
11451190 // TODO(Meshi): Add blake opcode validations.
11461191 let poseidons = test_output. get_builtin_usage ( & BuiltinName :: poseidon) ;
11471192 if use_kzg_da {
11481193 expect ! [ [ r#"
1149- 104
1194+ 58
11501195 "# ] ]
11511196 . assert_debug_eq ( & poseidons) ;
11521197 } else {
11531198 expect ! [ [ r#"
1154- 96
1199+ 49
11551200 "# ] ]
11561201 . assert_debug_eq ( & poseidons) ;
11571202 }
@@ -1351,36 +1396,6 @@ async fn test_new_class_flow(#[case] use_kzg_da: bool, #[case] n_blocks_in_multi
13511396 create_calldata ( main_contract_address, "test_signature_verification_secp256r1" , & [ ] ) ;
13521397 test_manager. add_funded_account_invoke ( invoke_tx_args ! { calldata } ) ;
13531398
1354- // Declare the experimental contract.
1355- let experimental_contract = FeatureContract :: Experimental ;
1356- let experimental_contract_sierra = experimental_contract. get_sierra ( ) ;
1357- let experimental_class_hash = experimental_contract_sierra. calculate_class_hash ( ) ;
1358- let experimental_compiled_class_hash =
1359- experimental_contract. get_compiled_class_hash ( & HashVersion :: V2 ) ;
1360- let declare_tx_args = declare_tx_args ! {
1361- sender_address: * FUNDED_ACCOUNT_ADDRESS ,
1362- class_hash: experimental_class_hash,
1363- compiled_class_hash: experimental_compiled_class_hash,
1364- resource_bounds: * NON_TRIVIAL_RESOURCE_BOUNDS ,
1365- nonce: test_manager. next_nonce( * FUNDED_ACCOUNT_ADDRESS ) ,
1366- } ;
1367- let account_declare_tx = declare_tx ( declare_tx_args) ;
1368- let class_info = get_class_info_of_feature_contract ( experimental_contract) ;
1369- let tx =
1370- DeclareTransaction :: create ( account_declare_tx, class_info, & CHAIN_ID_FOR_TESTS ) . unwrap ( ) ;
1371- test_manager. add_cairo1_declare_tx ( tx, & experimental_contract_sierra) ;
1372-
1373- // Deploy it.
1374- let salt = ContractAddressSalt ( Felt :: ZERO ) ;
1375- let ( deploy_tx, _experimental_contract_address) = get_deploy_contract_tx_and_address_with_salt (
1376- experimental_class_hash,
1377- Calldata :: default ( ) ,
1378- test_manager. next_nonce ( * FUNDED_ACCOUNT_ADDRESS ) ,
1379- * NON_TRIVIAL_RESOURCE_BOUNDS ,
1380- salt,
1381- ) ;
1382- test_manager. add_invoke_tx ( deploy_tx, None ) ;
1383-
13841399 // Call test_sha256.
13851400 let calldata = create_calldata ( main_contract_address, "test_sha256" , & [ ] ) ;
13861401 test_manager. add_funded_account_invoke ( invoke_tx_args ! { calldata } ) ;
@@ -1562,19 +1577,4 @@ async fn test_new_class_flow(#[case] use_kzg_da: bool, #[case] n_blocks_in_multi
15621577 test_output. assert_account_balance_change ( * FUNDED_ACCOUNT_ADDRESS ) ;
15631578 test_output. assert_account_balance_change ( faulty_account_address) ;
15641579 test_output. assert_account_balance_change ( contract_address ! ( TEST_SEQUENCER_ADDRESS ) ) ;
1565-
1566- // Validate poseidon usage.
1567- // TODO(Meshi): Add blake opcode validations.
1568- let poseidons = test_output. get_builtin_usage ( & BuiltinName :: poseidon) ;
1569- if use_kzg_da {
1570- expect ! [ [ r#"
1571- 598
1572- "# ] ]
1573- . assert_debug_eq ( & poseidons) ;
1574- } else {
1575- expect ! [ [ r#"
1576- 490
1577- "# ] ]
1578- . assert_debug_eq ( & poseidons) ;
1579- }
15801580}
0 commit comments