kona_node_service/service/standard/
node.rs1use crate::{
3 DerivationActor, DerivationBuilder, EngineActor, EngineBuilder, InteropMode, L1WatcherRpc,
4 L1WatcherRpcState, NetworkActor, NetworkBuilder, NetworkConfig, NodeMode, RollupNodeBuilder,
5 RollupNodeService, RpcActor, SequencerConfig,
6 actors::{SequencerActor, SequencerBuilder},
7};
8use alloy_provider::RootProvider;
9use async_trait::async_trait;
10use kona_derive::StatefulAttributesBuilder;
11use op_alloy_network::Optimism;
12use std::sync::Arc;
13
14use kona_genesis::RollupConfig;
15use kona_providers_alloy::{
16 AlloyChainProvider, AlloyL2ChainProvider, OnlineBeaconClient, OnlinePipeline,
17};
18use kona_rpc::RpcBuilder;
19
20#[derive(Debug)]
23pub struct RollupNode {
24 pub(crate) config: Arc<RollupConfig>,
26 pub(crate) interop_mode: InteropMode,
28 pub(crate) l1_provider: RootProvider,
30 pub(crate) l1_beacon: OnlineBeaconClient,
32 pub(crate) l2_provider: RootProvider<Optimism>,
34 pub(crate) engine_builder: EngineBuilder,
36 pub(crate) rpc_builder: Option<RpcBuilder>,
38 pub(crate) p2p_config: NetworkConfig,
40 pub(crate) sequencer_config: SequencerConfig,
42}
43
44impl RollupNode {
45 pub fn builder(config: RollupConfig) -> RollupNodeBuilder {
47 RollupNodeBuilder::new(config)
48 }
49}
50
51#[async_trait]
52impl RollupNodeService for RollupNode {
53 type DataAvailabilityWatcher = L1WatcherRpc;
54
55 type AttributesBuilder = StatefulAttributesBuilder<AlloyChainProvider, AlloyL2ChainProvider>;
56 type SequencerActor = SequencerActor<SequencerBuilder>;
57
58 type DerivationPipeline = OnlinePipeline;
59 type DerivationActor = DerivationActor<DerivationBuilder>;
60
61 type RpcActor = RpcActor;
62 type EngineActor = EngineActor;
63 type NetworkActor = NetworkActor;
64
65 fn mode(&self) -> NodeMode {
66 self.engine_builder.mode
67 }
68
69 fn da_watcher_builder(&self) -> L1WatcherRpcState {
70 L1WatcherRpcState { rollup: self.config.clone(), l1_provider: self.l1_provider.clone() }
71 }
72
73 fn engine_builder(&self) -> EngineBuilder {
74 self.engine_builder.clone()
75 }
76
77 fn sequencer_builder(&self) -> SequencerBuilder {
78 SequencerBuilder {
79 seq_cfg: self.sequencer_config.clone(),
80 rollup_cfg: self.config.clone(),
81 l1_provider: self.l1_provider.clone(),
82 l2_provider: self.l2_provider.clone(),
83 }
84 }
85
86 fn rpc_builder(&self) -> Option<RpcBuilder> {
87 self.rpc_builder.clone()
88 }
89
90 fn network_builder(&self) -> NetworkBuilder {
91 NetworkBuilder::from(self.p2p_config.clone())
92 }
93
94 fn derivation_builder(&self) -> DerivationBuilder {
95 DerivationBuilder {
96 l1_provider: self.l1_provider.clone(),
97 l1_beacon: self.l1_beacon.clone(),
98 l2_provider: self.l2_provider.clone(),
99 rollup_config: self.config.clone(),
100 interop_mode: self.interop_mode,
101 }
102 }
103}