mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-01-03 22:03:06 +00:00
feat: added consensus and networking mocks
This commit is contained in:
parent
3ba1b77cf2
commit
8de1d226f0
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -429,6 +429,7 @@ dependencies = [
|
|||||||
"networking",
|
"networking",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@ -9,6 +9,7 @@ serde_json.workspace = true
|
|||||||
env_logger.workspace = true
|
env_logger.workspace = true
|
||||||
log.workspace = true
|
log.workspace = true
|
||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
|
tokio.workspace = true
|
||||||
|
|
||||||
[dependencies.networking]
|
[dependencies.networking]
|
||||||
path = "../networking"
|
path = "../networking"
|
||||||
@ -1 +1,22 @@
|
|||||||
//ToDo: Add consensus module
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use networking::peer_manager::PeerManager;
|
||||||
|
use tokio::sync::Mutex;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
///Entrypoint to consensus.
|
||||||
|
/// Manages consensus protocol.
|
||||||
|
pub struct ConsensusManager {
|
||||||
|
pub peer_manager: Arc<Mutex<PeerManager>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ConsensusManager {
|
||||||
|
pub fn new(peer_manager: Arc<Mutex<PeerManager>>) -> Self {
|
||||||
|
Self { peer_manager }
|
||||||
|
}
|
||||||
|
|
||||||
|
//ToDo: change block from generic value into struct, when data block will be defined
|
||||||
|
pub fn vote(&self, _block: serde_json::Value) -> bool {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -1 +1,5 @@
|
|||||||
//ToDo: Add networking module
|
pub mod network_protocol;
|
||||||
|
pub mod peer;
|
||||||
|
pub mod peer_manager;
|
||||||
|
pub mod rate_limiter;
|
||||||
|
pub mod tcp;
|
||||||
|
|||||||
19
networking/src/network_protocol.rs
Normal file
19
networking/src/network_protocol.rs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#[derive(Debug)]
|
||||||
|
pub enum MessageKind {}
|
||||||
|
|
||||||
|
pub type PeerId = u64;
|
||||||
|
pub type PeerDistance = u32;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct PeerAddr {
|
||||||
|
pub id: PeerId,
|
||||||
|
//Probably will be socket address in the future
|
||||||
|
pub addr: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
///Structure, which contains all necessary fields for handshake
|
||||||
|
pub struct Handshake {}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum HandshakeFailedReason {}
|
||||||
18
networking/src/peer.rs
Normal file
18
networking/src/peer.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
use crate::{
|
||||||
|
network_protocol::{HandshakeFailedReason, PeerAddr},
|
||||||
|
tcp::Connection,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
/// Structure, which stores all of the peer interaction data.
|
||||||
|
/// Created at per-peer connection basis at `PeerManager`
|
||||||
|
pub struct Peer {
|
||||||
|
pub connection: Connection,
|
||||||
|
pub peer_addr: PeerAddr,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Peer {
|
||||||
|
pub fn handshake(&mut self) -> Result<(), HandshakeFailedReason> {
|
||||||
|
todo!();
|
||||||
|
}
|
||||||
|
}
|
||||||
20
networking/src/peer_manager.rs
Normal file
20
networking/src/peer_manager.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
use anyhow::Result;
|
||||||
|
|
||||||
|
use crate::{network_protocol::PeerId, peer::Peer};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
///Entrypoint to network module.
|
||||||
|
/// Manages connections with peers in network
|
||||||
|
pub struct PeerManager {
|
||||||
|
pub my_peer_id: PeerId,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PeerManager {
|
||||||
|
pub async fn start_peer_manager(_num_threads: u8, my_peer_id: PeerId) -> Result<Self> {
|
||||||
|
Ok(Self { my_peer_id })
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn connect(&self, _peer_id: PeerId) -> Peer {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
}
|
||||||
16
networking/src/rate_limiter.rs
Normal file
16
networking/src/rate_limiter.rs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use crate::network_protocol::MessageKind;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
/// Object responsible to manage the rate limits of all network messages
|
||||||
|
/// for a single connection/peer.
|
||||||
|
pub struct RateLimiter {
|
||||||
|
pub limits: HashMap<MessageKind, u64>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RateLimiter {
|
||||||
|
pub fn is_allowed(&self, _message: MessageKind) -> bool {
|
||||||
|
todo!();
|
||||||
|
}
|
||||||
|
}
|
||||||
11
networking/src/tcp.rs
Normal file
11
networking/src/tcp.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
use crate::network_protocol::PeerAddr;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
///Structure, representing peer connection
|
||||||
|
pub struct Connection {}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum ConnectionType {
|
||||||
|
Inbound { conn: Connection },
|
||||||
|
Outbound { conn: Connection, peer: PeerAddr },
|
||||||
|
}
|
||||||
@ -1,7 +1,12 @@
|
|||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use consensus::ConsensusManager;
|
||||||
use log::info;
|
use log::info;
|
||||||
|
use networking::peer_manager::PeerManager;
|
||||||
use node_rpc::new_http_server;
|
use node_rpc::new_http_server;
|
||||||
use rpc_primitives::RpcConfig;
|
use rpc_primitives::RpcConfig;
|
||||||
|
use tokio::sync::Mutex;
|
||||||
|
|
||||||
pub async fn main_runner() -> Result<()> {
|
pub async fn main_runner() -> Result<()> {
|
||||||
env_logger::init();
|
env_logger::init();
|
||||||
@ -11,6 +16,14 @@ pub async fn main_runner() -> Result<()> {
|
|||||||
let _http_server_handle = http_server.handle();
|
let _http_server_handle = http_server.handle();
|
||||||
tokio::spawn(http_server);
|
tokio::spawn(http_server);
|
||||||
|
|
||||||
|
let peer_manager = PeerManager::start_peer_manager(4, 0).await?;
|
||||||
|
info!("Peer manager mock started");
|
||||||
|
|
||||||
|
let peer_manager_shared = Arc::new(Mutex::new(peer_manager));
|
||||||
|
|
||||||
|
let _consensus_manager = ConsensusManager::new(peer_manager_shared.clone());
|
||||||
|
info!("Consensus manger mock started");
|
||||||
|
|
||||||
#[allow(clippy::empty_loop)]
|
#[allow(clippy::empty_loop)]
|
||||||
loop {
|
loop {
|
||||||
//ToDo: Insert activity into main loop
|
//ToDo: Insert activity into main loop
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user