-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | P2P library for Bitcoin and Bitcoin Cash
--
-- Please see the README on GitHub at
-- https://github.com/haskoin/haskoin-node#readme
@package haskoin-node
@version 0.17.13
module Haskoin.Node
data PeerConfig
PeerConfig :: !Publisher (Peer, Message) -> !Network -> !Text -> !WithConnection -> PeerConfig
[peerConfPub] :: PeerConfig -> !Publisher (Peer, Message)
[peerConfNetwork] :: PeerConfig -> !Network
[peerConfText] :: PeerConfig -> !Text
[peerConfConnect] :: PeerConfig -> !WithConnection
data Conduits
Conduits :: ConduitT () ByteString IO () -> ConduitT ByteString Void IO () -> Conduits
[inboundConduit] :: Conduits -> ConduitT () ByteString IO ()
[outboundConduit] :: Conduits -> ConduitT ByteString Void IO ()
data PeerException
PeerMisbehaving :: !String -> PeerException
DuplicateVersion :: PeerException
DecodeHeaderError :: PeerException
CannotDecodePayload :: !MessageCommand -> PeerException
PeerIsMyself :: PeerException
PayloadTooLarge :: !Word32 -> PeerException
PeerAddressInvalid :: PeerException
PeerSentBadHeaders :: PeerException
NotNetworkPeer :: PeerException
PeerNoSegWit :: PeerException
PeerTimeout :: PeerException
UnknownPeer :: PeerException
PeerTooOld :: PeerException
type WithConnection = (Conduits -> IO ()) -> IO ()
-- | Mailbox for a peer.
data Peer
-- | Run peer process in current thread.
peer :: (MonadUnliftIO m, MonadLoggerIO m) => PeerConfig -> TVar Bool -> Inbox PeerMessage -> m ()
wrapPeer :: MonadIO m => PeerConfig -> TVar Bool -> Mailbox PeerMessage -> m Peer
peerPublisher :: Peer -> Publisher (Peer, Message)
peerText :: Peer -> Text
-- | Send a network message to peer.
sendMessage :: MonadIO m => Message -> Peer -> m ()
-- | Kill a peer with the provided exception.
killPeer :: MonadIO m => PeerException -> Peer -> m ()
-- | 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.
getBlocks :: MonadUnliftIO m => Network -> Int -> Peer -> [BlockHash] -> m (Maybe [Block])
-- | 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.
getTxs :: MonadUnliftIO m => Network -> Int -> Peer -> [TxHash] -> m (Maybe [Tx])
-- | Request transactions and/or blocks from peer. Return Nothing if
-- any single inventory fails to be retrieved, if they come out of order,
-- or if timeout is reached.
getData :: MonadUnliftIO m => Int -> Peer -> GetData -> m (Maybe [Either Tx Block])
-- | Ping a peer and await response. Return False if response not
-- received before timeout.
pingPeer :: MonadUnliftIO m => Int -> Peer -> m Bool
getBusy :: MonadIO m => Peer -> m Bool
setBusy :: MonadIO m => Peer -> m Bool
setFree :: MonadIO m => Peer -> m ()
data PeerManagerConfig
PeerManagerConfig :: !Int -> ![HostPort] -> !Bool -> !NetworkAddress -> !Network -> !Publisher PeerEvent -> !NominalDiffTime -> !NominalDiffTime -> !SockAddr -> WithConnection -> !Publisher (Peer, Message) -> PeerManagerConfig
[peerManagerMaxPeers] :: PeerManagerConfig -> !Int
[peerManagerPeers] :: PeerManagerConfig -> ![HostPort]
[peerManagerDiscover] :: PeerManagerConfig -> !Bool
[peerManagerNetAddr] :: PeerManagerConfig -> !NetworkAddress
[peerManagerNetwork] :: PeerManagerConfig -> !Network
[peerManagerEvents] :: PeerManagerConfig -> !Publisher PeerEvent
[peerManagerTimeout] :: PeerManagerConfig -> !NominalDiffTime
[peerManagerMaxLife] :: PeerManagerConfig -> !NominalDiffTime
[peerManagerConnect] :: PeerManagerConfig -> !SockAddr -> WithConnection
[peerManagerPub] :: PeerManagerConfig -> !Publisher (Peer, Message)
data PeerEvent
PeerConnected :: !Peer -> PeerEvent
PeerDisconnected :: !Peer -> PeerEvent
-- | Data structure representing an online peer.
data OnlinePeer
OnlinePeer :: !SockAddr -> !Bool -> !Bool -> !Maybe Version -> !Async () -> !Peer -> !Word64 -> !Maybe (UTCTime, Word64) -> ![NominalDiffTime] -> !UTCTime -> !UTCTime -> !UTCTime -> OnlinePeer
[onlinePeerAddress] :: OnlinePeer -> !SockAddr
[onlinePeerVerAck] :: OnlinePeer -> !Bool
[onlinePeerConnected] :: OnlinePeer -> !Bool
[onlinePeerVersion] :: OnlinePeer -> !Maybe Version
[onlinePeerAsync] :: OnlinePeer -> !Async ()
[onlinePeerMailbox] :: OnlinePeer -> !Peer
[onlinePeerNonce] :: OnlinePeer -> !Word64
[onlinePeerPing] :: OnlinePeer -> !Maybe (UTCTime, Word64)
[onlinePeerPings] :: OnlinePeer -> ![NominalDiffTime]
[onlinePeerConnectTime] :: OnlinePeer -> !UTCTime
[onlinePeerTickled] :: OnlinePeer -> !UTCTime
[onlinePeerDisconnect] :: OnlinePeer -> !UTCTime
type HostPort = (Host, Port)
type Host = String
type Port = Int
data PeerManager
withPeerManager :: (MonadUnliftIO m, MonadLoggerIO m) => PeerManagerConfig -> (PeerManager -> m a) -> m a
managerBest :: MonadIO m => BlockHeight -> PeerManager -> m ()
managerVersion :: MonadIO m => Peer -> Version -> PeerManager -> m ()
managerPing :: MonadIO m => Peer -> Word64 -> PeerManager -> m ()
managerPong :: MonadIO m => Peer -> Word64 -> PeerManager -> m ()
managerAddrs :: MonadIO m => Peer -> [NetworkAddress] -> PeerManager -> m ()
managerVerAck :: MonadIO m => Peer -> PeerManager -> m ()
managerTickle :: MonadIO m => Peer -> PeerManager -> m ()
getPeers :: MonadIO m => PeerManager -> m [OnlinePeer]
getOnlinePeer :: MonadIO m => Peer -> PeerManager -> m (Maybe OnlinePeer)
buildVersion :: Network -> Word64 -> BlockHeight -> NetworkAddress -> NetworkAddress -> Word64 -> Version
myVersion :: Word32
-- | Configuration for chain syncing process.
data ChainConfig
ChainConfig :: !DB -> !Maybe ColumnFamily -> !Network -> !Publisher ChainEvent -> !NominalDiffTime -> ChainConfig
-- | database handle
[chainConfDB] :: ChainConfig -> !DB
-- | column family
[chainConfColumnFamily] :: ChainConfig -> !Maybe ColumnFamily
-- | network constants
[chainConfNetwork] :: ChainConfig -> !Network
-- | send header chain events here
[chainConfEvents] :: ChainConfig -> !Publisher ChainEvent
-- | timeout in seconds
[chainConfTimeout] :: ChainConfig -> !NominalDiffTime
-- | Events originating from chain syncing process.
data ChainEvent
-- | chain has new best block
ChainBestBlock :: !BlockNode -> ChainEvent
-- | chain is in sync with the network
ChainSynced :: !BlockNode -> ChainEvent
-- | Mailbox for chain header syncing process.
data Chain
withChain :: (MonadUnliftIO m, MonadLoggerIO m) => ChainConfig -> (Chain -> m a) -> m a
-- | Get a block header from Chain process.
chainGetBlock :: MonadIO m => BlockHash -> Chain -> m (Maybe BlockNode)
-- | Get best block header from chain process.
chainGetBest :: MonadIO m => Chain -> m BlockNode
-- | Get ancestor of BlockNode at BlockHeight from chain
-- process.
chainGetAncestor :: MonadIO m => BlockHeight -> BlockNode -> Chain -> m (Maybe BlockNode)
-- | Get parents of BlockNode starting at BlockHeight from
-- chain process.
chainGetParents :: MonadIO m => BlockHeight -> BlockNode -> Chain -> m [BlockNode]
-- | Get last common block from chain process.
chainGetSplitBlock :: MonadIO m => BlockNode -> BlockNode -> Chain -> m BlockNode
-- | Notify chain that a new peer is connected.
chainPeerConnected :: MonadIO m => Peer -> Chain -> m ()
-- | Notify chain that a peer has disconnected.
chainPeerDisconnected :: MonadIO m => Peer -> Chain -> m ()
-- | Is chain in sync with network?
chainIsSynced :: MonadIO m => Chain -> m Bool
-- | Is given BlockHash in the main chain?
chainBlockMain :: MonadIO m => BlockHash -> Chain -> m Bool
-- | Peer sends a bunch of headers to the chain process.
chainHeaders :: MonadIO m => Peer -> [BlockHeader] -> Chain -> m ()
-- | General node configuration.
data NodeConfig
NodeConfig :: !Int -> !DB -> !Maybe ColumnFamily -> ![HostPort] -> !Bool -> !NetworkAddress -> !Network -> !Publisher NodeEvent -> !NominalDiffTime -> !NominalDiffTime -> !SockAddr -> WithConnection -> NodeConfig
-- | maximum number of connected peers allowed
[nodeConfMaxPeers] :: NodeConfig -> !Int
-- | database handler
[nodeConfDB] :: NodeConfig -> !DB
-- | database column family
[nodeConfColumnFamily] :: NodeConfig -> !Maybe ColumnFamily
-- | static list of peers to connect to
[nodeConfPeers] :: NodeConfig -> ![HostPort]
-- | activate peer discovery
[nodeConfDiscover] :: NodeConfig -> !Bool
-- | network address for the local host
[nodeConfNetAddr] :: NodeConfig -> !NetworkAddress
-- | network constants
[nodeConfNet] :: NodeConfig -> !Network
-- | node events are sent to this publisher
[nodeConfEvents] :: NodeConfig -> !Publisher NodeEvent
-- | timeout in seconds
[nodeConfTimeout] :: NodeConfig -> !NominalDiffTime
-- | peer disconnect after seconds
[nodeConfPeerMaxLife] :: NodeConfig -> !NominalDiffTime
[nodeConfConnect] :: NodeConfig -> !SockAddr -> WithConnection
data NodeEvent
ChainEvent :: !ChainEvent -> NodeEvent
PeerEvent :: !PeerEvent -> NodeEvent
PeerMessage :: !Peer -> !Message -> NodeEvent
data Node
Node :: !PeerManager -> !Chain -> Node
[nodeManager] :: Node -> !PeerManager
[nodeChain] :: Node -> !Chain
-- | Launch node process in the foreground.
withNode :: (MonadLoggerIO m, MonadUnliftIO m) => NodeConfig -> (Node -> m a) -> m a
withConnection :: SockAddr -> WithConnection
instance GHC.Classes.Eq Haskoin.Node.NodeEvent