diff --git a/CHANGELOG.md b/CHANGELOG.md index 78a22c4a4f..e134bb6bba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ git # Madara Changelog - feat: add transparent representation to `Felt252Wrapper` - feat(rpc/trace_api): add `trace_block_transaction` - chore(db): changed the way hashes are encoded +- feat: add DeployTransaction implementation ## v0.7.0 diff --git a/crates/client/rpc/src/trace_api.rs b/crates/client/rpc/src/trace_api.rs index f0ea45d938..8f03ee3dc5 100644 --- a/crates/client/rpc/src/trace_api.rs +++ b/crates/client/rpc/src/trace_api.rs @@ -445,8 +445,8 @@ fn tx_execution_infos_to_tx_trace( // TODO(#1291): Compute state diff correctly state_diff: None, }), - TxType::Deploy => todo!(), /* TODO: Implement this using Starknet-rs old commits (becareful, Receipt version - * exist but here we need a trace) */ + TxType::Deploy => todo!(), // TODO: Implement this using Starknet-rs old commits (becareful, Receipt version + // exist but here we need a trace) TxType::DeployAccount => { TransactionTrace::DeployAccount(DeployAccountTransactionTrace { validate_invocation, diff --git a/crates/pallets/starknet/src/transaction_validation.rs b/crates/pallets/starknet/src/transaction_validation.rs index 618ce25dd8..7f8c72de71 100644 --- a/crates/pallets/starknet/src/transaction_validation.rs +++ b/crates/pallets/starknet/src/transaction_validation.rs @@ -110,23 +110,20 @@ impl Pallet { match transaction { UserOrL1HandlerTransaction::User(transaction) => { - let validation_result = match transaction { - // There is no way to validate it before the account is actuallly deployed - UserTransaction::DeployAccount(_) => Ok(None), - UserTransaction::Deploy(_) => Ok(None), /* TODO : Verify this (an account can do a - * DeployTransaction without being declared first?) */ - UserTransaction::Declare(tx, contract_class) => tx - .try_into_executable::(chain_id, contract_class.clone(), false) - .map_err(|_| InvalidTransaction::BadProof)? - .validate_tx(&mut state, &block_context, &mut execution_resources, &mut initial_gas, false), - UserTransaction::Invoke(tx) => tx.into_executable::(chain_id, false).validate_tx( - &mut state, - &block_context, - &mut execution_resources, - &mut initial_gas, - false, - ), - }; + let validation_result = + match transaction { + // There is no way to validate it before the account is actuallly deployed + UserTransaction::DeployAccount(_) => Ok(None), + UserTransaction::Deploy(_) => Ok(None), // TODO : Verify this (an account can do a + // DeployTransaction without being declared first?) + UserTransaction::Declare(tx, contract_class) => tx + .try_into_executable::(chain_id, contract_class.clone(), false) + .map_err(|_| InvalidTransaction::BadProof)? + .validate_tx(&mut state, &block_context, &mut execution_resources, &mut initial_gas, false), + UserTransaction::Invoke(tx) => tx + .into_executable::(chain_id, false) + .validate_tx(&mut state, &block_context, &mut execution_resources, &mut initial_gas, false), + }; if let Err(TransactionExecutionError::ValidateTransactionError( EntryPointExecutionError::PreExecutionError(PreExecutionError::UninitializedStorageAddress(