pub struct Config<C: Signer> {Show 20 fields
pub crypto: C,
pub namespace: Vec<u8>,
pub listen: SocketAddr,
pub allow_private_ips: bool,
pub allow_dns: bool,
pub bypass_ip_check: bool,
pub max_message_size: u32,
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 max_concurrent_handshakes: NonZeroU32,
pub allowed_handshake_rate_per_ip: Quota,
pub allowed_handshake_rate_per_subnet: Quota,
pub ping_frequency: Duration,
pub dial_frequency: Duration,
pub query_frequency: Duration,
pub tracked_peer_sets: usize,
pub block_duration: Duration,
}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, listen, 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.
allow_private_ips: boolWhether or not to allow connections with private IP addresses.
allow_dns: boolWhether or not to allow DNS-based ingress addresses.
When dialing a DNS-based address, the hostname is resolved and a random IP is selected from the results (shuffled for each dial attempt).
bypass_ip_check: boolWhether or not to skip IP verification for incoming connections (allows known peers to connect from unknown IPs).
max_message_size: u32Maximum 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).
max_concurrent_handshakes: NonZeroU32Maximum number of concurrent handshake attempts allowed.
allowed_handshake_rate_per_ip: QuotaQuota for handshake attempts originating from a single IP address.
To cap the number of handshakes concurrently attempted for a single IP, set this to Config::handshake_timeout.
allowed_handshake_rate_per_subnet: QuotaQuota for handshake attempts originating from a single IP subnet.
ping_frequency: DurationFrequency at which we send ping messages to peers.
This also determines the rate limit for incoming ping messages (one per half this frequency to account for jitter).
dial_frequency: DurationAverage frequency at which we make a single dial attempt across all peers.
query_frequency: DurationAverage frequency at which we will fetch a new list of dialable peers.
This value also limits the rate at which we attempt to re-dial any single peer.
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).
block_duration: DurationDuration after which a blocked peer is allowed to reconnect.
Implementations§
Source§impl<C: Signer> Config<C>
impl<C: Signer> Config<C>
Sourcepub fn recommended(
crypto: C,
namespace: &[u8],
listen: SocketAddr,
max_message_size: u32,
) -> Self
pub fn recommended( crypto: C, namespace: &[u8], listen: SocketAddr, max_message_size: u32, ) -> Self
Generates a configuration with reasonable defaults for usage 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§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