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