-- 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 1.1.0
module Haskoin.Node
data PeerConfig
PeerConfig :: !Publisher PeerEvent -> !Network -> !Text -> !WithConnection -> PeerConfig
[$sel:pub:PeerConfig] :: PeerConfig -> !Publisher PeerEvent
[$sel:net:PeerConfig] :: PeerConfig -> !Network
[$sel:label:PeerConfig] :: PeerConfig -> !Text
[$sel:connect:PeerConfig] :: PeerConfig -> !WithConnection
data PeerEvent
PeerConnected :: !Peer -> PeerEvent
PeerDisconnected :: !Peer -> PeerEvent
PeerMessage :: !Peer -> !Message -> PeerEvent
data Conduits
Conduits :: ConduitT () ByteString IO () -> ConduitT ByteString Void IO () -> Conduits
[$sel:inboundConduit:Conduits] :: Conduits -> ConduitT () ByteString IO ()
[$sel:outboundConduit:Conduits] :: 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
EmptyHeader :: PeerException
type WithConnection = (Conduits -> IO ()) -> IO ()
-- | Mailbox for a peer.
data Peer
Peer :: !Mailbox PeerMessage -> !Publisher PeerEvent -> !Text -> !TVar Bool -> Peer
[$sel:mailbox:Peer] :: Peer -> !Mailbox PeerMessage
[$sel:pub:Peer] :: Peer -> !Publisher PeerEvent
[$sel:label:Peer] :: Peer -> !Text
[$sel:busy:Peer] :: Peer -> !TVar Bool
-- | 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
-- | 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 PeerMgrConfig
PeerMgrConfig :: !Int -> ![String] -> !Bool -> !NetworkAddress -> !Network -> !Publisher PeerEvent -> !NominalDiffTime -> !NominalDiffTime -> !SockAddr -> WithConnection -> PeerMgrConfig
[$sel:maxPeers:PeerMgrConfig] :: PeerMgrConfig -> !Int
[$sel:peers:PeerMgrConfig] :: PeerMgrConfig -> ![String]
[$sel:discover:PeerMgrConfig] :: PeerMgrConfig -> !Bool
[$sel:address:PeerMgrConfig] :: PeerMgrConfig -> !NetworkAddress
[$sel:net:PeerMgrConfig] :: PeerMgrConfig -> !Network
[$sel:pub:PeerMgrConfig] :: PeerMgrConfig -> !Publisher PeerEvent
[$sel:timeout:PeerMgrConfig] :: PeerMgrConfig -> !NominalDiffTime
[$sel:maxPeerLife:PeerMgrConfig] :: PeerMgrConfig -> !NominalDiffTime
[$sel:connect:PeerMgrConfig] :: PeerMgrConfig -> !SockAddr -> WithConnection
data PeerEvent
PeerConnected :: !Peer -> PeerEvent
PeerDisconnected :: !Peer -> PeerEvent
PeerMessage :: !Peer -> !Message -> PeerEvent
-- | Data structure representing an online peer.
data OnlinePeer
OnlinePeer :: !SockAddr -> !Bool -> !Bool -> !Maybe Version -> !Async () -> !Peer -> !Word64 -> !Maybe (UTCTime, Word64) -> ![NominalDiffTime] -> !UTCTime -> !UTCTime -> OnlinePeer
[$sel:address:OnlinePeer] :: OnlinePeer -> !SockAddr
[$sel:verack:OnlinePeer] :: OnlinePeer -> !Bool
[$sel:online:OnlinePeer] :: OnlinePeer -> !Bool
[$sel:version:OnlinePeer] :: OnlinePeer -> !Maybe Version
[$sel:async:OnlinePeer] :: OnlinePeer -> !Async ()
[$sel:mailbox:OnlinePeer] :: OnlinePeer -> !Peer
[$sel:nonce:OnlinePeer] :: OnlinePeer -> !Word64
[$sel:ping:OnlinePeer] :: OnlinePeer -> !Maybe (UTCTime, Word64)
[$sel:pings:OnlinePeer] :: OnlinePeer -> ![NominalDiffTime]
[$sel:connected:OnlinePeer] :: OnlinePeer -> !UTCTime
[$sel:tickled:OnlinePeer] :: OnlinePeer -> !UTCTime
data PeerMgr
withPeerMgr :: (MonadUnliftIO m, MonadLoggerIO m) => PeerMgrConfig -> (PeerMgr -> m a) -> m a
peerMgrBest :: MonadIO m => BlockHeight -> PeerMgr -> m ()
peerMgrVersion :: MonadIO m => Peer -> Version -> PeerMgr -> m ()
peerMgrPing :: MonadIO m => Peer -> Word64 -> PeerMgr -> m ()
peerMgrPong :: MonadIO m => Peer -> Word64 -> PeerMgr -> m ()
peerMgrAddrs :: MonadIO m => Peer -> [NetworkAddress] -> PeerMgr -> m ()
peerMgrVerAck :: MonadIO m => Peer -> PeerMgr -> m ()
peerMgrTickle :: MonadIO m => Peer -> PeerMgr -> m ()
getPeers :: MonadIO m => PeerMgr -> m [OnlinePeer]
getOnlinePeer :: MonadIO m => Peer -> PeerMgr -> m (Maybe OnlinePeer)
buildVersion :: Network -> Word64 -> BlockHeight -> NetworkAddress -> NetworkAddress -> Word64 -> Version
myVersion :: Word32
toSockAddr :: MonadUnliftIO m => Network -> String -> m [SockAddr]
toHostService :: String -> (Maybe String, Maybe String)
-- | Configuration for chain syncing process.
data ChainConfig
ChainConfig :: !DB -> !Maybe ColumnFamily -> !Network -> !Publisher ChainEvent -> !NominalDiffTime -> ChainConfig
-- | database handle
[$sel:db:ChainConfig] :: ChainConfig -> !DB
-- | column family
[$sel:cf:ChainConfig] :: ChainConfig -> !Maybe ColumnFamily
-- | network constants
[$sel:net:ChainConfig] :: ChainConfig -> !Network
-- | send header chain events here
[$sel:pub:ChainConfig] :: ChainConfig -> !Publisher ChainEvent
-- | timeout in seconds
[$sel:timeout:ChainConfig] :: 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 -> ![String] -> !Bool -> !NetworkAddress -> !Network -> !Publisher NodeEvent -> !NominalDiffTime -> !NominalDiffTime -> !SockAddr -> WithConnection -> NodeConfig
-- | maximum number of connected peers allowed
[$sel:maxPeers:NodeConfig] :: NodeConfig -> !Int
-- | database handler
[$sel:db:NodeConfig] :: NodeConfig -> !DB
-- | database column family
[$sel:cf:NodeConfig] :: NodeConfig -> !Maybe ColumnFamily
-- | static list of peers to connect to
[$sel:peers:NodeConfig] :: NodeConfig -> ![String]
-- | activate peer discovery
[$sel:discover:NodeConfig] :: NodeConfig -> !Bool
-- | network address for the local host
[$sel:address:NodeConfig] :: NodeConfig -> !NetworkAddress
-- | network constants
[$sel:net:NodeConfig] :: NodeConfig -> !Network
-- | node events are sent to this publisher
[$sel:pub:NodeConfig] :: NodeConfig -> !Publisher NodeEvent
-- | timeout in seconds
[$sel:timeout:NodeConfig] :: NodeConfig -> !NominalDiffTime
-- | peer disconnect after seconds
[$sel:maxPeerLife:NodeConfig] :: NodeConfig -> !NominalDiffTime
[$sel:connect:NodeConfig] :: NodeConfig -> !SockAddr -> WithConnection
data NodeEvent
ChainEvent :: !ChainEvent -> NodeEvent
PeerEvent :: !PeerEvent -> NodeEvent
data Node
Node :: !PeerMgr -> !Chain -> Node
[$sel:peerMgr:Node] :: Node -> !PeerMgr
[$sel:chain:Node] :: 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