Add a nice comment to zebra-network.
This commit is contained in:
parent
f0bb2bff77
commit
1c6c4140ed
|
@ -1,4 +1,30 @@
|
|||
//! Networking code for Zebra. 🦓
|
||||
//!
|
||||
//! The Zcash network protocol is inherited from Bitcoin, which uses a
|
||||
//! stateful network protocol in which messages can arrive in any
|
||||
//! order (even before a handshake is complete!), and the same message
|
||||
//! may be a request or a response depending on context.
|
||||
//!
|
||||
//! This crate translates the legacy Bitcoin/Zcash network protocol
|
||||
//! into a stateless, request-response oriented protocol defined by
|
||||
//! the [`Request`] and [`Response`] enums, and completely
|
||||
//! encapsulates all peer handling code behind a single
|
||||
//! [`tower::Service`] representing "the network" which load-balances
|
||||
//! outbound [`Request`]s over available peers.
|
||||
//!
|
||||
//! Each peer connection is a distinct task, which interprets incoming
|
||||
//! Bitcoin/Zcash messages either as [`Response`]s to pending
|
||||
//! [`Request`]s, or as an inbound [`Request`]s to an internal
|
||||
//! [`tower::Service`] representing "this node". All connection state
|
||||
//! is isolated to the peer in question, so as a side effect the
|
||||
//! design is structurally immune to the recent `ping` attack.
|
||||
//!
|
||||
//! Because [`tower::Service`]s provide backpressure information, we
|
||||
//! can dynamically manage the size of the connection pool according
|
||||
//! to inbound and outbound demand. The inbound service can shed load
|
||||
//! when it is not ready for requests, causing those peer connections
|
||||
//! to close, and the outbound service can connect to additional peers
|
||||
//! when it is overloaded.
|
||||
|
||||
#![deny(missing_docs)]
|
||||
|
||||
|
|
Loading…
Reference in New Issue