libp2p-hs-0.1.0.0: Haskell implementation of the libp2p networking stack
Safe HaskellNone
LanguageGHC2021

Network.LibP2P.Protocol.GossipSub.Types

Description

GossipSub core types and parameters (docs/11-pubsub.md).

Protocol ID: meshsub1.1.0

GossipSub constructs two overlapping overlay networks per topic: a full-message mesh (eager push, degree D=6) and a metadata-only gossip layer (lazy push via IHAVE/IWANT). This module defines all wire types, configuration parameters, per-peer state, and the router state record.

Synopsis

Protocol constants

gossipSubProtocolId :: Text Source #

GossipSub v1.1 protocol identifier.

maxRPCSize :: Int Source #

Maximum RPC message size: 1 MiB.

Topic and message identity

type Topic = Text Source #

Topic identifier (opaque string).

type MessageId = ByteString Source #

Unique message identifier (typically from || seqno).

Wire types

data PubSubMessage Source #

A published message.

Constructors

PubSubMessage 

Fields

data SubOpts Source #

Subscription change announcement.

Constructors

SubOpts 

Fields

Instances

Instances details
Show SubOpts Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Eq SubOpts Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

(==) :: SubOpts -> SubOpts -> Bool #

(/=) :: SubOpts -> SubOpts -> Bool #

data ControlMessage Source #

GossipSub control message (IHAVE, IWANT, GRAFT, PRUNE).

Constructors

ControlMessage 

Fields

data IHave Source #

IHAVE: announce message IDs for a topic.

Constructors

IHave 

Fields

Instances

Instances details
Show IHave Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

showsPrec :: Int -> IHave -> ShowS #

show :: IHave -> String #

showList :: [IHave] -> ShowS #

Eq IHave Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

(==) :: IHave -> IHave -> Bool #

(/=) :: IHave -> IHave -> Bool #

data IWant Source #

IWANT: request full messages by ID.

Constructors

IWant 

Fields

Instances

Instances details
Show IWant Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

showsPrec :: Int -> IWant -> ShowS #

show :: IWant -> String #

showList :: [IWant] -> ShowS #

Eq IWant Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

(==) :: IWant -> IWant -> Bool #

(/=) :: IWant -> IWant -> Bool #

data Graft Source #

GRAFT: request mesh membership.

Constructors

Graft 

Fields

Instances

Instances details
Show Graft Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

showsPrec :: Int -> Graft -> ShowS #

show :: Graft -> String #

showList :: [Graft] -> ShowS #

Eq Graft Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

(==) :: Graft -> Graft -> Bool #

(/=) :: Graft -> Graft -> Bool #

data Prune Source #

PRUNE: remove from mesh with optional peer exchange and backoff.

Constructors

Prune 

Fields

Instances

Instances details
Show Prune Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

showsPrec :: Int -> Prune -> ShowS #

show :: Prune -> String #

showList :: [Prune] -> ShowS #

Eq Prune Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

(==) :: Prune -> Prune -> Bool #

(/=) :: Prune -> Prune -> Bool #

data PeerExchangeInfo Source #

Peer exchange info in PRUNE messages (v1.1).

Constructors

PeerExchangeInfo 

Fields

data RPC Source #

RPC wrapper containing subscriptions, published messages, and control.

Instances

Instances details
Show RPC Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

showsPrec :: Int -> RPC -> ShowS #

show :: RPC -> String #

showList :: [RPC] -> ShowS #

Eq RPC Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Methods

(==) :: RPC -> RPC -> Bool #

(/=) :: RPC -> RPC -> Bool #

Signature policy

data SignaturePolicy Source #

Signature policy for message signing/validation.

Constructors

StrictSign

All messages must be signed

StrictNoSign

No signatures allowed

Configuration

data GossipSubParams Source #

GossipSub router parameters.

Constructors

GossipSubParams 

Fields

defaultGossipSubParams :: GossipSubParams Source #

Default GossipSub parameters per spec.

Peer tracking

data PeerProtocol Source #

Peer's protocol capability.

Constructors

GossipSubPeer

Supports GossipSub (meshsub1.1.0)

FloodSubPeer

Supports FloodSub only

data PeerState Source #

Per-peer state tracked by the router.

Constructors

PeerState 

Fields

Instances

Instances details
Show PeerState Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Eq PeerState Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Scoring types

data TopicScoreParams Source #

Per-topic scoring parameters.

Constructors

TopicScoreParams 

Fields

defaultTopicScoreParams :: TopicScoreParams Source #

Default topic scoring parameters (conservative values).

data PeerScoreParams Source #

Global peer scoring parameters.

Constructors

PeerScoreParams 

Fields

defaultPeerScoreParams :: PeerScoreParams Source #

Default global scoring parameters.

data TopicPeerState Source #

Per-topic per-peer state for scoring counters.

Constructors

TopicPeerState 

Fields

defaultTopicPeerState :: TopicPeerState Source #

Default empty topic peer state.

data ScoreThresholds Source #

Score thresholds controlling router behavior.

Constructors

ScoreThresholds 

Fields

defaultScoreThresholds :: ScoreThresholds Source #

Default score thresholds.

Message cache types

data CacheEntry Source #

A cached message entry.

Instances

Instances details
Show CacheEntry Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

Eq CacheEntry Source # 
Instance details

Defined in Network.LibP2P.Protocol.GossipSub.Types

data MessageCache Source #

Sliding-window message cache.

Constructors

MessageCache 

Fields

Router state

data GossipSubRouter Source #

GossipSub router state with STM-managed concurrent state.

Constructors

GossipSubRouter 

Fields

Defaults

emptyRPC :: RPC Source #

Empty RPC with no subscriptions, messages, or control.

emptyControlMessage :: ControlMessage Source #

Empty control message with no IHAVEIWANTGRAFT/PRUNE.

defaultMessageId :: PubSubMessage -> MessageId Source #

Default message ID: concatenation of from and seqno fields.