diff --git a/crates/gas/src/meter.rs b/crates/gas/src/meter.rs index 747d8a81..8197bad4 100644 --- a/crates/gas/src/meter.rs +++ b/crates/gas/src/meter.rs @@ -224,6 +224,9 @@ impl InitiaGasMeter { #[inline] fn charge(&mut self, amount: InternalGas) -> PartialVMResult<()> { + // copy the value for error message + let balance = self.balance; + match self.balance.checked_sub(amount) { Some(new_balance) => { self.balance = new_balance; @@ -231,7 +234,15 @@ impl InitiaGasMeter { } None => { self.balance = 0.into(); - Err(PartialVMError::new(StatusCode::OUT_OF_GAS)) + let gas_used: Gas = (self.gas_limit.checked_sub(balance).unwrap() + amount) + .to_unit_round_down_with_params(&self.gas_params.txn); + + Err( + PartialVMError::new(StatusCode::OUT_OF_GAS).with_message(format!( + "gas_limit: {}, gas_used: {}", + self.gas_limit, gas_used + )), + ) } } } diff --git a/crates/natives/src/crypto/ed25519.rs b/crates/natives/src/crypto/ed25519.rs index fa9f4696..2f9aba92 100644 --- a/crates/natives/src/crypto/ed25519.rs +++ b/crates/natives/src/crypto/ed25519.rs @@ -178,7 +178,9 @@ pub fn native_batch_verify( } else if public_keys_len == 1 && messages_len == signatures_len { public_keys = repeats_vec_of_vec_u8(public_keys[0].to_vec(), signatures_len); } else { - return Err(SafeNativeError::Abort { abort_code: NUMBER_OF_ARGUMENTS_MISMATCH }); + return Err(SafeNativeError::Abort { + abort_code: NUMBER_OF_ARGUMENTS_MISMATCH, + }); } debug_assert_eq!(messages.len(), signatures_len);