Skip to content

Commit bc71b38

Browse files
committed
celestia configurable
1 parent 55a127e commit bc71b38

2 files changed

Lines changed: 116 additions & 11 deletions

File tree

bin/saya/src/any.rs

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
use anyhow::Result;
22
use saya_core::{
33
block_ingestor::BlockInfo,
4+
data_availability::{
5+
CelestiaDataAvailabilityBackend, CelestiaDataAvailabilityBackendBuilder,
6+
DataAvailabilityBackend, DataAvailabilityBackendBuilder, DataAvailabilityCursor,
7+
DataAvailabilityPayload, DataAvailabilityPointer, NoopDataAvailabilityBackend,
8+
NoopDataAvailabilityBackendBuilder,
9+
},
410
prover::{
511
AtlanticLayoutBridgeProver, AtlanticLayoutBridgeProverBuilder, MockLayoutBridgeProver,
612
MockLayoutBridgeProverBuilder, Prover, ProverBuilder, SnosProof,
@@ -22,6 +28,87 @@ pub enum AnyLayoutBridgeProverBuilder<DB> {
2228
Mock(MockLayoutBridgeProverBuilder<DB>),
2329
}
2430

31+
#[derive(Debug)]
32+
pub enum AnyDataAvailabilityLayer<P> {
33+
Celestia(Box<CelestiaDataAvailabilityBackend<P>>),
34+
Noop(NoopDataAvailabilityBackend<P>),
35+
}
36+
37+
#[derive(Debug)]
38+
pub enum AnyDataAvailabilityLayerBuilder<P> {
39+
Celestia(Box<CelestiaDataAvailabilityBackendBuilder<P>>),
40+
Noop(NoopDataAvailabilityBackendBuilder<P>),
41+
}
42+
43+
impl<P> DataAvailabilityBackend for AnyDataAvailabilityLayer<P>
44+
where
45+
P: DataAvailabilityPayload + 'static,
46+
{
47+
type Payload = P;
48+
}
49+
50+
impl<P> Daemon for AnyDataAvailabilityLayer<P>
51+
where
52+
P: DataAvailabilityPayload + 'static,
53+
{
54+
fn shutdown_handle(&self) -> ShutdownHandle {
55+
match self {
56+
Self::Celestia(inner) => inner.shutdown_handle(),
57+
Self::Noop(inner) => inner.shutdown_handle(),
58+
}
59+
}
60+
61+
fn start(self) {
62+
match self {
63+
Self::Celestia(inner) => inner.start(),
64+
Self::Noop(inner) => inner.start(),
65+
}
66+
}
67+
}
68+
69+
impl<P> DataAvailabilityBackendBuilder for AnyDataAvailabilityLayerBuilder<P>
70+
where
71+
P: DataAvailabilityPayload + 'static,
72+
{
73+
type Backend = AnyDataAvailabilityLayer<P>;
74+
75+
fn build(self) -> Result<Self::Backend> {
76+
Ok(match self {
77+
Self::Celestia(inner) => AnyDataAvailabilityLayer::Celestia(Box::new(inner.build()?)),
78+
Self::Noop(inner) => AnyDataAvailabilityLayer::Noop(inner.build()?),
79+
})
80+
}
81+
82+
fn last_pointer(self, last_pointer: Option<DataAvailabilityPointer>) -> Self {
83+
match self {
84+
Self::Celestia(inner) => Self::Celestia(Box::new(inner.last_pointer(last_pointer))),
85+
Self::Noop(inner) => Self::Noop(inner.last_pointer(last_pointer)),
86+
}
87+
}
88+
89+
fn proof_channel(
90+
self,
91+
proof_channel: Receiver<<Self::Backend as DataAvailabilityBackend>::Payload>,
92+
) -> Self {
93+
match self {
94+
Self::Celestia(inner) => Self::Celestia(Box::new(inner.proof_channel(proof_channel))),
95+
Self::Noop(inner) => Self::Noop(inner.proof_channel(proof_channel)),
96+
}
97+
}
98+
99+
fn cursor_channel(
100+
self,
101+
cursor_channel: Sender<
102+
DataAvailabilityCursor<<Self::Backend as DataAvailabilityBackend>::Payload>,
103+
>,
104+
) -> Self {
105+
match self {
106+
Self::Celestia(inner) => Self::Celestia(Box::new(inner.cursor_channel(cursor_channel))),
107+
Self::Noop(inner) => Self::Noop(inner.cursor_channel(cursor_channel)),
108+
}
109+
}
110+
}
111+
25112
impl<DB> Prover for AnyLayoutBridgeProver<DB>
26113
where
27114
DB: PersistantStorage + Send + Sync + Clone + 'static,

bin/saya/src/persistent.rs

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ use anyhow::Result;
44
use clap::{Parser, Subcommand};
55
use saya_core::{
66
block_ingestor::PollingBlockIngestorBuilder,
7-
data_availability::CelestiaDataAvailabilityBackendBuilder,
7+
data_availability::{
8+
CelestiaDataAvailabilityBackendBuilder, NoopDataAvailabilityBackendBuilder,
9+
},
810
orchestrator::PersistentOrchestratorBuilder,
911
prover::{
1012
AtlanticLayoutBridgeProverBuilder, AtlanticSnosProverBuilder,
@@ -23,7 +25,7 @@ use starknet_types_core::felt::Felt;
2325
use url::Url;
2426

2527
use crate::{
26-
any::AnyLayoutBridgeProverBuilder,
28+
any::{AnyDataAvailabilityLayerBuilder, AnyLayoutBridgeProverBuilder},
2729
common::{calculate_workers_per_stage, NUMBER_OF_STAGES, SAYA_DB_PATH},
2830
sovereign::validate_non_empty,
2931
};
@@ -83,12 +85,19 @@ struct Start {
8385
/// Configuration for OS pie generation
8486
#[clap(flatten)]
8587
hints: HintsConfiguration,
88+
/// Celestia configuration
89+
#[clap(flatten)]
90+
celestia: CelestiaConfiguration,
91+
}
92+
93+
#[derive(Debug, Parser, Clone)]
94+
struct CelestiaConfiguration {
8695
/// Celestia RPC endpoint URL
8796
#[clap(long, env)]
88-
celestia_rpc: Url,
97+
celestia_rpc: Option<Url>,
8998
/// Celestia RPC node auth token
9099
#[clap(long, env)]
91-
celestia_token: String,
100+
celestia_token: Option<String>,
92101
/// Celestia key name
93102
#[clap(long, env)]
94103
celestia_key_name: Option<String>,
@@ -200,13 +209,22 @@ impl Start {
200209
),
201210
layout_bridge_prover_builder,
202211
);
203-
let da_builder = CelestiaDataAvailabilityBackendBuilder::new(
204-
self.celestia_rpc,
205-
self.celestia_token,
206-
self.celestia_namespace,
207-
self.celestia_key_name,
208-
)
209-
.unwrap();
212+
213+
let da_builder = if let (Some(celestia_rpc), Some(celestia_token)) =
214+
(self.celestia.celestia_rpc, self.celestia.celestia_token)
215+
{
216+
AnyDataAvailabilityLayerBuilder::Celestia(Box::new(
217+
CelestiaDataAvailabilityBackendBuilder::new(
218+
celestia_rpc,
219+
celestia_token,
220+
self.celestia.celestia_namespace,
221+
self.celestia.celestia_key_name,
222+
)
223+
.unwrap(),
224+
))
225+
} else {
226+
AnyDataAvailabilityLayerBuilder::Noop(NoopDataAvailabilityBackendBuilder::new())
227+
};
210228

211229
let settlement_builder = PiltoverSettlementBackendBuilder::new(
212230
self.settlement_rpc,

0 commit comments

Comments
 (0)