Skip to main content

CoreNodeConfig

Struct CoreNodeConfig 

Source
pub struct CoreNodeConfig {
Show 16 fields pub local: bool, pub port: u16, pub ipv6: bool, pub bootstrap_peers: Vec<MultiAddr>, pub connection_timeout: Duration, pub max_connections: usize, pub dht_config: DHTConfig, pub bootstrap_cache_config: Option<BootstrapConfig>, pub diversity_config: Option<IPDiversityConfig>, pub max_message_size: Option<usize>, pub node_identity: Option<Arc<NodeIdentity>>, pub mode: NodeMode, pub custom_user_agent: Option<String>, pub allow_loopback: bool, pub adaptive_dht_config: AdaptiveDhtConfig, pub close_group_cache_dir: Option<PathBuf>,
}
Expand description

Configuration for a P2P node

Fields§

§local: bool

Bind to loopback only (127.0.0.1 / ::1).

When true, the node listens on loopback addresses suitable for local development and testing. When false (the default), the node listens on all interfaces (0.0.0.0 / ::).

§port: u16

Listen port. 0 means OS-assigned ephemeral port.

§ipv6: bool

Enable IPv6 dual-stack binding.

When true (the default), both an IPv4 and an IPv6 address are bound. When false, only IPv4 is used.

§bootstrap_peers: Vec<MultiAddr>

Bootstrap peers to connect to on startup.

§connection_timeout: Duration

Connection timeout duration

§max_connections: usize

Maximum number of concurrent connections

§dht_config: DHTConfig

DHT configuration

§bootstrap_cache_config: Option<BootstrapConfig>

Bootstrap cache configuration

§diversity_config: Option<IPDiversityConfig>

Optional IP diversity configuration for Sybil protection tuning.

When set, this configuration is used by bootstrap peer discovery and other diversity-enforcing subsystems. If None, defaults are used.

§max_message_size: Option<usize>

Optional override for the maximum application-layer message size.

When None, the underlying saorsa-transport default is used.

§node_identity: Option<Arc<NodeIdentity>>

Optional node identity for app-level message signing.

When set, outgoing messages are signed with the node’s ML-DSA-65 key and incoming signed messages are verified at the transport layer.

§mode: NodeMode

Operating mode of this node.

Determines the default user agent and DHT participation:

  • Node → user agent "node/<version>", added to DHT routing tables.
  • Client → user agent "client/<version>", treated as ephemeral.
§custom_user_agent: Option<String>

Optional custom user agent override.

When Some, this value is used instead of the mode-derived default. When None, the user agent is derived from NodeConfig::mode.

§allow_loopback: bool

Allow loopback addresses (127.0.0.1, ::1) in the transport layer.

In production, loopback addresses are rejected because they are not routable. Enable this for local devnets and testnets where all nodes run on the same machine.

Default: false

§adaptive_dht_config: AdaptiveDhtConfig

Adaptive DHT configuration (trust-based blocking and eviction).

Controls whether peers with low trust scores are evicted from the routing table and blocked from DHT operations. Use [NodeConfigBuilder::trust_enforcement] for a simple on/off toggle.

Default: enabled with a block threshold of 0.15.

§close_group_cache_dir: Option<PathBuf>

Optional path for persisting the close group cache.

Directory for persisting the close group cache.

When set, the node saves its close group peers and their trust scores to {dir}/close_group_cache.json on shutdown and after bootstrap. On startup, cached peers are loaded and contacted first, preserving close group consistency across restarts.

When None, no close group cache is used.

Implementations§

Source§

impl NodeConfig

Source

pub fn user_agent(&self) -> String

Returns the effective user agent string.

If a custom user agent was set, returns that. Otherwise, derives the user agent from the node’s NodeMode.

Source

pub fn listen_addrs(&self) -> Vec<MultiAddr>

Compute the listen addresses from the configuration fields.

The returned addresses are derived from local, port, and ipv6.

Source

pub fn new() -> Result<NodeConfig, P2PError>

Create a new NodeConfig with default values

§Errors

Returns an error if default addresses cannot be parsed

Source

pub fn builder() -> NodeConfigBuilder

Create a builder for customized NodeConfig construction

Trait Implementations§

Source§

impl Clone for NodeConfig

Source§

fn clone(&self) -> NodeConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NodeConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for NodeConfig

Source§

fn default() -> NodeConfig

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for NodeConfig

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<NodeConfig, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for NodeConfig

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<'de, T> BorrowedRpcObject<'de> for T
where T: RpcBorrow<'de> + RpcSend,

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<'de, T> RpcBorrow<'de> for T
where T: Deserialize<'de> + Debug + Send + Sync + Unpin,

Source§

impl<T> RpcObject for T
where T: RpcSend + RpcRecv,

Source§

impl<T> RpcRecv for T
where T: DeserializeOwned + Debug + Send + Sync + Unpin + 'static,

Source§

impl<T> RpcSend for T
where T: Serialize + Clone + Debug + Send + Sync + Unpin,