haskoin-node-0.6.0: Haskoin Node P2P library for Bitcoin and Bitcoin Cash

Safe HaskellNone
LanguageHaskell2010

Haskoin.Node

Synopsis

Documentation

type Port = Int Source #

type Peer = Inbox PeerMessage Source #

Mailbox for a peer process.

type Chain = Inbox ChainMessage Source #

Mailbox for chain headers process.

type Manager = Inbox ManagerMessage Source #

Mailbox for peer manager process.

data OnlinePeer Source #

Data structure representing an online peer.

Constructors

OnlinePeer 

Fields

data NodeConfig Source #

Node configuration. Mailboxes for manager and chain processes must be created before launching the node. The node will start those processes and receive any messages sent to those mailboxes.

Constructors

NodeConfig 

Fields

data NodeEvent Source #

Event originating from the node. Aggregates events from the peer manager, chain, and any connected peers.

Constructors

ManagerEvent !ManagerEvent

event originating from peer manager

ChainEvent !ChainEvent

event originating from chain process

PeerEvent !(Peer, PeerEvent)

event originating from a peer

data ManagerEvent Source #

Peer manager event.

Constructors

ManagerConnect !Peer

a new peer connected and its handshake completed

ManagerDisconnect !Peer

a peer disconnected

data ChainEvent Source #

Events originating from chain process.

Constructors

ChainNewBest !BlockNode

chain has new best block

ChainSynced !BlockNode

chain is in sync with the network

Instances
Eq ChainEvent Source # 
Instance details

Defined in Network.Haskoin.Node.Common

Show ChainEvent Source # 
Instance details

Defined in Network.Haskoin.Node.Common

data PeerEvent Source #

Events originating from a peer.

Constructors

TxAvail ![TxHash]

peer sent transaction inventory

GotBlock !Block

peer sent a Block

GotMerkleBlock !MerkleBlock

peer sent a MerkleBlock

GotTx !Tx

peer sent a Tx

GotPong !Word64

peer responded to a Ping

SendBlocks !GetBlocks

peer is requesting some blocks

SendHeaders !GetHeaders

peer is requesting some headers

SendData ![InvVector]

per is requesting an inventory

TxNotFound !TxHash

peer could not find transaction

BlockNotFound !BlockHash

peer could not find block

WantMempool

peer wants our mempool

Rejected !Reject

peer rejected something we sent

data PeerException Source #

Reasons why a peer may stop working.

Constructors

PeerMisbehaving !String

peer was a naughty boy

DecodeMessageError !String

incoming message could not be decoded

CannotDecodePayload !String

incoming message payload could not be decoded

PeerIsMyself

nonce for peer matches ours

PayloadTooLarge !Word32

message payload too large

PeerAddressInvalid

peer address did not parse with fromSockAddr

BloomFiltersNotSupported

peer does not support bloom filters

PeerSentBadHeaders

peer sent wrong headers

NotNetworkPeer

peer is SPV and cannot serve blockchain data

PeerNoSegWit

peer has no segwit support

PeerTimeout

request to peer timed out

withNode :: (MonadLoggerIO m, MonadUnliftIO m) => NodeConfig -> ((Manager, Chain) -> m a) -> m a Source #

managerGetPeerVersion :: MonadIO m => Peer -> Manager -> m (Maybe Word32) Source #

Get version of peer from manager.

managerGetPeerBest :: MonadIO m => Peer -> Manager -> m (Maybe BlockNode) Source #

Get best block for peer from manager.

managerGetPeers :: MonadIO m => Manager -> m [OnlinePeer] Source #

Get list of peers from manager.

managerGetPeer :: MonadIO m => Manager -> Peer -> m (Maybe OnlinePeer) Source #

Get peer information for a peer from manager.

managerKill :: MonadIO m => PeerException -> Peer -> Manager -> m () Source #

Ask manager to kill a peer with the provided exception.

setManagerFilter :: MonadIO m => BloomFilter -> Manager -> m () Source #

Set bloom filters in peer manager.

sendMessage :: MonadIO m => Message -> Peer -> m () Source #

Send a network message to peer.

getMerkleBlocks :: MonadIO m => Peer -> [BlockHash] -> m () Source #

Request Merkle blocks from peer.

peerGetBlocks :: MonadIO m => Network -> Peer -> [BlockHash] -> m () Source #

Request full blocks from peer.

peerGetTxs :: MonadIO m => Network -> Peer -> [TxHash] -> m () Source #

Request transactions from peer.

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.

chainBlockMain :: MonadIO m => BlockHash -> Chain -> m Bool Source #

Is given BlockHash in the main chain?

chainIsSynced :: MonadIO m => Chain -> m Bool Source #

Is chain in sync with network?

myVersion :: Word32 Source #

Our protocol version.