|
| 1 | +//! Example demonstrating how to access the Engine API instance during construction. |
| 2 | +//! |
| 3 | +//! Run with |
| 4 | +//! |
| 5 | +//! ```sh |
| 6 | +//! cargo run -p example-engine-api-access |
| 7 | +//! ``` |
| 8 | +
|
| 9 | +use reth_db::test_utils::create_test_rw_db; |
| 10 | +use reth_node_builder::{EngineApiExt, FullNodeComponents, NodeBuilder, NodeConfig}; |
| 11 | +use reth_optimism_chainspec::BASE_MAINNET; |
| 12 | +use reth_optimism_node::{ |
| 13 | + args::RollupArgs, |
| 14 | + node::{OpAddOns, OpEngineValidatorBuilder}, |
| 15 | + OpEngineApiBuilder, OpNode, |
| 16 | +}; |
| 17 | +use tokio::sync::oneshot; |
| 18 | + |
| 19 | +#[tokio::main] |
| 20 | +async fn main() { |
| 21 | + // Op node configuration and setup |
| 22 | + let config = NodeConfig::new(BASE_MAINNET.clone()); |
| 23 | + let db = create_test_rw_db(); |
| 24 | + let args = RollupArgs::default(); |
| 25 | + let op_node = OpNode::new(args); |
| 26 | + |
| 27 | + let (engine_api_tx, _engine_api_rx) = oneshot::channel(); |
| 28 | + |
| 29 | + let engine_api = |
| 30 | + EngineApiExt::new(OpEngineApiBuilder::<OpEngineValidatorBuilder>::default(), move |api| { |
| 31 | + let _ = engine_api_tx.send(api); |
| 32 | + }); |
| 33 | + |
| 34 | + let _builder = NodeBuilder::new(config) |
| 35 | + .with_database(db) |
| 36 | + .with_types::<OpNode>() |
| 37 | + .with_components(op_node.components()) |
| 38 | + .with_add_ons(OpAddOns::default().with_engine_api(engine_api)) |
| 39 | + .on_component_initialized(move |ctx| { |
| 40 | + let _provider = ctx.provider(); |
| 41 | + Ok(()) |
| 42 | + }) |
| 43 | + .on_node_started(|_full_node| Ok(())) |
| 44 | + .on_rpc_started(|_ctx, handles| { |
| 45 | + let _client = handles.rpc.http_client(); |
| 46 | + Ok(()) |
| 47 | + }) |
| 48 | + .check_launch(); |
| 49 | +} |
0 commit comments