chore: move cfg block env init to PayloadAttributes (#2222)

This commit is contained in:
Matthias Seitz
2023-04-13 16:08:32 +02:00
committed by GitHub
parent 35f7c6d8cf
commit 5e64f0e079
5 changed files with 46 additions and 25 deletions

3
Cargo.lock generated
View File

@ -4495,7 +4495,6 @@ version = "0.1.0"
dependencies = [
"futures-core",
"futures-util",
"reth-consensus-common",
"reth-payload-builder",
"reth-primitives",
"reth-provider",
@ -4945,8 +4944,10 @@ dependencies = [
"futures-core",
"futures-util",
"parking_lot 0.12.1",
"reth-consensus-common",
"reth-interfaces",
"reth-primitives",
"reth-revm-primitives",
"reth-rlp",
"reth-rpc-types",
"revm-primitives",

View File

@ -10,7 +10,6 @@ description = "A basic payload builder for reth that uses the txpool API to buil
[dependencies]
## reth
reth-primitives = { path = "../../primitives" }
reth-consensus-common = { path = "../../consensus/common" }
reth-revm = { path = "../../revm" }
reth-transaction-pool = { path = "../../transaction-pool" }
reth-rlp = { path = "../../rlp" }

View File

@ -11,7 +11,6 @@
use futures_core::{ready, Stream};
use futures_util::FutureExt;
use reth_consensus_common::validation::calculate_next_block_base_fee;
use reth_payload_builder::{
error::PayloadBuilderError, BuiltPayload, PayloadBuilderAttributes, PayloadJob,
PayloadJobGenerator,
@ -122,27 +121,8 @@ where
.ok_or_else(|| PayloadBuilderError::MissingParentBlock(attributes.parent))?;
// configure evm env based on parent block
let initialized_cfg = CfgEnv {
chain_id: U256::from(self.chain_spec.chain().id()),
// ensure we're not missing any timestamp based hardforks
spec_id: revm_spec_by_timestamp_after_merge(&self.chain_spec, attributes.timestamp),
..Default::default()
};
let initialized_block_env = BlockEnv {
number: U256::from(parent_block.number + 1),
coinbase: attributes.suggested_fee_recipient,
timestamp: U256::from(attributes.timestamp),
difficulty: U256::ZERO,
prevrandao: Some(attributes.prev_randao),
gas_limit: U256::from(parent_block.gas_limit),
// calculate basefee based on parent block's gas usage
basefee: U256::from(calculate_next_block_base_fee(
parent_block.gas_used,
parent_block.gas_limit,
parent_block.base_fee_per_gas.unwrap_or_default(),
)),
};
let (initialized_cfg, initialized_block_env) =
attributes.cfg_and_block_env(&self.chain_spec, &parent_block);
let config = PayloadConfig {
initialized_block_env,

View File

@ -13,6 +13,8 @@ reth-primitives = { path = "../../primitives" }
reth-rpc-types = { path = "../../rpc/rpc-types" }
reth-rlp = { path = "../../rlp" }
reth-interfaces = { path = "../../interfaces" }
reth-consensus-common = { path = "../../consensus/common" }
reth-revm-primitives = { path = "../../revm/revm-primitives" }
## ethereum
revm-primitives = "1"

View File

@ -1,8 +1,11 @@
//! Contains types required for building a payload.
use reth_primitives::{Address, SealedBlock, Withdrawal, H256, U256};
use reth_consensus_common::validation::calculate_next_block_base_fee;
use reth_primitives::{Address, ChainSpec, Header, SealedBlock, Withdrawal, H256, U256};
use reth_revm_primitives::config::revm_spec_by_timestamp_after_merge;
use reth_rlp::Encodable;
use reth_rpc_types::engine::{PayloadAttributes, PayloadId};
use revm_primitives::{BlockEnv, CfgEnv};
/// Contains the built payload.
///
@ -78,6 +81,42 @@ impl PayloadBuilderAttributes {
}
}
/// Returns the configured [CfgEnv] and [BlockEnv] for the targeted payload (that has the
/// `parent` as its parent).
///
/// The `chain_spec` is used to determine the correct chain id and hardfork for the payload
/// based on its timestamp.
///
/// Block related settings are derived from the `parent` block and the configured attributes.
///
/// NOTE: This is only intended for beacon consensus (after merge).
pub fn cfg_and_block_env(&self, chain_spec: &ChainSpec, parent: &Header) -> (CfgEnv, BlockEnv) {
// configure evm env based on parent block
let cfg = CfgEnv {
chain_id: U256::from(chain_spec.chain().id()),
// ensure we're not missing any timestamp based hardforks
spec_id: revm_spec_by_timestamp_after_merge(chain_spec, self.timestamp),
..Default::default()
};
let block_env = BlockEnv {
number: U256::from(parent.number + 1),
coinbase: self.suggested_fee_recipient,
timestamp: U256::from(self.timestamp),
difficulty: U256::ZERO,
prevrandao: Some(self.prev_randao),
gas_limit: U256::from(parent.gas_limit),
// calculate basefee based on parent block's gas usage
basefee: U256::from(calculate_next_block_base_fee(
parent.gas_used,
parent.gas_limit,
parent.base_fee_per_gas.unwrap_or_default(),
)),
};
(cfg, block_env)
}
/// Returns the identifier of the payload.
pub fn payload_id(&self) -> PayloadId {
self.id