From c3e874e833eae57f1b62ca799d6bfbe47118d919 Mon Sep 17 00:00:00 2001 From: AvivYossef-starkware Date: Mon, 17 Jun 2024 10:36:01 +0300 Subject: [PATCH] fix: balance print in errors --- crates/blockifier/src/fee/fee_utils.rs | 13 +++++++++---- crates/blockifier/src/transaction/errors.rs | 15 +++++---------- .../src/transaction/transactions_test.rs | 8 ++++++++ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/crates/blockifier/src/fee/fee_utils.rs b/crates/blockifier/src/fee/fee_utils.rs index e1c0dad2e6..c6b0dfdec8 100644 --- a/crates/blockifier/src/fee/fee_utils.rs +++ b/crates/blockifier/src/fee/fee_utils.rs @@ -1,6 +1,7 @@ use std::collections::HashSet; use cairo_vm::vm::runners::cairo_runner::ExecutionResources; +use num_bigint::BigUint; use starknet_api::core::ContractAddress; use starknet_api::hash::StarkFelt; use starknet_api::state::StorageKey; @@ -121,14 +122,12 @@ pub fn verify_can_pay_committed_bounds( TransactionFeeError::L1GasBoundsExceedBalance { max_amount: l1_bounds.max_amount, max_price: l1_bounds.max_price_per_unit, - balance_low, - balance_high, + balance: balance_to_big_uint(&balance_low, &balance_high), } } TransactionInfo::Deprecated(context) => TransactionFeeError::MaxFeeExceedsBalance { max_fee: context.max_fee, - balance_low, - balance_high, + balance: balance_to_big_uint(&balance_low, &balance_high), }, }) } @@ -146,3 +145,9 @@ pub fn get_address_balance_keys(address: ContractAddress) -> (StorageKey, Storag }); (balance_key_low, balance_key_high) } + +pub(crate) fn balance_to_big_uint(balance_low: &StarkFelt, balance_high: &StarkFelt) -> BigUint { + let low = BigUint::from_bytes_be(balance_low.bytes()); + let high = BigUint::from_bytes_be(balance_high.bytes()); + (high << 128) + low +} diff --git a/crates/blockifier/src/transaction/errors.rs b/crates/blockifier/src/transaction/errors.rs index 1318eaa7d0..651eaddd6a 100644 --- a/crates/blockifier/src/transaction/errors.rs +++ b/crates/blockifier/src/transaction/errors.rs @@ -1,5 +1,5 @@ +use num_bigint::BigUint; use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector, Nonce}; -use starknet_api::hash::StarkFelt; use starknet_api::transaction::{Fee, TransactionVersion}; use starknet_api::StarknetApiError; use thiserror::Error; @@ -23,16 +23,11 @@ pub enum TransactionFeeError { InsufficientL1Fee { paid_fee: Fee, actual_fee: Fee }, #[error( "L1 gas bounds (max amount: {max_amount}, max price: {max_price}) exceed balance \ - (Uint256({balance_low}, {balance_high}))." + ({balance})." )] - L1GasBoundsExceedBalance { - max_amount: u64, - max_price: u128, - balance_low: StarkFelt, - balance_high: StarkFelt, - }, - #[error("Max fee ({}) exceeds balance (Uint256({balance_low}, {balance_high})).", max_fee.0)] - MaxFeeExceedsBalance { max_fee: Fee, balance_low: StarkFelt, balance_high: StarkFelt }, + L1GasBoundsExceedBalance { max_amount: u64, max_price: u128, balance: BigUint }, + #[error("Max fee ({}) exceeds balance ({balance}).", max_fee.0, )] + MaxFeeExceedsBalance { max_fee: Fee, balance: BigUint }, #[error("Max fee ({}) is too low. Minimum fee: {}.", max_fee.0, min_fee.0)] MaxFeeTooLow { min_fee: Fee, max_fee: Fee }, #[error( diff --git a/crates/blockifier/src/transaction/transactions_test.rs b/crates/blockifier/src/transaction/transactions_test.rs index 30d2697688..474ade21c8 100644 --- a/crates/blockifier/src/transaction/transactions_test.rs +++ b/crates/blockifier/src/transaction/transactions_test.rs @@ -5,6 +5,7 @@ use assert_matches::assert_matches; use cairo_felt::Felt252; use cairo_vm::vm::runners::builtin_runner::{HASH_BUILTIN_NAME, RANGE_CHECK_BUILTIN_NAME}; use cairo_vm::vm::runners::cairo_runner::ExecutionResources; +use num_bigint::BigUint; use num_traits::Pow; use once_cell::sync::Lazy; use pretty_assertions::assert_eq; @@ -35,6 +36,7 @@ use crate::execution::execution_utils::{felt_to_stark_felt, stark_felt_to_felt}; use crate::execution::syscalls::hint_processor::EmitEventError; use crate::execution::syscalls::SyscallSelector; use crate::fee::actual_cost::TransactionReceipt; +use crate::fee::fee_utils::balance_to_big_uint; use crate::fee::gas_usage::{ estimate_minimal_gas_vector, get_da_gas_cost, get_onchain_data_segment_length, }; @@ -2012,3 +2014,9 @@ fn test_emit_event_exceeds_limit( } } } + +#[test] +fn test_balance_print() { + let int = balance_to_big_uint(&StarkFelt::from(16_u64), &StarkFelt::from(1_u64)); + assert!(format!("{}", int) == (BigUint::from(u128::MAX) + BigUint::from(17_u128)).to_string()); +}