From c9c3c9881dfe422f9558ecfb9a55a6196abae55c Mon Sep 17 00:00:00 2001 From: ghassmo Date: Thu, 21 Apr 2022 01:43:09 +0300 Subject: [PATCH 01/10] src/net2: WIP clean up --- src/error.rs | 11 +++++++++++ src/net2/acceptor.rs | 4 ++-- src/net2/connector.rs | 2 +- src/net2/transport.rs | 10 +++++++--- src/net2/transport/tcp.rs | 29 +++++++++++++++++++++-------- src/net2/transport/tls.rs | 28 +++++++++++++++++++--------- src/net2/transport/tor.rs | 29 ++++++++++++++++++++--------- 7 files changed, 81 insertions(+), 32 deletions(-) diff --git a/src/error.rs b/src/error.rs index e0d9b7de7..b1f6f84f6 100644 --- a/src/error.rs +++ b/src/error.rs @@ -229,6 +229,10 @@ pub enum Error { #[error("Unsupported network transport")] UnsupportedTransport, + + #[cfg(feature = "net2")] + #[error("TransportError: {0}")] + TransportError(String), } #[cfg(feature = "node")] @@ -353,6 +357,13 @@ impl From for Error { } } +#[cfg(feature = "net2")] +impl From> for Error { + fn from(err: crate::net2::transport::TransportError) -> Error { + Error::TransportError(err.to_string()) + } +} + #[cfg(feature = "wasm-runtime")] impl From for Error { fn from(err: wasmer::RuntimeError) -> Error { diff --git a/src/net2/acceptor.rs b/src/net2/acceptor.rs index 0992ce6d2..0794e01e0 100644 --- a/src/net2/acceptor.rs +++ b/src/net2/acceptor.rs @@ -61,9 +61,9 @@ impl Acceptor { /// Run the accept loop. async fn run_accept_loop(self: Arc, url: url::Url) -> Result<()> { let transport = T::new(None, 1024); - let listener = Arc::new(transport.listen_on(url.clone()).unwrap().await.unwrap()); + let listener = Arc::new(transport.listen_on(url.clone())?.await?); loop { - let stream = T::accept(listener.clone()).await; + let stream = T::accept(listener.clone()).await?; let channel = Channel::::new(stream, url.clone()).await; self.channel_subscriber.notify(Ok(channel)).await; } diff --git a/src/net2/connector.rs b/src/net2/connector.rs index 6fad7dc71..43a326712 100644 --- a/src/net2/connector.rs +++ b/src/net2/connector.rs @@ -23,7 +23,7 @@ impl Connector { let stream_result = timeout(Duration::from_secs(self.settings.connect_timeout_seconds.into()), async { let transport = T::new(None, 1024); - let connect_stream = transport.dial(hostaddr.clone()).unwrap().await.unwrap(); + let connect_stream = transport.dial(hostaddr.clone())?.await?; let channel = Channel::::new(connect_stream, hostaddr).await; Ok(channel) }) diff --git a/src/net2/transport.rs b/src/net2/transport.rs index ab4fbf555..08412ea53 100644 --- a/src/net2/transport.rs +++ b/src/net2/transport.rs @@ -20,8 +20,10 @@ pub trait Transport: Sync + Send + 'static + Clone { type Error: Error; - type Listener: Future> + Sync + Send; - type Dial: Future> + Sync + Send; + type Listener: Future>> + + Sync + + Send; + type Dial: Future>> + Sync + Send; fn listen_on(self, url: Url) -> Result> where @@ -33,7 +35,9 @@ pub trait Transport: Sync + Send + 'static + Clone { fn new(ttl: Option, backlog: i32) -> Self; - async fn accept(listener: Arc) -> Self::Connector; + async fn accept( + listener: Arc, + ) -> Result>; } #[derive(Debug, thiserror::Error)] diff --git a/src/net2/transport/tcp.rs b/src/net2/transport/tcp.rs index dda7ca0c3..7689e7976 100644 --- a/src/net2/transport/tcp.rs +++ b/src/net2/transport/tcp.rs @@ -27,9 +27,14 @@ impl Transport for TcpTransport { type Error = io::Error; - type Listener = - Pin> + Send + Sync>>; - type Dial = Pin> + Send + Sync>>; + type Listener = Pin< + Box>> + Send + Sync>, + >; + type Dial = Pin< + Box< + dyn Future>> + Send + Sync, + >, + >; fn listen_on(self, url: Url) -> Result> { if url.scheme() != "tcp" { @@ -55,8 +60,10 @@ impl Transport for TcpTransport { Self { ttl, backlog } } - async fn accept(listener: Arc) -> Self::Connector { - listener.accept().await.unwrap().0 + async fn accept( + listener: Arc, + ) -> Result> { + Ok(listener.accept().await?.0) } } @@ -76,7 +83,10 @@ impl TcpTransport { Ok(socket) } - async fn do_listen(self, socket_addr: SocketAddr) -> Result { + async fn do_listen( + self, + socket_addr: SocketAddr, + ) -> Result> { let socket = self.create_socket(socket_addr)?; socket.bind(&socket_addr.into())?; socket.listen(self.backlog)?; @@ -84,7 +94,10 @@ impl TcpTransport { Ok(TcpListener::from(std::net::TcpListener::from(socket))) } - async fn do_dial(self, socket_addr: SocketAddr) -> Result { + async fn do_dial( + self, + socket_addr: SocketAddr, + ) -> Result> { let socket = self.create_socket(socket_addr)?; socket.set_nonblocking(true)?; @@ -92,7 +105,7 @@ impl TcpTransport { Ok(()) => {} Err(err) if err.raw_os_error() == Some(libc::EINPROGRESS) => {} Err(err) if err.kind() == io::ErrorKind::WouldBlock => {} - Err(err) => return Err(err), + Err(err) => return Err(TransportError::Other(err)), }; let stream = TcpStream::from(std::net::TcpStream::from(socket)); diff --git a/src/net2/transport/tls.rs b/src/net2/transport/tls.rs index 0e1e07124..54db7c8c2 100644 --- a/src/net2/transport/tls.rs +++ b/src/net2/transport/tls.rs @@ -87,9 +87,14 @@ impl Transport for TlsTransport { type Error = io::Error; - type Listener = - Pin> + Send + Sync>>; - type Dial = Pin> + Send + Sync>>; + type Listener = Pin< + Box>> + Send + Sync>, + >; + type Dial = Pin< + Box< + dyn Future>> + Send + Sync, + >, + >; fn listen_on(self, url: Url) -> Result> { if url.scheme() != "tls" { @@ -151,9 +156,11 @@ impl Transport for TlsTransport { Self { ttl, backlog, server_config, client_config } } - async fn accept(listener: Arc) -> Self::Connector { - let stream = listener.1.accept().await.unwrap().0; - listener.0.accept(stream).await.unwrap().into() + async fn accept( + listener: Arc, + ) -> Result> { + let stream = listener.1.accept().await?.0; + Ok(listener.0.accept(stream).await?.into()) } } @@ -173,7 +180,10 @@ impl TlsTransport { Ok(socket) } - async fn do_listen(self, url: Url) -> Result<(TlsAcceptor, TcpListener), io::Error> { + async fn do_listen( + self, + url: Url, + ) -> Result<(TlsAcceptor, TcpListener), TransportError> { let socket_addr = url.socket_addrs(|| None)?[0]; let socket = self.create_socket(socket_addr)?; socket.bind(&socket_addr.into())?; @@ -185,7 +195,7 @@ impl TlsTransport { Ok((acceptor, listener)) } - async fn do_dial(self, url: Url) -> Result, io::Error> { + async fn do_dial(self, url: Url) -> Result, TransportError> { let socket_addr = url.socket_addrs(|| None)?[0]; let server_name = ServerName::try_from("dark.fi").unwrap(); let socket = self.create_socket(socket_addr)?; @@ -197,7 +207,7 @@ impl TlsTransport { Ok(()) => {} Err(err) if err.raw_os_error() == Some(libc::EINPROGRESS) => {} Err(err) if err.kind() == io::ErrorKind::WouldBlock => {} - Err(err) => return Err(err), + Err(err) => return Err(TransportError::Other(err)), }; let stream = TcpStream::from(std::net::TcpStream::from(socket)); diff --git a/src/net2/transport/tor.rs b/src/net2/transport/tor.rs index 2ee2b9545..e0f9d36e4 100644 --- a/src/net2/transport/tor.rs +++ b/src/net2/transport/tor.rs @@ -194,7 +194,10 @@ impl TorTransport { .create_ehs(url) } - pub async fn do_dial(self, url: Url) -> Result, TorError> { + pub async fn do_dial( + self, + url: Url, + ) -> Result, TransportError> { let socks_url_str = self.socks_url.socket_addrs(|| None)?[0].to_string(); let host = url.host().unwrap().to_string(); let port = url.port().unwrap_or(80); @@ -209,11 +212,12 @@ impl TorTransport { self.socks_url.password().unwrap().to_string(), config, ) - .await? + .await } else { - Socks5Stream::connect(socks_url_str, host, port, config).await? + Socks5Stream::connect(socks_url_str, host, port, config).await }; - Ok(stream) + // FIXME + Ok(stream.unwrap()) } fn create_socket(&self, socket_addr: SocketAddr) -> io::Result { @@ -226,7 +230,7 @@ impl TorTransport { Ok(socket) } - pub async fn do_listen(self, url: Url) -> Result { + pub async fn do_listen(self, url: Url) -> Result> { let socket_addr = url.socket_addrs(|| None)?[0]; let socket = self.create_socket(socket_addr)?; socket.bind(&socket_addr.into())?; @@ -243,9 +247,14 @@ impl Transport for TorTransport { type Error = TorError; - type Listener = - Pin> + Send + Sync>>; - type Dial = Pin> + Send + Sync>>; + type Listener = Pin< + Box>> + Send + Sync>, + >; + type Dial = Pin< + Box< + dyn Future>> + Send + Sync, + >, + >; fn listen_on(self, url: Url) -> Result> { if url.scheme() != "tcp" { @@ -261,7 +270,9 @@ impl Transport for TorTransport { unimplemented!() } - async fn accept(_listener: Arc) -> Self::Connector { + async fn accept( + _listener: Arc, + ) -> Result> { unimplemented!() } } From 9e613d514a90d32e7c954f80dc767aefc3bd5214 Mon Sep 17 00:00:00 2001 From: aggstam Date: Thu, 21 Apr 2022 16:40:52 +0300 Subject: [PATCH 02/10] validatord: moved tx protocol and json rpc to main p2p subnet, protocol_sync.rs: upon receiving finalized block, node removes blocks txs from unconfirmed_txs, /src/consensus/state.rs: decoupled removal of unconfirmed txs --- script/research/nodes-tool/src/main.rs | 4 +- script/research/validatord/src/main.rs | 44 ++++++++++--------- .../validatord/src/protocols/protocol_sync.rs | 4 +- .../validatord/src/protocols/protocol_tx.rs | 2 + src/consensus/state.rs | 17 ++++--- 5 files changed, 41 insertions(+), 30 deletions(-) diff --git a/script/research/nodes-tool/src/main.rs b/script/research/nodes-tool/src/main.rs index a9a33bb04..5e7dbba0a 100644 --- a/script/research/nodes-tool/src/main.rs +++ b/script/research/nodes-tool/src/main.rs @@ -333,7 +333,6 @@ struct StateInfo { _id: u64, _consensus: ConsensusInfo, _blockchain: BlockchainInfo, - _unconfirmed_txs: Vec, } impl StateInfo { @@ -341,8 +340,7 @@ impl StateInfo { let _id = state.id; let _consensus = ConsensusInfo::new(&state.consensus); let _blockchain = BlockchainInfo::new(&state.blockchain); - let _unconfirmed_txs = state.unconfirmed_txs.clone(); - StateInfo { _id, _consensus, _blockchain, _unconfirmed_txs } + StateInfo { _id, _consensus, _blockchain } } } diff --git a/script/research/validatord/src/main.rs b/script/research/validatord/src/main.rs index 2b024ba51..e1f183f1b 100644 --- a/script/research/validatord/src/main.rs +++ b/script/research/validatord/src/main.rs @@ -268,6 +268,8 @@ async fn proposal_task(p2p: net::P2pPtr, state: ValidatorStatePtr) { } }; + info!("tt: {:?}", state.read().unwrap().unconfirmed_txs); + // Node waits untile next epoch let seconds_until_next_epoch = state.read().unwrap().next_epoch_start(); info!("Waiting for next epoch({:?} sec)...", seconds_until_next_epoch); @@ -322,6 +324,15 @@ async fn start(executor: Arc>, opts: &Opt) -> Result<()> { }) .await; + // Adding ProtocolTx to the registry + let state2 = state.clone(); + registry + .register(net::SESSION_ALL, move |channel, main_p2p| { + let state = state2.clone(); + async move { ProtocolTx::init(channel, state, main_p2p).await } + }) + .await; + // Performs seed session main_p2p.clone().start(executor.clone()).await?; // Actual main p2p session @@ -335,6 +346,18 @@ async fn start(executor: Arc>, opts: &Opt) -> Result<()> { }) .detach(); + // RPC interface + let ex2 = executor.clone(); + let ex3 = ex2.clone(); + let rpc_interface = Arc::new(JsonRpcInterface { + state: state.clone(), + p2p: main_p2p.clone(), + _rpc_listen_addr: opts.rpc, + }); + executor + .spawn(async move { listen_and_serve(rpc_server_config, rpc_interface, ex3).await }) + .detach(); + // Node starts syncing let state2 = state.clone(); syncing_task(main_p2p.clone(), state2).await?; @@ -343,15 +366,6 @@ async fn start(executor: Arc>, opts: &Opt) -> Result<()> { let consensus_p2p = net::P2p::new(consensus_subnet_settings).await; let registry = consensus_p2p.protocol_registry(); - // Adding ProtocolTx to the registry - let state2 = state.clone(); - registry - .register(net::SESSION_ALL, move |channel, consensus_p2p| { - let state = state2.clone(); - async move { ProtocolTx::init(channel, state, consensus_p2p).await } - }) - .await; - // Adding PropotolVote to the registry let p2p = main_p2p.clone(); let state2 = state.clone(); @@ -403,18 +417,6 @@ async fn start(executor: Arc>, opts: &Opt) -> Result<()> { }) .detach(); - // RPC interface - let ex2 = executor.clone(); - let ex3 = ex2.clone(); - let rpc_interface = Arc::new(JsonRpcInterface { - state: state.clone(), - p2p: consensus_p2p.clone(), - _rpc_listen_addr: opts.rpc, - }); - executor - .spawn(async move { listen_and_serve(rpc_server_config, rpc_interface, ex3).await }) - .detach(); - proposal_task(consensus_p2p, state).await; Ok(()) diff --git a/script/research/validatord/src/protocols/protocol_sync.rs b/script/research/validatord/src/protocols/protocol_sync.rs index 217b4f953..b713cb83a 100644 --- a/script/research/validatord/src/protocols/protocol_sync.rs +++ b/script/research/validatord/src/protocols/protocol_sync.rs @@ -86,11 +86,13 @@ impl ProtocolSync { // Commented for now, as to not mess consensus testing. // (Don't forget to remove _ from _p2p) /* - // Node stores finalized block, if it doesn't exists (checking by slot). + // Node stores finalized block, if it doesn't exists (checking by slot), + // and removes its transactions from the unconfirmed_txs vector. // Extra validations can be added here. let info_copy = (*info).clone(); if !self.state.read().unwrap().blockchain.has_block(&info_copy)? { self.state.write().unwrap().blockchain.add_by_info(info_copy.clone())?; + self.state.write().unwrap().remove_txs(info_copy.txs.clone())?; self.p2p.broadcast(info_copy).await?; } */ diff --git a/script/research/validatord/src/protocols/protocol_tx.rs b/script/research/validatord/src/protocols/protocol_tx.rs index ba4a12815..6f8f881bc 100644 --- a/script/research/validatord/src/protocols/protocol_tx.rs +++ b/script/research/validatord/src/protocols/protocol_tx.rs @@ -49,6 +49,8 @@ impl ProtocolTx { tx ); let tx_copy = (*tx).clone(); + + // Nodes use unconfirmed_txs vector as seen_txs pool. if self.state.write().unwrap().append_tx(tx_copy.clone()) { self.p2p.broadcast(tx_copy).await?; } diff --git a/src/consensus/state.rs b/src/consensus/state.rs index d3356e26c..fc6299b6b 100644 --- a/src/consensus/state.rs +++ b/src/consensus/state.rs @@ -440,6 +440,17 @@ impl ValidatorState { Ok(None) } + /// Note removes provided transactions vector, from unconfirmed_txs, if they exist. + pub fn remove_txs(&mut self, transactions: Vec) -> Result<()> { + for tx in transactions { + if let Some(pos) = self.unconfirmed_txs.iter().position(|txs| *txs == tx) { + self.unconfirmed_txs.remove(pos); + } + } + + Ok(()) + } + /// Provided an index, node checks if chain can be finalized. /// Consensus finalization logic: If node has observed the notarization of 3 consecutive /// proposals in a fork chain, it finalizes (appends to canonical blockchain) all proposals up to the middle block. @@ -463,15 +474,11 @@ impl ValidatorState { for proposal in &mut chain.proposals[..(consecutive - 1)] { proposal.sm.finalized = true; finalized.push(proposal.clone()); - for tx in proposal.txs.clone() { - if let Some(pos) = self.unconfirmed_txs.iter().position(|txs| *txs == tx) { - self.unconfirmed_txs.remove(pos); - } - } } chain.proposals.drain(0..(consecutive - 1)); for proposal in &finalized { self.blockchain.add_by_proposal(proposal.clone())?; + self.remove_txs(proposal.txs.clone())?; to_broadcast.push(BlockInfo::new( proposal.st, proposal.sl, From bae1ce4ad335262ae6b42bbd815013b768591720 Mon Sep 17 00:00:00 2001 From: aggstam Date: Thu, 21 Apr 2022 16:46:08 +0300 Subject: [PATCH 03/10] validatord: removed dummy log message used for testing --- script/research/validatord/src/main.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/script/research/validatord/src/main.rs b/script/research/validatord/src/main.rs index e1f183f1b..00e77aa37 100644 --- a/script/research/validatord/src/main.rs +++ b/script/research/validatord/src/main.rs @@ -268,8 +268,6 @@ async fn proposal_task(p2p: net::P2pPtr, state: ValidatorStatePtr) { } }; - info!("tt: {:?}", state.read().unwrap().unconfirmed_txs); - // Node waits untile next epoch let seconds_until_next_epoch = state.read().unwrap().next_epoch_start(); info!("Waiting for next epoch({:?} sec)...", seconds_until_next_epoch); From caeeb2648e6801dbc27f4106e66b453891f424c2 Mon Sep 17 00:00:00 2001 From: aggstam Date: Thu, 21 Apr 2022 19:25:24 +0300 Subject: [PATCH 04/10] src/consensus/state.rs: unproposed txs from extending chain only, fix an index bug when generating a new fork chain --- src/consensus/state.rs | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/consensus/state.rs b/src/consensus/state.rs index fc6299b6b..1f84d9e4d 100644 --- a/src/consensus/state.rs +++ b/src/consensus/state.rs @@ -164,8 +164,8 @@ impl ValidatorState { /// Proposal extends the longest notarized fork chain the node holds. pub fn propose(&self) -> Result> { let epoch = self.current_epoch(); - let previous_hash = self.longest_notarized_chain_last_hash().unwrap(); - let unproposed_txs = self.unproposed_txs(); + let (previous_hash, index) = self.longest_notarized_chain_last_hash().unwrap(); + let unproposed_txs = self.unproposed_txs(index); let metadata = Metadata::new( get_current_time(), String::from("proof"), @@ -189,30 +189,43 @@ impl ValidatorState { ))) } - /// Node retrieves all unconfiremd transactions not proposed in previous blocks. - pub fn unproposed_txs(&self) -> Vec { + /// Node retrieves all unconfirmed transactions not proposed + /// in previous blocks of provided index chain. + pub fn unproposed_txs(&self, index: i64) -> Vec { let mut unproposed_txs = self.unconfirmed_txs.clone(); - for chain in &self.consensus.proposals { - for proposal in &chain.proposals { - for tx in &proposal.txs { - if let Some(pos) = unproposed_txs.iter().position(|txs| *txs == *tx) { - unproposed_txs.remove(pos); - } + + // If index is -1(canonical blockchain) a new fork chain will be generated, + // therefore all unproposed transactions can be included in the proposal. + if index == -1 { + return unproposed_txs + } + + // We iterate the fork chain proposals to find already proposed transactions + // and remove them from the local unproposed_txs vector. + let chain = &self.consensus.proposals[index as usize]; + for proposal in &chain.proposals { + for tx in &proposal.txs { + if let Some(pos) = unproposed_txs.iter().position(|txs| *txs == *tx) { + unproposed_txs.remove(pos); } } } + unproposed_txs } - /// Finds the longest fully notarized blockchain the node holds and returns the last block hash. - pub fn longest_notarized_chain_last_hash(&self) -> Result { + /// Finds the longest fully notarized blockchain the node holds and returns the last block hash + /// and the chain index. + pub fn longest_notarized_chain_last_hash(&self) -> Result<(blake3::Hash, i64)> { let mut longest_notarized_chain: Option = None; let mut length = 0; + let mut index = -1; if !self.consensus.proposals.is_empty() { - for chain in &self.consensus.proposals[1..] { + for (i, chain) in self.consensus.proposals.iter().enumerate() { if chain.notarized() && chain.proposals.len() > length { longest_notarized_chain = Some(chain.clone()); length = chain.proposals.len(); + index = i as i64; } } } @@ -222,7 +235,7 @@ impl ValidatorState { None => self.blockchain.last()?.unwrap().1, }; - Ok(hash) + Ok((hash, index)) } /// Node receives the proposed block, verifies its sender(epoch leader), From 66baa52e91d5de21c3facd620f9e19b4f4d46ded Mon Sep 17 00:00:00 2001 From: aggstam Date: Thu, 21 Apr 2022 19:58:31 +0300 Subject: [PATCH 05/10] validatord/protocol_sync.rs: handle_receive_block to be executed based on node mode flag --- script/research/validatord/src/main.rs | 3 +- .../validatord/src/protocols/protocol_sync.rs | 28 ++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/script/research/validatord/src/main.rs b/script/research/validatord/src/main.rs index 00e77aa37..0fcb441cc 100644 --- a/script/research/validatord/src/main.rs +++ b/script/research/validatord/src/main.rs @@ -315,10 +315,11 @@ async fn start(executor: Arc>, opts: &Opt) -> Result<()> { // Adding ProtocolSync to the registry let state2 = state.clone(); + let consensus_mode = false; // This flag should be based on staking registry .register(net::SESSION_ALL, move |channel, main_p2p| { let state = state2.clone(); - async move { ProtocolSync::init(channel, state, main_p2p).await } + async move { ProtocolSync::init(channel, state, main_p2p, consensus_mode).await } }) .await; diff --git a/script/research/validatord/src/protocols/protocol_sync.rs b/script/research/validatord/src/protocols/protocol_sync.rs index b713cb83a..574698c98 100644 --- a/script/research/validatord/src/protocols/protocol_sync.rs +++ b/script/research/validatord/src/protocols/protocol_sync.rs @@ -24,14 +24,16 @@ pub struct ProtocolSync { block_sub: MessageSubscription, jobsman: ProtocolJobsManagerPtr, state: ValidatorStatePtr, - _p2p: P2pPtr, + p2p: P2pPtr, + consensus_mode: bool, } impl ProtocolSync { pub async fn init( channel: ChannelPtr, state: ValidatorStatePtr, - _p2p: P2pPtr, + p2p: P2pPtr, + consensus_mode: bool, ) -> ProtocolBasePtr { let message_subsytem = channel.get_message_subsystem(); message_subsytem.add_dispatch::().await; @@ -48,7 +50,8 @@ impl ProtocolSync { block_sub, jobsman: ProtocolJobsManager::new("SyncProtocol", channel), state, - _p2p, + p2p, + consensus_mode, }) } @@ -82,20 +85,19 @@ impl ProtocolSync { info ); - // TODO: Following code should be executed only by replicators, not consensus nodes. - // Commented for now, as to not mess consensus testing. - // (Don't forget to remove _ from _p2p) - /* // Node stores finalized block, if it doesn't exists (checking by slot), // and removes its transactions from the unconfirmed_txs vector. + // Consensus mode enabled nodes have already performed this steps, + // during proposal finalization. // Extra validations can be added here. - let info_copy = (*info).clone(); - if !self.state.read().unwrap().blockchain.has_block(&info_copy)? { - self.state.write().unwrap().blockchain.add_by_info(info_copy.clone())?; - self.state.write().unwrap().remove_txs(info_copy.txs.clone())?; - self.p2p.broadcast(info_copy).await?; + if self.consensus_mode { + let info_copy = (*info).clone(); + if !self.state.read().unwrap().blockchain.has_block(&info_copy)? { + self.state.write().unwrap().blockchain.add_by_info(info_copy.clone())?; + self.state.write().unwrap().remove_txs(info_copy.txs.clone())?; + self.p2p.broadcast(info_copy).await?; + } } - */ } } } From d7bf42a67f3b44ce5656404d47afb4780f16944f Mon Sep 17 00:00:00 2001 From: aggstam Date: Thu, 21 Apr 2022 20:02:10 +0300 Subject: [PATCH 06/10] validatord/protocol_sync.rs: handle_receive_block correct flag value handling --- script/research/validatord/src/main.rs | 2 +- script/research/validatord/src/protocols/protocol_sync.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/script/research/validatord/src/main.rs b/script/research/validatord/src/main.rs index 0fcb441cc..3249919bf 100644 --- a/script/research/validatord/src/main.rs +++ b/script/research/validatord/src/main.rs @@ -315,7 +315,7 @@ async fn start(executor: Arc>, opts: &Opt) -> Result<()> { // Adding ProtocolSync to the registry let state2 = state.clone(); - let consensus_mode = false; // This flag should be based on staking + let consensus_mode = true; // This flag should be based on staking registry .register(net::SESSION_ALL, move |channel, main_p2p| { let state = state2.clone(); diff --git a/script/research/validatord/src/protocols/protocol_sync.rs b/script/research/validatord/src/protocols/protocol_sync.rs index 574698c98..c80d69cfc 100644 --- a/script/research/validatord/src/protocols/protocol_sync.rs +++ b/script/research/validatord/src/protocols/protocol_sync.rs @@ -90,7 +90,7 @@ impl ProtocolSync { // Consensus mode enabled nodes have already performed this steps, // during proposal finalization. // Extra validations can be added here. - if self.consensus_mode { + if !self.consensus_mode { let info_copy = (*info).clone(); if !self.state.read().unwrap().blockchain.has_block(&info_copy)? { self.state.write().unwrap().blockchain.add_by_info(info_copy.clone())?; From 687ca3dd447bb91def022f51eb2b9ed2e519c4fb Mon Sep 17 00:00:00 2001 From: mohab Date: Wed, 20 Apr 2022 15:19:09 +0200 Subject: [PATCH 07/10] [doc/architecture/blockchain] fixed some typos --- doc/src/architecture/blockchain.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/src/architecture/blockchain.md b/doc/src/architecture/blockchain.md index dd3ab3749..e4c68a0d2 100644 --- a/doc/src/architecture/blockchain.md +++ b/doc/src/architecture/blockchain.md @@ -76,7 +76,7 @@ independent aggregation of the stakes, meaning the property of a leader winning $1-\phi(\sum_{i}\sigma_i)=1-(1+(1-f)^{\sigma_i})=-(1-f)^{\sum_{i}\sigma_i}$, the joint "one minus probability" of all the stakes (each with probability $\phi(\sigma_i))$ winning aggregated winning the leadership -$\prod_{i}^{n}(1-\phi(\sigma_i))=-(1-f)^{\sum_{\sigma_i}}$ +$\prod_{i}^{n}(1-\phi(\sigma_i))=-(1-f)^{\sum_i(\sigma_i)}$ thus: $$ 1-\phi(\sum_{i}\sigma_i) =\prod_{i}^{n}(1-\phi(\sigma_i)) $$ @@ -104,7 +104,8 @@ note that $(\frac{1}{v_{max}})^{n-1} < 1, V>1$, thus competing with single coin $$y<2^{\frac{l}{v}}\Sigma$$ for example for a group order or l=24 bits, and maximum value of $v_{max}=2^{10}$, then lead statement: $$y<2^{14}\Sigma$$ - +### pairing leader selection independent aggregation function +TODO ## Leaky non-resettable beacon From 476a201d72c9bc7a070a2d8da846e1e9bc7c5ed1 Mon Sep 17 00:00:00 2001 From: mohab Date: Thu, 21 Apr 2022 20:45:31 +0200 Subject: [PATCH 08/10] [doc/architecture/blockchain] fixed indepdendent aggregation lead selection --- doc/src/architecture/blockchain.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/architecture/blockchain.md b/doc/src/architecture/blockchain.md index e4c68a0d2..0c2452b51 100644 --- a/doc/src/architecture/blockchain.md +++ b/doc/src/architecture/blockchain.md @@ -99,9 +99,9 @@ note that $(\frac{1}{v_{max}})^{n-1} < 1, V>1$, thus competing with single coin a target function T with scalar coefficients can be formalized as $$T=2^lk\phi(\Sigma)=2^l(\frac{1}{v_{max}})\Sigma$$ let's assume $v_{max}=2^v$, then: - $$T=2^lk\phi(\Sigma)=2^{\frac{l}{v}}\Sigma$$ + $$T=2^lk\phi(\Sigma)=2^{l-v}\Sigma$$ then the lead statement is - $$y<2^{\frac{l}{v}}\Sigma$$ for example for a group order or l=24 bits, and maximum value of $v_{max}=2^{10}$, then lead statement: + $$y<2^{l-v}\Sigma$$ for example for a group order or l=24 bits, and maximum value of $v_{max}=2^{10}$, then lead statement: $$y<2^{14}\Sigma$$ ### pairing leader selection independent aggregation function From 088ada9ff7c75da20176f692a3f444375d6826c4 Mon Sep 17 00:00:00 2001 From: mohab Date: Thu, 21 Apr 2022 21:48:32 +0200 Subject: [PATCH 09/10] [doc/architecture/blockchain] added inverse lead selection function --- doc/src/architecture/blockchain.md | 50 ++++++++++++++++++++++++---- doc/src/architecture/blockchain.pdf | Bin 181295 -> 185378 bytes 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/doc/src/architecture/blockchain.md b/doc/src/architecture/blockchain.md index 0c2452b51..b595ce45e 100644 --- a/doc/src/architecture/blockchain.md +++ b/doc/src/architecture/blockchain.md @@ -68,8 +68,10 @@ the probability that a party holding all the stake will be selected to be a leader. Stakeholder is selected as leader for slot j with probability $\phi_f(\alpha_i)$, $\alpha_i$ is $U_i$ stake. +### absolute stake aggregation dependent leader selection functions + +#### linear functions -### linear aggregation dependent leader selection in the previous leader selection function, it has the unique property of independent aggregation of the stakes, meaning the property of a leader winning leadership with stakes $\sigma$ is independent of whether the stakeholder would act as a pool of stakes, or distributed stakes on competing coins. "one minus the probability" of winning leadership with aggregated stakes is @@ -80,13 +82,15 @@ $\prod_{i}^{n}(1-\phi(\sigma_i))=-(1-f)^{\sum_i(\sigma_i)}$ thus: $$ 1-\phi(\sum_{i}\sigma_i) =\prod_{i}^{n}(1-\phi(\sigma_i)) $$ -#### linear leader selection +##### linear leader selection + $$y < T $$ $$y = 2^lk \mid 0 \le k \le 1$$ $$T = 2^l\phi(v)$$ $$ \phi(v)=\frac{1}{v_{max}}v $$ -#### dependent aggregation +##### dependent aggregation + linear leader selection has the dependent aggregation property, meaning it's favorable to compete in pools with sum of the stakes over aggregated stakes of distributed stakes: $$\phi(\sum_{i}{\sigma_i})>\prod_{i}^{n}{\sigma_i}$$ @@ -95,17 +99,49 @@ let's assume the stakes are divided to stakes of value $\sigma_i=1$ for $\Sigma> $$V>(\frac{1}{v_{max}})^{n-1}$$ note that $(\frac{1}{v_{max}})^{n-1} < 1, V>1$, thus competing with single coin of the sum of stakes held by the stakeholder is favourable. -### scalar linear aggregation dependent leader selection +##### scalar linear aggregation dependent leader selection + a target function T with scalar coefficients can be formalized as $$T=2^lk\phi(\Sigma)=2^l(\frac{1}{v_{max}})\Sigma$$ let's assume $v_{max}=2^v$, then: $$T=2^lk\phi(\Sigma)=2^{l-v}\Sigma$$ then the lead statement is - $$y<2^{l-v}\Sigma$$ for example for a group order or l=24 bits, and maximum value of $v_{max}=2^{10}$, then lead statement: + $$y<2^{l-v}\Sigma$$ for example for a group order or l= 24 bits, and maximum value of $v_{max}=2^{10}$, then lead statement: $$y<2^{14}\Sigma$$ -### pairing leader selection independent aggregation function -TODO +##### competing max value coins + +for a stakeholder with $nv_{max}$ absolute stake, $\mid n \in \mathbb{Z}$ it's advantageous for the stakeholder to +distribute stakes on $n$ competing coins. + + +#### inverse functions + +inverse lead selection functions doesn't require maximum stake, most suitable for absolute stake, +it has the disadvantage that it's inflating with increasing rate as time goes on , but it can be function of the inverse of the slot +to control the increasing frequency of winning leadership. + +##### leader selection without maximum stake upper limit + +the inverse leader selection without maximum stake value can be $\phi(v)=\frac{v}{v+c}$ where c is $ > 1$ +and inversely proportional with probability of winning leadership, let it be called leadership coefficient. + + +##### decaying linear leader selection + +as the time goes one, and stakes increase, this means the combined stakes of all stakeholders increases the probability +of winning leadership in next slots leading to more leaders at a single slot, to maintain, or to be more general to control this frequency of leaders per slot, +c (the leadership coefficient) need to be function of the slot $sl$, i.e $c(sl) = \frac{sl}{R}$ where $R$ is epoch size (number of slots in epoch). + +##### pairing leader selection independent aggregation function + +the only family of functions that are isomorphic to summation on multiplication (having the independent aggregation property) is the exponential function, +and since it's impossible to implement in plonk, + +###### TODO (proof) + +a re-formalization of the lead statement using pairing that is isomorphic to summation on multiplication is also an options. + ## Leaky non-resettable beacon diff --git a/doc/src/architecture/blockchain.pdf b/doc/src/architecture/blockchain.pdf index 92f07900cc3660f15907903182a73f6bb81d8ffe..639bd6efc8d5a6dcb24e7cd1a7a3d06a4fbe1abb 100644 GIT binary patch delta 117731 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

f;xgQjpM~IK(ixA;ZlukA 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ç`s3Q1{r`Lm^Xn6$tMFe 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 Sg2i=FI!N%LLuR(-;J*Q&34jCu delta 113656 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 Date: Fri, 22 Apr 2022 01:49:14 +0300 Subject: [PATCH 10/10] validatod: misc fixes and cleanups --- script/research/validatord/src/main.rs | 64 ++++++++++------ .../research/validatord/src/protocols/mod.rs | 4 +- .../src/protocols/protocol_participant.rs | 10 +-- .../validatord/src/protocols/protocol_sync.rs | 16 ++-- .../src/protocols/protocol_sync_consensus.rs | 72 ++++++++++++++++++ .../src/protocols/protocol_sync_forks.rs | 73 ------------------- src/consensus/blockchain.rs | 28 +------ src/consensus/state.rs | 68 ++++++++++++----- 8 files changed, 178 insertions(+), 157 deletions(-) create mode 100644 script/research/validatord/src/protocols/protocol_sync_consensus.rs delete mode 100644 script/research/validatord/src/protocols/protocol_sync_forks.rs diff --git a/script/research/validatord/src/main.rs b/script/research/validatord/src/main.rs index 3249919bf..a13d4c84f 100644 --- a/script/research/validatord/src/main.rs +++ b/script/research/validatord/src/main.rs @@ -1,4 +1,4 @@ -use std::{net::SocketAddr, path::PathBuf, sync::Arc, thread}; +use std::{net::SocketAddr, path::PathBuf, sync::Arc, thread, time::Duration}; use async_executor::Executor; use async_trait::async_trait; @@ -13,9 +13,8 @@ use structopt_toml::StructOptToml; use darkfi::{ consensus::{ block::{BlockOrder, BlockResponse}, - blockchain::{ForkOrder, ForkResponse}, participant::Participant, - state::{ValidatorState, ValidatorStatePtr}, + state::{ConsensusRequest, ConsensusResponse, ValidatorState, ValidatorStatePtr}, tx::Tx, }, net, @@ -38,8 +37,8 @@ use darkfi::{ use validatord::protocols::{ protocol_participant::ProtocolParticipant, protocol_proposal::ProtocolProposal, - protocol_sync::ProtocolSync, protocol_sync_forks::ProtocolSyncForks, protocol_tx::ProtocolTx, - protocol_vote::ProtocolVote, + protocol_sync::ProtocolSync, protocol_sync_consensus::ProtocolSyncConsensus, + protocol_tx::ProtocolTx, protocol_vote::ProtocolVote, }; const CONFIG_FILE: &str = r"validatord_config.toml"; @@ -152,28 +151,28 @@ async fn syncing_task(p2p: net::P2pPtr, state: ValidatorStatePtr) -> Result<()> Ok(()) } -async fn syncing_forks_task(p2p: net::P2pPtr, state: ValidatorStatePtr) -> Result<()> { - info!("Node starts syncing forks..."); +async fn syncing_consensus_task(p2p: net::P2pPtr, state: ValidatorStatePtr) -> Result<()> { + info!("Node starts syncing consensus state..."); // Using len here because is_empty() uses unstable library feature 'exact_size_is_empty' if p2p.channels().lock().await.values().len() != 0 { - // Nodes ask for the fork chains of the last channel peer + // Nodes ask for the consensus state of the last channel peer let channel = p2p.channels().lock().await.values().last().unwrap().clone(); // Communication setup let message_subsytem = channel.get_message_subsystem(); - message_subsytem.add_dispatch::().await; + message_subsytem.add_dispatch::().await; let response_sub = channel - .subscribe_msg::() + .subscribe_msg::() .await - .expect("Missing ForkResponse dispatcher!"); + .expect("Missing ConsensusResponse dispatcher!"); - // Node creates a BlockOrder and sends it - let order = ForkOrder { id: state.read().unwrap().id }; - channel.send(order).await?; + // Node creates a ConsensusRequest and sends it + let request = ConsensusRequest { id: state.read().unwrap().id }; + channel.send(request).await?; // Node stores responce data. Extra validations can be added here. let response = response_sub.receive().await?; - state.write().unwrap().consensus.proposals = response.proposals.clone(); + state.write().unwrap().consensus = response.consensus.clone(); } else { info!("Node is not connected to other nodes, resetting consensus state."); state.write().unwrap().reset_consensus_state()?; @@ -184,28 +183,47 @@ async fn syncing_forks_task(p2p: net::P2pPtr, state: ValidatorStatePtr) -> Resul } async fn proposal_task(p2p: net::P2pPtr, state: ValidatorStatePtr) { - // Node syncs its fork chains - let result = syncing_forks_task(p2p.clone(), state.clone()).await; + // Node waits just before the current or next epoch end, + // so it can start syncing latest state. + let mut seconds_until_next_epoch = state.read().unwrap().next_epoch_start(); + let one_sec = Duration::new(1, 0); + loop { + if seconds_until_next_epoch > one_sec { + seconds_until_next_epoch = seconds_until_next_epoch - one_sec; + break + } + info!("Waiting for next epoch({:?} sec)...", seconds_until_next_epoch); + thread::sleep(seconds_until_next_epoch); + seconds_until_next_epoch = state.read().unwrap().next_epoch_start(); + } + info!("Waiting for next epoch({:?} sec)...", seconds_until_next_epoch); + thread::sleep(seconds_until_next_epoch); + + // Node syncs its consensus state + let result = syncing_consensus_task(p2p.clone(), state.clone()).await; match result { Ok(()) => (), - Err(e) => error!("Sync forks failed. Error: {:?}", e), + Err(e) => error!("Sync consensus state failed. Error: {:?}", e), } - // Node signals the network that it starts participating + // Node signals the network that it will start participating let participant = Participant::new(state.read().unwrap().id, state.read().unwrap().current_epoch()); state.write().unwrap().append_participant(participant.clone()); - let result = p2p.broadcast(participant).await; + let result = p2p.broadcast(participant.clone()).await; match result { Ok(()) => info!("Participation message broadcasted successfuly."), Err(e) => error!("Broadcast failed. Error: {:?}", e), } - // After initialization node should wait for next epoch + // After initialization node waits for next epoch to start participating let seconds_until_next_epoch = state.read().unwrap().next_epoch_start(); info!("Waiting for next epoch({:?} sec)...", seconds_until_next_epoch); thread::sleep(seconds_until_next_epoch); + // Node modifies its participating flag to true + state.write().unwrap().participating = true; + loop { // Node refreshes participants records state.write().unwrap().refresh_participants(); @@ -268,7 +286,7 @@ async fn proposal_task(p2p: net::P2pPtr, state: ValidatorStatePtr) { } }; - // Node waits untile next epoch + // Node waits until next epoch let seconds_until_next_epoch = state.read().unwrap().next_epoch_start(); info!("Waiting for next epoch({:?} sec)...", seconds_until_next_epoch); thread::sleep(seconds_until_next_epoch); @@ -399,7 +417,7 @@ async fn start(executor: Arc>, opts: &Opt) -> Result<()> { registry .register(net::SESSION_ALL, move |channel, _consensus_p2p| { let state = state2.clone(); - async move { ProtocolSyncForks::init(channel, state).await } + async move { ProtocolSyncConsensus::init(channel, state).await } }) .await; diff --git a/script/research/validatord/src/protocols/mod.rs b/script/research/validatord/src/protocols/mod.rs index 64243e37e..b71c14ced 100644 --- a/script/research/validatord/src/protocols/mod.rs +++ b/script/research/validatord/src/protocols/mod.rs @@ -1,13 +1,13 @@ pub mod protocol_participant; pub mod protocol_proposal; pub mod protocol_sync; -pub mod protocol_sync_forks; +pub mod protocol_sync_consensus; pub mod protocol_tx; pub mod protocol_vote; pub use protocol_participant::ProtocolParticipant; pub use protocol_proposal::ProtocolProposal; pub use protocol_sync::ProtocolSync; -pub use protocol_sync_forks::ProtocolSyncForks; +pub use protocol_sync_consensus::ProtocolSyncConsensus; pub use protocol_tx::ProtocolTx; pub use protocol_vote::ProtocolVote; diff --git a/script/research/validatord/src/protocols/protocol_participant.rs b/script/research/validatord/src/protocols/protocol_participant.rs index a31eea238..1d7adfd1b 100644 --- a/script/research/validatord/src/protocols/protocol_participant.rs +++ b/script/research/validatord/src/protocols/protocol_participant.rs @@ -49,12 +49,10 @@ impl ProtocolParticipant { "ProtocolParticipant::handle_receive_participant() received {:?}", participant ); - if self.state.write().unwrap().append_participant((*participant).clone()) { - let pending_participants = - self.state.read().unwrap().consensus.pending_participants.clone(); - for pending_participant in pending_participants { - self.p2p.broadcast(pending_participant.clone()).await?; - } + + let participant_copy = (*participant).clone(); + if self.state.write().unwrap().append_participant(participant_copy.clone()) { + self.p2p.broadcast(participant_copy).await?; } } } diff --git a/script/research/validatord/src/protocols/protocol_sync.rs b/script/research/validatord/src/protocols/protocol_sync.rs index c80d69cfc..137a341ac 100644 --- a/script/research/validatord/src/protocols/protocol_sync.rs +++ b/script/research/validatord/src/protocols/protocol_sync.rs @@ -20,7 +20,7 @@ const BATCH: u64 = 10; pub struct ProtocolSync { channel: ChannelPtr, - order_sub: MessageSubscription, + request_sub: MessageSubscription, block_sub: MessageSubscription, jobsman: ProtocolJobsManagerPtr, state: ValidatorStatePtr, @@ -39,14 +39,14 @@ impl ProtocolSync { message_subsytem.add_dispatch::().await; message_subsytem.add_dispatch::().await; - let order_sub = + let request_sub = channel.subscribe_msg::().await.expect("Missing BlockOrder dispatcher!"); let block_sub = channel.subscribe_msg::().await.expect("Missing BlockInfo dispatcher!"); Arc::new(Self { channel: channel.clone(), - order_sub, + request_sub, block_sub, jobsman: ProtocolJobsManager::new("SyncProtocol", channel), state, @@ -55,14 +55,14 @@ impl ProtocolSync { }) } - async fn handle_receive_order(self: Arc) -> Result<()> { - debug!(target: "ircd", "ProtocolSync::handle_receive_tx() [START]"); + async fn handle_receive_request(self: Arc) -> Result<()> { + debug!(target: "ircd", "ProtocolSync::handle_receive_request() [START]"); loop { - let order = self.order_sub.receive().await?; + let order = self.request_sub.receive().await?; debug!( target: "ircd", - "ProtocolSync::handle_receive_order() received {:?}", + "ProtocolSync::handle_receive_request() received {:?}", order ); @@ -107,7 +107,7 @@ impl ProtocolBase for ProtocolSync { async fn start(self: Arc, executor: Arc>) -> Result<()> { debug!(target: "ircd", "ProtocolSync::start() [START]"); self.jobsman.clone().start(executor.clone()); - self.jobsman.clone().spawn(self.clone().handle_receive_order(), executor.clone()).await; + self.jobsman.clone().spawn(self.clone().handle_receive_request(), executor.clone()).await; self.jobsman.clone().spawn(self.clone().handle_receive_block(), executor.clone()).await; debug!(target: "ircd", "ProtocolSync::start() [END]"); Ok(()) diff --git a/script/research/validatord/src/protocols/protocol_sync_consensus.rs b/script/research/validatord/src/protocols/protocol_sync_consensus.rs new file mode 100644 index 000000000..d062c6e55 --- /dev/null +++ b/script/research/validatord/src/protocols/protocol_sync_consensus.rs @@ -0,0 +1,72 @@ +use async_executor::Executor; +use async_trait::async_trait; + +use darkfi::{ + consensus::state::{ConsensusRequest, ConsensusResponse, ValidatorStatePtr}, + net::{ + ChannelPtr, MessageSubscription, ProtocolBase, ProtocolBasePtr, ProtocolJobsManager, + ProtocolJobsManagerPtr, + }, + Result, +}; +use log::debug; +use std::sync::Arc; + +pub struct ProtocolSyncConsensus { + channel: ChannelPtr, + request_sub: MessageSubscription, + jobsman: ProtocolJobsManagerPtr, + state: ValidatorStatePtr, +} + +impl ProtocolSyncConsensus { + pub async fn init(channel: ChannelPtr, state: ValidatorStatePtr) -> ProtocolBasePtr { + let message_subsytem = channel.get_message_subsystem(); + message_subsytem.add_dispatch::().await; + + let request_sub = channel + .subscribe_msg::() + .await + .expect("Missing ConsensusRequest dispatcher!"); + + Arc::new(Self { + channel: channel.clone(), + request_sub, + jobsman: ProtocolJobsManager::new("SyncConsensusProtocol", channel), + state, + }) + } + + async fn handle_receive_request(self: Arc) -> Result<()> { + debug!(target: "ircd", "ProtocolSyncConsensus::handle_receive_request() [START]"); + loop { + let order = self.request_sub.receive().await?; + + debug!( + target: "ircd", + "ProtocolSyncConsensus::handle_receive_request() received {:?}", + order + ); + + // Extra validations can be added here. + let consensus = self.state.read().unwrap().consensus.clone(); + let response = ConsensusResponse { consensus }; + self.channel.send(response).await?; + } + } +} + +#[async_trait] +impl ProtocolBase for ProtocolSyncConsensus { + async fn start(self: Arc, executor: Arc>) -> Result<()> { + debug!(target: "ircd", "ProtocolSyncConsensus::start() [START]"); + self.jobsman.clone().start(executor.clone()); + self.jobsman.clone().spawn(self.clone().handle_receive_request(), executor.clone()).await; + debug!(target: "ircd", "ProtocolSyncConsensus::start() [END]"); + Ok(()) + } + + fn name(&self) -> &'static str { + "ProtocolSyncConsensus" + } +} diff --git a/script/research/validatord/src/protocols/protocol_sync_forks.rs b/script/research/validatord/src/protocols/protocol_sync_forks.rs deleted file mode 100644 index 0529e6e17..000000000 --- a/script/research/validatord/src/protocols/protocol_sync_forks.rs +++ /dev/null @@ -1,73 +0,0 @@ -use async_executor::Executor; -use async_trait::async_trait; - -use darkfi::{ - consensus::{ - blockchain::{ForkOrder, ForkResponse}, - state::ValidatorStatePtr, - }, - net::{ - ChannelPtr, MessageSubscription, ProtocolBase, ProtocolBasePtr, ProtocolJobsManager, - ProtocolJobsManagerPtr, - }, - Result, -}; -use log::debug; -use std::sync::Arc; - -pub struct ProtocolSyncForks { - channel: ChannelPtr, - order_sub: MessageSubscription, - jobsman: ProtocolJobsManagerPtr, - state: ValidatorStatePtr, -} - -impl ProtocolSyncForks { - pub async fn init(channel: ChannelPtr, state: ValidatorStatePtr) -> ProtocolBasePtr { - let message_subsytem = channel.get_message_subsystem(); - message_subsytem.add_dispatch::().await; - - let order_sub = - channel.subscribe_msg::().await.expect("Missing ForkOrder dispatcher!"); - - Arc::new(Self { - channel: channel.clone(), - order_sub, - jobsman: ProtocolJobsManager::new("SyncForkProtocol", channel), - state, - }) - } - - async fn handle_receive_order(self: Arc) -> Result<()> { - debug!(target: "ircd", "ProtocolSyncForks::handle_receive_tx() [START]"); - loop { - let order = self.order_sub.receive().await?; - - debug!( - target: "ircd", - "ProtocolSyncForks::handle_receive_order() received {:?}", - order - ); - - // Extra validations can be added here. - let proposals = self.state.read().unwrap().consensus.proposals.clone(); - let response = ForkResponse { proposals }; - self.channel.send(response).await?; - } - } -} - -#[async_trait] -impl ProtocolBase for ProtocolSyncForks { - async fn start(self: Arc, executor: Arc>) -> Result<()> { - debug!(target: "ircd", "ProtocolSyncForks::start() [START]"); - self.jobsman.clone().start(executor.clone()); - self.jobsman.clone().spawn(self.clone().handle_receive_order(), executor.clone()).await; - debug!(target: "ircd", "ProtocolSyncForks::start() [END]"); - Ok(()) - } - - fn name(&self) -> &'static str { - "ProtocolSyncForks" - } -} diff --git a/src/consensus/blockchain.rs b/src/consensus/blockchain.rs index 295e8b2bc..06c1a9a1e 100644 --- a/src/consensus/blockchain.rs +++ b/src/consensus/blockchain.rs @@ -3,7 +3,7 @@ use std::io; use log::debug; use crate::{ - impl_vec, net, + impl_vec, util::serial::{Decodable, Encodable, SerialDecodable, SerialEncodable, VarInt}, Result, }; @@ -201,29 +201,3 @@ impl ProposalsChain { } impl_vec!(ProposalsChain); - -/// Auxilary structure used for forks syncing. -#[derive(Debug, SerialEncodable, SerialDecodable)] -pub struct ForkOrder { - /// Validator id - pub id: u64, -} - -impl net::Message for ForkOrder { - fn name() -> &'static str { - "forkorder" - } -} - -/// Auxilary structure used for forks syncing. -#[derive(Debug, Clone, SerialEncodable, SerialDecodable)] -pub struct ForkResponse { - /// Fork chains containing block proposals - pub proposals: Vec, -} - -impl net::Message for ForkResponse { - fn name() -> &'static str { - "forkresponse" - } -} diff --git a/src/consensus/state.rs b/src/consensus/state.rs index 1f84d9e4d..d4d363546 100644 --- a/src/consensus/state.rs +++ b/src/consensus/state.rs @@ -14,6 +14,7 @@ use crate::{ keypair::{PublicKey, SecretKey}, schnorr::{SchnorrPublic, SchnorrSecret}, }, + net, util::serial::{deserialize, serialize, Encodable, SerialDecodable, SerialEncodable}, Error, Result, }; @@ -28,11 +29,11 @@ use super::{ vote::Vote, }; -const DELTA: u64 = 60; +pub const DELTA: u64 = 10; const SLED_CONSESUS_STATE_TREE: &[u8] = b"_consensus_state"; /// This struct represents the information required by the consensus algorithm. -#[derive(Debug, SerialEncodable, SerialDecodable)] +#[derive(Debug, Clone, SerialEncodable, SerialDecodable)] pub struct ConsensusState { /// Genesis block creation timestamp pub genesis: Timestamp, @@ -67,6 +68,32 @@ impl ConsensusState { } } +/// Auxilary structure used for consensus syncing. +#[derive(Debug, SerialEncodable, SerialDecodable)] +pub struct ConsensusRequest { + /// Validator id + pub id: u64, +} + +impl net::Message for ConsensusRequest { + fn name() -> &'static str { + "consensusrequest" + } +} + +/// Auxilary structure used for consensus syncing. +#[derive(Debug, Clone, SerialEncodable, SerialDecodable)] +pub struct ConsensusResponse { + /// Hot/live data used by the consensus algorithm + pub consensus: ConsensusState, +} + +impl net::Message for ConsensusResponse { + fn name() -> &'static str { + "consensusresponse" + } +} + /// Atomic pointer to validator state. pub type ValidatorStatePtr = Arc>; @@ -88,6 +115,8 @@ pub struct ValidatorState { pub unconfirmed_txs: Vec, /// Genesis block hash, used for validations pub genesis_block: blake3::Hash, + /// Participation flag + pub participating: bool, } impl ValidatorState { @@ -100,6 +129,7 @@ impl ValidatorState { let blockchain = Blockchain::new(&db, genesis)?; let unconfirmed_txs = Vec::new(); let genesis_block = blake3::hash(&serialize(&Block::genesis_block(genesis))); + let participating = false; Ok(Arc::new(RwLock::new(ValidatorState { id, secret, @@ -109,6 +139,7 @@ impl ValidatorState { blockchain, unconfirmed_txs, genesis_block, + participating, }))) } @@ -148,7 +179,6 @@ impl ValidatorState { let epoch = self.current_epoch(); let mut hasher = DefaultHasher::new(); epoch.hash(&mut hasher); - self.zero_participants_check(); let pos = hasher.finish() % (self.consensus.participants.len() as u64); self.consensus.participants.iter().nth(pos as usize).unwrap().1.id } @@ -241,6 +271,11 @@ impl ValidatorState { /// Node receives the proposed block, verifies its sender(epoch leader), /// and proceeds with voting on it. pub fn receive_proposal(&mut self, proposal: &BlockProposal) -> Result> { + // Node hasn't started participating + if !self.participating { + return Ok(None) + } + let leader = self.epoch_leader(); if leader != proposal.id { debug!( @@ -269,7 +304,6 @@ impl ValidatorState { /// If proposal extends the canonical blockchain, a new fork chain is created. /// Node votes on the proposal, only if it extends the longest notarized fork chain it has seen. pub fn vote(&mut self, proposal: &BlockProposal) -> Result> { - self.zero_participants_check(); let mut proposal = proposal.clone(); // Generate proposal hash @@ -331,7 +365,7 @@ impl ValidatorState { } /// Given a proposal, node finds the index of the chain it extends. - pub fn find_extended_chain_index(&self, proposal: &BlockProposal) -> Result { + pub fn find_extended_chain_index(&mut self, proposal: &BlockProposal) -> Result { for (index, chain) in self.consensus.proposals.iter().enumerate() { let last = chain.proposals.last().unwrap(); let hash = last.hash(); @@ -363,6 +397,11 @@ impl ValidatorState { /// Finally, we check if the notarization of the proposal can finalize parent proposals /// in its chain. pub fn receive_vote(&mut self, vote: &Vote) -> Result<(bool, Option>)> { + // Node hasn't started participating + if !self.participating { + return Ok((false, None)) + } + let mut encoded_proposal = vec![]; let result = vote.proposal.encode(&mut encoded_proposal); match result { @@ -379,8 +418,6 @@ impl ValidatorState { } let nodes_count = self.consensus.participants.len(); - self.zero_participants_check(); - // Checking that the voter can actually vote. match self.consensus.participants.get(&vote.id) { Some(participant) => { @@ -538,17 +575,6 @@ impl ValidatorState { true } - /// This prevent the extreme case scenario where network is initialized, but some nodes - /// have not pushed the initial participants in the map. - pub fn zero_participants_check(&mut self) { - if self.consensus.participants.len() == 0 { - for participant in &self.consensus.pending_participants { - self.consensus.participants.insert(participant.id, participant.clone()); - } - self.consensus.pending_participants = Vec::new(); - } - } - /// Node refreshes participants map, to retain only the active ones. /// Active nodes are considered those who joined or voted on previous epoch. pub fn refresh_participants(&mut self) { @@ -577,6 +603,12 @@ impl ValidatorState { for index in inactive { self.consensus.participants.remove(&index); } + + if self.consensus.participants.is_empty() { + // If no nodes are active, node becomes a single node network. + let participant = Participant::new(self.id, self.current_epoch()); + self.consensus.pending_participants.push(participant); + } } /// Util function to save the current consensus state to provided file path.