add mixnet backed for cryptarchia consensus
This commit is contained in:
parent
ca4f8f8ce3
commit
244d9d149f
|
@ -36,6 +36,7 @@ serde_json = { version = "1", optional = true }
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
libp2p = ["nomos-network/libp2p", "nomos-libp2p"]
|
libp2p = ["nomos-network/libp2p", "nomos-libp2p"]
|
||||||
|
mixnet = ["nomos-network/mixnet", "nomos-libp2p"]
|
||||||
openapi = ["dep:utoipa", "serde_json"]
|
openapi = ["dep:utoipa", "serde_json"]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
#[cfg(feature = "libp2p")]
|
#[cfg(any(feature = "libp2p", feature = "mixnet"))]
|
||||||
pub mod libp2p;
|
pub mod p2p;
|
||||||
|
|
|
@ -7,8 +7,12 @@ use tokio_stream::{wrappers::BroadcastStream, StreamExt};
|
||||||
// internal
|
// internal
|
||||||
use crate::network::{messages::NetworkMessage, BoxedStream, NetworkAdapter};
|
use crate::network::{messages::NetworkMessage, BoxedStream, NetworkAdapter};
|
||||||
use nomos_core::{block::Block, wire};
|
use nomos_core::{block::Block, wire};
|
||||||
|
#[cfg(feature = "libp2p")]
|
||||||
|
use nomos_network::backends::libp2p::Libp2p as Backend;
|
||||||
|
#[cfg(feature = "mixnet")]
|
||||||
|
use nomos_network::backends::mixnet::MixnetNetworkBackend as Backend;
|
||||||
use nomos_network::{
|
use nomos_network::{
|
||||||
backends::libp2p::{Command, Event, EventKind, Libp2p},
|
backends::libp2p::{Command, Event, EventKind},
|
||||||
NetworkMsg, NetworkService,
|
NetworkMsg, NetworkService,
|
||||||
};
|
};
|
||||||
use overwatch_rs::services::{relay::OutboundRelay, ServiceData};
|
use overwatch_rs::services::{relay::OutboundRelay, ServiceData};
|
||||||
|
@ -18,21 +22,21 @@ const BUFFER_SIZE: usize = 64;
|
||||||
type Relay<T> = OutboundRelay<<NetworkService<T> as ServiceData>::Message>;
|
type Relay<T> = OutboundRelay<<NetworkService<T> as ServiceData>::Message>;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct LibP2pAdapter<Tx, BlobCert>
|
pub struct P2pAdapter<Tx, BlobCert>
|
||||||
where
|
where
|
||||||
Tx: Clone + Eq + Hash,
|
Tx: Clone + Eq + Hash,
|
||||||
BlobCert: Clone + Eq + Hash,
|
BlobCert: Clone + Eq + Hash,
|
||||||
{
|
{
|
||||||
network_relay: OutboundRelay<<NetworkService<Libp2p> as ServiceData>::Message>,
|
network_relay: OutboundRelay<<NetworkService<Backend> as ServiceData>::Message>,
|
||||||
blocks: tokio::sync::broadcast::Sender<Block<Tx, BlobCert>>,
|
blocks: tokio::sync::broadcast::Sender<Block<Tx, BlobCert>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Tx, BlobCert> LibP2pAdapter<Tx, BlobCert>
|
impl<Tx, BlobCert> P2pAdapter<Tx, BlobCert>
|
||||||
where
|
where
|
||||||
Tx: Clone + Eq + Hash + Serialize,
|
Tx: Clone + Eq + Hash + Serialize,
|
||||||
BlobCert: Clone + Eq + Hash + Serialize,
|
BlobCert: Clone + Eq + Hash + Serialize,
|
||||||
{
|
{
|
||||||
async fn subscribe(relay: &Relay<Libp2p>, topic: &str) {
|
async fn subscribe(relay: &Relay<Backend>, topic: &str) {
|
||||||
if let Err((e, _)) = relay
|
if let Err((e, _)) = relay
|
||||||
.send(NetworkMsg::Process(Command::Subscribe(topic.into())))
|
.send(NetworkMsg::Process(Command::Subscribe(topic.into())))
|
||||||
.await
|
.await
|
||||||
|
@ -43,16 +47,16 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl<Tx, BlobCert> NetworkAdapter for LibP2pAdapter<Tx, BlobCert>
|
impl<Tx, BlobCert> NetworkAdapter for P2pAdapter<Tx, BlobCert>
|
||||||
where
|
where
|
||||||
Tx: Serialize + DeserializeOwned + Clone + Eq + Hash + Send + 'static,
|
Tx: Serialize + DeserializeOwned + Clone + Eq + Hash + Send + 'static,
|
||||||
BlobCert: Serialize + DeserializeOwned + Clone + Eq + Hash + Send + 'static,
|
BlobCert: Serialize + DeserializeOwned + Clone + Eq + Hash + Send + 'static,
|
||||||
{
|
{
|
||||||
type Backend = Libp2p;
|
type Backend = Backend;
|
||||||
type Tx = Tx;
|
type Tx = Tx;
|
||||||
type BlobCertificate = BlobCert;
|
type BlobCertificate = BlobCert;
|
||||||
|
|
||||||
async fn new(network_relay: Relay<Libp2p>) -> Self {
|
async fn new(network_relay: Relay<Self::Backend>) -> Self {
|
||||||
let relay = network_relay.clone();
|
let relay = network_relay.clone();
|
||||||
Self::subscribe(&relay, TOPIC).await;
|
Self::subscribe(&relay, TOPIC).await;
|
||||||
let blocks = tokio::sync::broadcast::Sender::new(BUFFER_SIZE);
|
let blocks = tokio::sync::broadcast::Sender::new(BUFFER_SIZE);
|
Loading…
Reference in New Issue