haskoin-node-0.9.4: Haskoin Node P2P library for Bitcoin and Bitcoin Cash

CopyrightNo rights reserved
LicenseUNLICENSE
Maintainerxenog@protonmail.com
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

Network.Haskoin.Node.Manager.Logic

Description

Logic and data for peer manager.

Synopsis

Documentation

versionPeerDB :: Word32 Source #

Database version.

type Score = Word8 Source #

Peer score. Lower is better.

updatePeerDB :: MonadIO m => DB -> SockAddr -> Score -> Bool -> m () Source #

Update peer score and pass in database.

newPeerDB :: MonadIO m => DB -> Score -> SockAddr -> m () Source #

Add a peer to database if it is not already there.

initPeerDB :: MonadUnliftIO m => DB -> Bool -> m () Source #

Initialize peer database, purging it of conflicting records if version doesn't match current one.

purgePeerDB :: MonadUnliftIO m => DB -> m () Source #

Purge conflicting records from database.

networkSeeds :: Network -> [HostPort] Source #

Get static network seeds.

staticPeerScore :: Score Source #

Get default score for statically-defined peers.

netSeedScore :: Score Source #

Get default score for network seeds.

netPeerScore :: Score Source #

Get default score for discovered peers.

encodeSockAddr :: SockAddr -> Put Source #

Serialize a network address/port.

decodeSockAddr :: Get SockAddr Source #

Deserialize a network address/port.

getPeerDB :: MonadIO m => DB -> SockAddr -> m (Maybe PeerData) Source #

Get database entry for provided peer address.

promotePeerDB :: MonadIO m => DB -> SockAddr -> m () Source #

Promote a peer by improving its score (decreasing by one).

demotePeerDB :: MonadIO m => DB -> SockAddr -> m () Source #

Demote a peer increasing its score by one.

getNewPeerDB :: MonadUnliftIO m => DB -> [SockAddr] -> m (Maybe SockAddr) Source #

Get a peer from database. Pass a list of addresses to exclude.

gotPong :: TVar [OnlinePeer] -> Word64 -> UTCTime -> Peer -> STM (Maybe NominalDiffTime) Source #

Report receiving a pong from a connected peer. Will store ping roundtrip time in a window of latest eleven. Peers are returned by the manager in order of median roundtrip time.

lastPing :: TVar [OnlinePeer] -> Peer -> STM (Maybe UTCTime) Source #

Return time of last ping sent to peer, if any.

setPeerPing :: TVar [OnlinePeer] -> Word64 -> UTCTime -> Peer -> STM () Source #

Set nonce and time of last ping sent to peer.

setPeerVersion :: TVar [OnlinePeer] -> Peer -> Version -> STM (Either PeerException OnlinePeer) Source #

Set version for online peer. Will set the peer connected status to True if a verack message has already been registered for that peer.

setPeerVerAck :: TVar [OnlinePeer] -> Peer -> STM (Maybe OnlinePeer) Source #

Register that a verack message was received from a peer.

newOnlinePeer Source #

Arguments

:: TVar [OnlinePeer] 
-> SockAddr

peer address

-> Word64

nonce sent to peer

-> Peer

peer mailbox

-> Async ()

peer asynchronous handle

-> STM OnlinePeer 

Create OnlinePeer data structure.

peerString :: TVar [OnlinePeer] -> Peer -> STM Text Source #

Get a human-readable string for the peer address.

findPeer :: TVar [OnlinePeer] -> Peer -> STM (Maybe OnlinePeer) Source #

Find a connected peer.

insertPeer :: TVar [OnlinePeer] -> OnlinePeer -> STM () Source #

Insert or replace a connected peer.

modifyPeer :: TVar [OnlinePeer] -> Peer -> (OnlinePeer -> OnlinePeer) -> STM () Source #

Modify an online peer.

removePeer :: TVar [OnlinePeer] -> Peer -> STM () Source #

Remove an online peer.

findPeerAsync :: TVar [OnlinePeer] -> Async () -> STM (Maybe OnlinePeer) Source #

Find online peer by asynchronous handle.

removePeerAsync :: TVar [OnlinePeer] -> Async () -> STM () Source #

Remove online peer by asynchronous handle.