Skip to content

Commit

Permalink
refactor(blockifier,starknet_api): migrate GasVector from blockifier …
Browse files Browse the repository at this point in the history
…to starknet_api

Signed-off-by: Dori Medini <dori@starkware.co>
  • Loading branch information
dorimedini-starkware committed Oct 5, 2024
1 parent a41a12a commit e40c65f
Show file tree
Hide file tree
Showing 22 changed files with 137 additions and 154 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 8 additions & 8 deletions crates/blockifier/src/blockifier/block.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
use log::warn;
use starknet_api::block::{BlockHash, BlockNumber, BlockTimestamp, GasPrice, NonzeroGasPrice};
use starknet_api::block::{
BlockHash,
BlockNumber,
BlockTimestamp,
GasPrice,
GasPricesForFeeType,
NonzeroGasPrice,
};
use starknet_api::core::ContractAddress;
use starknet_api::state::StorageKey;
use starknet_types_core::felt::Felt;
Expand Down Expand Up @@ -31,13 +38,6 @@ pub struct GasPrices {
strk_gas_prices: GasPricesForFeeType, // In fri.
}

#[derive(Clone, Debug)]
pub struct GasPricesForFeeType {
pub l1_gas_price: NonzeroGasPrice,
pub l1_data_gas_price: NonzeroGasPrice,
pub l2_gas_price: NonzeroGasPrice,
}

impl GasPrices {
pub fn new(
eth_l1_gas_price: NonzeroGasPrice,
Expand Down
3 changes: 2 additions & 1 deletion crates/blockifier/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ use std::collections::BTreeMap;
use papyrus_config::dumping::{append_sub_config_name, ser_param, SerializeConfig};
use papyrus_config::{ParamPath, ParamPrivacyInput, SerializedParam};
use serde::{Deserialize, Serialize};
use starknet_api::block::GasPricesForFeeType;
use starknet_api::core::{ChainId, ContractAddress};
use starknet_api::transaction::ValidResourceBounds;

use crate::blockifier::block::{BlockInfo, GasPricesForFeeType};
use crate::blockifier::block::BlockInfo;
use crate::bouncer::BouncerConfig;
use crate::fee::resources::GasVectorComputationMode;
use crate::transaction::objects::{
Expand Down
3 changes: 1 addition & 2 deletions crates/blockifier/src/fee/fee_checks.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use starknet_api::execution_resources::GasAmount;
use starknet_api::execution_resources::{GasAmount, GasVector};
use starknet_api::transaction::Resource::{self, L1DataGas, L1Gas, L2Gas};
use starknet_api::transaction::{AllResourceBounds, Fee, ResourceBounds, ValidResourceBounds};
use starknet_types_core::felt::Felt;
Expand All @@ -7,7 +7,6 @@ use thiserror::Error;
use crate::context::TransactionContext;
use crate::fee::fee_utils::{get_balance_and_if_covers_fee, get_fee_by_gas_vector};
use crate::fee::receipt::TransactionReceipt;
use crate::fee::resources::GasVector;
use crate::state::state_api::StateReader;
use crate::transaction::errors::TransactionExecutionError;
use crate::transaction::objects::{FeeType, TransactionExecutionResult, TransactionInfo};
Expand Down
4 changes: 2 additions & 2 deletions crates/blockifier/src/fee/fee_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use cairo_vm::types::builtin_name::BuiltinName;
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
use rstest::rstest;
use starknet_api::block::{GasPrice, NonzeroGasPrice};
use starknet_api::execution_resources::GasAmount;
use starknet_api::execution_resources::{GasAmount, GasVector};
use starknet_api::invoke_tx_args;
use starknet_api::transaction::{Fee, Resource, ValidResourceBounds};

Expand All @@ -14,7 +14,7 @@ use crate::context::BlockContext;
use crate::fee::fee_checks::{FeeCheckError, FeeCheckReportFields, PostExecutionReport};
use crate::fee::fee_utils::get_vm_resources_cost;
use crate::fee::receipt::TransactionReceipt;
use crate::fee::resources::{GasVector, GasVectorComputationMode};
use crate::fee::resources::GasVectorComputationMode;
use crate::test_utils::contracts::FeatureContract;
use crate::test_utils::initial_test_state::test_state;
use crate::test_utils::{
Expand Down
4 changes: 2 additions & 2 deletions crates/blockifier/src/fee/fee_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use cairo_vm::types::builtin_name::BuiltinName;
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
use num_bigint::BigUint;
use starknet_api::core::ContractAddress;
use starknet_api::execution_resources::GasAmount;
use starknet_api::execution_resources::{GasAmount, GasVector};
use starknet_api::state::StorageKey;
use starknet_api::transaction::ValidResourceBounds::{AllResources, L1Gas};
use starknet_api::transaction::{AllResourceBounds, Fee, Resource};
Expand All @@ -14,7 +14,7 @@ use crate::abi::abi_utils::get_fee_token_var_address;
use crate::abi::sierra_types::next_storage_key;
use crate::blockifier::block::BlockInfo;
use crate::context::{BlockContext, TransactionContext};
use crate::fee::resources::{GasVector, GasVectorComputationMode, TransactionFeeResult};
use crate::fee::resources::{GasVectorComputationMode, TransactionFeeResult};
use crate::state::state_api::StateReader;
use crate::transaction::errors::TransactionFeeError;
use crate::transaction::objects::{ExecutionResourcesTraits, FeeType, TransactionInfo};
Expand Down
4 changes: 2 additions & 2 deletions crates/blockifier/src/fee/gas_usage.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
use starknet_api::execution_resources::GasAmount;
use starknet_api::execution_resources::{GasAmount, GasVector};

use super::fee_utils::get_vm_resources_cost;
use crate::abi::constants;
use crate::context::BlockContext;
use crate::fee::eth_gas_constants;
use crate::fee::resources::{GasVector, GasVectorComputationMode};
use crate::fee::resources::GasVectorComputationMode;
use crate::state::cached_state::StateChangesCount;
use crate::transaction::account_transaction::AccountTransaction;
use crate::utils::u64_from_usize;
Expand Down
9 changes: 2 additions & 7 deletions crates/blockifier/src/fee/gas_usage_test.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use pretty_assertions::assert_eq;
use rstest::{fixture, rstest};
use starknet_api::execution_resources::GasAmount;
use starknet_api::execution_resources::{GasAmount, GasVector};
use starknet_api::invoke_tx_args;
use starknet_api::transaction::{EventContent, EventData, EventKey};
use starknet_types_core::felt::Felt;
Expand All @@ -11,12 +11,7 @@ use crate::execution::call_info::{CallExecution, CallInfo, OrderedEvent};
use crate::fee::eth_gas_constants;
use crate::fee::fee_utils::get_fee_by_gas_vector;
use crate::fee::gas_usage::{get_da_gas_cost, get_message_segment_length};
use crate::fee::resources::{
GasVector,
GasVectorComputationMode,
StarknetResources,
StateResources,
};
use crate::fee::resources::{GasVectorComputationMode, StarknetResources, StateResources};
use crate::state::cached_state::StateChangesCount;
use crate::test_utils::{DEFAULT_ETH_L1_DATA_GAS_PRICE, DEFAULT_ETH_L1_GAS_PRICE};
use crate::transaction::objects::FeeType;
Expand Down
2 changes: 1 addition & 1 deletion crates/blockifier/src/fee/receipt.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
use starknet_api::core::ContractAddress;
use starknet_api::execution_resources::GasVector;
use starknet_api::transaction::Fee;

use crate::context::TransactionContext;
use crate::execution::call_info::ExecutionSummary;
use crate::fee::resources::{
ComputationResources,
GasVector,
StarknetResources,
StateResources,
TransactionResources,
Expand Down
9 changes: 2 additions & 7 deletions crates/blockifier/src/fee/receipt_test.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use rstest::{fixture, rstest};
use starknet_api::execution_resources::GasAmount;
use starknet_api::execution_resources::{GasAmount, GasVector};
use starknet_api::transaction::L2ToL1Payload;
use starknet_api::{invoke_tx_args, nonce};
use starknet_types_core::felt::Felt;
Expand All @@ -18,12 +18,7 @@ use crate::fee::gas_usage::{
get_log_message_to_l1_emissions_cost,
get_message_segment_length,
};
use crate::fee::resources::{
GasVector,
GasVectorComputationMode,
StarknetResources,
StateResources,
};
use crate::fee::resources::{GasVectorComputationMode, StarknetResources, StateResources};
use crate::state::cached_state::StateChangesCount;
use crate::test_utils::contracts::FeatureContract;
use crate::test_utils::initial_test_state::test_state;
Expand Down
102 changes: 1 addition & 101 deletions crates/blockifier/src/fee/resources.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
use serde::Serialize;
use starknet_api::block::GasPrice;
use starknet_api::core::ContractAddress;
use starknet_api::execution_resources::GasAmount;
use starknet_api::transaction::Fee;
use starknet_api::execution_resources::{GasAmount, GasVector};

use crate::blockifier::block::GasPricesForFeeType;
use crate::execution::call_info::{EventSummary, ExecutionSummary};
use crate::fee::eth_gas_constants;
use crate::fee::fee_utils::get_vm_resources_cost;
Expand Down Expand Up @@ -295,102 +291,6 @@ impl MessageResources {
}
}

#[cfg_attr(feature = "transaction_serde", derive(serde::Deserialize))]
#[derive(
derive_more::Add,
derive_more::Sum,
derive_more::AddAssign,
Clone,
Copy,
Debug,
Default,
Eq,
PartialEq,
Serialize,
)]
pub struct GasVector {
pub l1_gas: GasAmount,
pub l1_data_gas: GasAmount,
pub l2_gas: GasAmount,
}

impl GasVector {
pub fn from_l1_gas(l1_gas: GasAmount) -> Self {
Self { l1_gas, ..Default::default() }
}

pub fn from_l1_data_gas(l1_data_gas: GasAmount) -> Self {
Self { l1_data_gas, ..Default::default() }
}

pub fn from_l2_gas(l2_gas: GasAmount) -> Self {
Self { l2_gas, ..Default::default() }
}

/// Computes the cost (in fee token units) of the gas vector (saturating on overflow).
pub fn saturated_cost(&self, gas_price: GasPrice, blob_gas_price: GasPrice) -> Fee {
let l1_gas_cost = self
.l1_gas
.checked_mul(gas_price)
.unwrap_or_else(|| {
log::warn!(
"L1 gas cost overflowed: multiplication of {:?} by {:?} resulted in overflow.",
self.l1_gas,
gas_price
);
Fee(u128::MAX)
})
.0;
let l1_data_gas_cost = self
.l1_data_gas
.checked_mul(blob_gas_price)
.unwrap_or_else(|| {
log::warn!(
"L1 blob gas cost overflowed: multiplication of {:?} by {:?} resulted in \
overflow.",
self.l1_data_gas,
blob_gas_price
);
Fee(u128::MAX)
})
.0;
let total = l1_gas_cost.checked_add(l1_data_gas_cost).unwrap_or_else(|| {
log::warn!(
"Total gas cost overflowed: addition of {} and {} resulted in overflow.",
l1_gas_cost,
l1_data_gas_cost
);
u128::MAX
});
Fee(total)
}

/// Compute l1_gas estimation from gas_vector using the following formula:
/// One byte of data costs either 1 data gas (in blob mode) or 16 gas (in calldata
/// mode). For gas price GP and data gas price DGP, the discount for using blobs
/// would be DGP / (16 * GP).
/// X non-data-related gas consumption and Y bytes of data, in non-blob mode, would
/// cost (X + 16*Y) units of gas. Applying the discount ratio to the data-related
/// summand, we get total_gas = (X + Y * DGP / GP).
/// If this function is called with kzg_flag==false, then l1_data_gas==0, and this dicount
/// function does nothing.
pub fn to_discounted_l1_gas(&self, gas_prices: &GasPricesForFeeType) -> GasAmount {
self.l1_gas
+ (self.l1_data_gas.nonzero_saturating_mul(gas_prices.l1_data_gas_price))
.checked_div_ceil(gas_prices.l1_gas_price)
.unwrap_or_else(|| {
log::warn!(
"Discounted L1 gas cost overflowed: division of L1 data gas cost ({:?} * \
{:?}) by regular L1 gas price ({:?}) resulted in overflow.",
self.l1_data_gas,
gas_prices.l1_data_gas_price,
gas_prices.l1_gas_price
);
GasAmount::MAX
})
}
}

#[derive(Debug, PartialEq)]
pub enum GasVectorComputationMode {
All,
Expand Down
9 changes: 2 additions & 7 deletions crates/blockifier/src/test_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use std::path::PathBuf;
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
use starknet_api::block::{GasPrice, NonzeroGasPrice};
use starknet_api::core::{ClassHash, ContractAddress, PatriciaKey};
use starknet_api::execution_resources::GasAmount;
use starknet_api::execution_resources::{GasAmount, GasVector};
use starknet_api::state::StorageKey;
use starknet_api::transaction::{Calldata, ContractAddressSalt, Fee, TransactionVersion};
use starknet_api::{contract_address, felt, patricia_key};
Expand All @@ -26,12 +26,7 @@ use crate::execution::call_info::ExecutionSummary;
use crate::execution::deprecated_syscalls::hint_processor::SyscallCounter;
use crate::execution::entry_point::CallEntryPoint;
use crate::execution::syscalls::SyscallSelector;
use crate::fee::resources::{
GasVector,
GasVectorComputationMode,
StarknetResources,
StateResources,
};
use crate::fee::resources::{GasVectorComputationMode, StarknetResources, StateResources};
use crate::test_utils::contracts::FeatureContract;
use crate::transaction::transaction_types::TransactionType;
use crate::utils::{const_max, u128_from_usize};
Expand Down
3 changes: 1 addition & 2 deletions crates/blockifier/src/transaction/account_transaction.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::sync::Arc;

use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
use starknet_api::block::GasPrice;
use starknet_api::block::{GasPrice, GasPricesForFeeType};
use starknet_api::calldata;
use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector, Nonce};
use starknet_api::data_availability::DataAvailabilityMode;
Expand All @@ -23,7 +23,6 @@ use starknet_api::transaction::{
use starknet_types_core::felt::Felt;

use crate::abi::abi_utils::selector_from_name;
use crate::blockifier::block::GasPricesForFeeType;
use crate::context::{BlockContext, TransactionContext};
use crate::execution::call_info::{CallInfo, Retdata};
use crate::execution::contract_class::ContractClass;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use cairo_vm::vm::runners::cairo_runner::ResourceTracker;
use pretty_assertions::assert_eq;
use rstest::rstest;
use starknet_api::core::{calculate_contract_address, ClassHash, ContractAddress, PatriciaKey};
use starknet_api::execution_resources::GasAmount;
use starknet_api::execution_resources::{GasAmount, GasVector};
use starknet_api::hash::StarkHash;
use starknet_api::state::StorageKey;
use starknet_api::test_utils::invoke::InvokeTxArgs;
Expand Down Expand Up @@ -49,7 +49,7 @@ use crate::execution::entry_point::EntryPointExecutionContext;
use crate::execution::syscalls::SyscallSelector;
use crate::fee::fee_utils::{get_fee_by_gas_vector, get_sequencer_balance_keys};
use crate::fee::gas_usage::estimate_minimal_gas_vector;
use crate::fee::resources::{GasVector, GasVectorComputationMode};
use crate::fee::resources::GasVectorComputationMode;
use crate::state::cached_state::{StateChangesCount, TransactionalState};
use crate::state::state_api::{State, StateReader};
use crate::test_utils::contracts::FeatureContract;
Expand Down
4 changes: 2 additions & 2 deletions crates/blockifier/src/transaction/execution_flavors_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use pretty_assertions::assert_eq;
use rstest::rstest;
use starknet_api::block::GasPrice;
use starknet_api::core::ContractAddress;
use starknet_api::execution_resources::GasAmount;
use starknet_api::execution_resources::{GasAmount, GasVector};
use starknet_api::test_utils::invoke::InvokeTxArgs;
use starknet_api::test_utils::NonceManager;
use starknet_api::transaction::{
Expand All @@ -20,7 +20,7 @@ use starknet_types_core::felt::Felt;
use crate::context::{BlockContext, ChainInfo};
use crate::execution::syscalls::SyscallSelector;
use crate::fee::fee_utils::get_fee_by_gas_vector;
use crate::fee::resources::{GasVector, GasVectorComputationMode};
use crate::fee::resources::GasVectorComputationMode;
use crate::state::cached_state::CachedState;
use crate::state::state_api::StateReader;
use crate::test_utils::contracts::FeatureContract;
Expand Down
2 changes: 1 addition & 1 deletion crates/blockifier/src/transaction/objects.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use cairo_vm::types::builtin_name::BuiltinName;
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
use starknet_api::core::{ContractAddress, Nonce};
use starknet_api::data_availability::DataAvailabilityMode;
use starknet_api::execution_resources::GasVector;
use starknet_api::transaction::{
signed_tx_version,
AccountDeploymentData,
Expand All @@ -25,7 +26,6 @@ use crate::blockifier::block::BlockInfo;
use crate::execution::call_info::{CallInfo, ExecutionSummary};
use crate::fee::fee_utils::get_fee_by_gas_vector;
use crate::fee::receipt::TransactionReceipt;
use crate::fee::resources::GasVector;
use crate::transaction::errors::{TransactionExecutionError, TransactionPreValidationError};

#[cfg(test)]
Expand Down
Loading

0 comments on commit e40c65f

Please sign in to comment.