| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Haskoin.Node
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.
Constructors
| OnlinePeer | |
Fields
| |
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.
Constructors
| NodeConfig | |
Fields
| |
Event originating from the node. Aggregates events from the peer manager, chain, and any connected peers.
Constructors
| 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.
Constructors
| ManagerConnect !Peer | a new peer connected and its handshake completed |
| ManagerDisconnect !Peer | a peer disconnected |
data ChainEvent Source #
Events originating from chain process.
Constructors
| 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 | |
| Show ChainEvent Source # | |
Defined in Network.Haskoin.Node.Common Methods showsPrec :: Int -> ChainEvent -> ShowS # show :: ChainEvent -> String # showList :: [ChainEvent] -> ShowS # | |
Events originating from a peer.
Constructors
| 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.
Constructors
| 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 Methods (==) :: PeerException -> PeerException -> Bool # (/=) :: PeerException -> PeerException -> Bool # | |
| Show PeerException Source # | |
Defined in Network.Haskoin.Node.Common Methods showsPrec :: Int -> PeerException -> ShowS # show :: PeerException -> String # showList :: [PeerException] -> ShowS # | |
| Exception PeerException Source # | |
Defined in Network.Haskoin.Node.Common Methods toException :: PeerException -> SomeException # fromException :: SomeException -> Maybe PeerException # displayException :: PeerException -> String # | |
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.