diff --git a/nodes/nomos-node/Cargo.toml b/nodes/nomos-node/Cargo.toml index 623cbb3a3..c1c922de9 100644 --- a/nodes/nomos-node/Cargo.toml +++ b/nodes/nomos-node/Cargo.toml @@ -23,6 +23,7 @@ tracing = "0.1" multiaddr = "0.18" nomos-core = { path = "../../nomos-core" } nomos-da-verifier = { path = "../../nomos-services/data-availability/verifier", features = ["rocksdb-backend", "libp2p"] } +nomos-da-indexer = { path = "../../nomos-services/data-availability/indexer", features = ["rocksdb-backend"] } nomos-da-network-service = { path = "../../nomos-services/data-availability/network" } nomos-network = { path = "../../nomos-services/network", features = ["libp2p"] } nomos-api = { path = "../../nomos-services/api" } diff --git a/nodes/nomos-node/src/config.rs b/nodes/nomos-node/src/config.rs index 357589fc4..676c822b1 100644 --- a/nodes/nomos-node/src/config.rs +++ b/nodes/nomos-node/src/config.rs @@ -121,6 +121,8 @@ pub struct Config { pub network: as ServiceData>::Settings, pub da_network: > as ServiceData>::Settings, + pub da_indexer: ::Settings, + pub da_verifier: ::Settings, pub http: ::Settings, pub cryptarchia: ::Settings, } diff --git a/nodes/nomos-node/src/lib.rs b/nodes/nomos-node/src/lib.rs index b227e4190..03d49b5b2 100644 --- a/nodes/nomos-node/src/lib.rs +++ b/nodes/nomos-node/src/lib.rs @@ -16,9 +16,15 @@ pub use nomos_core::{ da::blob::select::FillSize as FillSizeWithBlobs, tx::select::FillSize as FillSizeWithTx, }; use nomos_core::{header::HeaderId, tx::Transaction, wire}; +use nomos_da_indexer::consensus::adapters::cryptarchia::CryptarchiaConsensusAdapter; +use nomos_da_indexer::storage::adapters::rocksdb::RocksAdapter as IndexerStorageAdapter; +use nomos_da_indexer::DataIndexerService; use nomos_da_network_service::backends::libp2p::validator::DaNetworkValidatorBackend; use nomos_da_network_service::NetworkService as DaNetworkService; use nomos_da_verifier::backend::kzgrs::KzgrsDaVerifier; +use nomos_da_verifier::network::adapters::libp2p::Libp2pAdapter as VerifierNetworkAdapter; +use nomos_da_verifier::storage::adapters::rocksdb::RocksAdapter as VerifierStorageAdapter; +use nomos_da_verifier::DaVerifierService; #[cfg(feature = "tracing")] use nomos_log::Logger; use nomos_mempool::da::service::DaMempoolService; @@ -68,11 +74,35 @@ pub type DaMempool = DaMempoolService< MockPool::BlobId>, >; +pub type DaIndexer = DataIndexerService< + // Indexer specific. + Bytes, + IndexerStorageAdapter, + CryptarchiaConsensusAdapter, + // Cryptarchia specific, should be the same as in `Cryptarchia` type above. + cryptarchia_consensus::network::adapters::libp2p::LibP2pAdapter, + MockPool::Hash>, + MempoolNetworkAdapter::Hash>, + MockPool::BlobId>, + MempoolNetworkAdapter::BlobId>, + FillSizeWithTx, + FillSizeWithBlobs, + RocksBackend, +>; + +pub type DaVerifier = DaVerifierService< + KzgrsDaVerifier, + VerifierNetworkAdapter, + VerifierStorageAdapter<(), DaBlob, Wire>, +>; + #[derive(Services)] pub struct Nomos { #[cfg(feature = "tracing")] logging: ServiceHandle, network: ServiceHandle>, + da_indexer: ServiceHandle, + da_verifier: ServiceHandle, da_network: ServiceHandle>>, cl_mempool: ServiceHandle, da_mempool: ServiceHandle, diff --git a/nodes/nomos-node/src/main.rs b/nodes/nomos-node/src/main.rs index 19ec2f715..3268efcf9 100644 --- a/nodes/nomos-node/src/main.rs +++ b/nodes/nomos-node/src/main.rs @@ -91,6 +91,8 @@ fn main() -> Result<()> { registry: registry.clone(), }, da_network: config.da_network, + da_indexer: config.da_indexer, + da_verifier: config.da_verifier, cryptarchia: config.cryptarchia, #[cfg(feature = "metrics")] metrics: MetricsSettings { registry }, diff --git a/nomos-services/data-availability/indexer/src/lib.rs b/nomos-services/data-availability/indexer/src/lib.rs index 3ea0c1d5b..8da9b9f92 100644 --- a/nomos-services/data-availability/indexer/src/lib.rs +++ b/nomos-services/data-availability/indexer/src/lib.rs @@ -23,7 +23,7 @@ use overwatch_rs::services::state::{NoOperator, NoState}; use overwatch_rs::services::{ServiceCore, ServiceData, ServiceId}; use overwatch_rs::DynError; use serde::de::DeserializeOwned; -use serde::Serialize; +use serde::{Deserialize, Serialize}; use storage::DaStorageAdapter; use tokio::sync::oneshot::Sender; use tracing::error; @@ -363,7 +363,7 @@ where } } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct IndexerSettings { pub storage: S, } diff --git a/nomos-services/data-availability/indexer/src/storage/adapters/rocksdb.rs b/nomos-services/data-availability/indexer/src/storage/adapters/rocksdb.rs index f413f6ab9..3c40273ef 100644 --- a/nomos-services/data-availability/indexer/src/storage/adapters/rocksdb.rs +++ b/nomos-services/data-availability/indexer/src/storage/adapters/rocksdb.rs @@ -1,6 +1,7 @@ +// std use std::path::PathBuf; use std::{marker::PhantomData, ops::Range}; - +// crates use bytes::Bytes; use futures::{stream::FuturesUnordered, Stream}; use nomos_core::da::blob::{ @@ -18,7 +19,8 @@ use overwatch_rs::{ services::{relay::OutboundRelay, ServiceData}, DynError, }; - +use serde::{Deserialize, Serialize}; +// internal use crate::storage::DaStorageAdapter; pub struct RocksAdapter @@ -142,7 +144,7 @@ where } } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct RocksAdapterSettings { pub blob_storage_directory: PathBuf, } diff --git a/nomos-services/data-availability/verifier/Cargo.toml b/nomos-services/data-availability/verifier/Cargo.toml index 3ea0931a6..d7f223dfc 100644 --- a/nomos-services/data-availability/verifier/Cargo.toml +++ b/nomos-services/data-availability/verifier/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" [dependencies] async-trait = "0.1" -blst = "0.3.11" +blst = { version = "0.3.11", features = ["serde-secret"] } bytes = "1.2" futures = "0.3" kzgrs-backend = { path = "../../../nomos-da/kzgrs-backend" } diff --git a/nomos-services/data-availability/verifier/src/backend/kzgrs.rs b/nomos-services/data-availability/verifier/src/backend/kzgrs.rs index 76a350f42..2a85bee02 100644 --- a/nomos-services/data-availability/verifier/src/backend/kzgrs.rs +++ b/nomos-services/data-availability/verifier/src/backend/kzgrs.rs @@ -4,6 +4,7 @@ use core::fmt; use blst::{min_sig::PublicKey, min_sig::SecretKey}; use kzgrs_backend::{common::blob::DaBlob, verifier::DaVerifier as NomosKzgrsVerifier}; use nomos_core::da::DaVerifier; +use serde::{Deserialize, Serialize}; // internal use super::VerifierBackend; @@ -52,7 +53,7 @@ impl DaVerifier for KzgrsDaVerifier { } // TODO: `sk` and `nodes_public_keys` need to be fetched from the params provider service. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct KzgrsDaVerifierSettings { pub sk: SecretKey, pub nodes_public_keys: Vec, diff --git a/nomos-services/data-availability/verifier/src/lib.rs b/nomos-services/data-availability/verifier/src/lib.rs index abc191777..3339abb50 100644 --- a/nomos-services/data-availability/verifier/src/lib.rs +++ b/nomos-services/data-availability/verifier/src/lib.rs @@ -6,6 +6,7 @@ use nomos_core::da::blob::Blob; // std use nomos_storage::StorageService; use overwatch_rs::services::life_cycle::LifecycleMessage; +use serde::{Deserialize, Serialize}; use std::error::Error; use std::fmt::{Debug, Formatter}; use storage::DaStorageAdapter; @@ -206,7 +207,7 @@ where } } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct DaVerifierServiceSettings { pub verifier_settings: BackendSettings, pub network_adapter_settings: NetworkSettings, diff --git a/nomos-services/data-availability/verifier/src/storage/adapters/rocksdb.rs b/nomos-services/data-availability/verifier/src/storage/adapters/rocksdb.rs index a39531b4a..b9cbd77a0 100644 --- a/nomos-services/data-availability/verifier/src/storage/adapters/rocksdb.rs +++ b/nomos-services/data-availability/verifier/src/storage/adapters/rocksdb.rs @@ -1,5 +1,5 @@ // std -use serde::{de::DeserializeOwned, Serialize}; +use serde::{de::DeserializeOwned, Deserialize, Serialize}; use std::{marker::PhantomData, path::PathBuf}; // crates use nomos_core::da::blob::Blob; @@ -117,7 +117,7 @@ fn create_blob_idx(blob_id: &[u8], column_idx: &[u8]) -> [u8; 34] { blob_idx } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct RocksAdapterSettings { pub blob_storage_directory: PathBuf, } diff --git a/tests/Cargo.toml b/tests/Cargo.toml index 236446c25..51fd12bde 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -17,6 +17,8 @@ cryptarchia-engine = { path = "../consensus/cryptarchia-engine", features = ["se cryptarchia-ledger = { path = "../ledger/cryptarchia-ledger", features = ["serde"] } nomos-mempool = { path = "../nomos-services/mempool", features = ["mock", "libp2p"] } nomos-da-network-service = { path = "../nomos-services/data-availability/network" } +nomos-da-indexer = { path = "../nomos-services/data-availability/indexer" } +nomos-da-verifier = { path = "../nomos-services/data-availability/verifier" } subnetworks-assignations = { path = "../nomos-da/network/subnetworks-assignations" } full-replication = { path = "../nomos-da/full-replication" } kzgrs-backend = { path = "../nomos-da/kzgrs-backend" } diff --git a/tests/src/nodes/nomos.rs b/tests/src/nodes/nomos.rs index 7862ae523..b3c0bc9b8 100644 --- a/tests/src/nodes/nomos.rs +++ b/tests/src/nodes/nomos.rs @@ -17,8 +17,13 @@ use mixnet::{ topology::{MixNodeInfo, MixnetTopology}, }; use nomos_core::{block::Block, header::HeaderId}; +use nomos_da_indexer::storage::adapters::rocksdb::RocksAdapterSettings as IndexerStorageAdapterSettings; +use nomos_da_indexer::IndexerSettings; use nomos_da_network_service::backends::libp2p::validator::DaNetworkValidatorBackendSettings; use nomos_da_network_service::NetworkConfig as DaNetworkConfig; +use nomos_da_verifier::backend::kzgrs::KzgrsDaVerifierSettings; +use nomos_da_verifier::storage::adapters::rocksdb::RocksAdapterSettings as VerifierStorageAdapterSettings; +use nomos_da_verifier::DaVerifierServiceSettings; use nomos_libp2p::{Multiaddr, SwarmConfig}; use nomos_log::{LoggerBackend, LoggerFormat}; use nomos_mempool::MempoolMetrics; @@ -380,6 +385,21 @@ fn create_node_config( membership: Default::default(), }, }, + da_indexer: IndexerSettings { + storage: IndexerStorageAdapterSettings { + blob_storage_directory: "./".into(), + }, + }, + da_verifier: DaVerifierServiceSettings { + verifier_settings: KzgrsDaVerifierSettings { + sk: Default::default(), + nodes_public_keys: Default::default(), + }, + network_adapter_settings: (), + storage_adapter_settings: VerifierStorageAdapterSettings { + blob_storage_directory: "./".into(), + }, + }, log: Default::default(), http: nomos_api::ApiServiceSettings { backend_settings: AxumBackendSettings {