Copyright | No rights reserved |
---|---|
License | UNLICENSE |
Maintainer | xenog@protonmail.com |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
Integrates peers, manager, and block header synchronization processes.
Messages from peers that aren't consumed by the peer manager or chain are forwarded to the listen action provided in the node configuration.
Synopsis
- type Host = String
- type Port = Int
- type HostPort = (Host, Port)
- type Peer = Mailbox PeerMessage
- type Chain = Mailbox ChainMessage
- type Manager = Mailbox ManagerMessage
- data OnlinePeer = OnlinePeer {
- onlinePeerAddress :: !SockAddr
- onlinePeerVerAck :: !Bool
- onlinePeerConnected :: !Bool
- onlinePeerVersion :: !(Maybe Version)
- onlinePeerAsync :: !(Async ())
- onlinePeerMailbox :: !Peer
- onlinePeerNonce :: !Word64
- onlinePeerPing :: !(Maybe (UTCTime, Word64))
- onlinePeerPings :: ![NominalDiffTime]
- data NodeConfig = NodeConfig {
- nodeConfMaxPeers :: !Int
- nodeConfDB :: !DB
- nodeConfPeers :: ![HostPort]
- nodeConfDiscover :: !Bool
- nodeConfNetAddr :: !NetworkAddress
- nodeConfNet :: !Network
- nodeConfEvents :: !(Publisher NodeEvent)
- nodeConfTimeout :: !Int
- data NodeEvent
- data ChainEvent
- data PeerEvent
- data PeerException
- withNode :: (MonadLoggerIO m, MonadUnliftIO m) => NodeConfig -> ((Manager, Chain) -> m a) -> m a
- node :: (MonadLoggerIO m, MonadUnliftIO m) => NodeConfig -> Inbox ManagerMessage -> Inbox ChainMessage -> m ()
- managerGetPeers :: MonadIO m => Manager -> m [OnlinePeer]
- managerGetPeer :: MonadIO m => Peer -> Manager -> m (Maybe OnlinePeer)
- managerKill :: MonadIO m => PeerException -> Peer -> Manager -> m ()
- sendMessage :: MonadIO m => Message -> Peer -> m ()
- peerGetPublisher :: MonadUnliftIO m => Int -> Peer -> m (Maybe (Publisher Message))
- peerGetBlocks :: MonadUnliftIO m => Network -> Int -> Peer -> [BlockHash] -> m (Maybe [Block])
- peerGetTxs :: MonadUnliftIO m => Network -> Int -> Peer -> [TxHash] -> m (Maybe [Tx])
- chainGetBlock :: MonadIO m => BlockHash -> Chain -> m (Maybe BlockNode)
- chainGetBest :: MonadIO m => Chain -> m BlockNode
- chainGetAncestor :: MonadIO m => BlockHeight -> BlockNode -> Chain -> m (Maybe BlockNode)
- chainGetParents :: MonadIO m => BlockHeight -> BlockNode -> Chain -> m [BlockNode]
- chainGetSplitBlock :: MonadIO m => BlockNode -> BlockNode -> Chain -> m BlockNode
- chainBlockMain :: MonadIO m => BlockHash -> Chain -> m Bool
- chainIsSynced :: MonadIO m => Chain -> m Bool
- myVersion :: Word32
Documentation
type Peer = Mailbox PeerMessage Source #
Mailbox for a peer.
type Chain = Mailbox ChainMessage Source #
Mailbox for chain header syncing process.
type Manager = Mailbox ManagerMessage Source #
Mailbox for peer manager process.
data OnlinePeer Source #
Data structure representing an online peer.
OnlinePeer | |
|
Instances
Eq OnlinePeer Source # | |
Defined in Network.Haskoin.Node.Common (==) :: OnlinePeer -> OnlinePeer -> Bool # (/=) :: OnlinePeer -> OnlinePeer -> Bool # | |
Ord OnlinePeer Source # | |
Defined in Network.Haskoin.Node.Common compare :: OnlinePeer -> OnlinePeer -> Ordering # (<) :: OnlinePeer -> OnlinePeer -> Bool # (<=) :: OnlinePeer -> OnlinePeer -> Bool # (>) :: OnlinePeer -> OnlinePeer -> Bool # (>=) :: OnlinePeer -> OnlinePeer -> Bool # max :: OnlinePeer -> OnlinePeer -> OnlinePeer # min :: OnlinePeer -> OnlinePeer -> OnlinePeer # |
data NodeConfig Source #
General node configuration.
NodeConfig | |
|
Chain and peer events generated by the node.
ChainEvent !ChainEvent | events from the chain syncing process |
PeerEvent !PeerEvent | events from peers and peer manager |
data ChainEvent Source #
Events originating from chain syncing process.
ChainBestBlock !BlockNode | chain has new best block |
ChainSynced !BlockNode | chain is in sync with the network |
Instances
Eq ChainEvent Source # | |
Defined in Network.Haskoin.Node.Common (==) :: ChainEvent -> ChainEvent -> Bool # (/=) :: ChainEvent -> ChainEvent -> Bool # | |
Show ChainEvent Source # | |
Defined in Network.Haskoin.Node.Common showsPrec :: Int -> ChainEvent -> ShowS # show :: ChainEvent -> String # showList :: [ChainEvent] -> ShowS # |
Events originating from peers and the peer manager.
PeerConnected !Peer !SockAddr | new peer connected |
PeerDisconnected !Peer !SockAddr | peer disconnected |
PeerMessage !Peer !Message | peer sent a message |
data PeerException Source #
Reasons why a peer may stop working.
PeerMisbehaving !String | peer is being a naughty boy |
DuplicateVersion | peer sent an extra version message |
DecodeHeaderError | incoming message headers could not be decoded |
CannotDecodePayload | incoming message payload could not be decoded |
PeerIsMyself | nonce for peer matches ours |
PayloadTooLarge !Word32 | message payload too large |
PeerAddressInvalid | peer address not valid |
PeerSentBadHeaders | peer sent wrong headers |
NotNetworkPeer | peer cannot serve block chain data |
PeerNoSegWit | peer has no segwit support |
PeerTimeout | request to peer timed out |
PurgingPeer | peers are being purged |
UnknownPeer | peer is unknown |
Instances
Eq PeerException Source # | |
Defined in Network.Haskoin.Node.Common (==) :: PeerException -> PeerException -> Bool # (/=) :: PeerException -> PeerException -> Bool # | |
Show PeerException Source # | |
Defined in Network.Haskoin.Node.Common showsPrec :: Int -> PeerException -> ShowS # show :: PeerException -> String # showList :: [PeerException] -> ShowS # | |
Exception PeerException Source # | |
Defined in Network.Haskoin.Node.Common |
withNode :: (MonadLoggerIO m, MonadUnliftIO m) => NodeConfig -> ((Manager, Chain) -> m a) -> m a Source #
node :: (MonadLoggerIO m, MonadUnliftIO m) => NodeConfig -> Inbox ManagerMessage -> Inbox ChainMessage -> m () Source #
Launch node process in the foreground.
managerGetPeers :: MonadIO m => Manager -> m [OnlinePeer] Source #
Get list of connected peers from manager.
managerGetPeer :: MonadIO m => Peer -> Manager -> m (Maybe OnlinePeer) Source #
Get information for an online peer from manager.
managerKill :: MonadIO m => PeerException -> Peer -> Manager -> m () Source #
Ask manager to kill a peer with the provided exception.
peerGetPublisher :: MonadUnliftIO m => Int -> Peer -> m (Maybe (Publisher Message)) Source #
Get a publisher associated to a peer. Must provide timeout as peer may disconnect and become unresponsive.
peerGetBlocks :: MonadUnliftIO m => Network -> Int -> Peer -> [BlockHash] -> m (Maybe [Block]) Source #
Request full blocks from peer. Will return Nothing
if the list of blocks
returned by the peer is incomplete, comes out of order, or a timeout is
reached.
peerGetTxs :: MonadUnliftIO m => Network -> Int -> Peer -> [TxHash] -> m (Maybe [Tx]) Source #
Request transactions from peer. Will return Nothing
if the list of
transactions returned by the peer is incomplete, comes out of order, or a
timeout is reached.
chainGetBlock :: MonadIO m => BlockHash -> Chain -> m (Maybe BlockNode) Source #
Get a block header from Chain
process.
chainGetAncestor :: MonadIO m => BlockHeight -> BlockNode -> Chain -> m (Maybe BlockNode) Source #
Get ancestor of BlockNode
at BlockHeight
from chain process.
chainGetParents :: MonadIO m => BlockHeight -> BlockNode -> Chain -> m [BlockNode] Source #
Get parents of BlockNode
starting at BlockHeight
from chain process.
chainGetSplitBlock :: MonadIO m => BlockNode -> BlockNode -> Chain -> m BlockNode Source #
Get last common block from chain process.