Struct libp2p_gossipsub::Behaviour

source ·
pub struct Behaviour<D = IdentityTransform, F = AllowAllSubscriptionFilter> { /* private fields */ }
Expand description

Network behaviour that handles the gossipsub protocol.

NOTE: Initialisation requires a MessageAuthenticity and Config instance. If message signing is disabled, the ValidationMode in the config should be adjusted to an appropriate level to accept unsigned messages.

The DataTransform trait allows applications to optionally add extra encoding/decoding functionality to the underlying messages. This is intended for custom compression algorithms.

The TopicSubscriptionFilter allows applications to implement specific filters on topics to prevent unwanted messages being propagated and evaluated.

Implementations§

source§

impl<D, F> Behaviour<D, F>

source

pub fn new( privacy: MessageAuthenticity, config: Config, ) -> Result<Self, &'static str>

Creates a Gossipsub Behaviour struct given a set of parameters specified via a Config. This has no subscription filter and uses no compression.

source

pub fn new_with_metrics( privacy: MessageAuthenticity, config: Config, metrics_registry: &mut Registry, metrics_config: MetricsConfig, ) -> Result<Self, &'static str>

Creates a Gossipsub Behaviour struct given a set of parameters specified via a Config. This has no subscription filter and uses no compression. Metrics can be evaluated by passing a reference to a Registry.

source§

impl<D, F> Behaviour<D, F>

source

pub fn new_with_subscription_filter( privacy: MessageAuthenticity, config: Config, metrics: Option<(&mut Registry, MetricsConfig)>, subscription_filter: F, ) -> Result<Self, &'static str>

Creates a Gossipsub Behaviour struct given a set of parameters specified via a Config and a custom subscription filter.

source§

impl<D, F> Behaviour<D, F>

source

pub fn new_with_transform( privacy: MessageAuthenticity, config: Config, metrics: Option<(&mut Registry, MetricsConfig)>, data_transform: D, ) -> Result<Self, &'static str>

Creates a Gossipsub Behaviour struct given a set of parameters specified via a Config and a custom data transform.

source§

impl<D, F> Behaviour<D, F>

source

pub fn new_with_subscription_filter_and_transform( privacy: MessageAuthenticity, config: Config, metrics: Option<(&mut Registry, MetricsConfig)>, subscription_filter: F, data_transform: D, ) -> Result<Self, &'static str>

Creates a Gossipsub Behaviour struct given a set of parameters specified via a Config and a custom subscription filter and data transform.

source§

impl<D, F> Behaviour<D, F>
where D: DataTransform + Send + 'static, F: TopicSubscriptionFilter + Send + 'static,

source

pub fn topics(&self) -> impl Iterator<Item = &TopicHash>

Lists the hashes of the topics we are currently subscribed to.

source

pub fn mesh_peers( &self, topic_hash: &TopicHash, ) -> impl Iterator<Item = &PeerId>

Lists all mesh peers for a certain topic hash.

source

pub fn all_mesh_peers(&self) -> impl Iterator<Item = &PeerId>

source

pub fn all_peers(&self) -> impl Iterator<Item = (&PeerId, Vec<&TopicHash>)>

Lists all known peers and their associated subscribed topics.

source

pub fn peer_protocol(&self) -> impl Iterator<Item = (&PeerId, &PeerKind)>

Lists all known peers and their associated protocol.

source

pub fn peer_score(&self, peer_id: &PeerId) -> Option<f64>

Returns the gossipsub score for a given peer, if one exists.

source

pub fn subscribe<H: Hasher>( &mut self, topic: &Topic<H>, ) -> Result<bool, SubscriptionError>

Subscribe to a topic.

Returns [Ok(true)] if the subscription worked. Returns [Ok(false)] if we were already subscribed.

source

pub fn unsubscribe<H: Hasher>( &mut self, topic: &Topic<H>, ) -> Result<bool, PublishError>

Unsubscribes from a topic.

Returns [Ok(true)] if we were subscribed to this topic.

source

pub fn publish( &mut self, topic: impl Into<TopicHash>, data: impl Into<Vec<u8>>, ) -> Result<MessageId, PublishError>

Publishes a message with multiple topics to the network.

source

pub fn report_message_validation_result( &mut self, msg_id: &MessageId, propagation_source: &PeerId, acceptance: MessageAcceptance, ) -> Result<bool, PublishError>

This function should be called when Config::validate_messages() is true after the message got validated by the caller. Messages are stored in the [‘Memcache’] and validation is expected to be fast enough that the messages should still exist in the cache. There are three possible validation outcomes and the outcome is given in acceptance.

If acceptance = MessageAcceptance::Accept the message will get propagated to the network. The propagation_source parameter indicates who the message was received by and will not be forwarded back to that peer.

If acceptance = MessageAcceptance::Reject the message will be deleted from the memcache and the P₄ penalty will be applied to the propagation_source. If acceptance = MessageAcceptance::Ignore the message will be deleted from the memcache but no P₄ penalty will be applied.

This function will return true if the message was found in the cache and false if was not in the cache anymore.

This should only be called once per message.

source

pub fn add_explicit_peer(&mut self, peer_id: &PeerId)

Adds a new peer to the list of explicitly connected peers.

source

pub fn remove_explicit_peer(&mut self, peer_id: &PeerId)

This removes the peer from explicitly connected peers, note that this does not disconnect the peer.

source

pub fn blacklist_peer(&mut self, peer_id: &PeerId)

Blacklists a peer. All messages from this peer will be rejected and any message that was created by this peer will be rejected.

source

pub fn remove_blacklisted_peer(&mut self, peer_id: &PeerId)

Removes a peer from the blacklist if it has previously been blacklisted.

source

pub fn with_peer_score( &mut self, params: PeerScoreParams, threshold: PeerScoreThresholds, ) -> Result<(), String>

Activates the peer scoring system with the given parameters. This will reset all scores if there was already another peer scoring system activated. Returns an error if the params are not valid or if they got already set.

source

pub fn with_peer_score_and_message_delivery_time_callback( &mut self, params: PeerScoreParams, threshold: PeerScoreThresholds, callback: Option<fn(_: &PeerId, _: &TopicHash, _: f64)>, ) -> Result<(), String>

Activates the peer scoring system with the given parameters and a message delivery time callback. Returns an error if the parameters got already set.

source

pub fn set_topic_params<H: Hasher>( &mut self, topic: Topic<H>, params: TopicScoreParams, ) -> Result<(), &'static str>

Sets scoring parameters for a topic.

The Self::with_peer_score() must first be called to initialise peer scoring.

source

pub fn get_topic_params<H: Hasher>( &self, topic: &Topic<H>, ) -> Option<&TopicScoreParams>

Returns a scoring parameters for a topic if existent.

source

pub fn set_application_score( &mut self, peer_id: &PeerId, new_score: f64, ) -> bool

Sets the application specific score for a peer. Returns true if scoring is active and the peer is connected or if the score of the peer is not yet expired, false otherwise.

Trait Implementations§

source§

impl<C: DataTransform, F: TopicSubscriptionFilter> Debug for Behaviour<C, F>

source§

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

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

impl<C, F> NetworkBehaviour for Behaviour<C, F>
where C: Send + 'static + DataTransform, F: Send + 'static + TopicSubscriptionFilter,

§

type ConnectionHandler = Handler

Handler for all the protocols the network behaviour supports.
§

type ToSwarm = Event

Event generated by the NetworkBehaviour and that the swarm will report back.
source§

fn handle_established_inbound_connection( &mut self, _: ConnectionId, _: PeerId, _: &Multiaddr, _: &Multiaddr, ) -> Result<THandler<Self>, ConnectionDenied>

Callback that is invoked for every established inbound connection. Read more
source§

fn handle_established_outbound_connection( &mut self, _: ConnectionId, _: PeerId, _: &Multiaddr, _: Endpoint, _: PortUse, ) -> Result<THandler<Self>, ConnectionDenied>

Callback that is invoked for every established outbound connection. Read more
source§

fn on_connection_handler_event( &mut self, propagation_source: PeerId, _connection_id: ConnectionId, handler_event: THandlerOutEvent<Self>, )

Informs the behaviour about an event generated by the ConnectionHandler dedicated to the peer identified by peer_id. for the behaviour. Read more
source§

fn poll( &mut self, cx: &mut Context<'_>, ) -> Poll<ToSwarm<Self::ToSwarm, THandlerInEvent<Self>>>

Polls for things that swarm should do. Read more
source§

fn on_swarm_event(&mut self, event: FromSwarm<'_>)

Informs the behaviour about an event from the Swarm.
source§

fn handle_pending_inbound_connection( &mut self, _connection_id: ConnectionId, _local_addr: &Multiaddr, _remote_addr: &Multiaddr, ) -> Result<(), ConnectionDenied>

Callback that is invoked for every new inbound connection. Read more
source§

fn handle_pending_outbound_connection( &mut self, _connection_id: ConnectionId, _maybe_peer: Option<PeerId>, _addresses: &[Multiaddr], _effective_role: Endpoint, ) -> Result<Vec<Multiaddr>, ConnectionDenied>

Callback that is invoked for every outbound connection attempt. Read more

Auto Trait Implementations§

§

impl<D, F> Freeze for Behaviour<D, F>
where F: Freeze, D: Freeze,

§

impl<D = IdentityTransform, F = AllowAllSubscriptionFilter> !RefUnwindSafe for Behaviour<D, F>

§

impl<D, F> Send for Behaviour<D, F>
where F: Send, D: Send,

§

impl<D, F> Sync for Behaviour<D, F>
where F: Sync, D: Sync,

§

impl<D, F> Unpin for Behaviour<D, F>
where F: Unpin, D: Unpin,

§

impl<D = IdentityTransform, F = AllowAllSubscriptionFilter> !UnwindSafe for Behaviour<D, F>

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> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
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> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .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
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

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

§

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>,

§

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