mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
chore: Use traits from reth 1.5.0
This commit is contained in:
@ -135,7 +135,9 @@ impl<ChainSpec: EthChainSpec + HlHardforks> Consensus<HlBlock> for HlConsensus<C
|
||||
|
||||
mod reth_copy;
|
||||
|
||||
impl<ChainSpec: EthChainSpec + HlHardforks> FullConsensus<HlPrimitives> for HlConsensus<ChainSpec> {
|
||||
impl<ChainSpec: EthChainSpec<Header = alloy_consensus::Header> + HlHardforks>
|
||||
FullConsensus<HlPrimitives> for HlConsensus<ChainSpec>
|
||||
{
|
||||
fn validate_block_post_execution(
|
||||
&self,
|
||||
block: &RecoveredBlock<HlBlock>,
|
||||
|
||||
@ -14,7 +14,6 @@ use alloy_consensus::{BlockHeader, Header, Transaction as _, TxReceipt, EMPTY_OM
|
||||
use alloy_eips::merge::BEACON_NONCE;
|
||||
use alloy_primitives::{Log, U256};
|
||||
use reth_chainspec::{EthChainSpec, EthereumHardforks, Hardforks};
|
||||
use reth_ethereum_forks::EthereumHardfork;
|
||||
use reth_evm::{
|
||||
block::{BlockExecutionError, BlockExecutorFactory, BlockExecutorFor},
|
||||
eth::{receipt_builder::ReceiptBuilder, EthBlockExecutionCtx},
|
||||
@ -67,7 +66,7 @@ where
|
||||
..
|
||||
} = input;
|
||||
|
||||
let timestamp = evm_env.block_env.timestamp;
|
||||
let timestamp = evm_env.block_env.timestamp.saturating_to();
|
||||
|
||||
// Filter out system tx receipts
|
||||
let transactions_for_root: Vec<TransactionSigned> =
|
||||
@ -122,7 +121,7 @@ where
|
||||
mix_hash: evm_env.block_env.prevrandao.unwrap_or_default(),
|
||||
nonce: BEACON_NONCE.into(),
|
||||
base_fee_per_gas: Some(evm_env.block_env.basefee),
|
||||
number: evm_env.block_env.number,
|
||||
number: evm_env.block_env.number.saturating_to(),
|
||||
gas_limit: evm_env.block_env.gas_limit,
|
||||
difficulty: evm_env.block_env.difficulty,
|
||||
gas_used: *gas_used,
|
||||
@ -264,8 +263,6 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
const EIP1559_INITIAL_BASE_FEE: u64 = 0;
|
||||
|
||||
impl ConfigureEvm for HlEvmConfig
|
||||
where
|
||||
Self: Send + Sync + Unpin + Clone + 'static,
|
||||
@ -297,7 +294,7 @@ where
|
||||
CfgEnv::new().with_chain_id(self.chain_spec().chain().id()).with_spec(spec);
|
||||
|
||||
if let Some(blob_params) = &blob_params {
|
||||
cfg_env.set_blob_max_count(blob_params.max_blob_count);
|
||||
cfg_env.set_max_blobs_per_tx(blob_params.max_blobs_per_tx);
|
||||
}
|
||||
|
||||
// TODO: enable only for system transactions
|
||||
@ -315,9 +312,9 @@ where
|
||||
let eth_spec = spec.into_eth_spec();
|
||||
|
||||
let block_env = BlockEnv {
|
||||
number: header.number(),
|
||||
number: U256::from(header.number()),
|
||||
beneficiary: header.beneficiary(),
|
||||
timestamp: header.timestamp(),
|
||||
timestamp: U256::from(header.timestamp()),
|
||||
difficulty: if eth_spec >= SpecId::MERGE { U256::ZERO } else { header.difficulty() },
|
||||
prevrandao: if eth_spec >= SpecId::MERGE { header.mix_hash() } else { None },
|
||||
gas_limit: header.gas_limit(),
|
||||
@ -346,43 +343,19 @@ where
|
||||
|
||||
// if the parent block did not have excess blob gas (i.e. it was pre-cancun), but it is
|
||||
// cancun now, we need to set the excess blob gas to the default value(0)
|
||||
let blob_excess_gas_and_price = parent
|
||||
.maybe_next_block_excess_blob_gas(
|
||||
self.chain_spec().blob_params_at_timestamp(attributes.timestamp),
|
||||
)
|
||||
.or_else(|| (spec_id.into_eth_spec().is_enabled_in(SpecId::CANCUN)).then_some(0))
|
||||
.map(|gas| BlobExcessGasAndPrice::new(gas, false));
|
||||
let blob_excess_gas_and_price = spec_id
|
||||
.into_eth_spec()
|
||||
.is_enabled_in(SpecId::CANCUN)
|
||||
.then_some(BlobExcessGasAndPrice { excess_blob_gas: 0, blob_gasprice: 0 });
|
||||
|
||||
let mut basefee = parent.next_block_base_fee(
|
||||
let basefee = parent.next_block_base_fee(
|
||||
self.chain_spec().base_fee_params_at_timestamp(attributes.timestamp),
|
||||
);
|
||||
|
||||
let mut gas_limit = U256::from(parent.gas_limit);
|
||||
|
||||
// If we are on the London fork boundary, we need to multiply the parent's gas limit by the
|
||||
// elasticity multiplier to get the new gas limit.
|
||||
if self
|
||||
.chain_spec()
|
||||
.inner
|
||||
.fork(EthereumHardfork::London)
|
||||
.transitions_at_block(parent.number + 1)
|
||||
{
|
||||
let elasticity_multiplier = self
|
||||
.chain_spec()
|
||||
.base_fee_params_at_timestamp(attributes.timestamp)
|
||||
.elasticity_multiplier;
|
||||
|
||||
// multiply the gas limit by the elasticity multiplier
|
||||
gas_limit *= U256::from(elasticity_multiplier);
|
||||
|
||||
// set the base fee to the initial base fee from the EIP-1559 spec
|
||||
basefee = Some(EIP1559_INITIAL_BASE_FEE)
|
||||
}
|
||||
|
||||
let block_env = BlockEnv {
|
||||
number: parent.number() + 1,
|
||||
number: U256::from(parent.number() + 1),
|
||||
beneficiary: attributes.suggested_fee_recipient,
|
||||
timestamp: attributes.timestamp,
|
||||
timestamp: U256::from(attributes.timestamp),
|
||||
difficulty: U256::ZERO,
|
||||
prevrandao: Some(attributes.prev_randao),
|
||||
gas_limit: attributes.gas_limit,
|
||||
|
||||
@ -16,8 +16,8 @@ use reth_evm::{
|
||||
block::{BlockValidationError, CommitChanges},
|
||||
eth::receipt_builder::ReceiptBuilder,
|
||||
execute::{BlockExecutionError, BlockExecutor},
|
||||
precompiles::{DynPrecompile, PrecompilesMap},
|
||||
Database, Evm, FromRecoveredTx, FromTxWithEncoded, IntoTxEnv, OnStateHook, RecoveredTx,
|
||||
precompiles::{DynPrecompile, PrecompileInput, PrecompilesMap},
|
||||
Database, Evm, FromRecoveredTx, FromTxWithEncoded, IntoTxEnv, OnStateHook,
|
||||
};
|
||||
use reth_provider::BlockExecutionResult;
|
||||
use reth_revm::State;
|
||||
@ -227,8 +227,8 @@ where
|
||||
for (address, precompile) in ctx.read_precompile_calls.iter() {
|
||||
let precompile = precompile.clone();
|
||||
precompiles_mut.apply_precompile(address, |_| {
|
||||
Some(DynPrecompile::from(move |data: &[u8], gas: u64| {
|
||||
run_precompile(&precompile, data, gas)
|
||||
Some(DynPrecompile::from(move |input: PrecompileInput| -> PrecompileResult {
|
||||
run_precompile(&precompile, input.data, input.gas)
|
||||
}))
|
||||
});
|
||||
}
|
||||
|
||||
@ -7,8 +7,8 @@ use crate::evm::{
|
||||
spec::HlSpecId,
|
||||
transaction::HlTxEnv,
|
||||
};
|
||||
use reth_evm::{precompiles::PrecompilesMap, EvmEnv, EvmFactory};
|
||||
use reth_revm::{Context, Database};
|
||||
use reth_evm::{precompiles::PrecompilesMap, Database, EvmEnv, EvmFactory};
|
||||
use reth_revm::Context;
|
||||
use revm::{
|
||||
context::{
|
||||
result::{EVMError, HaltReason},
|
||||
@ -25,16 +25,15 @@ use revm::{
|
||||
pub struct HlEvmFactory;
|
||||
|
||||
impl EvmFactory for HlEvmFactory {
|
||||
type Evm<DB: Database<Error: Send + Sync + 'static>, I: Inspector<HlContext<DB>>> =
|
||||
HlEvm<DB, I, Self::Precompiles>;
|
||||
type Context<DB: Database<Error: Send + Sync + 'static>> = HlContext<DB>;
|
||||
type Evm<DB: Database, I: Inspector<HlContext<DB>>> = HlEvm<DB, I, Self::Precompiles>;
|
||||
type Context<DB: Database> = HlContext<DB>;
|
||||
type Tx = HlTxEnv<TxEnv>;
|
||||
type Error<DBError: core::error::Error + Send + Sync + 'static> = EVMError<DBError>;
|
||||
type HaltReason = HaltReason;
|
||||
type Spec = HlSpecId;
|
||||
type Precompiles = PrecompilesMap;
|
||||
|
||||
fn create_evm<DB: Database<Error: Send + Sync + 'static>>(
|
||||
fn create_evm<DB: Database>(
|
||||
&self,
|
||||
db: DB,
|
||||
input: EvmEnv<HlSpecId>,
|
||||
|
||||
@ -97,8 +97,7 @@ where
|
||||
tx: Self::Tx,
|
||||
) -> Result<ResultAndState<Self::HaltReason>, Self::Error> {
|
||||
if self.inspect {
|
||||
self.inner.set_tx(tx);
|
||||
self.inner.inspect_replay()
|
||||
self.inner.inspect_tx(tx)
|
||||
} else {
|
||||
self.inner.transact(tx)
|
||||
}
|
||||
|
||||
@ -3,7 +3,6 @@ use crate::{
|
||||
node::{
|
||||
primitives::TransactionSigned,
|
||||
rpc::{HlEthApi, HlNodeCore},
|
||||
HlBlock, HlPrimitives,
|
||||
},
|
||||
};
|
||||
use alloy_consensus::{BlockHeader, ReceiptEnvelope, TxType};
|
||||
@ -16,8 +15,7 @@ use reth::{
|
||||
rpc::{
|
||||
eth::EthApiTypes,
|
||||
server_types::eth::{
|
||||
error::FromEvmError, receipt::build_receipt, EthApiError, EthReceiptBuilder,
|
||||
PendingBlock,
|
||||
error::FromEvmError, receipt::build_receipt, EthApiError, PendingBlock,
|
||||
},
|
||||
types::{BlockId, TransactionReceipt},
|
||||
},
|
||||
@ -25,7 +23,8 @@ use reth::{
|
||||
};
|
||||
use reth_chainspec::{EthChainSpec, EthereumHardforks};
|
||||
use reth_evm::{ConfigureEvm, NextBlockEnvAttributes};
|
||||
use reth_primitives_traits::BlockBody as _;
|
||||
use reth_primitives::NodePrimitives;
|
||||
use reth_primitives_traits::{BlockBody as _, SignedTransaction as _};
|
||||
use reth_provider::{
|
||||
BlockReader, ChainSpecProvider, HeaderProvider, ProviderBlock, ProviderReceipt, ProviderTx,
|
||||
StateProviderFactory,
|
||||
@ -33,7 +32,7 @@ use reth_provider::{
|
||||
use reth_rpc_eth_api::{
|
||||
helpers::{EthBlocks, LoadBlock, LoadPendingBlock, LoadReceipt, SpawnBlocking},
|
||||
types::RpcTypes,
|
||||
FromEthApiError, RpcNodeCore, RpcNodeCoreExt, RpcReceipt,
|
||||
FromEthApiError, RpcConvert, RpcNodeCore, RpcNodeCoreExt, RpcReceipt,
|
||||
};
|
||||
|
||||
impl<N> EthBlocks for HlEthApi<N>
|
||||
@ -68,7 +67,7 @@ where
|
||||
.enumerate()
|
||||
.map(|(idx, (tx, receipt))| {
|
||||
let meta = TransactionMeta {
|
||||
tx_hash: *tx.0.tx_hash(),
|
||||
tx_hash: *tx.tx_hash(),
|
||||
index: idx as u64,
|
||||
block_hash,
|
||||
block_number,
|
||||
@ -76,8 +75,15 @@ where
|
||||
excess_blob_gas,
|
||||
timestamp,
|
||||
};
|
||||
EthReceiptBuilder::new(&tx.0, meta, receipt, &receipts, blob_params)
|
||||
.map(|builder| builder.build())
|
||||
build_receipt(tx, meta, receipt, &receipts, blob_params, |receipt_with_bloom| {
|
||||
match receipt.tx_type {
|
||||
TxType::Legacy => ReceiptEnvelope::Legacy(receipt_with_bloom),
|
||||
TxType::Eip2930 => ReceiptEnvelope::Eip2930(receipt_with_bloom),
|
||||
TxType::Eip1559 => ReceiptEnvelope::Eip1559(receipt_with_bloom),
|
||||
TxType::Eip4844 => ReceiptEnvelope::Eip4844(receipt_with_bloom),
|
||||
TxType::Eip7702 => ReceiptEnvelope::Eip7702(receipt_with_bloom),
|
||||
}
|
||||
})
|
||||
})
|
||||
.collect::<Result<Vec<_>, Self::Error>>()
|
||||
.map(Some);
|
||||
@ -108,17 +114,23 @@ where
|
||||
Header = alloy_rpc_types_eth::Header<ProviderHeader<Self::Provider>>,
|
||||
>,
|
||||
Error: FromEvmError<Self::Evm>,
|
||||
RpcConvert: RpcConvert<Network = Self::NetworkTypes>,
|
||||
>,
|
||||
N: RpcNodeCore<
|
||||
Provider: BlockReaderIdExt<
|
||||
Transaction = TransactionSigned,
|
||||
Block = HlBlock,
|
||||
Receipt = Receipt,
|
||||
Header = alloy_consensus::Header,
|
||||
> + ChainSpecProvider<ChainSpec: EthChainSpec + EthereumHardforks>
|
||||
Provider: BlockReaderIdExt
|
||||
+ ChainSpecProvider<ChainSpec: EthChainSpec + EthereumHardforks>
|
||||
+ StateProviderFactory,
|
||||
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = ProviderTx<N::Provider>>>,
|
||||
Evm: ConfigureEvm<Primitives = HlPrimitives, NextBlockEnvCtx = NextBlockEnvAttributes>,
|
||||
Evm: ConfigureEvm<
|
||||
Primitives = <Self as RpcNodeCore>::Primitives,
|
||||
NextBlockEnvCtx: From<NextBlockEnvAttributes>,
|
||||
>,
|
||||
Primitives: NodePrimitives<
|
||||
BlockHeader = ProviderHeader<Self::Provider>,
|
||||
SignedTx = ProviderTx<Self::Provider>,
|
||||
Receipt = ProviderReceipt<Self::Provider>,
|
||||
Block = ProviderBlock<Self::Provider>,
|
||||
>,
|
||||
>,
|
||||
{
|
||||
#[inline]
|
||||
@ -141,7 +153,8 @@ where
|
||||
gas_limit: parent.gas_limit(),
|
||||
parent_beacon_block_root: parent.parent_beacon_block_root(),
|
||||
withdrawals: None,
|
||||
})
|
||||
}
|
||||
.into())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user