From cf9ebc506b4f9871dda262a99e7bf7c6f254b143 Mon Sep 17 00:00:00 2001 From: "zhoujun.ma" Date: Tue, 16 Apr 2024 18:56:16 -0700 Subject: [PATCH] discard on deposit calculation failure, and new status code --- aptos-move/aptos-vm/src/aptos_vm.rs | 23 ++++++++++++------- .../move/move-core/types/src/vm_status.rs | 6 +++-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/aptos-move/aptos-vm/src/aptos_vm.rs b/aptos-move/aptos-vm/src/aptos_vm.rs index 84f9955a09e56..2777321dfaec5 100644 --- a/aptos-move/aptos-vm/src/aptos_vm.rs +++ b/aptos-move/aptos-vm/src/aptos_vm.rs @@ -1637,7 +1637,7 @@ impl AptosVM { &gas_meter.vm_gas_params().txn, &txn_data, txn.payload(), - ); + )?; txn_data.set_required_deposit(required_deposit); self.validate_signed_transaction(session, resolver, txn, &txn_data, log_context) })); @@ -2319,11 +2319,11 @@ impl AptosVM { txn_gas_params: &TransactionGasParameters, txn_metadata: &TransactionMetadata, payload: &TransactionPayload, - ) -> Option { + ) -> VMResult> { match payload { TransactionPayload::EntryFunction(entry_func) => { if self.randomness_enabled - && has_randomness_attribute(resolver, session, entry_func).unwrap_or(false) + && has_randomness_attribute(resolver, session, entry_func)? { let max_execution_gas: Gas = txn_gas_params .max_execution_gas @@ -2336,14 +2336,14 @@ impl AptosVM { let cand_1 = txn_metadata.gas_unit_price * txn_gas_params.maximum_number_of_gas_units; let required_fee_deposit = min(cand_0, cand_1); - Some(u64::from(required_fee_deposit)) + Ok(Some(u64::from(required_fee_deposit))) } else { - None + Ok(None) } }, TransactionPayload::Script(_) | TransactionPayload::ModuleBundle(_) - | TransactionPayload::Multisig(_) => None, + | TransactionPayload::Multisig(_) => Ok(None), } } } @@ -2481,7 +2481,7 @@ impl VMValidator for AptosVM { let resolver = self.as_move_resolver(&state_view); let mut session = self.new_session(&resolver, SessionId::prologue_meta(&txn_data)); - let required_deposit = if let Ok(gas_params) = &self.gas_params { + let maybe_required_deposit = if let Ok(gas_params) = &self.gas_params { self.get_required_deposit( &mut session, &resolver, @@ -2490,7 +2490,14 @@ impl VMValidator for AptosVM { txn.payload(), ) } else { - return VMValidatorResult::error(StatusCode::UNKNOWN_VALIDATION_STATUS); + return VMValidatorResult::error(StatusCode::GAS_PARAMS_MISSING); + }; + + let required_deposit = match maybe_required_deposit { + Ok(v) => v, + Err(_e) => { + return VMValidatorResult::error(StatusCode::DEPOSIT_CALCULATION_FAILED); + }, }; txn_data.set_required_deposit(required_deposit); diff --git a/third_party/move/move-core/types/src/vm_status.rs b/third_party/move/move-core/types/src/vm_status.rs index 5abd93e979db7..8d4054cea437b 100644 --- a/third_party/move/move-core/types/src/vm_status.rs +++ b/third_party/move/move-core/types/src/vm_status.rs @@ -584,11 +584,13 @@ pub enum StatusCode { MULTISIG_TRANSACTION_PAYLOAD_DOES_NOT_MATCH_HASH = 35, GAS_PAYER_ACCOUNT_MISSING = 36, INSUFFICIENT_BALANCE_FOR_REQUIRED_DEPOSIT = 37, + GAS_PARAMS_MISSING = 38, + DEPOSIT_CALCULATION_FAILED = 39, // Reserved error code for future use - RESERVED_VALIDATION_ERROR_3 = 38, - RESERVED_VALIDATION_ERROR_4 = 39, RESERVED_VALIDATION_ERROR_5 = 40, RESERVED_VALIDATION_ERROR_6 = 41, + RESERVED_VALIDATION_ERROR_7 = 42, + RESERVED_VALIDATION_ERROR_8 = 43, // When a code module/script is published it is verified. These are the // possible errors that can arise from the verification process.