seismic_reth/
main.rs

1#![allow(missing_docs)]
2
3use reth_cli_commands::node::NoArgs;
4use reth_enclave::start_blocking_mock_enclave_server;
5use reth_node_builder::{engine_tree_config::TreeConfig, EngineNodeLauncher};
6use reth_provider::providers::BlockchainProvider2;
7use reth_tracing::tracing::*;
8use seismic_node::chainspec::SeismicChainSpecParser;
9use seismic_rpc_api::rpc::{EthApiExt, EthApiOverrideServer, SeismicApi, SeismicApiServer};
10
11fn main() {
12    use clap::Parser;
13    use reth::cli::Cli;
14    use reth_node_ethereum::{node::EthereumAddOns, EthereumNode};
15
16    reth_cli_util::sigsegv_handler::install();
17
18    // Enable backtraces unless a RUST_BACKTRACE value has already been explicitly provided.
19    if std::env::var_os("RUST_BACKTRACE").is_none() {
20        std::env::set_var("RUST_BACKTRACE", "1");
21    }
22
23    if let Err(err) = Cli::<SeismicChainSpecParser, NoArgs>::parse().run(|builder, _| async move {
24        let engine_tree_config = TreeConfig::default();
25
26        // building seismic api
27        let seismic_api = SeismicApi::new(builder.config());
28
29        let node = builder
30            .with_types_and_provider::<EthereumNode, BlockchainProvider2<_>>()
31            .with_components(EthereumNode::components())
32            .with_add_ons(EthereumAddOns::default())
33            .on_node_started(move |ctx| {
34                if ctx.config.enclave.mock_server {
35                    ctx.task_executor.spawn(async move {
36                        start_blocking_mock_enclave_server(
37                            ctx.config.enclave.enclave_server_addr,
38                            ctx.config.enclave.enclave_server_port,
39                        )
40                        .await;
41                    });
42                }
43                Ok(())
44            })
45            .extend_rpc_modules(move |ctx| {
46                // replace eth_ namespace
47                ctx.modules.replace_configured(
48                    EthApiExt::new(ctx.registry.eth_api().clone()).into_rpc(),
49                )?;
50
51                // add seismic_ namespace
52                ctx.modules.merge_configured(seismic_api.into_rpc())?;
53                info!(target: "reth::cli", "seismic api configured");
54                Ok(())
55            })
56            .launch_with_fn(|builder| {
57                let launcher = EngineNodeLauncher::new(
58                    builder.task_executor().clone(),
59                    builder.config().datadir(),
60                    engine_tree_config,
61                );
62                builder.launch_with(launcher)
63            })
64            .await?;
65        node.node_exit_future.await
66    }) {
67        eprintln!("Error: {err:?}");
68        std::process::exit(1);
69    }
70}