mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: add engine validator addon (#12905)
This commit is contained in:
@ -16,9 +16,10 @@ use reth_chainspec::EthChainSpec;
|
|||||||
use reth_db::{test_utils::TempDatabase, DatabaseEnv};
|
use reth_db::{test_utils::TempDatabase, DatabaseEnv};
|
||||||
use reth_engine_local::LocalPayloadAttributesBuilder;
|
use reth_engine_local::LocalPayloadAttributesBuilder;
|
||||||
use reth_node_builder::{
|
use reth_node_builder::{
|
||||||
components::NodeComponentsBuilder, rpc::RethRpcAddOns, EngineNodeLauncher,
|
components::NodeComponentsBuilder,
|
||||||
FullNodeTypesAdapter, Node, NodeAdapter, NodeComponents, NodeTypesWithDBAdapter,
|
rpc::{EngineValidatorAddOn, RethRpcAddOns},
|
||||||
NodeTypesWithEngine, PayloadAttributesBuilder, PayloadTypes,
|
EngineNodeLauncher, FullNodeTypesAdapter, Node, NodeAdapter, NodeComponents,
|
||||||
|
NodeTypesWithDBAdapter, NodeTypesWithEngine, PayloadAttributesBuilder, PayloadTypes,
|
||||||
};
|
};
|
||||||
use reth_provider::providers::{BlockchainProvider, BlockchainProvider2, NodeTypesForProvider};
|
use reth_provider::providers::{BlockchainProvider, BlockchainProvider2, NodeTypesForProvider};
|
||||||
use tracing::{span, Level};
|
use tracing::{span, Level};
|
||||||
@ -131,7 +132,8 @@ where
|
|||||||
Network: PeersHandleProvider,
|
Network: PeersHandleProvider,
|
||||||
>,
|
>,
|
||||||
>,
|
>,
|
||||||
N::AddOns: RethRpcAddOns<Adapter<N, BlockchainProvider2<NodeTypesWithDBAdapter<N, TmpDB>>>>,
|
N::AddOns: RethRpcAddOns<Adapter<N, BlockchainProvider2<NodeTypesWithDBAdapter<N, TmpDB>>>>
|
||||||
|
+ EngineValidatorAddOn<Adapter<N, BlockchainProvider2<NodeTypesWithDBAdapter<N, TmpDB>>>>,
|
||||||
LocalPayloadAttributesBuilder<N::ChainSpec>: PayloadAttributesBuilder<
|
LocalPayloadAttributesBuilder<N::ChainSpec>: PayloadAttributesBuilder<
|
||||||
<<N as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadAttributes,
|
<<N as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadAttributes,
|
||||||
>,
|
>,
|
||||||
|
|||||||
@ -40,7 +40,7 @@ use tokio_stream::wrappers::UnboundedReceiverStream;
|
|||||||
use crate::{
|
use crate::{
|
||||||
common::{Attached, LaunchContextWith, WithConfigs},
|
common::{Attached, LaunchContextWith, WithConfigs},
|
||||||
hooks::NodeHooks,
|
hooks::NodeHooks,
|
||||||
rpc::{RethRpcAddOns, RpcHandle},
|
rpc::{EngineValidatorAddOn, RethRpcAddOns, RpcHandle},
|
||||||
setup::build_networked_pipeline,
|
setup::build_networked_pipeline,
|
||||||
AddOns, AddOnsContext, ExExLauncher, FullNode, LaunchContext, LaunchNode, NodeAdapter,
|
AddOns, AddOnsContext, ExExLauncher, FullNode, LaunchContext, LaunchNode, NodeAdapter,
|
||||||
NodeBuilderWithComponents, NodeComponents, NodeComponentsBuilder, NodeHandle, NodeTypesAdapter,
|
NodeBuilderWithComponents, NodeComponents, NodeComponentsBuilder, NodeHandle, NodeTypesAdapter,
|
||||||
@ -74,7 +74,8 @@ where
|
|||||||
ProviderNodeTypes<Primitives = EthPrimitives> + NodeTypesWithEngine + PersistenceNodeTypes,
|
ProviderNodeTypes<Primitives = EthPrimitives> + NodeTypesWithEngine + PersistenceNodeTypes,
|
||||||
T: FullNodeTypes<Types = Types, Provider = BlockchainProvider2<Types>>,
|
T: FullNodeTypes<Types = Types, Provider = BlockchainProvider2<Types>>,
|
||||||
CB: NodeComponentsBuilder<T>,
|
CB: NodeComponentsBuilder<T>,
|
||||||
AO: RethRpcAddOns<NodeAdapter<T, CB::Components>>,
|
AO: RethRpcAddOns<NodeAdapter<T, CB::Components>>
|
||||||
|
+ EngineValidatorAddOn<NodeAdapter<T, CB::Components>>,
|
||||||
LocalPayloadAttributesBuilder<Types::ChainSpec>: PayloadAttributesBuilder<
|
LocalPayloadAttributesBuilder<Types::ChainSpec>: PayloadAttributesBuilder<
|
||||||
<<Types as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadAttributes,
|
<<Types as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadAttributes,
|
||||||
>,
|
>,
|
||||||
|
|||||||
@ -575,13 +575,35 @@ impl<N: FullNodeComponents<Types: NodeTypes<Primitives = EthPrimitives>>> EthApi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Helper trait that provides the validator for the engine API
|
||||||
|
pub trait EngineValidatorAddOn<Node: FullNodeComponents>: Send {
|
||||||
|
/// The Validator type to use for the engine API.
|
||||||
|
type Validator: EngineValidator<<Node::Types as NodeTypesWithEngine>::Engine>;
|
||||||
|
|
||||||
|
/// Creates the engine validator for an engine API based node.
|
||||||
|
fn engine_validator(
|
||||||
|
&self,
|
||||||
|
ctx: &AddOnsContext<'_, Node>,
|
||||||
|
) -> impl Future<Output = eyre::Result<Self::Validator>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<N, EthApi, EV> EngineValidatorAddOn<N> for RpcAddOns<N, EthApi, EV>
|
||||||
|
where
|
||||||
|
N: FullNodeComponents,
|
||||||
|
EthApi: EthApiTypes,
|
||||||
|
EV: EngineValidatorBuilder<N>,
|
||||||
|
{
|
||||||
|
type Validator = EV::Validator;
|
||||||
|
|
||||||
|
async fn engine_validator(&self, ctx: &AddOnsContext<'_, N>) -> eyre::Result<Self::Validator> {
|
||||||
|
self.engine_validator_builder.clone().build(ctx).await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A type that knows how to build the engine validator.
|
/// A type that knows how to build the engine validator.
|
||||||
pub trait EngineValidatorBuilder<Node: FullNodeComponents>: Send {
|
pub trait EngineValidatorBuilder<Node: FullNodeComponents>: Send + Clone {
|
||||||
/// The consensus implementation to build.
|
/// The consensus implementation to build.
|
||||||
type Validator: EngineValidator<<Node::Types as NodeTypesWithEngine>::Engine>
|
type Validator: EngineValidator<<Node::Types as NodeTypesWithEngine>::Engine>;
|
||||||
+ Clone
|
|
||||||
+ Unpin
|
|
||||||
+ 'static;
|
|
||||||
|
|
||||||
/// Creates the engine validator.
|
/// Creates the engine validator.
|
||||||
fn build(
|
fn build(
|
||||||
@ -595,7 +617,7 @@ where
|
|||||||
Node: FullNodeComponents,
|
Node: FullNodeComponents,
|
||||||
Validator:
|
Validator:
|
||||||
EngineValidator<<Node::Types as NodeTypesWithEngine>::Engine> + Clone + Unpin + 'static,
|
EngineValidator<<Node::Types as NodeTypesWithEngine>::Engine> + Clone + Unpin + 'static,
|
||||||
F: FnOnce(&AddOnsContext<'_, Node>) -> Fut + Send,
|
F: FnOnce(&AddOnsContext<'_, Node>) -> Fut + Send + Clone,
|
||||||
Fut: Future<Output = eyre::Result<Validator>> + Send,
|
Fut: Future<Output = eyre::Result<Validator>> + Send,
|
||||||
{
|
{
|
||||||
type Validator = Validator;
|
type Validator = Validator;
|
||||||
|
|||||||
@ -1,7 +1,11 @@
|
|||||||
//! Optimism Node types config.
|
//! Optimism Node types config.
|
||||||
|
|
||||||
use std::sync::Arc;
|
use crate::{
|
||||||
|
args::RollupArgs,
|
||||||
|
engine::OpEngineValidator,
|
||||||
|
txpool::{OpTransactionPool, OpTransactionValidator},
|
||||||
|
OpEngineTypes,
|
||||||
|
};
|
||||||
use alloy_consensus::Header;
|
use alloy_consensus::Header;
|
||||||
use reth_basic_payload_builder::{BasicPayloadJobGenerator, BasicPayloadJobGeneratorConfig};
|
use reth_basic_payload_builder::{BasicPayloadJobGenerator, BasicPayloadJobGeneratorConfig};
|
||||||
use reth_chainspec::{EthChainSpec, EthereumHardforks, Hardforks};
|
use reth_chainspec::{EthChainSpec, EthereumHardforks, Hardforks};
|
||||||
@ -17,7 +21,7 @@ use reth_node_builder::{
|
|||||||
PayloadServiceBuilder, PoolBuilder, PoolBuilderConfigOverrides,
|
PayloadServiceBuilder, PoolBuilder, PoolBuilderConfigOverrides,
|
||||||
},
|
},
|
||||||
node::{FullNodeTypes, NodeTypes, NodeTypesWithEngine},
|
node::{FullNodeTypes, NodeTypes, NodeTypesWithEngine},
|
||||||
rpc::{EngineValidatorBuilder, RethRpcAddOns, RpcAddOns, RpcHandle},
|
rpc::{EngineValidatorAddOn, EngineValidatorBuilder, RethRpcAddOns, RpcAddOns, RpcHandle},
|
||||||
BuilderContext, Node, NodeAdapter, NodeComponentsBuilder, PayloadBuilderConfig,
|
BuilderContext, Node, NodeAdapter, NodeComponentsBuilder, PayloadBuilderConfig,
|
||||||
};
|
};
|
||||||
use reth_optimism_chainspec::OpChainSpec;
|
use reth_optimism_chainspec::OpChainSpec;
|
||||||
@ -42,13 +46,7 @@ use reth_transaction_pool::{
|
|||||||
TransactionValidationTaskExecutor,
|
TransactionValidationTaskExecutor,
|
||||||
};
|
};
|
||||||
use reth_trie_db::MerklePatriciaTrie;
|
use reth_trie_db::MerklePatriciaTrie;
|
||||||
|
use std::sync::Arc;
|
||||||
use crate::{
|
|
||||||
args::RollupArgs,
|
|
||||||
engine::OpEngineValidator,
|
|
||||||
txpool::{OpTransactionPool, OpTransactionValidator},
|
|
||||||
OpEngineTypes,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Storage implementation for Optimism.
|
/// Storage implementation for Optimism.
|
||||||
#[derive(Debug, Default, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
@ -260,6 +258,18 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<N> EngineValidatorAddOn<N> for OpAddOns<N>
|
||||||
|
where
|
||||||
|
N: FullNodeComponents<Types: NodeTypes<ChainSpec = OpChainSpec>>,
|
||||||
|
OpEngineValidator: EngineValidator<<N::Types as NodeTypesWithEngine>::Engine>,
|
||||||
|
{
|
||||||
|
type Validator = OpEngineValidator;
|
||||||
|
|
||||||
|
async fn engine_validator(&self, ctx: &AddOnsContext<'_, N>) -> eyre::Result<Self::Validator> {
|
||||||
|
OpEngineValidatorBuilder::default().build(ctx).await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A regular optimism evm and executor builder.
|
/// A regular optimism evm and executor builder.
|
||||||
#[derive(Debug, Default, Clone, Copy)]
|
#[derive(Debug, Default, Clone, Copy)]
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
|
|||||||
Reference in New Issue
Block a user