haskoin-node-0.3.0: Implementation of a Bitoin node.

Safe HaskellNone
LanguageHaskell98

Network.Haskoin.Node.STM

Documentation

type MerkleTxs = [TxHash] Source

runSql :: MonadBaseControl IO m => SqlPersistT m a -> Either SqlBackend ConnectionPool -> m a Source

runSqlNodeT :: MonadBaseControl IO m => SqlPersistT m a -> NodeT m a Source

getNodeState :: (MonadLoggerIO m, MonadBaseControl IO m) => Either SqlBackend ConnectionPool -> m SharedNodeState Source

runNodeT :: Monad m => NodeT m a -> SharedNodeState -> m a Source

withNodeT :: (MonadLoggerIO m, MonadBaseControl IO m) => NodeT m a -> Either SqlBackend ConnectionPool -> m a Source

data PeerHostSession Source

Constructors

PeerHostSession 

Fields

peerHostSessionScore :: !PeerHostScore
 
peerHostSessionReconnect :: !Int
 
peerHostSessionLog :: ![String]

Important host log messages that should appear in status command

data SharedNodeState Source

Constructors

SharedNodeState 

Fields

sharedPeerMap :: !(TVar (Map PeerId (TVar PeerSession)))

Map of all active peers and their sessions

sharedHostMap :: !(TVar (Map PeerHost (TVar PeerHostSession)))

The peer that is currently syncing the block headers

sharedNetworkHeight :: !(TVar BlockHeight)

The current height of the network

sharedHeaders :: !(TMVar (PeerId, Headers))

Block headers sent from a peer

sharedHeaderPeer :: !(TVar (Maybe PeerId))

Peer currently syncing headers

sharedMerklePeer :: !(TVar (Maybe PeerId))

Peer currently downloading merkle blocks

sharedSyncLock :: !Lock

Lock on the header syncing process

sharedBestHeader :: !(TVar NodeBlock)

Our best block header

sharedBestBlock :: !(TVar NodeBlock)

Our best merkle block's height

sharedTxGetData :: !(TVar (Map TxHash [(PeerId, PeerHost)]))

List of Tx GetData requests

sharedBloomFilter :: !(TVar (Maybe (BloomFilter, Int)))

Bloom filter

sharedTickleChan :: !(TBMChan (PeerId, PeerHost, BlockHash))

Channel containing all the block tickles received from peers

sharedTxChan :: !(TBMChan (PeerId, PeerHost, Tx))

Transaction channel

sharedRescan :: !(TMVar (Either Timestamp BlockHeight))

Rescan requests from a timestamp or from a block height

sharedMempool :: !(TVar Bool)

Did we do a Mempool sync ?

sharedSqlBackend :: !(Either SqlBackend ConnectionPool)
 

data PeerSession Source

Constructors

PeerSession 

Fields

peerSessionConnected :: !Bool

True if the peer is connected (completed the handshake)

peerSessionVersion :: !(Maybe Version)

Contains the version message that we received from the peer

peerSessionHeight :: !BlockHeight

Current known height of the peer

peerSessionChan :: !(TBMChan Message)

Message channel to send messages to the peer

peerSessionHost :: !PeerHost

Host to which this peer is connected

peerSessionThreadId :: !ThreadId

Peer ThreadId

peerSessionMerkleChan :: !(TBMChan (Either (MerkleBlock, MerkleTxs) Tx))

Merkle block/Merkle transaction channel

peerSessionPings :: !(TVar [PingNonce])

Time at which we requested pings

peerSessionScore :: !(Maybe NominalDiffTime)

Ping scores for this peer (round trip times)

putTMVarS :: (SharedNodeState -> TMVar a) -> a -> NodeT STM () Source

swapTMVarS :: (SharedNodeState -> TMVar a) -> a -> NodeT STM () Source

catchAny :: MonadBaseControl IO m => m a -> (SomeException -> m a) -> m a Source

catchAny_ :: MonadBaseControl IO m => m () -> m () Source