From 8139ddb05bc58199243a22dbf24c146246f37e3b Mon Sep 17 00:00:00 2001 From: Nimrod Weiss Date: Sun, 18 Aug 2024 11:49:41 +0300 Subject: [PATCH 1/6] refactor(fee): rename ResourceBoundsMapping => DeprecatedResourceBoundsMapping --- .../src/concurrency/fee_utils_test.rs | 4 +-- .../src/concurrency/versioned_state_test.rs | 4 +-- .../src/concurrency/worker_logic_test.rs | 10 +++---- .../src/execution/stack_trace_test.rs | 4 +-- .../syscall_tests/get_execution_info.rs | 4 +-- crates/blockifier/src/fee/actual_cost_test.rs | 4 +-- crates/blockifier/src/test_utils.rs | 6 ++-- crates/blockifier/src/test_utils/declare.rs | 4 +-- .../src/test_utils/deploy_account.rs | 4 +-- crates/blockifier/src/test_utils/invoke.rs | 4 +-- .../transaction/account_transactions_test.rs | 30 +++++++++---------- .../src/transaction/execution_flavors_test.rs | 6 ++-- crates/blockifier/src/transaction/objects.rs | 4 +-- .../src/transaction/post_execution_test.rs | 6 ++-- .../blockifier/src/transaction/test_utils.rs | 8 ++--- .../src/transaction/transactions_test.rs | 26 ++++++++-------- crates/native_blockifier/src/py_declare.rs | 4 +-- .../src/py_deploy_account.rs | 4 +-- .../src/py_invoke_function.rs | 4 +-- .../native_blockifier/src/py_transaction.rs | 2 +- crates/papyrus_common/src/transaction_hash.rs | 4 +-- .../src/converters/transaction.rs | 16 +++++----- .../src/converters/transaction_test.rs | 4 +-- crates/papyrus_rpc/src/v0_6/transaction.rs | 6 ++-- crates/papyrus_rpc/src/v0_7/transaction.rs | 6 ++-- .../src/serialization/serializers.rs | 10 +++---- crates/papyrus_test_utils/src/lib.rs | 10 +++---- crates/starknet_api/src/rpc_transaction.rs | 6 ++-- crates/starknet_api/src/transaction.rs | 10 +++---- crates/starknet_api/src/transaction_hash.rs | 4 +-- .../src/reader/objects/test_utils.rs | 8 ++--- .../src/reader/objects/transaction.rs | 8 ++--- .../src/writer/objects/transaction.rs | 8 ++--- 33 files changed, 121 insertions(+), 121 deletions(-) diff --git a/crates/blockifier/src/concurrency/fee_utils_test.rs b/crates/blockifier/src/concurrency/fee_utils_test.rs index 8e7e15033e..dba9053156 100644 --- a/crates/blockifier/src/concurrency/fee_utils_test.rs +++ b/crates/blockifier/src/concurrency/fee_utils_test.rs @@ -1,7 +1,7 @@ use num_bigint::BigUint; use rstest::rstest; use starknet_api::felt; -use starknet_api::transaction::{Fee, ResourceBoundsMapping}; +use starknet_api::transaction::{DeprecatedResourceBoundsMapping, Fee}; use starknet_types_core::felt::Felt; use crate::concurrency::fee_utils::{add_fee_to_sequencer_balance, fill_sequencer_balance_reads}; @@ -19,7 +19,7 @@ use crate::transaction::test_utils::{account_invoke_tx, block_context, max_resou #[rstest] pub fn test_fill_sequencer_balance_reads( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] erc20_version: CairoVersion, ) { let account = FeatureContract::AccountWithoutValidations(CairoVersion::Cairo1); diff --git a/crates/blockifier/src/concurrency/versioned_state_test.rs b/crates/blockifier/src/concurrency/versioned_state_test.rs index 79cac9ee12..9a85630108 100644 --- a/crates/blockifier/src/concurrency/versioned_state_test.rs +++ b/crates/blockifier/src/concurrency/versioned_state_test.rs @@ -11,7 +11,7 @@ use starknet_api::core::{ Nonce, PatriciaKey, }; -use starknet_api::transaction::{Calldata, ContractAddressSalt, ResourceBoundsMapping}; +use starknet_api::transaction::{Calldata, ContractAddressSalt, DeprecatedResourceBoundsMapping}; use starknet_api::{calldata, class_hash, contract_address, felt, patricia_key}; use crate::abi::abi_utils::{get_fee_token_var_address, get_storage_var_address}; @@ -201,7 +201,7 @@ fn test_versioned_state_proxy() { #[rstest] // Test parallel execution of two transactions that use the same versioned state. -fn test_run_parallel_txs(max_resource_bounds: ResourceBoundsMapping) { +fn test_run_parallel_txs(max_resource_bounds: DeprecatedResourceBoundsMapping) { let block_context = BlockContext::create_for_account_testing(); let chain_info = &block_context.chain_info; let zero_bounds = true; diff --git a/crates/blockifier/src/concurrency/worker_logic_test.rs b/crates/blockifier/src/concurrency/worker_logic_test.rs index ec6b8a6575..8107c3ad78 100644 --- a/crates/blockifier/src/concurrency/worker_logic_test.rs +++ b/crates/blockifier/src/concurrency/worker_logic_test.rs @@ -6,7 +6,7 @@ use starknet_api::core::{ContractAddress, Nonce, PatriciaKey}; use starknet_api::transaction::{ ContractAddressSalt, Fee, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, TransactionVersion, }; use starknet_api::{contract_address, felt, patricia_key}; @@ -256,7 +256,7 @@ fn test_commit_tx_when_sender_is_sequencer() { } #[rstest] -fn test_worker_execute(max_resource_bounds: ResourceBoundsMapping) { +fn test_worker_execute(max_resource_bounds: DeprecatedResourceBoundsMapping) { // Settings. let block_context = BlockContext::create_for_account_testing(); let account_contract = FeatureContract::AccountWithoutValidations(CairoVersion::Cairo1); @@ -430,7 +430,7 @@ fn test_worker_execute(max_resource_bounds: ResourceBoundsMapping) { } #[rstest] -fn test_worker_validate(max_resource_bounds: ResourceBoundsMapping) { +fn test_worker_validate(max_resource_bounds: DeprecatedResourceBoundsMapping) { // Settings. let block_context = BlockContext::create_for_account_testing(); let account_contract = FeatureContract::AccountWithoutValidations(CairoVersion::Cairo1); @@ -537,7 +537,7 @@ fn test_worker_validate(max_resource_bounds: ResourceBoundsMapping) { #[case::declare_cairo1(CairoVersion::Cairo1, TransactionVersion::THREE)] fn test_deploy_before_declare( max_fee: Fee, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[case] cairo_version: CairoVersion, #[case] version: TransactionVersion, ) { @@ -629,7 +629,7 @@ fn test_deploy_before_declare( } #[rstest] -fn test_worker_commit_phase(max_resource_bounds: ResourceBoundsMapping) { +fn test_worker_commit_phase(max_resource_bounds: DeprecatedResourceBoundsMapping) { // Settings. let block_context = BlockContext::create_for_account_testing(); let account_contract = FeatureContract::AccountWithoutValidations(CairoVersion::Cairo1); diff --git a/crates/blockifier/src/execution/stack_trace_test.rs b/crates/blockifier/src/execution/stack_trace_test.rs index 6aa7523507..faf2303568 100644 --- a/crates/blockifier/src/execution/stack_trace_test.rs +++ b/crates/blockifier/src/execution/stack_trace_test.rs @@ -6,7 +6,7 @@ use starknet_api::transaction::{ Calldata, ContractAddressSalt, Fee, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, TransactionSignature, TransactionVersion, }; @@ -599,7 +599,7 @@ An ASSERT_EQ instruction failed: 1 != 0. /// point selector). fn test_contract_ctor_frame_stack_trace( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] cairo_version: CairoVersion, ) { let chain_info = &block_context.chain_info; diff --git a/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs b/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs index 02e4f37dc9..33b2932e0d 100644 --- a/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs +++ b/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs @@ -12,7 +12,7 @@ use starknet_api::transaction::{ PaymasterData, Resource, ResourceBounds, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionVersion, @@ -213,7 +213,7 @@ fn test_get_execution_info( only_query, ..Default::default() }, - resource_bounds: ResourceBoundsMapping(BTreeMap::from([ + resource_bounds: DeprecatedResourceBoundsMapping(BTreeMap::from([ ( Resource::L1Gas, // TODO(Ori, 1/2/2024): Write an indicative expect message explaining why diff --git a/crates/blockifier/src/fee/actual_cost_test.rs b/crates/blockifier/src/fee/actual_cost_test.rs index acddd480c1..bb9b513322 100644 --- a/crates/blockifier/src/fee/actual_cost_test.rs +++ b/crates/blockifier/src/fee/actual_cost_test.rs @@ -1,5 +1,5 @@ use rstest::{fixture, rstest}; -use starknet_api::transaction::{L2ToL1Payload, ResourceBoundsMapping}; +use starknet_api::transaction::{L2ToL1Payload, DeprecatedResourceBoundsMapping}; use starknet_types_core::felt::Felt; use crate::context::BlockContext; @@ -286,7 +286,7 @@ fn test_calculate_tx_gas_usage_basic<'a>(#[values(false, true)] use_kzg_da: bool // resources are taken into account). #[rstest] fn test_calculate_tx_gas_usage( - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(false, true)] use_kzg_da: bool, ) { let account_cairo_version = CairoVersion::Cairo0; diff --git a/crates/blockifier/src/test_utils.rs b/crates/blockifier/src/test_utils.rs index de9529449a..beb25ae789 100644 --- a/crates/blockifier/src/test_utils.rs +++ b/crates/blockifier/src/test_utils.rs @@ -20,7 +20,7 @@ use starknet_api::transaction::{ ContractAddressSalt, Resource, ResourceBounds, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, TransactionVersion, }; use starknet_api::{contract_address, felt, patricia_key}; @@ -211,8 +211,8 @@ pub fn trivial_external_entry_point_with_address( } } -fn default_testing_resource_bounds() -> ResourceBoundsMapping { - ResourceBoundsMapping::try_from(vec![ +fn default_testing_resource_bounds() -> DeprecatedResourceBoundsMapping { + DeprecatedResourceBoundsMapping::try_from(vec![ (Resource::L1Gas, ResourceBounds { max_amount: 0, max_price_per_unit: 1 }), // TODO(Dori, 1/2/2024): When fee market is developed, change the default price of // L2 gas. diff --git a/crates/blockifier/src/test_utils/declare.rs b/crates/blockifier/src/test_utils/declare.rs index 6973d18ca7..5a70d80884 100644 --- a/crates/blockifier/src/test_utils/declare.rs +++ b/crates/blockifier/src/test_utils/declare.rs @@ -7,7 +7,7 @@ use starknet_api::transaction::{ DeclareTransactionV3, Fee, PaymasterData, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -25,7 +25,7 @@ pub struct DeclareTxArgs { pub signature: TransactionSignature, pub sender_address: ContractAddress, pub version: TransactionVersion, - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub nonce_data_availability_mode: DataAvailabilityMode, pub fee_data_availability_mode: DataAvailabilityMode, diff --git a/crates/blockifier/src/test_utils/deploy_account.rs b/crates/blockifier/src/test_utils/deploy_account.rs index f3157add88..b24e0c9d3d 100644 --- a/crates/blockifier/src/test_utils/deploy_account.rs +++ b/crates/blockifier/src/test_utils/deploy_account.rs @@ -7,7 +7,7 @@ use starknet_api::transaction::{ DeployAccountTransactionV3, Fee, PaymasterData, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -23,7 +23,7 @@ pub struct DeployAccountTxArgs { pub signature: TransactionSignature, pub deployer_address: ContractAddress, pub version: TransactionVersion, - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub nonce_data_availability_mode: DataAvailabilityMode, pub fee_data_availability_mode: DataAvailabilityMode, diff --git a/crates/blockifier/src/test_utils/invoke.rs b/crates/blockifier/src/test_utils/invoke.rs index 42ae6ba854..a62ef0597b 100644 --- a/crates/blockifier/src/test_utils/invoke.rs +++ b/crates/blockifier/src/test_utils/invoke.rs @@ -9,7 +9,7 @@ use starknet_api::transaction::{ InvokeTransactionV1, InvokeTransactionV3, PaymasterData, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -28,7 +28,7 @@ pub struct InvokeTxArgs { pub sender_address: ContractAddress, pub calldata: Calldata, pub version: TransactionVersion, - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub nonce_data_availability_mode: DataAvailabilityMode, pub fee_data_availability_mode: DataAvailabilityMode, diff --git a/crates/blockifier/src/transaction/account_transactions_test.rs b/crates/blockifier/src/transaction/account_transactions_test.rs index 3f48297d15..a3e3f1df58 100644 --- a/crates/blockifier/src/transaction/account_transactions_test.rs +++ b/crates/blockifier/src/transaction/account_transactions_test.rs @@ -13,7 +13,7 @@ use starknet_api::transaction::{ ContractAddressSalt, DeclareTransactionV2, Fee, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, TransactionHash, TransactionVersion, }; @@ -80,7 +80,7 @@ use crate::{ }; #[rstest] -fn test_circuit(block_context: BlockContext, max_resource_bounds: ResourceBoundsMapping) { +fn test_circuit(block_context: BlockContext, max_resource_bounds: DeprecatedResourceBoundsMapping) { let test_contract = FeatureContract::TestContract(CairoVersion::Cairo1); let account = FeatureContract::AccountWithoutValidations(CairoVersion::Cairo1); let chain_info = &block_context.chain_info; @@ -114,7 +114,7 @@ fn test_circuit(block_context: BlockContext, max_resource_bounds: ResourceBounds } #[rstest] -fn test_rc96_holes(block_context: BlockContext, max_resource_bounds: ResourceBoundsMapping) { +fn test_rc96_holes(block_context: BlockContext, max_resource_bounds: DeprecatedResourceBoundsMapping) { let test_contract = FeatureContract::TestContract(CairoVersion::Cairo1); let account = FeatureContract::AccountWithoutValidations(CairoVersion::Cairo1); let chain_info = &block_context.chain_info; @@ -205,7 +205,7 @@ fn test_enforce_fee_false_works(block_context: BlockContext, #[case] version: Tr fn test_account_flow_test( block_context: BlockContext, max_fee: Fee, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(TransactionVersion::ZERO, TransactionVersion::ONE, TransactionVersion::THREE)] tx_version: TransactionVersion, #[values(true, false)] only_query: bool, @@ -237,7 +237,7 @@ fn test_account_flow_test( fn test_invoke_tx_from_non_deployed_account( block_context: BlockContext, max_fee: Fee, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[case] tx_version: TransactionVersion, ) { let TestInitData { mut state, account_address, contract_address: _, mut nonce_manager } = @@ -286,7 +286,7 @@ fn test_infinite_recursion( #[values(true, false)] success: bool, #[values(true, false)] normal_recurse: bool, mut block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, ) { // Limit the number of execution steps (so we quickly hit the limit). block_context.versioned_constants.invoke_tx_max_n_steps = 4100; @@ -341,7 +341,7 @@ fn test_infinite_recursion( fn test_max_fee_limit_validate( block_context: BlockContext, #[case] version: TransactionVersion, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, ) { let chain_info = &block_context.chain_info; let TestInitData { mut state, account_address, contract_address, mut nonce_manager } = @@ -446,7 +446,7 @@ fn test_recursion_depth_exceeded( #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] cairo_version: CairoVersion, block_context: BlockContext, max_fee: Fee, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, ) { let TestInitData { mut state, account_address, contract_address, mut nonce_manager } = create_test_init_data(&block_context.chain_info, cairo_version); @@ -690,7 +690,7 @@ fn recursive_function_calldata( #[case(TransactionVersion::THREE)] fn test_reverted_reach_steps_limit( max_fee: Fee, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, mut block_context: BlockContext, #[case] version: TransactionVersion, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] cairo_version: CairoVersion, @@ -798,7 +798,7 @@ fn test_reverted_reach_steps_limit( /// asserts false. We test deltas between consecutive depths, and further depths. fn test_n_reverted_steps( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] cairo_version: CairoVersion, ) { let TestInitData { mut state, account_address, contract_address, mut nonce_manager } = @@ -979,7 +979,7 @@ fn test_max_fee_to_max_steps_conversion( /// recorded and max_fee is charged. fn test_insufficient_max_fee_reverts( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] cairo_version: CairoVersion, ) { let TestInitData { mut state, account_address, contract_address, mut nonce_manager } = @@ -1046,7 +1046,7 @@ fn test_insufficient_max_fee_reverts( #[rstest] fn test_deploy_account_constructor_storage_write( - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, block_context: BlockContext, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] cairo_version: CairoVersion, ) { @@ -1090,7 +1090,7 @@ fn test_deploy_account_constructor_storage_write( fn test_count_actual_storage_changes( max_fee: Fee, block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[case] version: TransactionVersion, #[case] fee_type: FeeType, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] cairo_version: CairoVersion, @@ -1271,7 +1271,7 @@ fn test_count_actual_storage_changes( #[case::tx_version_3(TransactionVersion::THREE)] fn test_concurrency_execute_fee_transfer( max_fee: Fee, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[case] version: TransactionVersion, ) { // TODO(Meshi, 01/06/2024): make the test so it will include changes in @@ -1371,7 +1371,7 @@ fn test_concurrency_execute_fee_transfer( #[case::tx_version_3(TransactionVersion::THREE)] fn test_concurrent_fee_transfer_when_sender_is_sequencer( max_fee: Fee, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[case] version: TransactionVersion, ) { let mut block_context = BlockContext::create_for_account_testing(); diff --git a/crates/blockifier/src/transaction/execution_flavors_test.rs b/crates/blockifier/src/transaction/execution_flavors_test.rs index a7537b49fe..0ca7773148 100644 --- a/crates/blockifier/src/transaction/execution_flavors_test.rs +++ b/crates/blockifier/src/transaction/execution_flavors_test.rs @@ -6,7 +6,7 @@ use starknet_api::felt; use starknet_api::transaction::{ Calldata, Fee, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, TransactionSignature, TransactionVersion, }; @@ -349,7 +349,7 @@ fn test_simulate_validate_charge_fee_fail_validate( #[values(CairoVersion::Cairo0)] cairo_version: CairoVersion, #[case] version: TransactionVersion, #[case] fee_type: FeeType, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, ) { let block_context = BlockContext::create_for_account_testing(); let max_fee = Fee(MAX_FEE); @@ -411,7 +411,7 @@ fn test_simulate_validate_charge_fee_mid_execution( #[values(CairoVersion::Cairo0)] cairo_version: CairoVersion, #[case] version: TransactionVersion, #[case] fee_type: FeeType, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, ) { let block_context = BlockContext::create_for_account_testing(); let chain_info = &block_context.chain_info; diff --git a/crates/blockifier/src/transaction/objects.rs b/crates/blockifier/src/transaction/objects.rs index 43b601ca92..2c3d6a8087 100644 --- a/crates/blockifier/src/transaction/objects.rs +++ b/crates/blockifier/src/transaction/objects.rs @@ -12,7 +12,7 @@ use starknet_api::transaction::{ PaymasterData, Resource, ResourceBounds, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -125,7 +125,7 @@ impl HasRelatedFeeType for TransactionInfo { #[derive(Clone, Debug, Eq, PartialEq)] pub struct CurrentTransactionInfo { pub common_fields: CommonAccountFields, - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub nonce_data_availability_mode: DataAvailabilityMode, pub fee_data_availability_mode: DataAvailabilityMode, diff --git a/crates/blockifier/src/transaction/post_execution_test.rs b/crates/blockifier/src/transaction/post_execution_test.rs index 08d00350aa..2996ce8621 100644 --- a/crates/blockifier/src/transaction/post_execution_test.rs +++ b/crates/blockifier/src/transaction/post_execution_test.rs @@ -2,7 +2,7 @@ use assert_matches::assert_matches; use rstest::rstest; use starknet_api::core::{ContractAddress, PatriciaKey}; use starknet_api::state::StorageKey; -use starknet_api::transaction::{Calldata, Fee, ResourceBoundsMapping, TransactionVersion}; +use starknet_api::transaction::{Calldata, Fee, DeprecatedResourceBoundsMapping, TransactionVersion}; use starknet_api::{felt, patricia_key}; use starknet_types_core::felt::Felt; @@ -67,7 +67,7 @@ fn calldata_for_write_and_transfer( #[case(TransactionVersion::THREE, FeeType::Strk)] fn test_revert_on_overdraft( max_fee: Fee, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, block_context: BlockContext, #[case] version: TransactionVersion, #[case] fee_type: FeeType, @@ -212,7 +212,7 @@ fn test_revert_on_overdraft( #[case(TransactionVersion::THREE, "Insufficient max L1 gas", true)] fn test_revert_on_resource_overuse( max_fee: Fee, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, block_context: BlockContext, #[case] version: TransactionVersion, #[case] expected_error_prefix: &str, diff --git a/crates/blockifier/src/transaction/test_utils.rs b/crates/blockifier/src/transaction/test_utils.rs index d6b1724e3a..637cf1235c 100644 --- a/crates/blockifier/src/transaction/test_utils.rs +++ b/crates/blockifier/src/transaction/test_utils.rs @@ -9,7 +9,7 @@ use starknet_api::transaction::{ InvokeTransactionV3, Resource, ResourceBounds, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, TransactionHash, TransactionSignature, TransactionVersion, @@ -82,7 +82,7 @@ pub fn max_fee() -> Fee { } #[fixture] -pub fn max_resource_bounds() -> ResourceBoundsMapping { +pub fn max_resource_bounds() -> DeprecatedResourceBoundsMapping { l1_resource_bounds(MAX_L1_GAS_AMOUNT, MAX_L1_GAS_PRICE) } @@ -291,8 +291,8 @@ pub fn run_invoke_tx( /// Creates a `ResourceBoundsMapping` with the given `max_amount` and `max_price` for L1 gas limits. /// No guarantees on the values of the other resources bounds. -pub fn l1_resource_bounds(max_amount: u64, max_price: u128) -> ResourceBoundsMapping { - ResourceBoundsMapping::try_from(vec![ +pub fn l1_resource_bounds(max_amount: u64, max_price: u128) -> DeprecatedResourceBoundsMapping { + DeprecatedResourceBoundsMapping::try_from(vec![ (Resource::L1Gas, ResourceBounds { max_amount, max_price_per_unit: max_price }), (Resource::L2Gas, ResourceBounds { max_amount: 0, max_price_per_unit: 0 }), ]) diff --git a/crates/blockifier/src/transaction/transactions_test.rs b/crates/blockifier/src/transaction/transactions_test.rs index a8198cfa9b..098857f708 100644 --- a/crates/blockifier/src/transaction/transactions_test.rs +++ b/crates/blockifier/src/transaction/transactions_test.rs @@ -19,7 +19,7 @@ use starknet_api::transaction::{ EventKey, Fee, L2ToL1Payload, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, TransactionSignature, TransactionVersion, }; @@ -383,7 +383,7 @@ fn add_kzg_da_resources_to_resources_mapping( }, CairoVersion::Cairo1)] fn test_invoke_tx( - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[case] expected_arguments: ExpectedResultTestInvokeTx, #[case] account_cairo_version: CairoVersion, #[values(false, true)] use_kzg_da: bool, @@ -576,7 +576,7 @@ fn verify_storage_after_invoke_advanced_operations( #[rstest] fn test_invoke_tx_advanced_operations( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] cairo_version: CairoVersion, ) { let block_context = &block_context; @@ -818,7 +818,7 @@ fn assert_failure_if_resource_bounds_exceed_balance( #[rstest] fn test_max_fee_exceeds_balance( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] account_cairo_version: CairoVersion, ) { let block_context = &block_context; @@ -974,7 +974,7 @@ fn test_insufficient_resource_bounds( #[rstest] fn test_actual_fee_gt_resource_bounds( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] account_cairo_version: CairoVersion, ) { let block_context = &block_context; @@ -1014,7 +1014,7 @@ fn test_actual_fee_gt_resource_bounds( #[rstest] fn test_invalid_nonce( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] account_cairo_version: CairoVersion, ) { let account_contract = FeatureContract::AccountWithoutValidations(account_cairo_version); @@ -1134,7 +1134,7 @@ fn declare_expected_state_changes_count(version: TransactionVersion) -> StateCha #[case(TransactionVersion::TWO, CairoVersion::Cairo1)] #[case(TransactionVersion::THREE, CairoVersion::Cairo1)] fn test_declare_tx( - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] account_cairo_version: CairoVersion, #[case] tx_version: TransactionVersion, #[case] empty_contract_version: CairoVersion, @@ -1287,7 +1287,7 @@ fn test_declare_tx( fn test_deploy_account_tx( #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] cairo_version: CairoVersion, #[values(false, true)] use_kzg_da: bool, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, ) { let block_context = &BlockContext::create_for_account_testing_with_kzg(use_kzg_da); let versioned_constants = &block_context.versioned_constants; @@ -1454,7 +1454,7 @@ fn test_deploy_account_tx( #[rstest] fn test_fail_deploy_account_undeclared_class_hash( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, ) { let block_context = &block_context; let chain_info = &block_context.chain_info; @@ -1685,7 +1685,7 @@ fn test_validate_accounts_tx( #[rstest] fn test_valid_flag( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] account_cairo_version: CairoVersion, #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] test_contract_cairo_version: CairoVersion, ) { @@ -1713,7 +1713,7 @@ fn test_valid_flag( #[rstest] fn test_only_query_flag( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[values(true, false)] only_query: bool, ) { let account_balance = BALANCE; @@ -1955,7 +1955,7 @@ fn test_l1_handler(#[values(false, true)] use_kzg_da: bool) { #[rstest] fn test_execute_tx_with_invalid_transaction_version( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, ) { let cairo_version = CairoVersion::Cairo0; let account = FeatureContract::AccountWithoutValidations(cairo_version); @@ -2028,7 +2028,7 @@ fn max_event_data() -> usize { }))] fn test_emit_event_exceeds_limit( block_context: BlockContext, - max_resource_bounds: ResourceBoundsMapping, + max_resource_bounds: DeprecatedResourceBoundsMapping, #[case] event_keys: Vec, #[case] event_data: Vec, #[case] n_emitted_events: usize, diff --git a/crates/native_blockifier/src/py_declare.rs b/crates/native_blockifier/src/py_declare.rs index eb0988a3c8..bfbd2894a6 100644 --- a/crates/native_blockifier/src/py_declare.rs +++ b/crates/native_blockifier/src/py_declare.rs @@ -12,7 +12,7 @@ use starknet_api::transaction::{ DeclareTransactionV3, Fee, PaymasterData, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -88,7 +88,7 @@ impl TryFrom for DeclareTransactionV3 { type Error = NativeBlockifierInputError; fn try_from(tx: PyDeclareTransactionV3) -> Result { Ok(Self { - resource_bounds: ResourceBoundsMapping::try_from(tx.resource_bounds)?, + resource_bounds: DeprecatedResourceBoundsMapping::try_from(tx.resource_bounds)?, tip: Tip(tx.tip), signature: TransactionSignature(from_py_felts(tx.signature)), nonce: Nonce(tx.nonce.0), diff --git a/crates/native_blockifier/src/py_deploy_account.rs b/crates/native_blockifier/src/py_deploy_account.rs index 2b2833472a..749f19586a 100644 --- a/crates/native_blockifier/src/py_deploy_account.rs +++ b/crates/native_blockifier/src/py_deploy_account.rs @@ -12,7 +12,7 @@ use starknet_api::transaction::{ DeployAccountTransactionV3, Fee, PaymasterData, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -64,7 +64,7 @@ impl TryFrom for DeployAccountTransactionV3 { type Error = NativeBlockifierInputError; fn try_from(tx: PyDeployAccountTransactionV3) -> Result { Ok(Self { - resource_bounds: ResourceBoundsMapping::try_from(tx.resource_bounds)?, + resource_bounds: DeprecatedResourceBoundsMapping::try_from(tx.resource_bounds)?, tip: Tip(tx.tip), signature: TransactionSignature(from_py_felts(tx.signature)), nonce: Nonce(tx.nonce.0), diff --git a/crates/native_blockifier/src/py_invoke_function.rs b/crates/native_blockifier/src/py_invoke_function.rs index 9735435394..111d53b0f1 100644 --- a/crates/native_blockifier/src/py_invoke_function.rs +++ b/crates/native_blockifier/src/py_invoke_function.rs @@ -14,7 +14,7 @@ use starknet_api::transaction::{ InvokeTransactionV1, InvokeTransactionV3, PaymasterData, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -87,7 +87,7 @@ impl TryFrom for InvokeTransactionV3 { type Error = NativeBlockifierInputError; fn try_from(tx: PyInvokeTransactionV3) -> Result { Ok(Self { - resource_bounds: ResourceBoundsMapping::try_from(tx.resource_bounds)?, + resource_bounds: DeprecatedResourceBoundsMapping::try_from(tx.resource_bounds)?, tip: Tip(tx.tip), signature: TransactionSignature(from_py_felts(tx.signature)), nonce: Nonce(tx.nonce.0), diff --git a/crates/native_blockifier/src/py_transaction.rs b/crates/native_blockifier/src/py_transaction.rs index 7b84d89d71..15254e1181 100644 --- a/crates/native_blockifier/src/py_transaction.rs +++ b/crates/native_blockifier/src/py_transaction.rs @@ -68,7 +68,7 @@ impl From for starknet_api::transaction::ResourceBounds { #[derive(Clone, FromPyObject)] pub struct PyResourceBoundsMapping(pub BTreeMap); -impl TryFrom for starknet_api::transaction::ResourceBoundsMapping { +impl TryFrom for starknet_api::transaction::DeprecatedResourceBoundsMapping { type Error = StarknetApiError; fn try_from(py_resource_bounds_mapping: PyResourceBoundsMapping) -> Result { let resource_bounds_vec: Vec<(Resource, ResourceBounds)> = py_resource_bounds_mapping diff --git a/crates/papyrus_common/src/transaction_hash.rs b/crates/papyrus_common/src/transaction_hash.rs index 6aa13d88da..c788b00b1a 100644 --- a/crates/papyrus_common/src/transaction_hash.rs +++ b/crates/papyrus_common/src/transaction_hash.rs @@ -23,7 +23,7 @@ use starknet_api::transaction::{ L1HandlerTransaction, Resource, ResourceBounds, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, Transaction, TransactionHash, @@ -220,7 +220,7 @@ pub(crate) fn ascii_as_felt(ascii_str: &str) -> Result { // An implementation of the SNIP: https://github.com/EvyatarO/SNIPs/blob/snip-8/SNIPS/snip-8.md fn get_tip_resource_bounds_hash( - resource_bounds_mapping: &ResourceBoundsMapping, + resource_bounds_mapping: &DeprecatedResourceBoundsMapping, tip: &Tip, ) -> Result { let l1_resource_bounds = diff --git a/crates/papyrus_protobuf/src/converters/transaction.rs b/crates/papyrus_protobuf/src/converters/transaction.rs index c42fdb43a7..7bc2135baa 100644 --- a/crates/papyrus_protobuf/src/converters/transaction.rs +++ b/crates/papyrus_protobuf/src/converters/transaction.rs @@ -26,7 +26,7 @@ use starknet_api::transaction::{ PaymasterData, Resource, ResourceBounds, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, Transaction, TransactionOutput, @@ -305,7 +305,7 @@ impl From for protobuf::transaction::DeployAccountV1 impl TryFrom for DeployAccountTransactionV3 { type Error = ProtobufConversionError; fn try_from(value: protobuf::transaction::DeployAccountV3) -> Result { - let resource_bounds = ResourceBoundsMapping::try_from(value.resource_bounds.ok_or( + let resource_bounds = DeprecatedResourceBoundsMapping::try_from(value.resource_bounds.ok_or( ProtobufConversionError::MissingField { field_description: "DeployAccountV3::resource_bounds", }, @@ -415,10 +415,10 @@ impl From for protobuf::transaction::DeployAccountV3 } } -impl TryFrom for ResourceBoundsMapping { +impl TryFrom for DeprecatedResourceBoundsMapping { type Error = ProtobufConversionError; fn try_from(value: protobuf::ResourceBounds) -> Result { - let mut resource_bounds = ResourceBoundsMapping::default(); + let mut resource_bounds = DeprecatedResourceBoundsMapping::default(); let Some(l1_gas) = value.l1_gas else { return Err(ProtobufConversionError::MissingField { field_description: "ResourceBounds::l1_gas", @@ -466,8 +466,8 @@ impl TryFrom for ResourceBoundsMapping { } } -impl From for protobuf::ResourceBounds { - fn from(value: ResourceBoundsMapping) -> Self { +impl From for protobuf::ResourceBounds { + fn from(value: DeprecatedResourceBoundsMapping) -> Self { let mut res = protobuf::ResourceBounds::default(); let resource_bounds_default = ResourceBounds::default(); @@ -621,7 +621,7 @@ impl From for protobuf::transaction::InvokeV1 { impl TryFrom for InvokeTransactionV3 { type Error = ProtobufConversionError; fn try_from(value: protobuf::transaction::InvokeV3) -> Result { - let resource_bounds = ResourceBoundsMapping::try_from(value.resource_bounds.ok_or( + let resource_bounds = DeprecatedResourceBoundsMapping::try_from(value.resource_bounds.ok_or( ProtobufConversionError::MissingField { field_description: "InvokeV3::resource_bounds", }, @@ -939,7 +939,7 @@ impl From for protobuf::transaction::DeclareV2 { impl TryFrom for DeclareTransactionV3 { type Error = ProtobufConversionError; fn try_from(value: protobuf::transaction::DeclareV3) -> Result { - let resource_bounds = ResourceBoundsMapping::try_from(value.resource_bounds.ok_or( + let resource_bounds = DeprecatedResourceBoundsMapping::try_from(value.resource_bounds.ok_or( ProtobufConversionError::MissingField { field_description: "DeclareV3::resource_bounds", }, diff --git a/crates/papyrus_protobuf/src/converters/transaction_test.rs b/crates/papyrus_protobuf/src/converters/transaction_test.rs index 9f7bc6edf9..1041d9fd18 100644 --- a/crates/papyrus_protobuf/src/converters/transaction_test.rs +++ b/crates/papyrus_protobuf/src/converters/transaction_test.rs @@ -12,7 +12,7 @@ use starknet_api::transaction::{ L1HandlerTransactionOutput, Resource, ResourceBounds, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Transaction as StarknetApiTransaction, TransactionOutput, }; @@ -189,7 +189,7 @@ lazy_static! { da_gas_consumed: GasVector::default(), gas_consumed: GasVector::default(), }; - static ref RESOURCE_BOUNDS_MAPPING: ResourceBoundsMapping = ResourceBoundsMapping( + static ref RESOURCE_BOUNDS_MAPPING: DeprecatedResourceBoundsMapping = DeprecatedResourceBoundsMapping( [ (Resource::L1Gas, ResourceBounds { max_amount: 0x5, max_price_per_unit: 0x6 }), (Resource::L2Gas, ResourceBounds { max_amount: 0x5, max_price_per_unit: 0x6 }), diff --git a/crates/papyrus_rpc/src/v0_6/transaction.rs b/crates/papyrus_rpc/src/v0_6/transaction.rs index 4a91dba054..9bed607338 100644 --- a/crates/papyrus_rpc/src/v0_6/transaction.rs +++ b/crates/papyrus_rpc/src/v0_6/transaction.rs @@ -151,14 +151,14 @@ pub struct ResourceBoundsMapping { pub l2_gas: ResourceBounds, } -impl From for starknet_api::transaction::ResourceBoundsMapping { +impl From for starknet_api::transaction::DeprecatedResourceBoundsMapping { fn from(value: ResourceBoundsMapping) -> Self { Self([(Resource::L1Gas, value.l1_gas), (Resource::L2Gas, value.l2_gas)].into()) } } -impl From for ResourceBoundsMapping { - fn from(value: starknet_api::transaction::ResourceBoundsMapping) -> Self { +impl From for ResourceBoundsMapping { + fn from(value: starknet_api::transaction::DeprecatedResourceBoundsMapping) -> Self { Self { l1_gas: value.0.get(&Resource::L1Gas).cloned().unwrap_or_default(), l2_gas: value.0.get(&Resource::L2Gas).cloned().unwrap_or_default(), diff --git a/crates/papyrus_rpc/src/v0_7/transaction.rs b/crates/papyrus_rpc/src/v0_7/transaction.rs index b57d3c6097..8f4596b664 100644 --- a/crates/papyrus_rpc/src/v0_7/transaction.rs +++ b/crates/papyrus_rpc/src/v0_7/transaction.rs @@ -154,14 +154,14 @@ pub struct ResourceBoundsMapping { pub l2_gas: ResourceBounds, } -impl From for starknet_api::transaction::ResourceBoundsMapping { +impl From for starknet_api::transaction::DeprecatedResourceBoundsMapping { fn from(value: ResourceBoundsMapping) -> Self { Self([(Resource::L1Gas, value.l1_gas), (Resource::L2Gas, value.l2_gas)].into()) } } -impl From for ResourceBoundsMapping { - fn from(value: starknet_api::transaction::ResourceBoundsMapping) -> Self { +impl From for ResourceBoundsMapping { + fn from(value: starknet_api::transaction::DeprecatedResourceBoundsMapping) -> Self { Self { l1_gas: value.0.get(&Resource::L1Gas).cloned().unwrap_or_default(), l2_gas: value.0.get(&Resource::L2Gas).cloned().unwrap_or_default(), diff --git a/crates/papyrus_storage/src/serialization/serializers.rs b/crates/papyrus_storage/src/serialization/serializers.rs index 95923339d9..508976c97e 100644 --- a/crates/papyrus_storage/src/serialization/serializers.rs +++ b/crates/papyrus_storage/src/serialization/serializers.rs @@ -109,7 +109,7 @@ use starknet_api::transaction::{ PaymasterData, Resource, ResourceBounds, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, RevertedTransactionExecutionStatus, Tip, Transaction, @@ -211,7 +211,7 @@ auto_storage_serde! { pub sender_address: ContractAddress, } pub struct DeclareTransactionV3 { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -361,7 +361,7 @@ auto_storage_serde! { pub max_amount: u64, pub max_price_per_unit: u128, } - pub struct ResourceBoundsMapping(pub BTreeMap); + pub struct DeprecatedResourceBoundsMapping(pub BTreeMap); pub struct SequencerContractAddress(pub ContractAddress); pub struct Signature { pub r: Felt, @@ -1162,7 +1162,7 @@ auto_storage_serde_conditionally_compressed! { } pub struct DeployAccountTransactionV3 { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -1198,7 +1198,7 @@ auto_storage_serde_conditionally_compressed! { } pub struct InvokeTransactionV3 { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, diff --git a/crates/papyrus_test_utils/src/lib.rs b/crates/papyrus_test_utils/src/lib.rs index c552cc35f1..c0864aa6a7 100644 --- a/crates/papyrus_test_utils/src/lib.rs +++ b/crates/papyrus_test_utils/src/lib.rs @@ -132,7 +132,7 @@ use starknet_api::transaction::{ PaymasterData, Resource, ResourceBounds, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, RevertedTransactionExecutionStatus, Tip, Transaction, @@ -517,7 +517,7 @@ auto_impl_get_test_instance! { pub sender_address: ContractAddress, } pub struct DeclareTransactionV3 { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -550,7 +550,7 @@ auto_impl_get_test_instance! { pub constructor_calldata: Calldata, } pub struct DeployAccountTransactionV3 { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -657,7 +657,7 @@ auto_impl_get_test_instance! { pub calldata: Calldata, } pub struct InvokeTransactionV3 { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -722,7 +722,7 @@ auto_impl_get_test_instance! { pub max_amount: u64, pub max_price_per_unit: u128, } - pub struct ResourceBoundsMapping(pub BTreeMap); + pub struct DeprecatedResourceBoundsMapping(pub BTreeMap); pub struct SequencerContractAddress(pub ContractAddress); pub struct Signature { pub r: Felt, diff --git a/crates/starknet_api/src/rpc_transaction.rs b/crates/starknet_api/src/rpc_transaction.rs index b5a34a5e60..2c402c2d9b 100644 --- a/crates/starknet_api/src/rpc_transaction.rs +++ b/crates/starknet_api/src/rpc_transaction.rs @@ -199,10 +199,10 @@ pub struct ResourceBoundsMapping { pub l2_gas: ResourceBounds, } -impl From for crate::transaction::ResourceBoundsMapping { - fn from(mapping: ResourceBoundsMapping) -> crate::transaction::ResourceBoundsMapping { +impl From for crate::transaction::DeprecatedResourceBoundsMapping { + fn from(mapping: ResourceBoundsMapping) -> crate::transaction::DeprecatedResourceBoundsMapping { let map = BTreeMap::from([(Resource::L1Gas, mapping.l1_gas), (Resource::L2Gas, mapping.l2_gas)]); - crate::transaction::ResourceBoundsMapping(map) + crate::transaction::DeprecatedResourceBoundsMapping(map) } } diff --git a/crates/starknet_api/src/transaction.rs b/crates/starknet_api/src/transaction.rs index e749a66f45..f06b96709b 100644 --- a/crates/starknet_api/src/transaction.rs +++ b/crates/starknet_api/src/transaction.rs @@ -209,7 +209,7 @@ impl TransactionHasher for DeclareTransactionV2 { /// A declare V3 transaction. #[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] pub struct DeclareTransactionV3 { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -318,7 +318,7 @@ impl TransactionHasher for DeployAccountTransactionV1 { /// A deploy account V3 transaction. #[derive(Debug, Clone, Eq, PartialEq, Hash, Deserialize, Serialize, PartialOrd, Ord)] pub struct DeployAccountTransactionV3 { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -455,7 +455,7 @@ impl TransactionHasher for InvokeTransactionV1 { /// An invoke V3 transaction. #[derive(Debug, Clone, Eq, PartialEq, Hash, Deserialize, Serialize, PartialOrd, Ord)] pub struct InvokeTransactionV3 { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -924,9 +924,9 @@ where /// A mapping from execution resources to their corresponding fee bounds.. #[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] // TODO(Nimrod): Remove this struct definition. -pub struct ResourceBoundsMapping(pub BTreeMap); +pub struct DeprecatedResourceBoundsMapping(pub BTreeMap); -impl TryFrom> for ResourceBoundsMapping { +impl TryFrom> for DeprecatedResourceBoundsMapping { type Error = StarknetApiError; fn try_from( resource_resource_bounds_pairs: Vec<(Resource, ResourceBounds)>, diff --git a/crates/starknet_api/src/transaction_hash.rs b/crates/starknet_api/src/transaction_hash.rs index b7daf1fd97..55cdc33caa 100644 --- a/crates/starknet_api/src/transaction_hash.rs +++ b/crates/starknet_api/src/transaction_hash.rs @@ -14,6 +14,7 @@ use crate::transaction::{ DeployAccountTransactionV1, DeployAccountTransactionV3, DeployTransaction, + DeprecatedResourceBoundsMapping, InvokeTransaction, InvokeTransactionV0, InvokeTransactionV1, @@ -21,7 +22,6 @@ use crate::transaction::{ L1HandlerTransaction, Resource, ResourceBounds, - ResourceBoundsMapping, Tip, Transaction, TransactionHash, @@ -175,7 +175,7 @@ pub(crate) fn ascii_as_felt(ascii_str: &str) -> Result { // An implementation of the SNIP: https://github.com/EvyatarO/SNIPs/blob/snip-8/SNIPS/snip-8.md fn get_tip_resource_bounds_hash( - resource_bounds_mapping: &ResourceBoundsMapping, + resource_bounds_mapping: &DeprecatedResourceBoundsMapping, tip: &Tip, ) -> Result { let l1_resource_bounds = diff --git a/crates/starknet_client/src/reader/objects/test_utils.rs b/crates/starknet_client/src/reader/objects/test_utils.rs index 942bf7b7dc..100695878c 100644 --- a/crates/starknet_client/src/reader/objects/test_utils.rs +++ b/crates/starknet_client/src/reader/objects/test_utils.rs @@ -21,7 +21,7 @@ use starknet_api::transaction::{ L1ToL2Payload, L2ToL1Payload, PaymasterData, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionOffsetInBlock, @@ -60,7 +60,7 @@ auto_impl_get_test_instance! { Reserved = 0, } pub struct IntermediateDeclareTransaction { - pub resource_bounds: Option, + pub resource_bounds: Option, pub tip: Option, pub signature: TransactionSignature, pub nonce: Nonce, @@ -76,7 +76,7 @@ auto_impl_get_test_instance! { pub transaction_hash: TransactionHash, } pub struct IntermediateDeployAccountTransaction { - pub resource_bounds: Option, + pub resource_bounds: Option, pub tip: Option, pub signature: TransactionSignature, pub nonce: Nonce, @@ -100,7 +100,7 @@ auto_impl_get_test_instance! { pub version: TransactionVersion, } pub struct IntermediateInvokeTransaction { - pub resource_bounds: Option, + pub resource_bounds: Option, pub tip: Option, pub calldata: Calldata, pub sender_address: ContractAddress, diff --git a/crates/starknet_client/src/reader/objects/transaction.rs b/crates/starknet_client/src/reader/objects/transaction.rs index be699ba19e..16c62b5f62 100644 --- a/crates/starknet_client/src/reader/objects/transaction.rs +++ b/crates/starknet_client/src/reader/objects/transaction.rs @@ -31,7 +31,7 @@ use starknet_api::transaction::{ L2ToL1Payload, MessageToL1, PaymasterData, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, RevertedTransactionExecutionStatus as SnApiRevertedTransactionExecutionStatus, Tip, TransactionExecutionStatus as SnApiTransactionExecutionStatus, @@ -178,7 +178,7 @@ impl From for starknet_api::data_availability::Dat #[serde(deny_unknown_fields)] pub struct IntermediateDeclareTransaction { #[serde(skip_serializing_if = "Option::is_none")] - pub resource_bounds: Option, + pub resource_bounds: Option, #[serde(skip_serializing_if = "Option::is_none")] pub tip: Option, pub signature: TransactionSignature, @@ -347,7 +347,7 @@ impl From for starknet_api::transaction::DeployTransaction { #[serde(deny_unknown_fields)] pub struct IntermediateDeployAccountTransaction { #[serde(skip_serializing_if = "Option::is_none")] - pub resource_bounds: Option, + pub resource_bounds: Option, #[serde(skip_serializing_if = "Option::is_none")] pub tip: Option, pub signature: TransactionSignature, @@ -470,7 +470,7 @@ impl TryFrom #[serde(deny_unknown_fields)] pub struct IntermediateInvokeTransaction { #[serde(skip_serializing_if = "Option::is_none")] - pub resource_bounds: Option, + pub resource_bounds: Option, #[serde(skip_serializing_if = "Option::is_none")] pub tip: Option, pub calldata: Calldata, diff --git a/crates/starknet_client/src/writer/objects/transaction.rs b/crates/starknet_client/src/writer/objects/transaction.rs index 94b47ab274..97def90f38 100644 --- a/crates/starknet_client/src/writer/objects/transaction.rs +++ b/crates/starknet_client/src/writer/objects/transaction.rs @@ -33,7 +33,7 @@ use starknet_api::transaction::{ ContractAddressSalt, Fee, PaymasterData, - ResourceBoundsMapping, + DeprecatedResourceBoundsMapping, Tip, TransactionSignature, TransactionVersion, @@ -104,7 +104,7 @@ pub struct DeployAccountV1Transaction { #[derive(Debug, Deserialize, Serialize, Clone, Eq, PartialEq)] #[serde(deny_unknown_fields)] pub struct DeployAccountV3Transaction { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub contract_address_salt: ContractAddressSalt, pub class_hash: ClassHash, @@ -169,7 +169,7 @@ pub struct InvokeV1Transaction { #[derive(Debug, Deserialize, Serialize, Clone, Eq, PartialEq)] #[serde(deny_unknown_fields)] pub struct InvokeV3Transaction { - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub calldata: Calldata, pub sender_address: ContractAddress, @@ -235,7 +235,7 @@ pub struct DeclareV2Transaction { #[serde(deny_unknown_fields)] pub struct DeclareV3Transaction { pub contract_class: ContractClass, - pub resource_bounds: ResourceBoundsMapping, + pub resource_bounds: DeprecatedResourceBoundsMapping, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, From 656eb8501db2baafc528f3d808010634ecb2d545 Mon Sep 17 00:00:00 2001 From: Nimrod Weiss Date: Sun, 18 Aug 2024 14:30:24 +0300 Subject: [PATCH 2/6] build(fee): current tx_info holds validResourceBounds --- .../src/execution/syscalls/hint_processor.rs | 57 ++++++++++++------- .../syscall_tests/get_execution_info.rs | 7 ++- crates/blockifier/src/transaction/objects.rs | 13 +++-- .../src/transaction/transactions.rs | 6 +- crates/starknet_api/src/transaction.rs | 8 ++- 5 files changed, 55 insertions(+), 36 deletions(-) diff --git a/crates/blockifier/src/execution/syscalls/hint_processor.rs b/crates/blockifier/src/execution/syscalls/hint_processor.rs index df847f4c59..1ec7683f97 100644 --- a/crates/blockifier/src/execution/syscalls/hint_processor.rs +++ b/crates/blockifier/src/execution/syscalls/hint_processor.rs @@ -17,7 +17,7 @@ use cairo_vm::vm::vm_core::VirtualMachine; use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector}; use starknet_api::deprecated_contract_class::EntryPointType; use starknet_api::state::StorageKey; -use starknet_api::transaction::{Calldata, Resource}; +use starknet_api::transaction::{AllResourceBounds, Calldata}; use starknet_api::StarknetApiError; use starknet_types_core::felt::{Felt, FromStrError}; use thiserror::Error; @@ -205,6 +205,8 @@ pub const INVALID_ARGUMENT: &str = pub const L1_GAS: &str = "0x00000000000000000000000000000000000000000000000000004c315f474153"; // "L2_GAS"; pub const L2_GAS: &str = "0x00000000000000000000000000000000000000000000000000004c325f474153"; +// "L1_DATA_GAS" +pub const L1_DATA_GAS: &str = "0x0000000000000000000000000000000000000000004c315f444154415f474153"; /// Executes Starknet syscalls (stateful protocol hints) during the execution of an entry point /// call. @@ -462,26 +464,39 @@ impl<'a> SyscallHintProcessor<'a> { vm: &mut VirtualMachine, tx_info: &CurrentTransactionInfo, ) -> SyscallResult<(Relocatable, Relocatable)> { - let l1_gas = Felt::from_hex(L1_GAS).map_err(SyscallExecutionError::from)?; - let l2_gas = Felt::from_hex(L2_GAS).map_err(SyscallExecutionError::from)?; - let flat_resource_bounds: Vec = tx_info - .resource_bounds - .0 - .iter() - .flat_map(|(resource, resource_bounds)| { - let resource = match resource { - Resource::L1Gas => l1_gas, - Resource::L2Gas => l2_gas, - Resource::L1DataGas => todo!(), - }; - - vec![ - resource, - Felt::from(resource_bounds.max_amount), - Felt::from(resource_bounds.max_price_per_unit), - ] - }) - .collect(); + let l1_gas_as_felt = Felt::from_hex(L1_GAS).map_err(SyscallExecutionError::from)?; + let l2_gas_as_felt = Felt::from_hex(L2_GAS).map_err(SyscallExecutionError::from)?; + let l1_data_gas_as_felt = + Felt::from_hex(L1_DATA_GAS).map_err(SyscallExecutionError::from)?; + + let flat_resource_bounds = + match tx_info.resource_bounds { + starknet_api::transaction::ValidResourceBounds::L1Gas(l1_bounds) => { + vec![ + l1_gas_as_felt, + Felt::from(l1_bounds.max_amount), + Felt::from(l1_bounds.max_price_per_unit), + l2_gas_as_felt, + Felt::ZERO, + Felt::ZERO, + ] + } + starknet_api::transaction::ValidResourceBounds::AllResources( + AllResourceBounds { l1_gas, l2_gas, l1_data_gas }, + ) => { + vec![ + l1_gas_as_felt, + Felt::from(l1_gas.max_amount), + Felt::from(l1_gas.max_price_per_unit), + l2_gas_as_felt, + Felt::from(l2_gas.max_amount), + Felt::from(l2_gas.max_price_per_unit), + l1_data_gas_as_felt, + Felt::from(l1_data_gas.max_amount), + Felt::from(l1_data_gas.max_price_per_unit), + ] + } + }; self.allocate_data_segment(vm, &flat_resource_bounds) } diff --git a/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs b/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs index 33b2932e0d..ff6dc64a5d 100644 --- a/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs +++ b/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs @@ -12,7 +12,6 @@ use starknet_api::transaction::{ PaymasterData, Resource, ResourceBounds, - DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionVersion, @@ -213,7 +212,7 @@ fn test_get_execution_info( only_query, ..Default::default() }, - resource_bounds: DeprecatedResourceBoundsMapping(BTreeMap::from([ + resource_bounds: BTreeMap::from([ ( Resource::L1Gas, // TODO(Ori, 1/2/2024): Write an indicative expect message explaining why @@ -227,7 +226,9 @@ fn test_get_execution_info( }, ), (Resource::L2Gas, ResourceBounds { max_amount: 0, max_price_per_unit: 0 }), - ])), + ]) + .try_into() + .unwrap(), tip: Tip::default(), nonce_data_availability_mode: DataAvailabilityMode::L1, fee_data_availability_mode: DataAvailabilityMode::L1, diff --git a/crates/blockifier/src/transaction/objects.rs b/crates/blockifier/src/transaction/objects.rs index 2c3d6a8087..088e6da510 100644 --- a/crates/blockifier/src/transaction/objects.rs +++ b/crates/blockifier/src/transaction/objects.rs @@ -10,13 +10,12 @@ use starknet_api::transaction::{ AccountDeploymentData, Fee, PaymasterData, - Resource, ResourceBounds, - DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, TransactionVersion, + ValidResourceBounds, }; use starknet_types_core::felt::Felt; use strum_macros::EnumIter; @@ -125,7 +124,7 @@ impl HasRelatedFeeType for TransactionInfo { #[derive(Clone, Debug, Eq, PartialEq)] pub struct CurrentTransactionInfo { pub common_fields: CommonAccountFields, - pub resource_bounds: DeprecatedResourceBoundsMapping, + pub resource_bounds: ValidResourceBounds, pub tip: Tip, pub nonce_data_availability_mode: DataAvailabilityMode, pub fee_data_availability_mode: DataAvailabilityMode, @@ -135,10 +134,12 @@ pub struct CurrentTransactionInfo { impl CurrentTransactionInfo { /// Fetch the L1 resource bounds, if they exist. + // TODO(Nimrod): Consider removing this function and add equivalent method to + // `ValidResourceBounds`. pub fn l1_resource_bounds(&self) -> TransactionFeeResult { - match self.resource_bounds.0.get(&Resource::L1Gas).copied() { - Some(bounds) => Ok(bounds), - None => Err(TransactionFeeError::MissingL1GasBounds), + match self.resource_bounds { + ValidResourceBounds::L1Gas(bounds) => Ok(bounds), + ValidResourceBounds::AllResources { .. } => todo!(), } } } diff --git a/crates/blockifier/src/transaction/transactions.rs b/crates/blockifier/src/transaction/transactions.rs index 262acbb657..6ad86911bd 100644 --- a/crates/blockifier/src/transaction/transactions.rs +++ b/crates/blockifier/src/transaction/transactions.rs @@ -296,7 +296,7 @@ impl TransactionInfoCreator for DeclareTransaction { starknet_api::transaction::DeclareTransaction::V3(tx) => { TransactionInfo::Current(CurrentTransactionInfo { common_fields, - resource_bounds: tx.resource_bounds.clone(), + resource_bounds: tx.resource_bounds.0.clone().try_into().expect("todo"), tip: tx.tip, nonce_data_availability_mode: tx.nonce_data_availability_mode, fee_data_availability_mode: tx.fee_data_availability_mode, @@ -401,7 +401,7 @@ impl TransactionInfoCreator for DeployAccountTransaction { starknet_api::transaction::DeployAccountTransaction::V3(tx) => { TransactionInfo::Current(CurrentTransactionInfo { common_fields, - resource_bounds: tx.resource_bounds.clone(), + resource_bounds: tx.resource_bounds.0.clone().try_into().expect("todo"), tip: tx.tip, nonce_data_availability_mode: tx.nonce_data_availability_mode, fee_data_availability_mode: tx.fee_data_availability_mode, @@ -519,7 +519,7 @@ impl TransactionInfoCreator for InvokeTransaction { starknet_api::transaction::InvokeTransaction::V3(tx) => { TransactionInfo::Current(CurrentTransactionInfo { common_fields, - resource_bounds: tx.resource_bounds.clone(), + resource_bounds: tx.resource_bounds.0.clone().try_into().expect("todo"), tip: tx.tip, nonce_data_availability_mode: tx.nonce_data_availability_mode, fee_data_availability_mode: tx.fee_data_availability_mode, diff --git a/crates/starknet_api/src/transaction.rs b/crates/starknet_api/src/transaction.rs index f06b96709b..d8e6d2437b 100644 --- a/crates/starknet_api/src/transaction.rs +++ b/crates/starknet_api/src/transaction.rs @@ -1,4 +1,4 @@ -use std::collections::{BTreeMap, HashMap, HashSet}; +use std::collections::{BTreeMap, HashSet}; use std::fmt::Display; use std::sync::Arc; @@ -949,21 +949,23 @@ impl TryFrom> for DeprecatedResourceBoundsMappin } } +#[derive(Clone, Debug, Eq, PartialEq)] pub enum ValidResourceBounds { L1Gas(ResourceBounds), // Pre 0.13.3. L2 bounds are signed but never used. AllResources(AllResourceBounds), } +#[derive(Clone, Debug, Eq, PartialEq)] pub struct AllResourceBounds { pub l1_gas: ResourceBounds, pub l2_gas: ResourceBounds, pub l1_data_gas: ResourceBounds, } -impl TryFrom> for ValidResourceBounds { +impl TryFrom> for ValidResourceBounds { type Error = StarknetApiError; fn try_from( - raw_resource_bounds: HashMap, + raw_resource_bounds: BTreeMap, ) -> Result { if let (Some(l1_bounds), Some(l2_bounds)) = (raw_resource_bounds.get(&Resource::L1Gas), raw_resource_bounds.get(&Resource::L2Gas)) From 61d58fda5ca64e3ce9a24cce16ea946575a8ebb7 Mon Sep 17 00:00:00 2001 From: Nimrod Weiss Date: Sun, 18 Aug 2024 15:14:53 +0300 Subject: [PATCH 3/6] refactor(fee): transaction info creator may fail --- .../src/blockifier/stateful_validator.rs | 8 ++- .../src/concurrency/versioned_state_test.rs | 2 +- crates/blockifier/src/context.rs | 2 +- .../src/transaction/account_transaction.rs | 3 +- .../transaction/account_transactions_test.rs | 11 ++-- crates/blockifier/src/transaction/errors.rs | 8 +++ crates/blockifier/src/transaction/objects.rs | 3 +- .../src/transaction/post_execution_test.rs | 9 +++- .../src/transaction/transaction_execution.rs | 4 +- .../src/transaction/transactions.rs | 52 +++++++++---------- crates/native_blockifier/src/py_validator.rs | 2 +- 11 files changed, 64 insertions(+), 40 deletions(-) diff --git a/crates/blockifier/src/blockifier/stateful_validator.rs b/crates/blockifier/src/blockifier/stateful_validator.rs index 3c6a8606dd..de9d60f66b 100644 --- a/crates/blockifier/src/blockifier/stateful_validator.rs +++ b/crates/blockifier/src/blockifier/stateful_validator.rs @@ -18,7 +18,11 @@ use crate::state::cached_state::CachedState; use crate::state::errors::StateError; use crate::state::state_api::StateReader; use crate::transaction::account_transaction::AccountTransaction; -use crate::transaction::errors::{TransactionExecutionError, TransactionPreValidationError}; +use crate::transaction::errors::{ + TransactionInfoCreationError, + TransactionExecutionError, + TransactionPreValidationError, +}; use crate::transaction::transaction_execution::Transaction; use crate::transaction::transactions::ValidatableTransaction; @@ -36,6 +40,8 @@ pub enum StatefulValidatorError { TransactionExecutorError(#[from] TransactionExecutorError), #[error(transparent)] TransactionPreValidationError(#[from] TransactionPreValidationError), + #[error(transparent)] + TransactionCreationError(#[from] TransactionInfoCreationError), } pub type StatefulValidatorResult = Result; diff --git a/crates/blockifier/src/concurrency/versioned_state_test.rs b/crates/blockifier/src/concurrency/versioned_state_test.rs index 9a85630108..c6bbd1fca6 100644 --- a/crates/blockifier/src/concurrency/versioned_state_test.rs +++ b/crates/blockifier/src/concurrency/versioned_state_test.rs @@ -233,7 +233,7 @@ fn test_run_parallel_txs(max_resource_bounds: DeprecatedResourceBoundsMapping) { &mut NonceManager::default(), ); let account_tx_1 = AccountTransaction::DeployAccount(deploy_account_tx_1); - let enforce_fee = account_tx_1.create_tx_info().enforce_fee().unwrap(); + let enforce_fee = account_tx_1.create_tx_info().unwrap().enforce_fee().unwrap(); let class_hash = grindy_account.get_class_hash(); let ctor_storage_arg = felt!(1_u8); diff --git a/crates/blockifier/src/context.rs b/crates/blockifier/src/context.rs index 13b356ea6d..7f7864fffb 100644 --- a/crates/blockifier/src/context.rs +++ b/crates/blockifier/src/context.rs @@ -68,7 +68,7 @@ impl BlockContext { ) -> TransactionContext { TransactionContext { block_context: self.clone(), - tx_info: tx_info_creator.create_tx_info(), + tx_info: tx_info_creator.create_tx_info().expect("todo"), } } } diff --git a/crates/blockifier/src/transaction/account_transaction.rs b/crates/blockifier/src/transaction/account_transaction.rs index 2395274b70..89c111e84a 100644 --- a/crates/blockifier/src/transaction/account_transaction.rs +++ b/crates/blockifier/src/transaction/account_transaction.rs @@ -33,6 +33,7 @@ use crate::transaction::constants; use crate::transaction::errors::{ TransactionExecutionError, TransactionFeeError, + TransactionInfoCreationError, TransactionPreValidationError, }; use crate::transaction::objects::{ @@ -718,7 +719,7 @@ impl ExecutableTransaction for AccountTransaction { } impl TransactionInfoCreator for AccountTransaction { - fn create_tx_info(&self) -> TransactionInfo { + fn create_tx_info(&self) -> Result { match self { Self::Declare(tx) => tx.create_tx_info(), Self::DeployAccount(tx) => tx.create_tx_info(), diff --git a/crates/blockifier/src/transaction/account_transactions_test.rs b/crates/blockifier/src/transaction/account_transactions_test.rs index a3e3f1df58..90660b9280 100644 --- a/crates/blockifier/src/transaction/account_transactions_test.rs +++ b/crates/blockifier/src/transaction/account_transactions_test.rs @@ -12,8 +12,8 @@ use starknet_api::transaction::{ Calldata, ContractAddressSalt, DeclareTransactionV2, - Fee, DeprecatedResourceBoundsMapping, + Fee, TransactionHash, TransactionVersion, }; @@ -114,7 +114,10 @@ fn test_circuit(block_context: BlockContext, max_resource_bounds: DeprecatedReso } #[rstest] -fn test_rc96_holes(block_context: BlockContext, max_resource_bounds: DeprecatedResourceBoundsMapping) { +fn test_rc96_holes( + block_context: BlockContext, + max_resource_bounds: DeprecatedResourceBoundsMapping, +) { let test_contract = FeatureContract::TestContract(CairoVersion::Cairo1); let account = FeatureContract::AccountWithoutValidations(CairoVersion::Cairo1); let chain_info = &block_context.chain_info; @@ -171,7 +174,7 @@ fn test_fee_enforcement( ); let account_tx = AccountTransaction::DeployAccount(deploy_account_tx); - let enforce_fee = account_tx.create_tx_info().enforce_fee().unwrap(); + let enforce_fee = account_tx.create_tx_info().unwrap().enforce_fee().unwrap(); let result = account_tx.execute(state, &block_context, true, true); assert_eq!(result.is_err(), enforce_fee); } @@ -652,7 +655,7 @@ fn test_fail_declare(block_context: BlockContext, max_fee: Fee) { ); // Fail execution, assert nonce and balance are unchanged. - let tx_info = declare_account_tx.create_tx_info(); + let tx_info = declare_account_tx.create_tx_info().unwrap(); let initial_balance = state .get_fee_token_balance(account_address, chain_info.fee_token_address(&tx_info.fee_type())) .unwrap(); diff --git a/crates/blockifier/src/transaction/errors.rs b/crates/blockifier/src/transaction/errors.rs index cbd9d38085..4c871eb73c 100644 --- a/crates/blockifier/src/transaction/errors.rs +++ b/crates/blockifier/src/transaction/errors.rs @@ -138,3 +138,11 @@ pub enum NumericConversionError { #[error("Conversion of {0} to u128 unsuccessful.")] U128ToUsizeError(u128), } + +#[derive(Debug, Error)] +pub enum TransactionInfoCreationError { + #[error("Invalid ResourceMapping combination was given: {0}")] + InvalidResourceMapping(String), + #[error(transparent)] + StarknetAPIError(#[from] StarknetApiError), +} diff --git a/crates/blockifier/src/transaction/objects.rs b/crates/blockifier/src/transaction/objects.rs index 088e6da510..bfdcfd83f9 100644 --- a/crates/blockifier/src/transaction/objects.rs +++ b/crates/blockifier/src/transaction/objects.rs @@ -37,6 +37,7 @@ use crate::transaction::constants; use crate::transaction::errors::{ TransactionExecutionError, TransactionFeeError, + TransactionInfoCreationError, TransactionPreValidationError, }; use crate::utils::{u128_from_usize, usize_from_u128}; @@ -564,5 +565,5 @@ pub enum FeeType { } pub trait TransactionInfoCreator { - fn create_tx_info(&self) -> TransactionInfo; + fn create_tx_info(&self) -> Result; } diff --git a/crates/blockifier/src/transaction/post_execution_test.rs b/crates/blockifier/src/transaction/post_execution_test.rs index 2996ce8621..271718e7e0 100644 --- a/crates/blockifier/src/transaction/post_execution_test.rs +++ b/crates/blockifier/src/transaction/post_execution_test.rs @@ -2,7 +2,12 @@ use assert_matches::assert_matches; use rstest::rstest; use starknet_api::core::{ContractAddress, PatriciaKey}; use starknet_api::state::StorageKey; -use starknet_api::transaction::{Calldata, Fee, DeprecatedResourceBoundsMapping, TransactionVersion}; +use starknet_api::transaction::{ + Calldata, + DeprecatedResourceBoundsMapping, + Fee, + TransactionVersion, +}; use starknet_api::{felt, patricia_key}; use starknet_types_core::felt::Felt; @@ -112,7 +117,7 @@ fn test_revert_on_overdraft( resource_bounds: max_resource_bounds.clone(), nonce: nonce_manager.next(account_address), }); - let tx_info = approve_tx.create_tx_info(); + let tx_info = approve_tx.create_tx_info().unwrap(); let approval_execution_info = approve_tx.execute(&mut state, &block_context, true, true).unwrap(); assert!(!approval_execution_info.is_reverted()); diff --git a/crates/blockifier/src/transaction/transaction_execution.rs b/crates/blockifier/src/transaction/transaction_execution.rs index f2fb174a84..272bc0ee81 100644 --- a/crates/blockifier/src/transaction/transaction_execution.rs +++ b/crates/blockifier/src/transaction/transaction_execution.rs @@ -12,7 +12,7 @@ use crate::fee::actual_cost::TransactionReceipt; use crate::state::cached_state::TransactionalState; use crate::state::state_api::UpdatableState; use crate::transaction::account_transaction::AccountTransaction; -use crate::transaction::errors::TransactionFeeError; +use crate::transaction::errors::{TransactionInfoCreationError, TransactionFeeError}; use crate::transaction::objects::{ TransactionExecutionInfo, TransactionExecutionResult, @@ -100,7 +100,7 @@ impl Transaction { } impl TransactionInfoCreator for Transaction { - fn create_tx_info(&self) -> TransactionInfo { + fn create_tx_info(&self) -> Result { match self { Self::AccountTransaction(account_tx) => account_tx.create_tx_info(), Self::L1HandlerTransaction(l1_handler_tx) => l1_handler_tx.create_tx_info(), diff --git a/crates/blockifier/src/transaction/transactions.rs b/crates/blockifier/src/transaction/transactions.rs index 6ad86911bd..f32bb99a8f 100644 --- a/crates/blockifier/src/transaction/transactions.rs +++ b/crates/blockifier/src/transaction/transactions.rs @@ -30,7 +30,7 @@ use crate::state::cached_state::TransactionalState; use crate::state::errors::StateError; use crate::state::state_api::{State, UpdatableState}; use crate::transaction::constants; -use crate::transaction::errors::TransactionExecutionError; +use crate::transaction::errors::{TransactionInfoCreationError, TransactionExecutionError}; use crate::transaction::objects::{ CommonAccountFields, CurrentTransactionInfo, @@ -268,7 +268,7 @@ impl Executable for DeclareTransaction { } impl TransactionInfoCreator for DeclareTransaction { - fn create_tx_info(&self) -> TransactionInfo { + fn create_tx_info(&self) -> Result { // TODO(Nir, 01/11/2023): Consider to move this (from all get_tx_info methods). let common_fields = CommonAccountFields { transaction_hash: self.tx_hash(), @@ -282,27 +282,27 @@ impl TransactionInfoCreator for DeclareTransaction { match &self.tx { starknet_api::transaction::DeclareTransaction::V0(tx) | starknet_api::transaction::DeclareTransaction::V1(tx) => { - TransactionInfo::Deprecated(DeprecatedTransactionInfo { + Ok(TransactionInfo::Deprecated(DeprecatedTransactionInfo { common_fields, max_fee: tx.max_fee, - }) + })) } starknet_api::transaction::DeclareTransaction::V2(tx) => { - TransactionInfo::Deprecated(DeprecatedTransactionInfo { + Ok(TransactionInfo::Deprecated(DeprecatedTransactionInfo { common_fields, max_fee: tx.max_fee, - }) + })) } starknet_api::transaction::DeclareTransaction::V3(tx) => { - TransactionInfo::Current(CurrentTransactionInfo { + Ok(TransactionInfo::Current(CurrentTransactionInfo { common_fields, - resource_bounds: tx.resource_bounds.0.clone().try_into().expect("todo"), + resource_bounds: tx.resource_bounds.0.clone().try_into()?, tip: tx.tip, nonce_data_availability_mode: tx.nonce_data_availability_mode, fee_data_availability_mode: tx.fee_data_availability_mode, paymaster_data: tx.paymaster_data.clone(), account_deployment_data: tx.account_deployment_data.clone(), - }) + })) } } } @@ -381,7 +381,7 @@ impl Executable for DeployAccountTransaction { } impl TransactionInfoCreator for DeployAccountTransaction { - fn create_tx_info(&self) -> TransactionInfo { + fn create_tx_info(&self) -> Result { let common_fields = CommonAccountFields { transaction_hash: self.tx_hash(), version: self.version(), @@ -393,21 +393,21 @@ impl TransactionInfoCreator for DeployAccountTransaction { match &self.tx { starknet_api::transaction::DeployAccountTransaction::V1(tx) => { - TransactionInfo::Deprecated(DeprecatedTransactionInfo { + Ok(TransactionInfo::Deprecated(DeprecatedTransactionInfo { common_fields, max_fee: tx.max_fee, - }) + })) } starknet_api::transaction::DeployAccountTransaction::V3(tx) => { - TransactionInfo::Current(CurrentTransactionInfo { + Ok(TransactionInfo::Current(CurrentTransactionInfo { common_fields, - resource_bounds: tx.resource_bounds.0.clone().try_into().expect("todo"), + resource_bounds: tx.resource_bounds.0.clone().try_into()?, tip: tx.tip, nonce_data_availability_mode: tx.nonce_data_availability_mode, fee_data_availability_mode: tx.fee_data_availability_mode, paymaster_data: tx.paymaster_data.clone(), account_deployment_data: AccountDeploymentData::default(), - }) + })) } } } @@ -493,7 +493,7 @@ impl Executable for InvokeTransaction { } impl TransactionInfoCreator for InvokeTransaction { - fn create_tx_info(&self) -> TransactionInfo { + fn create_tx_info(&self) -> Result { let common_fields = CommonAccountFields { transaction_hash: self.tx_hash(), version: self.version(), @@ -505,27 +505,27 @@ impl TransactionInfoCreator for InvokeTransaction { match &self.tx { starknet_api::transaction::InvokeTransaction::V0(tx) => { - TransactionInfo::Deprecated(DeprecatedTransactionInfo { + Ok(TransactionInfo::Deprecated(DeprecatedTransactionInfo { common_fields, max_fee: tx.max_fee, - }) + })) } starknet_api::transaction::InvokeTransaction::V1(tx) => { - TransactionInfo::Deprecated(DeprecatedTransactionInfo { + Ok(TransactionInfo::Deprecated(DeprecatedTransactionInfo { common_fields, max_fee: tx.max_fee, - }) + })) } starknet_api::transaction::InvokeTransaction::V3(tx) => { - TransactionInfo::Current(CurrentTransactionInfo { + Ok(TransactionInfo::Current(CurrentTransactionInfo { common_fields, - resource_bounds: tx.resource_bounds.0.clone().try_into().expect("todo"), + resource_bounds: tx.resource_bounds.0.clone().try_into()?, tip: tx.tip, nonce_data_availability_mode: tx.nonce_data_availability_mode, fee_data_availability_mode: tx.fee_data_availability_mode, paymaster_data: tx.paymaster_data.clone(), account_deployment_data: tx.account_deployment_data.clone(), - }) + })) } } } @@ -591,8 +591,8 @@ impl Executable for L1HandlerTransaction { } impl TransactionInfoCreator for L1HandlerTransaction { - fn create_tx_info(&self) -> TransactionInfo { - TransactionInfo::Deprecated(DeprecatedTransactionInfo { + fn create_tx_info(&self) -> Result { + Ok(TransactionInfo::Deprecated(DeprecatedTransactionInfo { common_fields: CommonAccountFields { transaction_hash: self.tx_hash, version: self.tx.version, @@ -602,6 +602,6 @@ impl TransactionInfoCreator for L1HandlerTransaction { only_query: false, }, max_fee: Fee::default(), - }) + })) } } diff --git a/crates/native_blockifier/src/py_validator.rs b/crates/native_blockifier/src/py_validator.rs index 8398e48c1a..2934047446 100644 --- a/crates/native_blockifier/src/py_validator.rs +++ b/crates/native_blockifier/src/py_validator.rs @@ -91,7 +91,7 @@ impl PyValidator { if account_tx.tx_type() != TransactionType::InvokeFunction { return Ok(false); } - let tx_info = account_tx.create_tx_info(); + let tx_info = account_tx.create_tx_info()?; let nonce = self.stateful_validator.get_nonce(tx_info.sender_address())?; let deploy_account_not_processed = From ad9d50cc065691f48c557957ced44e83c31dc138 Mon Sep 17 00:00:00 2001 From: Nimrod Weiss Date: Sun, 18 Aug 2024 16:22:16 +0300 Subject: [PATCH 4/6] refactor(fee): block context creator may fail --- .../src/blockifier/stateful_validator.rs | 6 +++--- .../src/concurrency/versioned_state_test.rs | 2 +- .../blockifier/src/concurrency/worker_logic.rs | 5 ++++- .../src/concurrency/worker_logic_test.rs | 6 +++--- crates/blockifier/src/context.rs | 9 +++++---- crates/blockifier/src/fee/fee_test.rs | 2 +- crates/blockifier/src/fee/gas_usage_test.rs | 5 +++-- crates/blockifier/src/test_utils/prices.rs | 6 +++++- .../src/transaction/account_transaction.rs | 2 +- .../transaction/account_transactions_test.rs | 4 ++-- crates/blockifier/src/transaction/errors.rs | 2 ++ .../src/transaction/transaction_execution.rs | 6 +++--- .../src/transaction/transactions_test.rs | 18 +++++++++--------- 13 files changed, 42 insertions(+), 31 deletions(-) diff --git a/crates/blockifier/src/blockifier/stateful_validator.rs b/crates/blockifier/src/blockifier/stateful_validator.rs index de9d60f66b..392db67885 100644 --- a/crates/blockifier/src/blockifier/stateful_validator.rs +++ b/crates/blockifier/src/blockifier/stateful_validator.rs @@ -19,8 +19,8 @@ use crate::state::errors::StateError; use crate::state::state_api::StateReader; use crate::transaction::account_transaction::AccountTransaction; use crate::transaction::errors::{ - TransactionInfoCreationError, TransactionExecutionError, + TransactionInfoCreationError, TransactionPreValidationError, }; use crate::transaction::transaction_execution::Transaction; @@ -71,7 +71,7 @@ impl StatefulValidator { return Ok(()); } - let tx_context = self.tx_executor.block_context.to_tx_context(&tx); + let tx_context = self.tx_executor.block_context.to_tx_context(&tx)?; self.perform_pre_validation_stage(&tx, &tx_context)?; if skip_validate { @@ -118,7 +118,7 @@ impl StatefulValidator { mut remaining_gas: u64, ) -> StatefulValidatorResult<(Option, TransactionReceipt)> { let mut execution_resources = ExecutionResources::default(); - let tx_context = Arc::new(self.tx_executor.block_context.to_tx_context(tx)); + let tx_context = Arc::new(self.tx_executor.block_context.to_tx_context(tx)?); let limit_steps_by_resources = true; let validate_call_info = tx.validate_tx( diff --git a/crates/blockifier/src/concurrency/versioned_state_test.rs b/crates/blockifier/src/concurrency/versioned_state_test.rs index c6bbd1fca6..db64d3fe08 100644 --- a/crates/blockifier/src/concurrency/versioned_state_test.rs +++ b/crates/blockifier/src/concurrency/versioned_state_test.rs @@ -248,7 +248,7 @@ fn test_run_parallel_txs(max_resource_bounds: DeprecatedResourceBoundsMapping) { let deploy_account_tx_2 = deploy_account_tx(deploy_tx_args, nonce_manager); let account_address = deploy_account_tx_2.contract_address; let account_tx_2 = AccountTransaction::DeployAccount(deploy_account_tx_2); - let tx_context = block_context.to_tx_context(&account_tx_2); + let tx_context = block_context.to_tx_context(&account_tx_2).unwrap(); let fee_type = tx_context.tx_info.fee_type(); let deployed_account_balance_key = get_fee_token_var_address(account_address); diff --git a/crates/blockifier/src/concurrency/worker_logic.rs b/crates/blockifier/src/concurrency/worker_logic.rs index 3029236f6f..ed22913bfe 100644 --- a/crates/blockifier/src/concurrency/worker_logic.rs +++ b/crates/blockifier/src/concurrency/worker_logic.rs @@ -230,7 +230,10 @@ impl<'a, S: StateReader> WorkerExecutor<'a, S> { &mut execution_output.as_mut().expect(EXECUTION_OUTPUTS_UNWRAP_ERROR).result; if let Ok(tx_execution_info) = tx_result.as_mut() { - let tx_context = self.block_context.to_tx_context(&self.chunk[tx_index]); + let tx_context = self + .block_context + .to_tx_context(&self.chunk[tx_index]) + .expect("Failed to create tx context."); // Add the deleted sequencer balance key to the storage keys. let concurrency_mode = true; tx_state_changes_keys.update_sequencer_key_in_storage( diff --git a/crates/blockifier/src/concurrency/worker_logic_test.rs b/crates/blockifier/src/concurrency/worker_logic_test.rs index 8107c3ad78..3f9a9ebcac 100644 --- a/crates/blockifier/src/concurrency/worker_logic_test.rs +++ b/crates/blockifier/src/concurrency/worker_logic_test.rs @@ -5,8 +5,8 @@ use rstest::rstest; use starknet_api::core::{ContractAddress, Nonce, PatriciaKey}; use starknet_api::transaction::{ ContractAddressSalt, - Fee, DeprecatedResourceBoundsMapping, + Fee, TransactionVersion, }; use starknet_api::{contract_address, felt, patricia_key}; @@ -174,7 +174,7 @@ pub fn test_commit_tx() { assert_eq!(felt!(expected_sequencer_storage_read), actual_sequencer_storage_read,); } } - let tx_context = executor.block_context.to_tx_context(&txs[commit_idx]); + let tx_context = executor.block_context.to_tx_context(&txs[commit_idx]).unwrap(); expected_sequencer_balance_low += actual_fee; // Check that the sequencer balance was updated correctly in the state. verify_sequencer_balance_update( @@ -228,7 +228,7 @@ fn test_commit_tx_when_sender_is_sequencer() { let read_values_before_commit = fee_transfer_call_info.storage_read_values.clone(); drop(execution_task_outputs); - let tx_context = &executor.block_context.to_tx_context(&sequencer_tx[0]); + let tx_context = &executor.block_context.to_tx_context(&sequencer_tx[0]).unwrap(); let fee_token_address = executor.block_context.chain_info.fee_token_address(&tx_context.tx_info.fee_type()); let sequencer_balance_high_before = diff --git a/crates/blockifier/src/context.rs b/crates/blockifier/src/context.rs index 7f7864fffb..02ff46ecc7 100644 --- a/crates/blockifier/src/context.rs +++ b/crates/blockifier/src/context.rs @@ -7,6 +7,7 @@ use starknet_api::core::{ChainId, ContractAddress}; use crate::blockifier::block::BlockInfo; use crate::bouncer::BouncerConfig; +use crate::transaction::errors::TransactionInfoCreationError; use crate::transaction::objects::{ FeeType, HasRelatedFeeType, @@ -65,11 +66,11 @@ impl BlockContext { pub fn to_tx_context( &self, tx_info_creator: &impl TransactionInfoCreator, - ) -> TransactionContext { - TransactionContext { + ) -> Result { + Ok(TransactionContext { block_context: self.clone(), - tx_info: tx_info_creator.create_tx_info().expect("todo"), - } + tx_info: tx_info_creator.create_tx_info()?, + }) } } diff --git a/crates/blockifier/src/fee/fee_test.rs b/crates/blockifier/src/fee/fee_test.rs index bcc791f723..5944d05b13 100644 --- a/crates/blockifier/src/fee/fee_test.rs +++ b/crates/blockifier/src/fee/fee_test.rs @@ -144,7 +144,7 @@ fn test_discounted_gas_overdraft( let charge_fee = true; let report = PostExecutionReport::new( &mut state, - &block_context.to_tx_context(&tx), + &block_context.to_tx_context(&tx).unwrap(), &tx_receipt, charge_fee, ) diff --git a/crates/blockifier/src/fee/gas_usage_test.rs b/crates/blockifier/src/fee/gas_usage_test.rs index 1d89c913db..b83517acd8 100644 --- a/crates/blockifier/src/fee/gas_usage_test.rs +++ b/crates/blockifier/src/fee/gas_usage_test.rs @@ -205,8 +205,9 @@ fn test_get_message_segment_length( #[rstest] fn test_compute_discounted_gas_from_gas_vector() { - let tx_context = - BlockContext::create_for_testing().to_tx_context(&account_invoke_tx(invoke_tx_args! {})); + let tx_context = BlockContext::create_for_testing() + .to_tx_context(&account_invoke_tx(invoke_tx_args! {})) + .unwrap(); let gas_usage = GasVector { l1_gas: 100, l1_data_gas: 2, ..Default::default() }; let actual_result = compute_discounted_gas_from_gas_vector(&gas_usage, &tx_context); diff --git a/crates/blockifier/src/test_utils/prices.rs b/crates/blockifier/src/test_utils/prices.rs index bc2592aade..156ca59b24 100644 --- a/crates/blockifier/src/test_utils/prices.rs +++ b/crates/blockifier/src/test_utils/prices.rs @@ -72,7 +72,11 @@ fn fee_transfer_resources( state, &mut ExecutionResources::default(), &mut EntryPointExecutionContext::new( - Arc::new(block_context.to_tx_context(&account_invoke_tx(InvokeTxArgs::default()))), + Arc::new( + block_context + .to_tx_context(&account_invoke_tx(InvokeTxArgs::default())) + .unwrap(), + ), ExecutionMode::Execute, false, ) diff --git a/crates/blockifier/src/transaction/account_transaction.rs b/crates/blockifier/src/transaction/account_transaction.rs index 89c111e84a..381ac2a982 100644 --- a/crates/blockifier/src/transaction/account_transaction.rs +++ b/crates/blockifier/src/transaction/account_transaction.rs @@ -662,7 +662,7 @@ impl ExecutableTransaction for AccountTransaction { block_context: &BlockContext, execution_flags: ExecutionFlags, ) -> TransactionExecutionResult { - let tx_context = Arc::new(block_context.to_tx_context(self)); + let tx_context = Arc::new(block_context.to_tx_context(self)?); self.verify_tx_version(tx_context.tx_info.version())?; // Nonce and fee check should be done before running user code. diff --git a/crates/blockifier/src/transaction/account_transactions_test.rs b/crates/blockifier/src/transaction/account_transactions_test.rs index 90660b9280..dff96762b8 100644 --- a/crates/blockifier/src/transaction/account_transactions_test.rs +++ b/crates/blockifier/src/transaction/account_transactions_test.rs @@ -932,7 +932,7 @@ fn test_max_fee_to_max_steps_conversion( resource_bounds: l1_resource_bounds(actual_gas_used, actual_strk_gas_price.into()), nonce: nonce_manager.next(account_address), }); - let tx_context1 = Arc::new(block_context.to_tx_context(&account_tx1)); + let tx_context1 = Arc::new(block_context.to_tx_context(&account_tx1).unwrap()); let execution_context1 = EntryPointExecutionContext::new_invoke(tx_context1, true).unwrap(); let max_steps_limit1 = execution_context1.vm_run_resources.get_n_steps(); let tx_execution_info1 = account_tx1.execute(&mut state, &block_context, true, true).unwrap(); @@ -952,7 +952,7 @@ fn test_max_fee_to_max_steps_conversion( resource_bounds: l1_resource_bounds(2 * actual_gas_used, actual_strk_gas_price.into()), nonce: nonce_manager.next(account_address), }); - let tx_context2 = Arc::new(block_context.to_tx_context(&account_tx2)); + let tx_context2 = Arc::new(block_context.to_tx_context(&account_tx2).unwrap()); let execution_context2 = EntryPointExecutionContext::new_invoke(tx_context2, true).unwrap(); let max_steps_limit2 = execution_context2.vm_run_resources.get_n_steps(); let tx_execution_info2 = account_tx2.execute(&mut state, &block_context, true, true).unwrap(); diff --git a/crates/blockifier/src/transaction/errors.rs b/crates/blockifier/src/transaction/errors.rs index 4c871eb73c..0fb6e21107 100644 --- a/crates/blockifier/src/transaction/errors.rs +++ b/crates/blockifier/src/transaction/errors.rs @@ -112,6 +112,8 @@ pub enum TransactionExecutionError { InvalidSegmentStructure(usize, usize), #[error(transparent)] ProgramError(#[from] ProgramError), + #[error(transparent)] + TransactionInfoCreationError(#[from] TransactionInfoCreationError), } #[derive(Debug, Error)] diff --git a/crates/blockifier/src/transaction/transaction_execution.rs b/crates/blockifier/src/transaction/transaction_execution.rs index 272bc0ee81..63789c3a7a 100644 --- a/crates/blockifier/src/transaction/transaction_execution.rs +++ b/crates/blockifier/src/transaction/transaction_execution.rs @@ -12,7 +12,7 @@ use crate::fee::actual_cost::TransactionReceipt; use crate::state::cached_state::TransactionalState; use crate::state::state_api::UpdatableState; use crate::transaction::account_transaction::AccountTransaction; -use crate::transaction::errors::{TransactionInfoCreationError, TransactionFeeError}; +use crate::transaction::errors::{TransactionFeeError, TransactionInfoCreationError}; use crate::transaction::objects::{ TransactionExecutionInfo, TransactionExecutionResult, @@ -115,7 +115,7 @@ impl ExecutableTransaction for L1HandlerTransaction { block_context: &BlockContext, _execution_flags: ExecutionFlags, ) -> TransactionExecutionResult { - let tx_context = Arc::new(block_context.to_tx_context(self)); + let tx_context = Arc::new(block_context.to_tx_context(self)?); let mut execution_resources = ExecutionResources::default(); let mut context = EntryPointExecutionContext::new_invoke(tx_context.clone(), true)?; @@ -184,7 +184,7 @@ impl ExecutableTransaction for Transaction { let tx_execution_summary = tx_execution_info.summarize(); let mut tx_state_changes_keys = state.get_actual_state_changes()?.into_keys(); tx_state_changes_keys.update_sequencer_key_in_storage( - &block_context.to_tx_context(self), + &block_context.to_tx_context(self)?, &tx_execution_info, concurrency_mode, ); diff --git a/crates/blockifier/src/transaction/transactions_test.rs b/crates/blockifier/src/transaction/transactions_test.rs index 098857f708..f86b1db4df 100644 --- a/crates/blockifier/src/transaction/transactions_test.rs +++ b/crates/blockifier/src/transaction/transactions_test.rs @@ -14,12 +14,12 @@ use starknet_api::deprecated_contract_class::EntryPointType; use starknet_api::state::StorageKey; use starknet_api::transaction::{ Calldata, + DeprecatedResourceBoundsMapping, EventContent, EventData, EventKey, Fee, L2ToL1Payload, - DeprecatedResourceBoundsMapping, TransactionSignature, TransactionVersion, }; @@ -422,7 +422,7 @@ fn test_invoke_tx( let sender_address = invoke_tx.sender_address(); let account_tx = AccountTransaction::Invoke(invoke_tx); - let tx_context = block_context.to_tx_context(&account_tx); + let tx_context = block_context.to_tx_context(&account_tx).unwrap(); let actual_execution_info = account_tx.execute(state, block_context, true, true).unwrap(); @@ -792,7 +792,7 @@ fn assert_failure_if_resource_bounds_exceed_balance( block_context: &BlockContext, invalid_tx: AccountTransaction, ) { - match block_context.to_tx_context(&invalid_tx).tx_info { + match block_context.to_tx_context(&invalid_tx).unwrap().tx_info { TransactionInfo::Deprecated(context) => { assert_matches!( invalid_tx.execute(state, block_context, true, true).unwrap_err(), @@ -1035,7 +1035,7 @@ fn test_invalid_nonce( let invalid_nonce = nonce!(1_u8); let invalid_tx = account_invoke_tx(invoke_tx_args! { nonce: invalid_nonce, ..valid_invoke_tx_args.clone() }); - let invalid_tx_context = block_context.to_tx_context(&invalid_tx); + let invalid_tx_context = block_context.to_tx_context(&invalid_tx).unwrap(); let pre_validation_err = invalid_tx .perform_pre_validation_stage(&mut transactional_state, &invalid_tx_context, false, true) .unwrap_err(); @@ -1055,7 +1055,7 @@ fn test_invalid_nonce( let valid_tx = account_invoke_tx(invoke_tx_args! { nonce: valid_nonce, ..valid_invoke_tx_args.clone() }); - let valid_tx_context = block_context.to_tx_context(&valid_tx); + let valid_tx_context = block_context.to_tx_context(&valid_tx).unwrap(); valid_tx .perform_pre_validation_stage(&mut transactional_state, &valid_tx_context, false, false) .unwrap(); @@ -1064,7 +1064,7 @@ fn test_invalid_nonce( let invalid_nonce = nonce!(0_u8); let invalid_tx = account_invoke_tx(invoke_tx_args! { nonce: invalid_nonce, ..valid_invoke_tx_args.clone() }); - let invalid_tx_context = block_context.to_tx_context(&invalid_tx); + let invalid_tx_context = block_context.to_tx_context(&invalid_tx).unwrap(); let pre_validation_err = invalid_tx .perform_pre_validation_stage(&mut transactional_state, &invalid_tx_context, false, false) .unwrap_err(); @@ -1180,7 +1180,7 @@ fn test_declare_tx( undeclared_class_hash == class_hash ); let fee_type = &account_tx.fee_type(); - let tx_context = &block_context.to_tx_context(&account_tx); + let tx_context = &block_context.to_tx_context(&account_tx).unwrap(); let actual_execution_info = account_tx.execute(state, block_context, true, true).unwrap(); // Build expected validate call info. @@ -1323,7 +1323,7 @@ fn test_deploy_account_tx( let account_tx = AccountTransaction::DeployAccount(deploy_account); let fee_type = &account_tx.fee_type(); - let tx_context = &block_context.to_tx_context(&account_tx); + let tx_context = &block_context.to_tx_context(&account_tx).unwrap(); let actual_execution_info = account_tx.execute(state, block_context, true, true).unwrap(); // Build expected validate call info. @@ -1465,7 +1465,7 @@ fn test_fail_deploy_account_undeclared_class_hash( deploy_account_tx_args! {resource_bounds: max_resource_bounds, class_hash: undeclared_hash }, &mut nonce_manager, ); - let tx_context = block_context.to_tx_context(&deploy_account); + let tx_context = block_context.to_tx_context(&deploy_account).unwrap(); let fee_type = tx_context.tx_info.fee_type(); // Fund account, so as not to fail pre-validation. From 0b8e76ab1291fa834cda315cf348dd971c19ecc1 Mon Sep 17 00:00:00 2001 From: Nimrod Weiss Date: Mon, 19 Aug 2024 11:38:05 +0300 Subject: [PATCH 5/6] build(fee): tx_args holds valid resource bounds --- crates/blockifier/src/test_utils.rs | 2 +- crates/blockifier/src/test_utils/declare.rs | 4 +- .../src/test_utils/deploy_account.rs | 4 +- crates/blockifier/src/test_utils/invoke.rs | 4 +- .../src/transaction/transactions.rs | 8 ++-- crates/papyrus_common/src/transaction_hash.rs | 15 ++++--- .../src/serialization/serializers.rs | 9 ++-- crates/papyrus_test_utils/src/lib.rs | 9 ++-- crates/starknet_api/src/transaction.rs | 42 +++++++++++++++++-- crates/starknet_api/src/transaction_hash.rs | 15 ++++--- 10 files changed, 73 insertions(+), 39 deletions(-) diff --git a/crates/blockifier/src/test_utils.rs b/crates/blockifier/src/test_utils.rs index beb25ae789..b2afd89626 100644 --- a/crates/blockifier/src/test_utils.rs +++ b/crates/blockifier/src/test_utils.rs @@ -18,9 +18,9 @@ use starknet_api::state::StorageKey; use starknet_api::transaction::{ Calldata, ContractAddressSalt, + DeprecatedResourceBoundsMapping, Resource, ResourceBounds, - DeprecatedResourceBoundsMapping, TransactionVersion, }; use starknet_api::{contract_address, felt, patricia_key}; diff --git a/crates/blockifier/src/test_utils/declare.rs b/crates/blockifier/src/test_utils/declare.rs index 5a70d80884..89592c631e 100644 --- a/crates/blockifier/src/test_utils/declare.rs +++ b/crates/blockifier/src/test_utils/declare.rs @@ -5,9 +5,9 @@ use starknet_api::transaction::{ DeclareTransactionV0V1, DeclareTransactionV2, DeclareTransactionV3, + DeprecatedResourceBoundsMapping, Fee, PaymasterData, - DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -108,7 +108,7 @@ pub fn declare_tx(declare_tx_args: DeclareTxArgs, class_info: ClassInfo) -> Acco starknet_api::transaction::DeclareTransaction::V3(DeclareTransactionV3 { signature: declare_tx_args.signature, sender_address: declare_tx_args.sender_address, - resource_bounds: declare_tx_args.resource_bounds, + resource_bounds: declare_tx_args.resource_bounds.0.try_into().expect("todo"), tip: declare_tx_args.tip, nonce_data_availability_mode: declare_tx_args.nonce_data_availability_mode, fee_data_availability_mode: declare_tx_args.fee_data_availability_mode, diff --git a/crates/blockifier/src/test_utils/deploy_account.rs b/crates/blockifier/src/test_utils/deploy_account.rs index b24e0c9d3d..69302436a8 100644 --- a/crates/blockifier/src/test_utils/deploy_account.rs +++ b/crates/blockifier/src/test_utils/deploy_account.rs @@ -5,9 +5,9 @@ use starknet_api::transaction::{ ContractAddressSalt, DeployAccountTransactionV1, DeployAccountTransactionV3, + DeprecatedResourceBoundsMapping, Fee, PaymasterData, - DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -96,7 +96,7 @@ pub fn deploy_account_tx( } else if deploy_tx_args.version == TransactionVersion::THREE { starknet_api::transaction::DeployAccountTransaction::V3(DeployAccountTransactionV3 { signature: deploy_tx_args.signature, - resource_bounds: deploy_tx_args.resource_bounds, + resource_bounds: deploy_tx_args.resource_bounds.0.try_into().expect("todo"), tip: deploy_tx_args.tip, nonce_data_availability_mode: deploy_tx_args.nonce_data_availability_mode, fee_data_availability_mode: deploy_tx_args.fee_data_availability_mode, diff --git a/crates/blockifier/src/test_utils/invoke.rs b/crates/blockifier/src/test_utils/invoke.rs index a62ef0597b..a44535b57f 100644 --- a/crates/blockifier/src/test_utils/invoke.rs +++ b/crates/blockifier/src/test_utils/invoke.rs @@ -4,12 +4,12 @@ use starknet_api::data_availability::DataAvailabilityMode; use starknet_api::transaction::{ AccountDeploymentData, Calldata, + DeprecatedResourceBoundsMapping, Fee, InvokeTransactionV0, InvokeTransactionV1, InvokeTransactionV3, PaymasterData, - DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -96,7 +96,7 @@ pub fn invoke_tx(invoke_args: InvokeTxArgs) -> InvokeTransaction { }) } else if invoke_args.version == TransactionVersion::THREE { starknet_api::transaction::InvokeTransaction::V3(InvokeTransactionV3 { - resource_bounds: invoke_args.resource_bounds, + resource_bounds: invoke_args.resource_bounds.0.try_into().expect("todo"), calldata: invoke_args.calldata, sender_address: invoke_args.sender_address, nonce: invoke_args.nonce, diff --git a/crates/blockifier/src/transaction/transactions.rs b/crates/blockifier/src/transaction/transactions.rs index f32bb99a8f..eeaaf4bab7 100644 --- a/crates/blockifier/src/transaction/transactions.rs +++ b/crates/blockifier/src/transaction/transactions.rs @@ -30,7 +30,7 @@ use crate::state::cached_state::TransactionalState; use crate::state::errors::StateError; use crate::state::state_api::{State, UpdatableState}; use crate::transaction::constants; -use crate::transaction::errors::{TransactionInfoCreationError, TransactionExecutionError}; +use crate::transaction::errors::{TransactionExecutionError, TransactionInfoCreationError}; use crate::transaction::objects::{ CommonAccountFields, CurrentTransactionInfo, @@ -296,7 +296,7 @@ impl TransactionInfoCreator for DeclareTransaction { starknet_api::transaction::DeclareTransaction::V3(tx) => { Ok(TransactionInfo::Current(CurrentTransactionInfo { common_fields, - resource_bounds: tx.resource_bounds.0.clone().try_into()?, + resource_bounds: tx.resource_bounds.clone(), tip: tx.tip, nonce_data_availability_mode: tx.nonce_data_availability_mode, fee_data_availability_mode: tx.fee_data_availability_mode, @@ -401,7 +401,7 @@ impl TransactionInfoCreator for DeployAccountTransaction { starknet_api::transaction::DeployAccountTransaction::V3(tx) => { Ok(TransactionInfo::Current(CurrentTransactionInfo { common_fields, - resource_bounds: tx.resource_bounds.0.clone().try_into()?, + resource_bounds: tx.resource_bounds.clone(), tip: tx.tip, nonce_data_availability_mode: tx.nonce_data_availability_mode, fee_data_availability_mode: tx.fee_data_availability_mode, @@ -519,7 +519,7 @@ impl TransactionInfoCreator for InvokeTransaction { starknet_api::transaction::InvokeTransaction::V3(tx) => { Ok(TransactionInfo::Current(CurrentTransactionInfo { common_fields, - resource_bounds: tx.resource_bounds.0.clone().try_into()?, + resource_bounds: tx.resource_bounds.clone(), tip: tx.tip, nonce_data_availability_mode: tx.nonce_data_availability_mode, fee_data_availability_mode: tx.fee_data_availability_mode, diff --git a/crates/papyrus_common/src/transaction_hash.rs b/crates/papyrus_common/src/transaction_hash.rs index c788b00b1a..5c7c14dc67 100644 --- a/crates/papyrus_common/src/transaction_hash.rs +++ b/crates/papyrus_common/src/transaction_hash.rs @@ -21,13 +21,12 @@ use starknet_api::transaction::{ InvokeTransactionV1, InvokeTransactionV3, L1HandlerTransaction, - Resource, ResourceBounds, - DeprecatedResourceBoundsMapping, Tip, Transaction, TransactionHash, TransactionVersion, + ValidResourceBounds, }; use starknet_api::StarknetApiError; use starknet_types_core::felt::Felt; @@ -220,15 +219,15 @@ pub(crate) fn ascii_as_felt(ascii_str: &str) -> Result { // An implementation of the SNIP: https://github.com/EvyatarO/SNIPs/blob/snip-8/SNIPS/snip-8.md fn get_tip_resource_bounds_hash( - resource_bounds_mapping: &DeprecatedResourceBoundsMapping, + resource_bounds: &ValidResourceBounds, tip: &Tip, ) -> Result { - let l1_resource_bounds = - resource_bounds_mapping.0.get(&Resource::L1Gas).expect("Missing l1 resource"); - let l1_resource = get_concat_resource(l1_resource_bounds, L1_GAS)?; + let (l1_resource_bounds, l2_resource_bounds) = match resource_bounds { + ValidResourceBounds::L1Gas(l1_gas_bounds) => (l1_gas_bounds, &ResourceBounds::default()), + ValidResourceBounds::AllResources { l1_gas, l2_gas, .. } => (l1_gas, l2_gas), + }; - let l2_resource_bounds = - resource_bounds_mapping.0.get(&Resource::L2Gas).expect("Missing l2 resource"); + let l1_resource = get_concat_resource(l1_resource_bounds, L1_GAS)?; let l2_resource = get_concat_resource(l2_resource_bounds, L2_GAS)?; Ok(HashChain::new() diff --git a/crates/papyrus_storage/src/serialization/serializers.rs b/crates/papyrus_storage/src/serialization/serializers.rs index 508976c97e..6e5751ddd6 100644 --- a/crates/papyrus_storage/src/serialization/serializers.rs +++ b/crates/papyrus_storage/src/serialization/serializers.rs @@ -89,6 +89,7 @@ use starknet_api::transaction::{ DeployAccountTransactionV3, DeployTransaction, DeployTransactionOutput, + DeprecatedResourceBoundsMapping, Event, EventContent, EventData, @@ -109,7 +110,6 @@ use starknet_api::transaction::{ PaymasterData, Resource, ResourceBounds, - DeprecatedResourceBoundsMapping, RevertedTransactionExecutionStatus, Tip, Transaction, @@ -119,6 +119,7 @@ use starknet_api::transaction::{ TransactionOutput, TransactionSignature, TransactionVersion, + ValidResourceBounds, }; use starknet_types_core::felt::Felt; use tracing::warn; @@ -211,7 +212,7 @@ auto_storage_serde! { pub sender_address: ContractAddress, } pub struct DeclareTransactionV3 { - pub resource_bounds: DeprecatedResourceBoundsMapping, + pub resource_bounds: ValidResourceBounds, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -1162,7 +1163,7 @@ auto_storage_serde_conditionally_compressed! { } pub struct DeployAccountTransactionV3 { - pub resource_bounds: DeprecatedResourceBoundsMapping, + pub resource_bounds: ValidResourceBounds, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -1198,7 +1199,7 @@ auto_storage_serde_conditionally_compressed! { } pub struct InvokeTransactionV3 { - pub resource_bounds: DeprecatedResourceBoundsMapping, + pub resource_bounds: ValidResourceBounds, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, diff --git a/crates/papyrus_test_utils/src/lib.rs b/crates/papyrus_test_utils/src/lib.rs index c0864aa6a7..48ac9481c1 100644 --- a/crates/papyrus_test_utils/src/lib.rs +++ b/crates/papyrus_test_utils/src/lib.rs @@ -112,6 +112,7 @@ use starknet_api::transaction::{ DeployAccountTransactionV3, DeployTransaction, DeployTransactionOutput, + DeprecatedResourceBoundsMapping, Event, EventContent, EventData, @@ -132,7 +133,6 @@ use starknet_api::transaction::{ PaymasterData, Resource, ResourceBounds, - DeprecatedResourceBoundsMapping, RevertedTransactionExecutionStatus, Tip, Transaction, @@ -142,6 +142,7 @@ use starknet_api::transaction::{ TransactionOutput, TransactionSignature, TransactionVersion, + ValidResourceBounds, }; use starknet_types_core::felt::Felt; @@ -517,7 +518,7 @@ auto_impl_get_test_instance! { pub sender_address: ContractAddress, } pub struct DeclareTransactionV3 { - pub resource_bounds: DeprecatedResourceBoundsMapping, + pub resource_bounds: ValidResourceBounds, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -550,7 +551,7 @@ auto_impl_get_test_instance! { pub constructor_calldata: Calldata, } pub struct DeployAccountTransactionV3 { - pub resource_bounds: DeprecatedResourceBoundsMapping, + pub resource_bounds: ValidResourceBounds, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -657,7 +658,7 @@ auto_impl_get_test_instance! { pub calldata: Calldata, } pub struct InvokeTransactionV3 { - pub resource_bounds: DeprecatedResourceBoundsMapping, + pub resource_bounds: ValidResourceBounds, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, diff --git a/crates/starknet_api/src/transaction.rs b/crates/starknet_api/src/transaction.rs index d8e6d2437b..35977efdd3 100644 --- a/crates/starknet_api/src/transaction.rs +++ b/crates/starknet_api/src/transaction.rs @@ -209,7 +209,8 @@ impl TransactionHasher for DeclareTransactionV2 { /// A declare V3 transaction. #[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] pub struct DeclareTransactionV3 { - pub resource_bounds: DeprecatedResourceBoundsMapping, + #[serde(deserialize_with = "deserialize_resource_bounds")] + pub resource_bounds: ValidResourceBounds, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -318,7 +319,8 @@ impl TransactionHasher for DeployAccountTransactionV1 { /// A deploy account V3 transaction. #[derive(Debug, Clone, Eq, PartialEq, Hash, Deserialize, Serialize, PartialOrd, Ord)] pub struct DeployAccountTransactionV3 { - pub resource_bounds: DeprecatedResourceBoundsMapping, + #[serde(deserialize_with = "deserialize_resource_bounds")] + pub resource_bounds: ValidResourceBounds, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -455,7 +457,8 @@ impl TransactionHasher for InvokeTransactionV1 { /// An invoke V3 transaction. #[derive(Debug, Clone, Eq, PartialEq, Hash, Deserialize, Serialize, PartialOrd, Ord)] pub struct InvokeTransactionV3 { - pub resource_bounds: DeprecatedResourceBoundsMapping, + #[serde(deserialize_with = "deserialize_resource_bounds")] + pub resource_bounds: ValidResourceBounds, pub tip: Tip, pub signature: TransactionSignature, pub nonce: Nonce, @@ -949,7 +952,7 @@ impl TryFrom> for DeprecatedResourceBoundsMappin } } -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)] pub enum ValidResourceBounds { L1Gas(ResourceBounds), // Pre 0.13.3. L2 bounds are signed but never used. AllResources(AllResourceBounds), @@ -962,6 +965,37 @@ pub struct AllResourceBounds { pub l1_data_gas: ResourceBounds, } +/// Deserializes raw resource bounds, given as map, into valid resource bounds. +pub fn deserialize_resource_bounds<'de, D>(de: D) -> Result +where + D: Deserializer<'de>, +{ + let raw_resource_bounds: BTreeMap = Deserialize::deserialize(de)?; + ValidResourceBounds::try_from(raw_resource_bounds).map_err(serde::de::Error::custom) +} + +/// Serializes ValidResourceBounds as map for BC. +// TODO(Nimrod): Can this be removed? +impl Serialize for ValidResourceBounds { + fn serialize(&self, s: S) -> Result + where + S: Serializer, + { + let map = match self { + ValidResourceBounds::L1Gas(l1_gas) => BTreeMap::from([ + (Resource::L1Gas, *l1_gas), + (Resource::L2Gas, ResourceBounds::default()), + ]), + ValidResourceBounds::AllResources { l1_gas, l2_gas, l1_data_gas } => BTreeMap::from([ + (Resource::L1Gas, *l1_gas), + (Resource::L2Gas, *l2_gas), + (Resource::L1DataGas, *l1_data_gas), + ]), + }; + DeprecatedResourceBoundsMapping(map).serialize(s) + } +} + impl TryFrom> for ValidResourceBounds { type Error = StarknetApiError; fn try_from( diff --git a/crates/starknet_api/src/transaction_hash.rs b/crates/starknet_api/src/transaction_hash.rs index 55cdc33caa..dc8fc2da0c 100644 --- a/crates/starknet_api/src/transaction_hash.rs +++ b/crates/starknet_api/src/transaction_hash.rs @@ -14,18 +14,17 @@ use crate::transaction::{ DeployAccountTransactionV1, DeployAccountTransactionV3, DeployTransaction, - DeprecatedResourceBoundsMapping, InvokeTransaction, InvokeTransactionV0, InvokeTransactionV1, InvokeTransactionV3, L1HandlerTransaction, - Resource, ResourceBounds, Tip, Transaction, TransactionHash, TransactionVersion, + ValidResourceBounds, }; use crate::StarknetApiError; @@ -175,15 +174,15 @@ pub(crate) fn ascii_as_felt(ascii_str: &str) -> Result { // An implementation of the SNIP: https://github.com/EvyatarO/SNIPs/blob/snip-8/SNIPS/snip-8.md fn get_tip_resource_bounds_hash( - resource_bounds_mapping: &DeprecatedResourceBoundsMapping, + resource_bounds: &ValidResourceBounds, tip: &Tip, ) -> Result { - let l1_resource_bounds = - resource_bounds_mapping.0.get(&Resource::L1Gas).expect("Missing l1 resource"); - let l1_resource = get_concat_resource(l1_resource_bounds, L1_GAS)?; + let (l1_resource_bounds, l2_resource_bounds) = match resource_bounds { + ValidResourceBounds::L1Gas(l1_gas_bounds) => (l1_gas_bounds, &ResourceBounds::default()), + ValidResourceBounds::AllResources { l1_gas, l2_gas, .. } => (l1_gas, l2_gas), + }; - let l2_resource_bounds = - resource_bounds_mapping.0.get(&Resource::L2Gas).expect("Missing l2 resource"); + let l1_resource = get_concat_resource(l1_resource_bounds, L1_GAS)?; let l2_resource = get_concat_resource(l2_resource_bounds, L2_GAS)?; Ok(HashChain::new() From 2b80b29318ae8894ce62a2a67b7e08d4edbb3333 Mon Sep 17 00:00:00 2001 From: Nimrod Weiss Date: Mon, 19 Aug 2024 11:51:38 +0300 Subject: [PATCH 6/6] refactor(fee): change valid resource bound to tupled enum --- .../src/execution/syscalls/hint_processor.rs | 4 ++-- crates/native_blockifier/src/py_declare.rs | 3 +-- .../native_blockifier/src/py_deploy_account.rs | 3 +-- .../src/py_invoke_function.rs | 3 +-- crates/native_blockifier/src/py_transaction.rs | 18 ++++++++++++++++-- crates/papyrus_common/src/transaction_hash.rs | 4 +++- .../src/serialization/serializers.rs | 10 ++++++++++ crates/papyrus_test_utils/src/lib.rs | 11 +++++++++++ crates/starknet_api/src/transaction.rs | 16 ++++++++-------- crates/starknet_api/src/transaction_hash.rs | 4 +++- 10 files changed, 56 insertions(+), 20 deletions(-) diff --git a/crates/blockifier/src/execution/syscalls/hint_processor.rs b/crates/blockifier/src/execution/syscalls/hint_processor.rs index 1ec7683f97..da99764afb 100644 --- a/crates/blockifier/src/execution/syscalls/hint_processor.rs +++ b/crates/blockifier/src/execution/syscalls/hint_processor.rs @@ -17,7 +17,7 @@ use cairo_vm::vm::vm_core::VirtualMachine; use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector}; use starknet_api::deprecated_contract_class::EntryPointType; use starknet_api::state::StorageKey; -use starknet_api::transaction::{AllResourceBounds, Calldata}; +use starknet_api::transaction::{AllResourcesBounds, Calldata}; use starknet_api::StarknetApiError; use starknet_types_core::felt::{Felt, FromStrError}; use thiserror::Error; @@ -482,7 +482,7 @@ impl<'a> SyscallHintProcessor<'a> { ] } starknet_api::transaction::ValidResourceBounds::AllResources( - AllResourceBounds { l1_gas, l2_gas, l1_data_gas }, + AllResourcesBounds { l1_gas, l2_gas, l1_data_gas }, ) => { vec![ l1_gas_as_felt, diff --git a/crates/native_blockifier/src/py_declare.rs b/crates/native_blockifier/src/py_declare.rs index bfbd2894a6..b8d74535f0 100644 --- a/crates/native_blockifier/src/py_declare.rs +++ b/crates/native_blockifier/src/py_declare.rs @@ -12,7 +12,6 @@ use starknet_api::transaction::{ DeclareTransactionV3, Fee, PaymasterData, - DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -88,7 +87,7 @@ impl TryFrom for DeclareTransactionV3 { type Error = NativeBlockifierInputError; fn try_from(tx: PyDeclareTransactionV3) -> Result { Ok(Self { - resource_bounds: DeprecatedResourceBoundsMapping::try_from(tx.resource_bounds)?, + resource_bounds: tx.resource_bounds.try_into()?, tip: Tip(tx.tip), signature: TransactionSignature(from_py_felts(tx.signature)), nonce: Nonce(tx.nonce.0), diff --git a/crates/native_blockifier/src/py_deploy_account.rs b/crates/native_blockifier/src/py_deploy_account.rs index 749f19586a..b25b464103 100644 --- a/crates/native_blockifier/src/py_deploy_account.rs +++ b/crates/native_blockifier/src/py_deploy_account.rs @@ -12,7 +12,6 @@ use starknet_api::transaction::{ DeployAccountTransactionV3, Fee, PaymasterData, - DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -64,7 +63,7 @@ impl TryFrom for DeployAccountTransactionV3 { type Error = NativeBlockifierInputError; fn try_from(tx: PyDeployAccountTransactionV3) -> Result { Ok(Self { - resource_bounds: DeprecatedResourceBoundsMapping::try_from(tx.resource_bounds)?, + resource_bounds: tx.resource_bounds.try_into()?, tip: Tip(tx.tip), signature: TransactionSignature(from_py_felts(tx.signature)), nonce: Nonce(tx.nonce.0), diff --git a/crates/native_blockifier/src/py_invoke_function.rs b/crates/native_blockifier/src/py_invoke_function.rs index 111d53b0f1..974d0b9b1d 100644 --- a/crates/native_blockifier/src/py_invoke_function.rs +++ b/crates/native_blockifier/src/py_invoke_function.rs @@ -14,7 +14,6 @@ use starknet_api::transaction::{ InvokeTransactionV1, InvokeTransactionV3, PaymasterData, - DeprecatedResourceBoundsMapping, Tip, TransactionHash, TransactionSignature, @@ -87,7 +86,7 @@ impl TryFrom for InvokeTransactionV3 { type Error = NativeBlockifierInputError; fn try_from(tx: PyInvokeTransactionV3) -> Result { Ok(Self { - resource_bounds: DeprecatedResourceBoundsMapping::try_from(tx.resource_bounds)?, + resource_bounds: tx.resource_bounds.try_into()?, tip: Tip(tx.tip), signature: TransactionSignature(from_py_felts(tx.signature)), nonce: Nonce(tx.nonce.0), diff --git a/crates/native_blockifier/src/py_transaction.rs b/crates/native_blockifier/src/py_transaction.rs index 15254e1181..a3b43bc5ed 100644 --- a/crates/native_blockifier/src/py_transaction.rs +++ b/crates/native_blockifier/src/py_transaction.rs @@ -11,7 +11,12 @@ use blockifier::transaction::transaction_execution::Transaction; use blockifier::transaction::transaction_types::TransactionType; use pyo3::exceptions::PyValueError; use pyo3::prelude::*; -use starknet_api::transaction::{Resource, ResourceBounds}; +use starknet_api::transaction::{ + DeprecatedResourceBoundsMapping, + Resource, + ResourceBounds, + ValidResourceBounds, +}; use starknet_api::StarknetApiError; use crate::errors::{NativeBlockifierInputError, NativeBlockifierResult}; @@ -68,7 +73,9 @@ impl From for starknet_api::transaction::ResourceBounds { #[derive(Clone, FromPyObject)] pub struct PyResourceBoundsMapping(pub BTreeMap); -impl TryFrom for starknet_api::transaction::DeprecatedResourceBoundsMapping { +impl TryFrom + for starknet_api::transaction::DeprecatedResourceBoundsMapping +{ type Error = StarknetApiError; fn try_from(py_resource_bounds_mapping: PyResourceBoundsMapping) -> Result { let resource_bounds_vec: Vec<(Resource, ResourceBounds)> = py_resource_bounds_mapping @@ -82,6 +89,13 @@ impl TryFrom for starknet_api::transaction::DeprecatedR } } +impl TryFrom for ValidResourceBounds { + type Error = StarknetApiError; + fn try_from(py_resource_bounds_mapping: PyResourceBoundsMapping) -> Result { + DeprecatedResourceBoundsMapping::try_from(py_resource_bounds_mapping)?.0.try_into() + } +} + #[derive(Clone)] pub enum PyDataAvailabilityMode { L1 = 0, diff --git a/crates/papyrus_common/src/transaction_hash.rs b/crates/papyrus_common/src/transaction_hash.rs index 5c7c14dc67..1e3accc4b0 100644 --- a/crates/papyrus_common/src/transaction_hash.rs +++ b/crates/papyrus_common/src/transaction_hash.rs @@ -224,7 +224,9 @@ fn get_tip_resource_bounds_hash( ) -> Result { let (l1_resource_bounds, l2_resource_bounds) = match resource_bounds { ValidResourceBounds::L1Gas(l1_gas_bounds) => (l1_gas_bounds, &ResourceBounds::default()), - ValidResourceBounds::AllResources { l1_gas, l2_gas, .. } => (l1_gas, l2_gas), + ValidResourceBounds::AllResources(all_resources) => { + (&all_resources.l1_gas, &all_resources.l2_gas) + } }; let l1_resource = get_concat_resource(l1_resource_bounds, L1_GAS)?; diff --git a/crates/papyrus_storage/src/serialization/serializers.rs b/crates/papyrus_storage/src/serialization/serializers.rs index 6e5751ddd6..e1b8ce8540 100644 --- a/crates/papyrus_storage/src/serialization/serializers.rs +++ b/crates/papyrus_storage/src/serialization/serializers.rs @@ -76,6 +76,7 @@ use starknet_api::state::{ }; use starknet_api::transaction::{ AccountDeploymentData, + AllResourcesBounds, Calldata, ContractAddressSalt, DeclareTransaction, @@ -148,6 +149,11 @@ const COMPRESSION_THRESHOLD_BYTES: usize = 384; auto_storage_serde! { pub struct AccountDeploymentData(pub Vec); + pub struct AllResourcesBounds { + pub l1_gas: ResourceBounds, + pub l2_gas: ResourceBounds, + pub l1_data_gas: ResourceBounds, + } pub struct BlockHash(pub StarkHash); pub struct StorageBlockHeader { pub block_hash: BlockHash, @@ -420,6 +426,10 @@ auto_storage_serde! { } pub struct TransactionSignature(pub Vec); pub struct TransactionVersion(pub Felt); + pub enum ValidResourceBounds { + L1Gas(ResourceBounds) = 0, + AllResources(AllResourcesBounds) = 1, + } pub struct Version{ pub major: u32, pub minor: u32, diff --git a/crates/papyrus_test_utils/src/lib.rs b/crates/papyrus_test_utils/src/lib.rs index 48ac9481c1..7943f57e85 100644 --- a/crates/papyrus_test_utils/src/lib.rs +++ b/crates/papyrus_test_utils/src/lib.rs @@ -99,6 +99,7 @@ use starknet_api::state::{ }; use starknet_api::transaction::{ AccountDeploymentData, + AllResourcesBounds, Calldata, ContractAddressSalt, DeclareTransaction, @@ -421,6 +422,11 @@ pub trait GetTestInstance: Sized { auto_impl_get_test_instance! { pub struct AccountDeploymentData(pub Vec); + pub struct AllResourcesBounds { + pub l1_gas: ResourceBounds, + pub l2_gas: ResourceBounds, + pub l1_data_gas: ResourceBounds, + } pub struct BlockHash(pub StarkHash); pub struct BlockHeader { pub block_hash: BlockHash, @@ -785,6 +791,11 @@ auto_impl_get_test_instance! { pub r#type: String, } + pub enum ValidResourceBounds { + L1Gas(ResourceBounds) = 0, + AllResources(AllResourcesBounds) = 1, + } + pub struct CasmContractClass { pub prime: BigUint, pub compiler_version: String, diff --git a/crates/starknet_api/src/transaction.rs b/crates/starknet_api/src/transaction.rs index 35977efdd3..0d3d751d68 100644 --- a/crates/starknet_api/src/transaction.rs +++ b/crates/starknet_api/src/transaction.rs @@ -955,11 +955,11 @@ impl TryFrom> for DeprecatedResourceBoundsMappin #[derive(Clone, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)] pub enum ValidResourceBounds { L1Gas(ResourceBounds), // Pre 0.13.3. L2 bounds are signed but never used. - AllResources(AllResourceBounds), + AllResources(AllResourcesBounds), } -#[derive(Clone, Debug, Eq, PartialEq)] -pub struct AllResourceBounds { +#[derive(Clone, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)] +pub struct AllResourcesBounds { pub l1_gas: ResourceBounds, pub l2_gas: ResourceBounds, pub l1_data_gas: ResourceBounds, @@ -986,10 +986,10 @@ impl Serialize for ValidResourceBounds { (Resource::L1Gas, *l1_gas), (Resource::L2Gas, ResourceBounds::default()), ]), - ValidResourceBounds::AllResources { l1_gas, l2_gas, l1_data_gas } => BTreeMap::from([ - (Resource::L1Gas, *l1_gas), - (Resource::L2Gas, *l2_gas), - (Resource::L1DataGas, *l1_data_gas), + ValidResourceBounds::AllResources(all_resources) => BTreeMap::from([ + (Resource::L1Gas, all_resources.l1_gas), + (Resource::L2Gas, all_resources.l2_gas), + (Resource::L1DataGas, all_resources.l1_data_gas), ]), }; DeprecatedResourceBoundsMapping(map).serialize(s) @@ -1005,7 +1005,7 @@ impl TryFrom> for ValidResourceBounds { (raw_resource_bounds.get(&Resource::L1Gas), raw_resource_bounds.get(&Resource::L2Gas)) { match raw_resource_bounds.get(&Resource::L1DataGas) { - Some(data_bounds) => Ok(Self::AllResources(AllResourceBounds { + Some(data_bounds) => Ok(Self::AllResources(AllResourcesBounds { l1_gas: *l1_bounds, l1_data_gas: *data_bounds, l2_gas: *l2_bounds, diff --git a/crates/starknet_api/src/transaction_hash.rs b/crates/starknet_api/src/transaction_hash.rs index dc8fc2da0c..d0046acd25 100644 --- a/crates/starknet_api/src/transaction_hash.rs +++ b/crates/starknet_api/src/transaction_hash.rs @@ -179,7 +179,9 @@ fn get_tip_resource_bounds_hash( ) -> Result { let (l1_resource_bounds, l2_resource_bounds) = match resource_bounds { ValidResourceBounds::L1Gas(l1_gas_bounds) => (l1_gas_bounds, &ResourceBounds::default()), - ValidResourceBounds::AllResources { l1_gas, l2_gas, .. } => (l1_gas, l2_gas), + ValidResourceBounds::AllResources(all_resources) => { + (&all_resources.l1_gas, &all_resources.l2_gas) + } }; let l1_resource = get_concat_resource(l1_resource_bounds, L1_GAS)?;