mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: NodeTypesWithDB (#10683)
This commit is contained in:
@ -15,7 +15,8 @@ use reth_chainspec::ChainSpec;
|
||||
use reth_db::{test_utils::TempDatabase, DatabaseEnv};
|
||||
use reth_node_builder::{
|
||||
components::NodeComponentsBuilder, rpc::EthApiBuilderProvider, FullNodeTypesAdapter, Node,
|
||||
NodeAdapter, NodeAddOns, NodeComponents, NodeTypesWithEngine, RethFullAdapter,
|
||||
NodeAdapter, NodeAddOns, NodeComponents, NodeTypesWithDBAdapter, NodeTypesWithEngine,
|
||||
RethFullAdapter,
|
||||
};
|
||||
use reth_provider::providers::BlockchainProvider;
|
||||
use tracing::{span, Level};
|
||||
@ -116,7 +117,8 @@ where
|
||||
// Type aliases
|
||||
|
||||
type TmpDB = Arc<TempDatabase<DatabaseEnv>>;
|
||||
type TmpNodeAdapter<N> = FullNodeTypesAdapter<N, TmpDB, BlockchainProvider<TmpDB>>;
|
||||
type TmpNodeAdapter<N> =
|
||||
FullNodeTypesAdapter<NodeTypesWithDBAdapter<N, TmpDB>, BlockchainProvider<TmpDB>>;
|
||||
|
||||
type Adapter<N> = NodeAdapter<
|
||||
RethFullAdapter<TmpDB, N>,
|
||||
|
||||
@ -8,13 +8,13 @@ use reth::{
|
||||
api::{BuiltPayload, EngineTypes, FullNodeComponents, PayloadBuilderAttributes},
|
||||
builder::FullNode,
|
||||
network::PeersHandleProvider,
|
||||
payload::PayloadTypes,
|
||||
providers::{BlockReader, BlockReaderIdExt, CanonStateSubscriptions, StageCheckpointReader},
|
||||
rpc::{
|
||||
api::eth::helpers::{EthApiSpec, EthTransactions, TraceExt},
|
||||
types::engine::PayloadStatusEnum,
|
||||
},
|
||||
};
|
||||
use reth_chainspec::ChainSpec;
|
||||
use reth_node_builder::{EthApiTypes, NodeAddOns, NodeTypesWithEngine};
|
||||
use reth_primitives::{BlockHash, BlockNumber, Bytes, B256};
|
||||
use reth_rpc_types::WithOtherFields;
|
||||
@ -36,18 +36,20 @@ where
|
||||
/// The core structure representing the full node.
|
||||
pub inner: FullNode<Node, AddOns>,
|
||||
/// Context for testing payload-related features.
|
||||
pub payload: PayloadTestContext<Node::Engine>,
|
||||
pub payload: PayloadTestContext<<Node::Types as NodeTypesWithEngine>::Engine>,
|
||||
/// Context for testing network functionalities.
|
||||
pub network: NetworkTestContext<Node::Network>,
|
||||
/// Context for testing the Engine API.
|
||||
pub engine_api: EngineApiTestContext<Node::Engine>,
|
||||
pub engine_api: EngineApiTestContext<<Node::Types as NodeTypesWithEngine>::Engine>,
|
||||
/// Context for testing RPC features.
|
||||
pub rpc: RpcTestContext<Node, AddOns::EthApi>,
|
||||
}
|
||||
|
||||
impl<Node, AddOns> NodeTestContext<Node, AddOns>
|
||||
impl<Node, Engine, AddOns> NodeTestContext<Node, AddOns>
|
||||
where
|
||||
Engine: EngineTypes,
|
||||
Node: FullNodeComponents,
|
||||
Node::Types: NodeTypesWithEngine<ChainSpec = ChainSpec, Engine = Engine>,
|
||||
Node::Network: PeersHandleProvider,
|
||||
AddOns: NodeAddOns<Node>,
|
||||
{
|
||||
@ -62,7 +64,7 @@ where
|
||||
engine_api: EngineApiTestContext {
|
||||
engine_api_client: node.auth_server_handle().http_client(),
|
||||
canonical_stream: node.provider.canonical_state_stream(),
|
||||
_marker: PhantomData::<Node::Engine>,
|
||||
_marker: PhantomData::<Engine>,
|
||||
},
|
||||
rpc: RpcTestContext { inner: node.rpc_registry },
|
||||
})
|
||||
@ -82,17 +84,11 @@ where
|
||||
&mut self,
|
||||
length: u64,
|
||||
tx_generator: impl Fn(u64) -> Pin<Box<dyn Future<Output = Bytes>>>,
|
||||
attributes_generator: impl Fn(u64) -> <Node::Engine as PayloadTypes>::PayloadBuilderAttributes
|
||||
+ Copy,
|
||||
) -> eyre::Result<
|
||||
Vec<(
|
||||
<Node::Engine as PayloadTypes>::BuiltPayload,
|
||||
<Node::Engine as PayloadTypes>::PayloadBuilderAttributes,
|
||||
)>,
|
||||
>
|
||||
attributes_generator: impl Fn(u64) -> Engine::PayloadBuilderAttributes + Copy,
|
||||
) -> eyre::Result<Vec<(Engine::BuiltPayload, Engine::PayloadBuilderAttributes)>>
|
||||
where
|
||||
<Node::Engine as EngineTypes>::ExecutionPayloadV3:
|
||||
From<<Node::Engine as PayloadTypes>::BuiltPayload> + PayloadEnvelopeExt,
|
||||
<Engine as EngineTypes>::ExecutionPayloadV3:
|
||||
From<Engine::BuiltPayload> + PayloadEnvelopeExt,
|
||||
AddOns::EthApi: EthApiSpec + EthTransactions + TraceExt,
|
||||
<AddOns::EthApi as EthApiTypes>::NetworkTypes:
|
||||
Network<TransactionResponse = WithOtherFields<alloy_rpc_types::Transaction>>,
|
||||
@ -116,14 +112,11 @@ where
|
||||
/// It triggers the resolve payload via engine api and expects the built payload event.
|
||||
pub async fn new_payload(
|
||||
&mut self,
|
||||
attributes_generator: impl Fn(u64) -> <Node::Engine as PayloadTypes>::PayloadBuilderAttributes,
|
||||
) -> eyre::Result<(
|
||||
<<Node as NodeTypesWithEngine>::Engine as PayloadTypes>::BuiltPayload,
|
||||
<<Node as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadBuilderAttributes,
|
||||
)>
|
||||
attributes_generator: impl Fn(u64) -> Engine::PayloadBuilderAttributes,
|
||||
) -> eyre::Result<(Engine::BuiltPayload, Engine::PayloadBuilderAttributes)>
|
||||
where
|
||||
<Node::Engine as EngineTypes>::ExecutionPayloadV3:
|
||||
From<<Node::Engine as PayloadTypes>::BuiltPayload> + PayloadEnvelopeExt,
|
||||
<Engine as EngineTypes>::ExecutionPayloadV3:
|
||||
From<Engine::BuiltPayload> + PayloadEnvelopeExt,
|
||||
{
|
||||
// trigger new payload building draining the pool
|
||||
let eth_attr = self.payload.new_payload(attributes_generator).await.unwrap();
|
||||
@ -141,14 +134,11 @@ where
|
||||
pub async fn advance_block(
|
||||
&mut self,
|
||||
versioned_hashes: Vec<B256>,
|
||||
attributes_generator: impl Fn(u64) -> <Node::Engine as PayloadTypes>::PayloadBuilderAttributes,
|
||||
) -> eyre::Result<(
|
||||
<Node::Engine as PayloadTypes>::BuiltPayload,
|
||||
<<Node as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadBuilderAttributes,
|
||||
)>
|
||||
attributes_generator: impl Fn(u64) -> Engine::PayloadBuilderAttributes,
|
||||
) -> eyre::Result<(Engine::BuiltPayload, Engine::PayloadBuilderAttributes)>
|
||||
where
|
||||
<Node::Engine as EngineTypes>::ExecutionPayloadV3:
|
||||
From<<Node::Engine as PayloadTypes>::BuiltPayload> + PayloadEnvelopeExt,
|
||||
<Engine as EngineTypes>::ExecutionPayloadV3:
|
||||
From<Engine::BuiltPayload> + PayloadEnvelopeExt,
|
||||
{
|
||||
let (payload, eth_attr) = self.new_payload(attributes_generator).await?;
|
||||
|
||||
|
||||
@ -7,7 +7,8 @@ use reth::{
|
||||
DebugApiServer,
|
||||
},
|
||||
};
|
||||
use reth_node_builder::EthApiTypes;
|
||||
use reth_chainspec::ChainSpec;
|
||||
use reth_node_builder::{EthApiTypes, NodeTypes};
|
||||
use reth_primitives::{Bytes, B256};
|
||||
use reth_rpc_types::WithOtherFields;
|
||||
|
||||
@ -18,7 +19,7 @@ pub struct RpcTestContext<Node: FullNodeComponents, EthApi: EthApiTypes> {
|
||||
|
||||
impl<Node, EthApi> RpcTestContext<Node, EthApi>
|
||||
where
|
||||
Node: FullNodeComponents,
|
||||
Node: FullNodeComponents<Types: NodeTypes<ChainSpec = ChainSpec>>,
|
||||
EthApi: EthApiSpec
|
||||
+ EthTransactions<
|
||||
NetworkTypes: Network<
|
||||
|
||||
Reference in New Issue
Block a user