pub struct Config<C: Scheme> {Show 21 fields
pub crypto: C,
pub namespace: Vec<u8>,
pub listen: SocketAddr,
pub dialable: SocketAddr,
pub bootstrappers: Vec<Bootstrapper<C::PublicKey>>,
pub allow_private_ips: bool,
pub max_message_size: usize,
pub mailbox_size: usize,
pub synchrony_bound: Duration,
pub max_handshake_age: Duration,
pub handshake_timeout: Duration,
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 max_peer_set_size: 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
exception of crypto, registry, listen, bootstrappers, allow_private_ips, and mailbox_size).
If this is not synchronized, 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.
namespace: Vec<u8>Prefix for all signed messages to avoid replay attacks.
listen: SocketAddrAddress to listen on.
dialable: SocketAddrDialable address of the peer.
bootstrappers: Vec<Bootstrapper<C::PublicKey>>Peers dialed on startup.
allow_private_ips: boolWhether or not to allow connections with private IP addresses.
max_message_size: usizeMaximum size allowed for messages over any connection.
The actual size of the network message will be higher due to overhead from the protocol; this may include additional metadata, data from the codec, and/or cryptographic signatures.
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.
synchrony_bound: DurationTime into the future that a timestamp can be and still be considered valid.
max_handshake_age: DurationDuration after which a handshake message is considered stale.
handshake_timeout: DurationTimeout for the handshake process.
This is often set to some value less than the connection read timeout to prevent unauthenticated peers from holding open connection.
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).
max_peer_set_size: usizeMaximum number of peers to track in a single peer set.
This is used to limit the size of the bit vec messages, which will take one bit per peer in the set. This number can be set to a reasonably high value that we never expect to reach.
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 message.
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,
namespace: &[u8],
listen: SocketAddr,
dialable: SocketAddr,
bootstrappers: Vec<Bootstrapper<C::PublicKey>>,
max_message_size: usize,
) -> Self
pub fn recommended( crypto: C, namespace: &[u8], listen: SocketAddr, dialable: SocketAddr, bootstrappers: Vec<Bootstrapper<C::PublicKey>>, max_message_size: usize, ) -> Self
Generates a configuration with reasonable defaults for usage in production.
Sourcepub fn aggressive(
crypto: C,
namespace: &[u8],
listen: SocketAddr,
dialable: SocketAddr,
bootstrappers: Vec<Bootstrapper<C::PublicKey>>,
max_message_size: usize,
) -> Self
pub fn aggressive( crypto: C, namespace: &[u8], listen: SocketAddr, dialable: SocketAddr, bootstrappers: Vec<Bootstrapper<C::PublicKey>>, max_message_size: usize, ) -> 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>
impl<C> Send for Config<C>
impl<C> Sync for Config<C>
impl<C> Unpin for Config<C>
impl<C> UnwindSafe for Config<C>
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§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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 more