mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-01-29 00:58:11 -05:00
use alloy's BaseFeeParams (2) (#7617)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@@ -30,7 +30,7 @@ pub fn calculate_next_block_base_fee(
|
||||
base_fee_params: crate::BaseFeeParams,
|
||||
) -> u64 {
|
||||
// Calculate the target gas by dividing the gas limit by the elasticity multiplier.
|
||||
let gas_target = gas_limit / base_fee_params.elasticity_multiplier;
|
||||
let gas_target = gas_limit / base_fee_params.elasticity_multiplier as u64;
|
||||
|
||||
match gas_used.cmp(&gas_target) {
|
||||
// If the gas used in the current block is equal to the gas target, the base fee remains the
|
||||
@@ -45,7 +45,7 @@ pub fn calculate_next_block_base_fee(
|
||||
// Ensure a minimum increase of 1.
|
||||
1,
|
||||
base_fee as u128 * (gas_used - gas_target) as u128 /
|
||||
(gas_target as u128 * base_fee_params.max_change_denominator as u128),
|
||||
(gas_target as u128 * base_fee_params.max_change_denominator),
|
||||
) as u64)
|
||||
}
|
||||
// If the gas used in the current block is less than the gas target, calculate a new
|
||||
@@ -54,7 +54,7 @@ pub fn calculate_next_block_base_fee(
|
||||
// Calculate the decrease in base fee based on the formula defined by EIP-1559.
|
||||
base_fee.saturating_sub(
|
||||
(base_fee as u128 * (gas_target - gas_used) as u128 /
|
||||
(gas_target as u128 * base_fee_params.max_change_denominator as u128))
|
||||
(gas_target as u128 * base_fee_params.max_change_denominator))
|
||||
as u64,
|
||||
)
|
||||
}
|
||||
@@ -65,6 +65,9 @@ pub fn calculate_next_block_base_fee(
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[cfg(feature = "optimism")]
|
||||
use crate::chain::{OP_BASE_FEE_PARAMS, OP_SEPOLIA_BASE_FEE_PARAMS};
|
||||
|
||||
#[test]
|
||||
fn calculate_base_fee_success() {
|
||||
let base_fee = [
|
||||
@@ -124,7 +127,7 @@ mod tests {
|
||||
gas_used[i],
|
||||
gas_limit[i],
|
||||
base_fee[i],
|
||||
crate::BaseFeeParams::optimism(),
|
||||
OP_BASE_FEE_PARAMS,
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -157,7 +160,7 @@ mod tests {
|
||||
gas_used[i],
|
||||
gas_limit[i],
|
||||
base_fee[i],
|
||||
crate::BaseFeeParams::optimism_sepolia(),
|
||||
OP_SEPOLIA_BASE_FEE_PARAMS,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,10 @@ pub use spec::{
|
||||
#[cfg(feature = "optimism")]
|
||||
pub use spec::{BASE_MAINNET, BASE_SEPOLIA, OP_MAINNET, OP_SEPOLIA};
|
||||
|
||||
#[cfg(feature = "optimism")]
|
||||
#[cfg(test)]
|
||||
pub(crate) use spec::{OP_BASE_FEE_PARAMS, OP_SEPOLIA_BASE_FEE_PARAMS};
|
||||
|
||||
// The chain spec module.
|
||||
mod spec;
|
||||
// The chain info module.
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
use crate::{
|
||||
constants::{
|
||||
EIP1559_DEFAULT_BASE_FEE_MAX_CHANGE_DENOMINATOR, EIP1559_DEFAULT_ELASTICITY_MULTIPLIER,
|
||||
EIP1559_INITIAL_BASE_FEE, EMPTY_RECEIPTS, EMPTY_TRANSACTIONS, EMPTY_WITHDRAWALS,
|
||||
},
|
||||
constants::{EIP1559_INITIAL_BASE_FEE, EMPTY_RECEIPTS, EMPTY_TRANSACTIONS, EMPTY_WITHDRAWALS},
|
||||
holesky_nodes,
|
||||
net::{goerli_nodes, mainnet_nodes, sepolia_nodes},
|
||||
proofs::state_root_ref_unhashed,
|
||||
@@ -18,6 +15,14 @@ use std::{
|
||||
sync::Arc,
|
||||
};
|
||||
|
||||
pub use alloy_eips::eip1559::BaseFeeParams;
|
||||
|
||||
#[cfg(feature = "optimism")]
|
||||
pub(crate) use crate::constants::{
|
||||
OP_BASE_FEE_PARAMS, OP_CANYON_BASE_FEE_PARAMS, OP_SEPOLIA_BASE_FEE_PARAMS,
|
||||
OP_SEPOLIA_CANYON_BASE_FEE_PARAMS,
|
||||
};
|
||||
|
||||
/// The Ethereum mainnet spec
|
||||
pub static MAINNET: Lazy<Arc<ChainSpec>> = Lazy::new(|| {
|
||||
ChainSpec {
|
||||
@@ -284,8 +289,8 @@ pub static OP_MAINNET: Lazy<Arc<ChainSpec>> = Lazy::new(|| {
|
||||
]),
|
||||
base_fee_params: BaseFeeParamsKind::Variable(
|
||||
vec![
|
||||
(Hardfork::London, BaseFeeParams::optimism()),
|
||||
(Hardfork::Canyon, BaseFeeParams::optimism_canyon()),
|
||||
(Hardfork::London, OP_BASE_FEE_PARAMS),
|
||||
(Hardfork::Canyon, OP_CANYON_BASE_FEE_PARAMS),
|
||||
]
|
||||
.into(),
|
||||
),
|
||||
@@ -338,8 +343,8 @@ pub static OP_SEPOLIA: Lazy<Arc<ChainSpec>> = Lazy::new(|| {
|
||||
]),
|
||||
base_fee_params: BaseFeeParamsKind::Variable(
|
||||
vec![
|
||||
(Hardfork::London, BaseFeeParams::optimism_sepolia()),
|
||||
(Hardfork::Canyon, BaseFeeParams::optimism_sepolia_canyon()),
|
||||
(Hardfork::London, OP_SEPOLIA_BASE_FEE_PARAMS),
|
||||
(Hardfork::Canyon, OP_SEPOLIA_CANYON_BASE_FEE_PARAMS),
|
||||
]
|
||||
.into(),
|
||||
),
|
||||
@@ -392,8 +397,8 @@ pub static BASE_SEPOLIA: Lazy<Arc<ChainSpec>> = Lazy::new(|| {
|
||||
]),
|
||||
base_fee_params: BaseFeeParamsKind::Variable(
|
||||
vec![
|
||||
(Hardfork::London, BaseFeeParams::optimism_sepolia()),
|
||||
(Hardfork::Canyon, BaseFeeParams::optimism_sepolia_canyon()),
|
||||
(Hardfork::London, OP_SEPOLIA_BASE_FEE_PARAMS),
|
||||
(Hardfork::Canyon, OP_SEPOLIA_CANYON_BASE_FEE_PARAMS),
|
||||
]
|
||||
.into(),
|
||||
),
|
||||
@@ -446,8 +451,8 @@ pub static BASE_MAINNET: Lazy<Arc<ChainSpec>> = Lazy::new(|| {
|
||||
]),
|
||||
base_fee_params: BaseFeeParamsKind::Variable(
|
||||
vec![
|
||||
(Hardfork::London, BaseFeeParams::optimism()),
|
||||
(Hardfork::Canyon, BaseFeeParams::optimism_canyon()),
|
||||
(Hardfork::London, OP_BASE_FEE_PARAMS),
|
||||
(Hardfork::Canyon, OP_CANYON_BASE_FEE_PARAMS),
|
||||
]
|
||||
.into(),
|
||||
),
|
||||
@@ -492,69 +497,6 @@ impl From<Vec<(Hardfork, BaseFeeParams)>> for ForkBaseFeeParams {
|
||||
}
|
||||
}
|
||||
|
||||
/// BaseFeeParams contains the config parameters that control block base fee computation
|
||||
#[derive(Serialize, Deserialize, Debug, Copy, Clone, PartialEq, Eq)]
|
||||
pub struct BaseFeeParams {
|
||||
/// The base_fee_max_change_denominator from EIP-1559
|
||||
pub max_change_denominator: u64,
|
||||
/// The elasticity multiplier from EIP-1559
|
||||
pub elasticity_multiplier: u64,
|
||||
}
|
||||
|
||||
impl BaseFeeParams {
|
||||
/// Get the base fee parameters for Ethereum mainnet
|
||||
pub const fn ethereum() -> BaseFeeParams {
|
||||
BaseFeeParams {
|
||||
max_change_denominator: EIP1559_DEFAULT_BASE_FEE_MAX_CHANGE_DENOMINATOR,
|
||||
elasticity_multiplier: EIP1559_DEFAULT_ELASTICITY_MULTIPLIER,
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the base fee parameters for optimism sepolia
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const fn optimism_sepolia() -> BaseFeeParams {
|
||||
BaseFeeParams {
|
||||
max_change_denominator:
|
||||
crate::constants::OP_SEPOLIA_EIP1559_DEFAULT_BASE_FEE_MAX_CHANGE_DENOMINATOR,
|
||||
elasticity_multiplier:
|
||||
crate::constants::OP_SEPOLIA_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER,
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the base fee parameters for optimism sepolia (post Canyon)
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const fn optimism_sepolia_canyon() -> BaseFeeParams {
|
||||
BaseFeeParams {
|
||||
max_change_denominator:
|
||||
crate::constants::OP_SEPOLIA_EIP1559_BASE_FEE_MAX_CHANGE_DENOMINATOR_CANYON,
|
||||
elasticity_multiplier:
|
||||
crate::constants::OP_SEPOLIA_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER,
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the base fee parameters for optimism mainnet
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const fn optimism() -> BaseFeeParams {
|
||||
BaseFeeParams {
|
||||
max_change_denominator:
|
||||
crate::constants::OP_MAINNET_EIP1559_DEFAULT_BASE_FEE_MAX_CHANGE_DENOMINATOR,
|
||||
elasticity_multiplier:
|
||||
crate::constants::OP_MAINNET_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER,
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the base fee parameters for optimism mainnet (post Canyon)
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const fn optimism_canyon() -> BaseFeeParams {
|
||||
BaseFeeParams {
|
||||
max_change_denominator:
|
||||
crate::constants::OP_MAINNET_EIP1559_BASE_FEE_MAX_CHANGE_DENOMINATOR_CANYON,
|
||||
elasticity_multiplier:
|
||||
crate::constants::OP_MAINNET_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// An Ethereum chain specification.
|
||||
///
|
||||
/// A chain specification describes:
|
||||
|
||||
@@ -6,6 +6,9 @@ use crate::{
|
||||
};
|
||||
use std::time::Duration;
|
||||
|
||||
#[cfg(feature = "optimism")]
|
||||
use crate::chain::BaseFeeParams;
|
||||
|
||||
/// [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844#parameters) constants.
|
||||
pub mod eip4844;
|
||||
|
||||
@@ -67,32 +70,60 @@ pub const MINIMUM_GAS_LIMIT: u64 = 5000;
|
||||
/// Base fee max change denominator for Optimism Mainnet as defined in the Optimism
|
||||
/// [transaction costs](https://community.optimism.io/docs/developers/build/differences/#transaction-costs) doc.
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const OP_MAINNET_EIP1559_DEFAULT_BASE_FEE_MAX_CHANGE_DENOMINATOR: u64 = 50;
|
||||
pub const OP_MAINNET_EIP1559_DEFAULT_BASE_FEE_MAX_CHANGE_DENOMINATOR: u128 = 50;
|
||||
|
||||
/// Base fee max change denominator for Optimism Mainnet as defined in the Optimism Canyon
|
||||
/// hardfork.
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const OP_MAINNET_EIP1559_BASE_FEE_MAX_CHANGE_DENOMINATOR_CANYON: u64 = 250;
|
||||
pub const OP_MAINNET_EIP1559_BASE_FEE_MAX_CHANGE_DENOMINATOR_CANYON: u128 = 250;
|
||||
|
||||
/// Base fee max change denominator for Optimism Mainnet as defined in the Optimism
|
||||
/// [transaction costs](https://community.optimism.io/docs/developers/build/differences/#transaction-costs) doc.
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const OP_MAINNET_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER: u64 = 6;
|
||||
pub const OP_MAINNET_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER: u128 = 6;
|
||||
|
||||
/// Base fee max change denominator for Optimism Sepolia as defined in the Optimism
|
||||
/// [transaction costs](https://community.optimism.io/docs/developers/build/differences/#transaction-costs) doc.
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const OP_SEPOLIA_EIP1559_DEFAULT_BASE_FEE_MAX_CHANGE_DENOMINATOR: u64 = 50;
|
||||
pub const OP_SEPOLIA_EIP1559_DEFAULT_BASE_FEE_MAX_CHANGE_DENOMINATOR: u128 = 50;
|
||||
|
||||
/// Base fee max change denominator for Optimism Sepolia as defined in the Optimism Canyon
|
||||
/// hardfork.
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const OP_SEPOLIA_EIP1559_BASE_FEE_MAX_CHANGE_DENOMINATOR_CANYON: u64 = 250;
|
||||
pub const OP_SEPOLIA_EIP1559_BASE_FEE_MAX_CHANGE_DENOMINATOR_CANYON: u128 = 250;
|
||||
|
||||
/// Base fee max change denominator for Optimism Sepolia as defined in the Optimism
|
||||
/// [transaction costs](https://community.optimism.io/docs/developers/build/differences/#transaction-costs) doc.
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const OP_SEPOLIA_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER: u64 = 10;
|
||||
pub const OP_SEPOLIA_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER: u128 = 10;
|
||||
|
||||
/// Get the base fee parameters for Optimism Sepolia.
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const OP_SEPOLIA_BASE_FEE_PARAMS: BaseFeeParams = BaseFeeParams {
|
||||
max_change_denominator: OP_SEPOLIA_EIP1559_DEFAULT_BASE_FEE_MAX_CHANGE_DENOMINATOR,
|
||||
elasticity_multiplier: OP_SEPOLIA_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER,
|
||||
};
|
||||
|
||||
/// Get the base fee parameters for Optimism Sepolia (post Canyon).
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const OP_SEPOLIA_CANYON_BASE_FEE_PARAMS: BaseFeeParams = BaseFeeParams {
|
||||
max_change_denominator: OP_SEPOLIA_EIP1559_BASE_FEE_MAX_CHANGE_DENOMINATOR_CANYON,
|
||||
elasticity_multiplier: OP_SEPOLIA_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER,
|
||||
};
|
||||
|
||||
/// Get the base fee parameters for Optimism Mainnet.
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const OP_BASE_FEE_PARAMS: BaseFeeParams = BaseFeeParams {
|
||||
max_change_denominator: OP_MAINNET_EIP1559_DEFAULT_BASE_FEE_MAX_CHANGE_DENOMINATOR,
|
||||
elasticity_multiplier: OP_MAINNET_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER,
|
||||
};
|
||||
|
||||
/// Get the base fee parameters for Optimism Mainnet (post Canyon).
|
||||
#[cfg(feature = "optimism")]
|
||||
pub const OP_CANYON_BASE_FEE_PARAMS: BaseFeeParams = BaseFeeParams {
|
||||
max_change_denominator: OP_MAINNET_EIP1559_BASE_FEE_MAX_CHANGE_DENOMINATOR_CANYON,
|
||||
elasticity_multiplier: OP_MAINNET_EIP1559_DEFAULT_ELASTICITY_MULTIPLIER,
|
||||
};
|
||||
|
||||
/// Multiplier for converting gwei to wei.
|
||||
pub const GWEI_TO_WEI: u64 = 1_000_000_000;
|
||||
|
||||
@@ -654,7 +654,8 @@ impl SealedHeader {
|
||||
// Determine the parent gas limit, considering elasticity multiplier on the London fork.
|
||||
let parent_gas_limit =
|
||||
if chain_spec.fork(Hardfork::London).transitions_at_block(self.number) {
|
||||
parent.gas_limit * chain_spec.base_fee_params(self.timestamp).elasticity_multiplier
|
||||
parent.gas_limit *
|
||||
chain_spec.base_fee_params(self.timestamp).elasticity_multiplier as u64
|
||||
} else {
|
||||
parent.gas_limit
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user