Struct commonware_p2p::Config
source · pub struct Config<C: Scheme> {Show 20 fields
pub crypto: C,
pub registry: Arc<Mutex<Registry>>,
pub address: SocketAddr,
pub bootstrappers: Vec<Bootstrapper>,
pub allow_private_ips: bool,
pub mailbox_size: usize,
pub max_frame_length: usize,
pub handshake_timeout: Duration,
pub read_timeout: Duration,
pub write_timeout: Duration,
pub tcp_nodelay: Option<bool>,
pub allowed_connection_rate_per_peer: Quota,
pub allowed_incoming_connection_rate: Quota,
pub dial_frequency: Duration,
pub dial_rate: Quota,
pub tracked_peer_sets: usize,
pub gossip_bit_vec_frequency: Duration,
pub allowed_bit_vec_rate: Quota,
pub peer_gossip_max_count: usize,
pub allowed_peers_rate: Quota,
}Expand description
Configuration for the peer-to-peer instance.
§Warning
It is recommended to synchronize this configuration across peers in the network (with the
exection of crypto, registry, address, bootstrappers, allow_private_ips, and mailbox_size).
If this is not sycnhronized, connections could be unnecessarily dropped, messages could be parsed incorrectly,
and/or peers will rate limit each other during normal operation.
Fields§
§crypto: CCryptographic primitives.
registry: Arc<Mutex<Registry>>Registry for prometheus metrics.
address: SocketAddrDialable address of the peer.
bootstrappers: Vec<Bootstrapper>Peers dialed on startup.
allow_private_ips: boolWhether or not to allow connections with private IP addresses.
mailbox_size: usizeMessage backlog allowed for internal actors.
When there are more messages in the mailbox than this value, any actor sending a message will be blocked until the mailbox is processed.
max_frame_length: usizeMaximum size used for all messages sent over the wire.
We use this to prevent malicious peers from sending us large messages that would consume all of our memory.
If a message is larger than this size, it will be chunked into parts of this size or smaller.
If this value is not synchronized across all connected peers, chunks will be parsed incorrectly (any non-terminal chunk must be of ~this size).
handshake_timeout: DurationDuration after which to close the connection if the handshake is not completed.
read_timeout: DurationDuration after which to close the connection if no message is read.
write_timeout: DurationDuration after which to close the connection if a message cannot be written.
tcp_nodelay: Option<bool>Whether or not to disable Nagle’s algorithm.
The algorithm combines a series of small network packets into a single packet before sending to reduce overhead of sending multiple small packets which might not be efficient on slow, congested networks. However, to do so the algorithm introduces a slight delay as it waits to accumulate more data. Latency-sensitive networks should consider disabling it to send the packets as soon as possible to reduce latency.
Note: Make sure that your compile target has and allows this configuration otherwise panics or unexpected behaviours are possible.
allowed_connection_rate_per_peer: QuotaQuota for connection attempts per peer (incoming or outgoing).
allowed_incoming_connection_rate: QuotaQuota for incoming connections across all peers.
dial_frequency: DurationFrequency to attempt to dial known addresses.
dial_rate: QuotaQuota for peers to dial.
tracked_peer_sets: usizeNumber of peer sets to track.
We will attempt to maintain connections to peers stored across all peer sets, not just the most recent. This allows us to continue serving requests to peers that have recently been evicted and/or to communicate with peers in a future set (if we, for example, are trying to do a reshare of a threshold key).
gossip_bit_vec_frequency: DurationFrequency we gossip about known peers.
If there is no other network activity, this message is used as a ping and should be sent more often than the read_timeout.
allowed_bit_vec_rate: QuotaQuota for bit vector messages a peer can send us.
peer_gossip_max_count: usizeMaximum number of peers we will send or consider valid when receiving in a single messsage.
This is used to prevent malicious peers from sending us a large number of peers at one time (each of which requires a signature verification).
allowed_peers_rate: QuotaQuota for peers messages a peer can send us.
Implementations§
source§impl<C: Scheme> Config<C>
impl<C: Scheme> Config<C>
sourcepub fn recommended(
crypto: C,
registry: Arc<Mutex<Registry>>,
address: SocketAddr,
bootstrappers: Vec<Bootstrapper>,
) -> Self
pub fn recommended( crypto: C, registry: Arc<Mutex<Registry>>, address: SocketAddr, bootstrappers: Vec<Bootstrapper>, ) -> Self
Generates a configuration with reasonable defaults for usage in production.
sourcepub fn aggressive(
crypto: C,
registry: Arc<Mutex<Registry>>,
address: SocketAddr,
bootstrappers: Vec<Bootstrapper>,
) -> Self
pub fn aggressive( crypto: C, registry: Arc<Mutex<Registry>>, address: SocketAddr, bootstrappers: Vec<Bootstrapper>, ) -> Self
Generates a configuration that minimizes peer discovery latency. This can be useful when running local demos.
§Warning
It is not recommended to use this configuration in production.
Trait Implementations§
Auto Trait Implementations§
impl<C> Freeze for Config<C>where
C: Freeze,
impl<C> RefUnwindSafe for Config<C>where
C: RefUnwindSafe,
impl<C> Send for Config<C>
impl<C> Sync for Config<C>
impl<C> Unpin for Config<C>where
C: Unpin,
impl<C> UnwindSafe for Config<C>where
C: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.