diff --git a/crates/blockifier/src/transaction/account_transaction.rs b/crates/blockifier/src/transaction/account_transaction.rs index 351cd3eedd..bf94b66244 100644 --- a/crates/blockifier/src/transaction/account_transaction.rs +++ b/crates/blockifier/src/transaction/account_transaction.rs @@ -75,7 +75,7 @@ impl HasRelatedFeeType for AccountTransaction { match self { Self::Declare(tx) => tx.tx.version(), Self::DeployAccount(tx) => tx.version(), - Self::Invoke(tx) => match tx.tx { + Self::Invoke(tx) => match tx.tx.tx { starknet_api::transaction::InvokeTransaction::V0(_) => TransactionVersion::ZERO, starknet_api::transaction::InvokeTransaction::V1(_) => TransactionVersion::ONE, starknet_api::transaction::InvokeTransaction::V3(_) => TransactionVersion::THREE, diff --git a/crates/blockifier/src/transaction/transactions.rs b/crates/blockifier/src/transaction/transactions.rs index bed31976f8..74f1a79b47 100644 --- a/crates/blockifier/src/transaction/transactions.rs +++ b/crates/blockifier/src/transaction/transactions.rs @@ -404,25 +404,38 @@ impl TransactionInfoCreator for DeployAccountTransaction { #[derive(Debug, Clone)] pub struct InvokeTransaction { - pub tx: starknet_api::transaction::InvokeTransaction, - pub tx_hash: TransactionHash, + pub tx: starknet_api::executable_transaction::InvokeTransaction, // Indicates the presence of the only_query bit in the version. pub only_query: bool, } +impl Deref for InvokeTransaction { + type Target = starknet_api::executable_transaction::InvokeTransaction; + + fn deref(&self) -> &Self::Target { + &self.tx + } +} + impl InvokeTransaction { pub fn new( invoke_tx: starknet_api::transaction::InvokeTransaction, tx_hash: TransactionHash, ) -> Self { - Self { tx: invoke_tx, tx_hash, only_query: false } + Self { + tx: starknet_api::executable_transaction::InvokeTransaction { tx: invoke_tx, tx_hash }, + only_query: false, + } } pub fn new_for_query( invoke_tx: starknet_api::transaction::InvokeTransaction, tx_hash: TransactionHash, ) -> Self { - Self { tx: invoke_tx, tx_hash, only_query: true } + Self { + tx: starknet_api::executable_transaction::InvokeTransaction { tx: invoke_tx, tx_hash }, + only_query: true, + } } implement_inner_tx_getter_calls!( @@ -440,7 +453,7 @@ impl Executable for InvokeTransaction { context: &mut EntryPointExecutionContext, remaining_gas: &mut u64, ) -> TransactionExecutionResult> { - let entry_point_selector = match &self.tx { + let entry_point_selector = match &self.tx.tx { starknet_api::transaction::InvokeTransaction::V0(tx) => tx.entry_point_selector, starknet_api::transaction::InvokeTransaction::V1(_) | starknet_api::transaction::InvokeTransaction::V3(_) => { @@ -478,15 +491,15 @@ impl Executable for InvokeTransaction { impl TransactionInfoCreator for InvokeTransaction { fn create_tx_info(&self) -> TransactionInfo { let common_fields = CommonAccountFields { - transaction_hash: self.tx_hash, - version: self.tx.version(), - signature: self.tx.signature(), - nonce: self.tx.nonce(), - sender_address: self.tx.sender_address(), + transaction_hash: self.tx.tx_hash, + version: self.tx.tx.version(), + signature: self.tx.tx.signature(), + nonce: self.tx.tx.nonce(), + sender_address: self.tx.tx.sender_address(), only_query: self.only_query, }; - match &self.tx { + match &self.tx.tx { starknet_api::transaction::InvokeTransaction::V0(tx) => { TransactionInfo::Deprecated(DeprecatedTransactionInfo { common_fields, diff --git a/crates/starknet_api/src/executable_transaction.rs b/crates/starknet_api/src/executable_transaction.rs index 357d11ed7f..a4a8bba209 100644 --- a/crates/starknet_api/src/executable_transaction.rs +++ b/crates/starknet_api/src/executable_transaction.rs @@ -1,3 +1,5 @@ +use std::ops::Deref; + use crate::core::{ContractAddress, Nonce}; use crate::state::ContractClass; use crate::transaction::{Tip, TransactionHash}; @@ -68,7 +70,7 @@ pub struct DeployAccountTransaction { pub contract_address: ContractAddress, } -impl std::ops::Deref for DeployAccountTransaction { +impl Deref for DeployAccountTransaction { type Target = crate::transaction::DeployAccountTransaction; fn deref(&self) -> &Self::Target { @@ -82,6 +84,14 @@ pub struct InvokeTransaction { pub tx_hash: TransactionHash, } +impl Deref for InvokeTransaction { + type Target = crate::transaction::InvokeTransaction; + + fn deref(&self) -> &Self::Target { + &self.tx + } +} + #[derive(Clone, Debug, Eq, PartialEq)] pub struct ClassInfo { // TODO: use compiled contract class.