pub struct Config<C: Signer> {Show 24 fields
pub crypto: C,
pub namespace: Vec<u8>,
pub listen: SocketAddr,
pub dialable: Ingress,
pub bootstrappers: Vec<Bootstrapper<C::PublicKey>>,
pub allow_dns: bool,
pub allow_private_ips: 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 dial_frequency: Duration,
pub query_frequency: Duration,
pub dial_fail_limit: usize,
pub tracked_peer_sets: usize,
pub max_peer_set_size: u64,
pub gossip_bit_vec_frequency: Duration,
pub peer_gossip_max_count: 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, 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: IngressDialable ingress address of the peer.
bootstrappers: Vec<Bootstrapper<C::PublicKey>>Peers dialed on startup.
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).
allow_private_ips: boolWhether or not to allow connections with private IP addresses.
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.
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.
dial_fail_limit: usizeTimes that dialing a given peer should fail before asking for updated peer information for that 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).
max_peer_set_size: u64Maximum 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.
This also determines the rate limit for incoming BitVec and Peers messages (one per half this frequency to account for jitter).
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).
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,
dialable: impl Into<Ingress>,
bootstrappers: Vec<Bootstrapper<C::PublicKey>>,
max_message_size: u32,
) -> Self
pub fn recommended( crypto: C, namespace: &[u8], listen: SocketAddr, dialable: impl Into<Ingress>, bootstrappers: Vec<Bootstrapper<C::PublicKey>>, max_message_size: u32, ) -> Self
Generates a configuration with reasonable defaults for usage in production.
Sourcepub fn local(
crypto: C,
namespace: &[u8],
listen: SocketAddr,
dialable: impl Into<Ingress>,
bootstrappers: Vec<Bootstrapper<C::PublicKey>>,
max_message_size: u32,
) -> Self
pub fn local( crypto: C, namespace: &[u8], listen: SocketAddr, dialable: impl Into<Ingress>, bootstrappers: Vec<Bootstrapper<C::PublicKey>>, max_message_size: u32, ) -> 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