-- 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.0.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