Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- type Host = String
- type Port = Int
- type HostPort = (Host, Port)
- type Peer = Inbox PeerMessage
- type Chain = Inbox ChainMessage
- type Manager = Inbox ManagerMessage
- data OnlinePeer = OnlinePeer {
- onlinePeerAddress :: !SockAddr
- onlinePeerConnected :: !Bool
- onlinePeerVersion :: !Word32
- onlinePeerServices :: !Word64
- onlinePeerRemoteNonce :: !Word64
- onlinePeerUserAgent :: !ByteString
- onlinePeerRelay :: !Bool
- onlinePeerBestBlock :: !BlockNode
- onlinePeerAsync :: !(Async ())
- onlinePeerMailbox :: !Peer
- onlinePeerNonce :: !Word64
- onlinePeerPings :: ![NominalDiffTime]
- data NodeConfig = NodeConfig {
- maxPeers :: !Int
- database :: !DB
- initPeers :: ![HostPort]
- discover :: !Bool
- nodeEvents :: !(Listen NodeEvent)
- netAddress :: !NetworkAddress
- nodeNet :: !Network
- data NodeEvent
- data ManagerEvent
- data ChainEvent
- data PeerEvent
- = TxAvail ![TxHash]
- | GotBlock !Block
- | GotMerkleBlock !MerkleBlock
- | GotTx !Tx
- | GotPong !Word64
- | SendBlocks !GetBlocks
- | SendHeaders !GetHeaders
- | SendData ![InvVector]
- | TxNotFound !TxHash
- | BlockNotFound !BlockHash
- | WantMempool
- | Rejected !Reject
- data PeerException
- withNode :: (MonadLoggerIO m, MonadUnliftIO m) => NodeConfig -> ((Manager, Chain) -> m a) -> m a
- managerGetPeerVersion :: MonadIO m => Peer -> Manager -> m (Maybe Word32)
- managerGetPeerBest :: MonadIO m => Peer -> Manager -> m (Maybe BlockNode)
- managerGetPeers :: MonadIO m => Manager -> m [OnlinePeer]
- managerGetPeer :: MonadIO m => Manager -> Peer -> m (Maybe OnlinePeer)
- managerKill :: MonadIO m => PeerException -> Peer -> Manager -> m ()
- setManagerFilter :: MonadIO m => BloomFilter -> Manager -> m ()
- sendMessage :: MonadIO m => Message -> Peer -> m ()
- getMerkleBlocks :: MonadIO m => Peer -> [BlockHash] -> m ()
- peerGetBlocks :: MonadIO m => Network -> Peer -> [BlockHash] -> m ()
- peerGetTxs :: MonadIO m => Network -> Peer -> [TxHash] -> m ()
- 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
data OnlinePeer Source #
Data structure representing an online peer.
OnlinePeer | |
|
data NodeConfig Source #
Node configuration. Mailboxes for manager and chain processes must be created before launching the node. The node will start those processes and receive any messages sent to those mailboxes.
NodeConfig | |
|
Event originating from the node. Aggregates events from the peer manager, chain, and any connected peers.
ManagerEvent !ManagerEvent | event originating from peer manager |
ChainEvent !ChainEvent | event originating from chain process |
PeerEvent !(Peer, PeerEvent) | event originating from a peer |
data ManagerEvent Source #
Peer manager event.
ManagerConnect !Peer | a new peer connected and its handshake completed |
ManagerDisconnect !Peer | a peer disconnected |
data ChainEvent Source #
Events originating from chain process.
ChainNewBest !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 a peer.
TxAvail ![TxHash] | peer sent transaction inventory |
GotBlock !Block | peer sent a |
GotMerkleBlock !MerkleBlock | peer sent a |
GotTx !Tx | peer sent a |
GotPong !Word64 | peer responded to a |
SendBlocks !GetBlocks | peer is requesting some blocks |
SendHeaders !GetHeaders | peer is requesting some headers |
SendData ![InvVector] | per is requesting an inventory |
TxNotFound !TxHash | peer could not find transaction |
BlockNotFound !BlockHash | peer could not find block |
WantMempool | peer wants our mempool |
Rejected !Reject | peer rejected something we sent |
data PeerException Source #
Reasons why a peer may stop working.
PeerMisbehaving !String | peer was a naughty boy |
DecodeMessageError !String | incoming message could not be decoded |
CannotDecodePayload !String | incoming message payload could not be decoded |
PeerIsMyself | nonce for peer matches ours |
PayloadTooLarge !Word32 | message payload too large |
PeerAddressInvalid | peer address did not parse with |
BloomFiltersNotSupported | peer does not support bloom filters |
PeerSentBadHeaders | peer sent wrong headers |
NotNetworkPeer | peer is SPV and cannot serve blockchain data |
PeerNoSegWit | peer has no segwit support |
PeerTimeout | request to peer timed out |
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 #
managerGetPeerVersion :: MonadIO m => Peer -> Manager -> m (Maybe Word32) Source #
Get version of peer from manager.
managerGetPeerBest :: MonadIO m => Peer -> Manager -> m (Maybe BlockNode) Source #
Get best block for peer from manager.
managerGetPeers :: MonadIO m => Manager -> m [OnlinePeer] Source #
Get list of peers from manager.
managerGetPeer :: MonadIO m => Manager -> Peer -> m (Maybe OnlinePeer) Source #
Get peer information for a peer from manager.
managerKill :: MonadIO m => PeerException -> Peer -> Manager -> m () Source #
Ask manager to kill a peer with the provided exception.
setManagerFilter :: MonadIO m => BloomFilter -> Manager -> m () Source #
Set bloom filters in peer manager.
getMerkleBlocks :: MonadIO m => Peer -> [BlockHash] -> m () Source #
Request Merkle blocks from peer.
peerGetBlocks :: MonadIO m => Network -> Peer -> [BlockHash] -> m () Source #
Request full blocks from peer.
peerGetTxs :: MonadIO m => Network -> Peer -> [TxHash] -> m () Source #
Request transactions from peer.
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.