|
1 | 1 | //! Utilities for end-to-end tests. |
2 | 2 |
|
3 | 3 | use node::NodeTestContext; |
4 | | -use reth_chainspec::EthChainSpec; |
| 4 | +use reth_chainspec::{ChainSpec, EthChainSpec}; |
5 | 5 | use reth_db::{test_utils::TempDatabase, DatabaseEnv}; |
6 | 6 | use reth_engine_local::LocalPayloadAttributesBuilder; |
7 | 7 | use reth_network_api::test_utils::PeersHandleProvider; |
8 | 8 | use reth_node_builder::{ |
9 | 9 | components::NodeComponentsBuilder, |
10 | 10 | rpc::{EngineValidatorAddOn, RethRpcAddOns}, |
11 | 11 | EngineNodeLauncher, FullNodeTypesAdapter, Node, NodeAdapter, NodeBuilder, NodeComponents, |
12 | | - NodeConfig, NodeHandle, NodeTypesWithDBAdapter, NodeTypesWithEngine, PayloadAttributesBuilder, |
13 | | - PayloadTypes, |
| 12 | + NodeConfig, NodeHandle, NodePrimitives, NodeTypesWithDBAdapter, NodeTypesWithEngine, |
| 13 | + PayloadAttributesBuilder, PayloadTypes, |
14 | 14 | }; |
15 | 15 | use reth_node_core::args::{DiscoveryArgs, NetworkArgs, RpcServerArgs}; |
16 | 16 | use reth_provider::providers::{BlockchainProvider, NodeTypesForProvider}; |
@@ -44,7 +44,7 @@ pub async fn setup<N>( |
44 | 44 | num_nodes: usize, |
45 | 45 | chain_spec: Arc<N::ChainSpec>, |
46 | 46 | is_dev: bool, |
47 | | - attributes_generator: impl Fn(u64) -> <<N as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadBuilderAttributes + Copy + 'static, |
| 47 | + attributes_generator: impl Fn(u64) -> <<N as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadBuilderAttributes + Send + Sync + Copy + 'static, |
48 | 48 | ) -> eyre::Result<(Vec<NodeHelperType<N>>, TaskManager, Wallet)> |
49 | 49 | where |
50 | 50 | N: Default + Node<TmpNodeAdapter<N>> + NodeTypesForProvider + NodeTypesWithEngine, |
@@ -108,29 +108,16 @@ pub async fn setup_engine<N>( |
108 | 108 | num_nodes: usize, |
109 | 109 | chain_spec: Arc<N::ChainSpec>, |
110 | 110 | is_dev: bool, |
111 | | - attributes_generator: impl Fn(u64) -> <<N as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadBuilderAttributes + Copy + 'static, |
| 111 | + attributes_generator: impl Fn(u64) -> <<N as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadBuilderAttributes + Send + Sync + Copy + 'static, |
112 | 112 | ) -> eyre::Result<( |
113 | 113 | Vec<NodeHelperType<N, BlockchainProvider<NodeTypesWithDBAdapter<N, TmpDB>>>>, |
114 | 114 | TaskManager, |
115 | 115 | Wallet, |
116 | 116 | )> |
117 | 117 | where |
118 | | - N: Default |
119 | | - + Node<TmpNodeAdapter<N, BlockchainProvider<NodeTypesWithDBAdapter<N, TmpDB>>>> |
120 | | - + NodeTypesWithEngine |
121 | | - + NodeTypesForProvider, |
122 | | - N::ComponentsBuilder: NodeComponentsBuilder< |
123 | | - TmpNodeAdapter<N, BlockchainProvider<NodeTypesWithDBAdapter<N, TmpDB>>>, |
124 | | - Components: NodeComponents< |
125 | | - TmpNodeAdapter<N, BlockchainProvider<NodeTypesWithDBAdapter<N, TmpDB>>>, |
126 | | - Network: PeersHandleProvider, |
127 | | - >, |
128 | | - >, |
129 | | - N::AddOns: RethRpcAddOns<Adapter<N, BlockchainProvider<NodeTypesWithDBAdapter<N, TmpDB>>>> |
130 | | - + EngineValidatorAddOn<Adapter<N, BlockchainProvider<NodeTypesWithDBAdapter<N, TmpDB>>>>, |
131 | | - LocalPayloadAttributesBuilder<N::ChainSpec>: PayloadAttributesBuilder< |
132 | | - <<N as NodeTypesWithEngine>::Engine as PayloadTypes>::PayloadAttributes, |
133 | | - >, |
| 118 | + N: NodeBuilderHelper, |
| 119 | + LocalPayloadAttributesBuilder<N::ChainSpec>: |
| 120 | + PayloadAttributesBuilder<<N::Engine as PayloadTypes>::PayloadAttributes>, |
134 | 121 | { |
135 | 122 | let tasks = TaskManager::current(); |
136 | 123 | let exec = tasks.executor(); |
@@ -214,3 +201,74 @@ pub type Adapter<N, Provider = BlockchainProvider<NodeTypesWithDBAdapter<N, TmpD |
214 | 201 | /// Type alias for a type of `NodeHelper` |
215 | 202 | pub type NodeHelperType<N, Provider = BlockchainProvider<NodeTypesWithDBAdapter<N, TmpDB>>> = |
216 | 203 | NodeTestContext<Adapter<N, Provider>, <N as Node<TmpNodeAdapter<N, Provider>>>::AddOns>; |
| 204 | + |
| 205 | +/// Helper trait to simplify bounds when calling setup functions. |
| 206 | +pub trait NodeBuilderHelper |
| 207 | +where |
| 208 | + Self: Default |
| 209 | + + NodeTypesForProvider |
| 210 | + + NodeTypesWithEngine< |
| 211 | + Engine: PayloadTypes< |
| 212 | + PayloadBuilderAttributes: From<reth_payload_builder::EthPayloadBuilderAttributes>, |
| 213 | + >, |
| 214 | + > + Node< |
| 215 | + TmpNodeAdapter<Self, BlockchainProvider<NodeTypesWithDBAdapter<Self, TmpDB>>>, |
| 216 | + Primitives: NodePrimitives< |
| 217 | + BlockHeader = alloy_consensus::Header, |
| 218 | + BlockBody = alloy_consensus::BlockBody< |
| 219 | + <Self::Primitives as NodePrimitives>::SignedTx, |
| 220 | + >, |
| 221 | + >, |
| 222 | + ComponentsBuilder: NodeComponentsBuilder< |
| 223 | + TmpNodeAdapter<Self, BlockchainProvider<NodeTypesWithDBAdapter<Self, TmpDB>>>, |
| 224 | + Components: NodeComponents< |
| 225 | + TmpNodeAdapter<Self, BlockchainProvider<NodeTypesWithDBAdapter<Self, TmpDB>>>, |
| 226 | + Network: PeersHandleProvider, |
| 227 | + >, |
| 228 | + >, |
| 229 | + AddOns: RethRpcAddOns< |
| 230 | + Adapter<Self, BlockchainProvider<NodeTypesWithDBAdapter<Self, TmpDB>>>, |
| 231 | + > + EngineValidatorAddOn< |
| 232 | + Adapter<Self, BlockchainProvider<NodeTypesWithDBAdapter<Self, TmpDB>>>, |
| 233 | + >, |
| 234 | + ChainSpec: From<ChainSpec> + Clone, |
| 235 | + >, |
| 236 | + LocalPayloadAttributesBuilder<Self::ChainSpec>: |
| 237 | + PayloadAttributesBuilder<<Self::Engine as PayloadTypes>::PayloadAttributes>, |
| 238 | +{ |
| 239 | +} |
| 240 | + |
| 241 | +impl<T> NodeBuilderHelper for T |
| 242 | +where |
| 243 | + Self: Default |
| 244 | + + NodeTypesForProvider |
| 245 | + + NodeTypesWithEngine< |
| 246 | + Engine: PayloadTypes< |
| 247 | + PayloadBuilderAttributes: From<reth_payload_builder::EthPayloadBuilderAttributes>, |
| 248 | + >, |
| 249 | + > + Node< |
| 250 | + TmpNodeAdapter<Self, BlockchainProvider<NodeTypesWithDBAdapter<Self, TmpDB>>>, |
| 251 | + Primitives: NodePrimitives< |
| 252 | + BlockHeader = alloy_consensus::Header, |
| 253 | + BlockBody = alloy_consensus::BlockBody< |
| 254 | + <Self::Primitives as NodePrimitives>::SignedTx, |
| 255 | + >, |
| 256 | + >, |
| 257 | + ComponentsBuilder: NodeComponentsBuilder< |
| 258 | + TmpNodeAdapter<Self, BlockchainProvider<NodeTypesWithDBAdapter<Self, TmpDB>>>, |
| 259 | + Components: NodeComponents< |
| 260 | + TmpNodeAdapter<Self, BlockchainProvider<NodeTypesWithDBAdapter<Self, TmpDB>>>, |
| 261 | + Network: PeersHandleProvider, |
| 262 | + >, |
| 263 | + >, |
| 264 | + AddOns: RethRpcAddOns< |
| 265 | + Adapter<Self, BlockchainProvider<NodeTypesWithDBAdapter<Self, TmpDB>>>, |
| 266 | + > + EngineValidatorAddOn< |
| 267 | + Adapter<Self, BlockchainProvider<NodeTypesWithDBAdapter<Self, TmpDB>>>, |
| 268 | + >, |
| 269 | + ChainSpec: From<ChainSpec> + Clone, |
| 270 | + >, |
| 271 | + LocalPayloadAttributesBuilder<Self::ChainSpec>: |
| 272 | + PayloadAttributesBuilder<<Self::Engine as PayloadTypes>::PayloadAttributes>, |
| 273 | +{ |
| 274 | +} |
0 commit comments