Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- data PeerConfig = PeerConfig {
- peerConfPub :: !(Publisher (Peer, Message))
- peerConfNetwork :: !Network
- peerConfText :: !Text
- peerConfConnect :: !WithConnection
- data Conduits = Conduits {
- inboundConduit :: ConduitT () ByteString IO ()
- outboundConduit :: ConduitT ByteString Void IO ()
- data PeerException
- type WithConnection = (Conduits -> IO ()) -> IO ()
- data Peer
- 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
- sendMessage :: MonadIO m => Message -> Peer -> m ()
- killPeer :: MonadIO m => PeerException -> Peer -> m ()
- getBlocks :: MonadUnliftIO m => Network -> Int -> Peer -> [BlockHash] -> m (Maybe [Block])
- getTxs :: MonadUnliftIO m => Network -> Int -> Peer -> [TxHash] -> m (Maybe [Tx])
- getData :: MonadUnliftIO m => Int -> Peer -> GetData -> m (Maybe [Either Tx Block])
- 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 {
- peerManagerMaxPeers :: !Int
- peerManagerPeers :: ![String]
- peerManagerDiscover :: !Bool
- peerManagerNetAddr :: !NetworkAddress
- peerManagerNetwork :: !Network
- peerManagerEvents :: !(Publisher PeerEvent)
- peerManagerTimeout :: !NominalDiffTime
- peerManagerMaxLife :: !NominalDiffTime
- peerManagerConnect :: !(SockAddr -> WithConnection)
- peerManagerPub :: !(Publisher (Peer, Message))
- data PeerEvent
- data OnlinePeer = OnlinePeer {
- onlinePeerAddress :: !SockAddr
- onlinePeerVerAck :: !Bool
- onlinePeerConnected :: !Bool
- onlinePeerVersion :: !(Maybe Version)
- onlinePeerAsync :: !(Async ())
- onlinePeerMailbox :: !Peer
- onlinePeerNonce :: !Word64
- onlinePeerPing :: !(Maybe (UTCTime, Word64))
- onlinePeerPings :: ![NominalDiffTime]
- onlinePeerConnectTime :: !UTCTime
- onlinePeerTickled :: !UTCTime
- onlinePeerDisconnect :: !UTCTime
- 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
- toSockAddr :: MonadUnliftIO m => Network -> String -> m [SockAddr]
- toHostService :: String -> (Maybe String, Maybe String)
- data ChainConfig = ChainConfig {
- chainConfDB :: !DB
- chainConfColumnFamily :: !(Maybe ColumnFamily)
- chainConfNetwork :: !Network
- chainConfEvents :: !(Publisher ChainEvent)
- chainConfTimeout :: !NominalDiffTime
- data ChainEvent
- = ChainBestBlock !BlockNode
- | ChainSynced !BlockNode
- data Chain
- withChain :: (MonadUnliftIO m, MonadLoggerIO m) => ChainConfig -> (Chain -> m a) -> m a
- 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
- chainPeerConnected :: MonadIO m => Peer -> Chain -> m ()
- chainPeerDisconnected :: MonadIO m => Peer -> Chain -> m ()
- chainIsSynced :: MonadIO m => Chain -> m Bool
- chainBlockMain :: MonadIO m => BlockHash -> Chain -> m Bool
- chainHeaders :: MonadIO m => Peer -> [BlockHeader] -> Chain -> m ()
- data NodeConfig = NodeConfig {
- nodeConfMaxPeers :: !Int
- nodeConfDB :: !DB
- nodeConfColumnFamily :: !(Maybe ColumnFamily)
- nodeConfPeers :: ![String]
- nodeConfDiscover :: !Bool
- nodeConfNetAddr :: !NetworkAddress
- nodeConfNet :: !Network
- nodeConfEvents :: !(Publisher NodeEvent)
- nodeConfTimeout :: !NominalDiffTime
- nodeConfPeerMaxLife :: !NominalDiffTime
- nodeConfConnect :: !(SockAddr -> WithConnection)
- data NodeEvent
- = ChainEvent !ChainEvent
- | PeerEvent !PeerEvent
- | PeerMessage !Peer !Message
- data Node = Node {
- nodeManager :: !PeerManager
- nodeChain :: !Chain
- withNode :: (MonadLoggerIO m, MonadUnliftIO m) => NodeConfig -> (Node -> m a) -> m a
- withConnection :: SockAddr -> WithConnection
Documentation
data PeerConfig Source #
PeerConfig | |
|
Conduits | |
|
data PeerException Source #
Instances
Exception PeerException Source # | |
Defined in Haskoin.Node.Peer | |
Show PeerException Source # | |
Defined in Haskoin.Node.Peer showsPrec :: Int -> PeerException -> ShowS # show :: PeerException -> String # showList :: [PeerException] -> ShowS # | |
Eq PeerException Source # | |
Defined in Haskoin.Node.Peer (==) :: PeerException -> PeerException -> Bool # (/=) :: PeerException -> PeerException -> Bool # |
Mailbox for a peer.
peer :: (MonadUnliftIO m, MonadLoggerIO m) => PeerConfig -> TVar Bool -> Inbox PeerMessage -> m () Source #
Run peer process in current thread.
peerPublisher :: Peer -> Publisher (Peer, Message) Source #
sendMessage :: MonadIO m => Message -> Peer -> m () Source #
Send a network message to peer.
killPeer :: MonadIO m => PeerException -> Peer -> m () Source #
Kill a peer with the provided exception.
getBlocks :: MonadUnliftIO m => Network -> Int -> Peer -> [BlockHash] -> m (Maybe [Block]) Source #
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.
getTxs :: MonadUnliftIO m => Network -> Int -> Peer -> [TxHash] -> m (Maybe [Tx]) Source #
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.
getData :: MonadUnliftIO m => Int -> Peer -> GetData -> m (Maybe [Either Tx Block]) Source #
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.
pingPeer :: MonadUnliftIO m => Int -> Peer -> m Bool Source #
Ping a peer and await response. Return False
if response not received
before timeout.
data PeerManagerConfig Source #
PeerManagerConfig | |
|
data OnlinePeer Source #
Data structure representing an online peer.
OnlinePeer | |
|
Instances
Eq OnlinePeer Source # | |
Defined in Haskoin.Node.Manager (==) :: OnlinePeer -> OnlinePeer -> Bool # (/=) :: OnlinePeer -> OnlinePeer -> Bool # | |
Ord OnlinePeer Source # | |
Defined in Haskoin.Node.Manager compare :: OnlinePeer -> OnlinePeer -> Ordering # (<) :: OnlinePeer -> OnlinePeer -> Bool # (<=) :: OnlinePeer -> OnlinePeer -> Bool # (>) :: OnlinePeer -> OnlinePeer -> Bool # (>=) :: OnlinePeer -> OnlinePeer -> Bool # max :: OnlinePeer -> OnlinePeer -> OnlinePeer # min :: OnlinePeer -> OnlinePeer -> OnlinePeer # |
data PeerManager Source #
withPeerManager :: (MonadUnliftIO m, MonadLoggerIO m) => PeerManagerConfig -> (PeerManager -> m a) -> m a Source #
managerBest :: MonadIO m => BlockHeight -> PeerManager -> m () Source #
managerVersion :: MonadIO m => Peer -> Version -> PeerManager -> m () Source #
managerPing :: MonadIO m => Peer -> Word64 -> PeerManager -> m () Source #
managerPong :: MonadIO m => Peer -> Word64 -> PeerManager -> m () Source #
managerAddrs :: MonadIO m => Peer -> [NetworkAddress] -> PeerManager -> m () Source #
managerVerAck :: MonadIO m => Peer -> PeerManager -> m () Source #
managerTickle :: MonadIO m => Peer -> PeerManager -> m () Source #
getPeers :: MonadIO m => PeerManager -> m [OnlinePeer] Source #
getOnlinePeer :: MonadIO m => Peer -> PeerManager -> m (Maybe OnlinePeer) Source #
buildVersion :: Network -> Word64 -> BlockHeight -> NetworkAddress -> NetworkAddress -> Word64 -> Version Source #
toSockAddr :: MonadUnliftIO m => Network -> String -> m [SockAddr] Source #
data ChainConfig Source #
Configuration for chain syncing process.
ChainConfig | |
|
Instances
MonadIO m => BlockHeaders (ReaderT ChainConfig m) Source # | |
Defined in Haskoin.Node.Chain addBlockHeader :: BlockNode -> ReaderT ChainConfig m () getBlockHeader :: BlockHash -> ReaderT ChainConfig m (Maybe BlockNode) getBestBlockHeader :: ReaderT ChainConfig m BlockNode setBestBlockHeader :: BlockNode -> ReaderT ChainConfig m () addBlockHeaders :: [BlockNode] -> ReaderT ChainConfig m () |
data ChainEvent Source #
Events originating from chain syncing process.
ChainBestBlock !BlockNode | chain has new best block |
ChainSynced !BlockNode | chain is in sync with the network |
Instances
Show ChainEvent Source # | |
Defined in Haskoin.Node.Chain showsPrec :: Int -> ChainEvent -> ShowS # show :: ChainEvent -> String # showList :: [ChainEvent] -> ShowS # | |
Eq ChainEvent Source # | |
Defined in Haskoin.Node.Chain (==) :: ChainEvent -> ChainEvent -> Bool # (/=) :: ChainEvent -> ChainEvent -> Bool # |
Mailbox for chain header syncing process.
Instances
Eq Chain Source # | |
MonadIO m => BlockHeaders (ReaderT Chain m) Source # | |
Defined in Haskoin.Node.Chain addBlockHeader :: BlockNode -> ReaderT Chain m () getBlockHeader :: BlockHash -> ReaderT Chain m (Maybe BlockNode) getBestBlockHeader :: ReaderT Chain m BlockNode setBestBlockHeader :: BlockNode -> ReaderT Chain m () addBlockHeaders :: [BlockNode] -> ReaderT Chain m () |
withChain :: (MonadUnliftIO m, MonadLoggerIO m) => ChainConfig -> (Chain -> m a) -> m a Source #
chainGetBlock :: MonadIO m => BlockHash -> Chain -> m (Maybe BlockNode) Source #
Get a block header from Chain
process.
chainGetBest :: MonadIO m => Chain -> m BlockNode Source #
Get best 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.
chainPeerConnected :: MonadIO m => Peer -> Chain -> m () Source #
Notify chain that a new peer is connected.
chainPeerDisconnected :: MonadIO m => Peer -> Chain -> m () Source #
Notify chain that a peer has disconnected.
chainBlockMain :: MonadIO m => BlockHash -> Chain -> m Bool Source #
Is given BlockHash
in the main chain?
chainHeaders :: MonadIO m => Peer -> [BlockHeader] -> Chain -> m () Source #
Peer sends a bunch of headers to the chain process.
data NodeConfig Source #
General node configuration.
NodeConfig | |
|
ChainEvent !ChainEvent | |
PeerEvent !PeerEvent | |
PeerMessage !Peer !Message |
Node | |
|
withNode :: (MonadLoggerIO m, MonadUnliftIO m) => NodeConfig -> (Node -> m a) -> m a Source #
Launch node process in the foreground.
withConnection :: SockAddr -> WithConnection Source #