ouroboros-network-0.10.1.0: A networking layer for the Ouroboros blockchain protocol
Safe HaskellSafe-Inferred
LanguageHaskell2010

Ouroboros.Network.PeerSelection.State.KnownPeers

Synopsis

Types

data KnownPeers peeraddr Source #

The set of known peers. To a first approximation it can be thought of as a Set of peeraddr.

It has one special feature:

  • It tracks the subset of peers that we are happy to publish in reply to peer share requests to our node. It supports random sampling from this set.

Instances

Instances details
Show peeraddr => Show (KnownPeers peeraddr) Source # 
Instance details

Defined in Ouroboros.Network.PeerSelection.State.KnownPeers

Methods

showsPrec :: Int -> KnownPeers peeraddr -> ShowS Source #

show :: KnownPeers peeraddr -> String Source #

showList :: [KnownPeers peeraddr] -> ShowS Source #

Ord peeraddr => Eq (KnownPeers peeraddr) Source # 
Instance details

Defined in Ouroboros.Network.PeerSelection.State.KnownPeers

Methods

(==) :: KnownPeers peeraddr -> KnownPeers peeraddr -> Bool Source #

(/=) :: KnownPeers peeraddr -> KnownPeers peeraddr -> Bool Source #

invariant :: Ord peeraddr => KnownPeers peeraddr -> Bool Source #

Basic container operations

empty :: KnownPeers peeraddr Source #

size :: KnownPeers peeraddr -> Int Source #

insert :: Ord peeraddr => Map peeraddr (Maybe PeerSharing, Maybe PeerAdvertise, Maybe IsLedgerPeer) -> KnownPeers peeraddr -> KnownPeers peeraddr Source #

delete :: Ord peeraddr => Set peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr Source #

toSet :: KnownPeers peeraddr -> Set peeraddr Source #

O(n)

member :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool Source #

Special operations

setCurrentTime :: Ord peeraddr => Time -> KnownPeers peeraddr -> KnownPeers peeraddr Source #

incrementFailCount :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> (Int, KnownPeers peeraddr) Source #

resetFailCount :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr Source #

lookupFailCount :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Maybe Int Source #

lookupTepidFlag :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Maybe Bool Source #

setTepidFlag :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr Source #

clearTepidFlag :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr Source #

Tracking when we can (re)connect

minConnectTime Source #

Arguments

:: Ord peeraddr 
=> KnownPeers peeraddr 
-> (peeraddr -> Bool)

a predicate which describes the peers to take into account

-> Maybe Time 

setConnectTimes :: Ord peeraddr => Map peeraddr Time -> KnownPeers peeraddr -> KnownPeers peeraddr Source #

availableToConnect :: KnownPeers peeraddr -> Set peeraddr Source #

The subset of known peers that we would be allowed to try to establish a connection to now. This is because we have not connected with them before or because any failure backoff time has expired.

Selecting peers to ask

canPeerShareRequest :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool Source #

getPeerSharingRequestPeers :: Ord peeraddr => Set peeraddr -> KnownPeers peeraddr -> Set peeraddr Source #

Filter peers available for Peer Sharing requests, according to their PeerSharing information

Selecting peers to share

canSharePeers :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool Source #

getPeerSharingResponsePeers :: KnownPeers peeraddr -> Set peeraddr Source #

Filter peers available for Peer Sharing replies, according to their PeerAdvertise information

Filtering ledger peers

isKnownLedgerPeer :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool Source #

Select a random subset of the known peers that are available to publish.

The selection is done in such a way that when the same initial PRNG state is used, the selected set does not significantly vary with small perturbations in the set of published peers.

The intention of this selection method is that the selection should give approximately the same replies to the same peers over the course of multiple requests from the same peer. This is to deliberately slow the rate at which peers can discover and map out the entire network.

Checks the KnownPeers Set for known ledger peers.

This is used in Peer Selection Governor to filter out the known-to-te ledger peers from the share result set.