Class: Pool

net.Pool

new Pool(options)

A pool of peers for handling all network activity.

Parameters:
Name Type Description
options Object
Properties
Name Type Attributes Default Description
chain Chain
mempool Mempool <nullable>
maxOutbound Number <optional>
<nullable>
8

Maximum number of peers.

spv Boolean <nullable>

Do an SPV sync.

noRelay Boolean <nullable>

Whether to ask for relayed transactions.

feeRate Number <optional>
<nullable>

Fee filter rate.

invTimeout Number <optional>
<nullable>
60000

Timeout for broadcasted objects.

listen Boolean <nullable>

Whether to spin up a server socket and listen for peers.

selfish Boolean <nullable>

A selfish pool. Will not serve blocks, headers, hashes, utxos, or transactions to peers.

broadcast Boolean <nullable>

Whether to automatically broadcast transactions accepted to our mempool.

seeds Array:.<String:>
createSocket function <nullable>

Custom function to create a socket. Must accept (port, host) and return a node-like socket.

createServer function <nullable>

Custom function to create a server. Must return a node-like server.

Source:
Fires:
  • Pool#event:block
  • Pool#event:tx
  • Pool#event:peer
  • Pool#event:open
  • Pool#event:close
  • Pool#event:error
  • Pool#event:reject

Methods

(private) _addBlock(peer, block) → {Promise}

Attempt to add block to chain (without a lock).

Parameters:
Name Type Description
peer Peer
block Block
Source:
Returns:
Type
Promise

_connect() → {Promise}

Connect to the network (no lock).

Source:
Returns:
Type
Promise

_disconnect() → {Promise}

Disconnect from the network.

Source:
Returns:
Type
Promise

(private) _handleHeaders(peer, packet) → {Promise}

Handle headers packet from a given peer without a lock.

Parameters:
Name Type Description
peer Peer
packet HeadersPacket
Source:
Returns:
Type
Promise

(private) _handleInv(peer, packet)

Handle inv packet (without a lock).

Parameters:
Name Type Description
peer Peer
packet InvPacket
Source:

(private) _handleMerkleBlock(peer, block)

Handle merkleblock packet (without a lock).

Parameters:
Name Type Description
peer Peer
block MerkleBlockPacket
Source:

(private) _handleTX(peer, packet) → {Promise}

Handle a transaction. Attempt to add to mempool (without a lock).

Parameters:
Name Type Description
peer Peer
packet TXPacket
Source:
Returns:
Type
Promise

(private) _init()

Initialize the pool.

Source:

(private) addBlock(peer, block) → {Promise}

Attempt to add block to chain.

Parameters:
Name Type Description
peer Peer
block Block
Source:
Returns:
Type
Promise

(private) addInbound(socket)

Create an inbound peer from an existing socket.

Parameters:
Name Type Description
socket net.Socket
Source:

(private) addLoader()

Add a loader peer. Necessary for a sync to even begin.

Source:

(private) addOutbound()

Create an outbound non-loader peer. These primarily exist for transaction relaying.

Source:

announceBlock(tx)

Announce a block to all peers.

Parameters:
Name Type Description
tx Block
Source:

announceList(peer)

Announce broadcast list to peer.

Parameters:
Name Type Description
peer Peer
Source:

announceTX(tx)

Announce a transaction to all peers.

Parameters:
Name Type Description
tx TX
Source:

ban(addr)

Ban peer.

Parameters:
Name Type Description
addr NetAddress
Source:

(private) bindPeer(peer)

Bind to peer events.

Parameters:
Name Type Description
peer Peer
Source:

broadcast(msg) → {Promise}

Broadcast a transaction or block.

Parameters:
Name Type Description
msg TX | Block
Source:
Returns:
Type
Promise

connect() → {Promise}

Connect to the network.

Source:
Returns:
Type
Promise

(private) createInbound(socket) → {Peer}

Accept an inbound socket.

Parameters:
Name Type Description
socket net.Socket
Source:
Returns:
Type
Peer

(private) createOutbound(addr) → {Peer}

Create an outbound peer with no special purpose.

Parameters:
Name Type Description
addr NetAddress
Source:
Returns:
Type
Peer

disconnect() → {Promise}

Disconnect from the network.

Source:
Returns:
Type
Promise

ensureTX(peer, hashes)

Queue a getdata request to be sent. Check tx existence before requesting.

Parameters:
Name Type Description
peer Peer
hashes Array:.<Hash:>
Source:

(private) fillOutbound()

Attempt to refill the pool with peers (no lock).

Source:

(private) forceSync()

Force sending a sync to each peer.

Source:

fulfill(peer, hash) → {Boolean}

Fulfill a requested item.

Parameters:
Name Type Description
peer Peer
hash Hash
Source:
Returns:
Type
Boolean

getBlock(peer, hashes)

Queue a getdata request to be sent.

Parameters:
Name Type Description
peer Peer
hashes Array:.<Hash:>
Source:

getBlocks(peer, tip, stopnullable) → {Promise}

Send getblocks to peer after building locator.

Parameters:
Name Type Attributes Description
peer Peer
tip Hash

Tip hash to build chain locator from.

stop Hash <nullable>
Source:
Returns:
Type
Promise

(private) getBroadcasted(peer, item) → {Promise}

Get a block/tx from the broadcast map.

Parameters:
Name Type Description
peer Peer
item InvItem
Source:
Returns:
Type
Promise

getHeaders(peer, tip, stopnullable) → {Promise}

Send getheaders to peer after building locator.

Parameters:
Name Type Attributes Description
peer Peer
tip Hash

Tip to build chain locator from.

stop Hash <nullable>
Source:
Returns:
Type
Promise

getHost() → {NetAddress}

Allocate a host from the host list.

Source:
Returns:
Type
NetAddress

getIP() → {Promise}

Attempt to retrieve external IP from icanhazip.com.

Source:
Returns:
Type
Promise

getIP2() → {Promise}

Attempt to retrieve external IP from dyndns.org.

Source:
Returns:
Type
Promise

(private) getItem(peer, item) → {Promise}

Get a block/tx either from the broadcast map, mempool, or blockchain.

Parameters:
Name Type Description
peer Peer
item InvItem
Source:
Returns:
Type
Promise

(private) getNextTip(height) → {Object}

Find the next checkpoint.

Parameters:
Name Type Description
height Number
Source:
Returns:
Type
Object

getTX(peer, hashes)

Queue a getdata request to be sent.

Parameters:
Name Type Description
peer Peer
hashes Array:.<Hash:>
Source:

(private) handleAddr(peer, packet)

Handle peer addr event.

Parameters:
Name Type Description
peer Peer
packet AddrPacket
Source:

(private) handleAuthChallenge(peer, packet)

Handle authchallenge packet.

Parameters:
Name Type Description
peer Peer
packet AuthChallengePacket
Source:

(private) handleAuthPropose(peer, packet)

Handle authpropose packet.

Parameters:
Name Type Description
peer Peer
packet AuthProposePacket
Source:

(private) handleAuthReply(peer, packet)

Handle authreply packet.

Parameters:
Name Type Description
peer Peer
packet AuthReplyPacket
Source:

(private) handleBan(peer)

Handle ban event.

Parameters:
Name Type Description
peer Peer
Source:

(private) handleBlock(peer, packet) → {Promise}

Handle block packet. Attempt to add to chain.

Parameters:
Name Type Description
peer Peer
packet BlockPacket
Source:
Returns:
Type
Promise

(private) handleBlockInv(peer, hashes) → {Promise}

Handle inv packet from peer (containing only BLOCK types).

Parameters:
Name Type Description
peer Peer
hashes Array:.<Hash:>
Source:
Returns:
Type
Promise

(private) handleBlockTxn(peer, packet)

Handle blocktxn packet.

Parameters:
Name Type Description
peer Peer
packet BlockTxnPacket
Source:

(private) handleClose(peer, connected)

Handle peer close event.

Parameters:
Name Type Description
peer Peer
connected Boolean
Source:

(private) handleCmpctBlock(peer, packet)

Handle cmpctblock packet.

Parameters:
Name Type Description
peer Peer
packet CompactBlockPacket
Source:

(private) handleConnect(peer)

Handle peer connect event.

Parameters:
Name Type Description
peer Peer
Source:

(private) handleEncack(peer, packet)

Handle encack packet.

Parameters:
Name Type Description
peer Peer
packet EncackPacket
Source:

(private) handleEncinit(peer, packet)

Handle encinit packet.

Parameters:
Name Type Description
peer Peer
packet EncinitPacket
Source:

(private) handleFeeFilter(peer, packet)

Handle sendcmpct packet.

Parameters:
Name Type Description
peer Peer
packet FeeFilterPacket
Source:

(private) handleFilterAdd(peer, packet)

Handle filteradd packet.

Parameters:
Name Type Description
peer Peer
packet FilterAddPacket
Source:

(private) handleFilterClear(peer, packet)

Handle filterclear packet.

Parameters:
Name Type Description
peer Peer
packet FilterClearPacket
Source:

(private) handleFilterLoad(peer, packet)

Handle filterload packet.

Parameters:
Name Type Description
peer Peer
packet FilterLoadPacket
Source:

(private) handleGetAddr(peer, packet)

Handle getaddr packet.

Parameters:
Name Type Description
peer Peer
packet GetAddrPacket
Source:

(private) handleGetBlocks(peer, packet)

Handle getblocks packet.

Parameters:
Name Type Description
peer Peer
packet GetBlocksPacket
Source:

(private) handleGetBlockTxn(peer, packet)

Handle getblocktxn packet.

Parameters:
Name Type Description
peer Peer
packet GetBlockTxnPacket
Source:

(private) handleGetData(peer, packet)

Handle getdata packet.

Parameters:
Name Type Description
peer Peer
packet GetDataPacket
Source:

(private) handleGetHeaders(peer, packet)

Handle getheaders packet.

Parameters:
Name Type Description
peer Peer
packet GetHeadersPacket
Source:

(private) handleHeaders(peer, packet) → {Promise}

Handle headers packet from a given peer.

Parameters:
Name Type Description
peer Peer
packet HeadersPacket
Source:
Returns:
Type
Promise

(private) handleInv(peer, packet)

Handle inv packet.

Parameters:
Name Type Description
peer Peer
packet InvPacket
Source:

(private) handleMempool(peer, packet)

Handle mempool packet.

Parameters:
Name Type Description
peer Peer
packet MempoolPacket
Source:

(private) handleMerkleBlock(peer, block)

Handle merkleblock packet.

Parameters:
Name Type Description
peer Peer
block MerkleBlockPacket
Source:

(private) handleNotFound(peer, packet)

Handle peer notfound packet.

Parameters:
Name Type Description
peer Peer
packet NotFoundPacket
Source:

(private) handleOpen(peer)

Handle peer open event.

Parameters:
Name Type Description
peer Peer
Source:

(private) handlePacket(peer, packet) → {Promise}

Handle peer packet event.

Parameters:
Name Type Description
peer Peer
packet Packet
Source:
Returns:
Type
Promise

(private) handlePing(peer, packet)

Handle ping packet.

Parameters:
Name Type Description
peer Peer
packet PingPacket
Source:

(private) handlePong(peer, packet)

Handle pong packet.

Parameters:
Name Type Description
peer Peer
packet PongPacket
Source:

(private) handleReject(peer, packet)

Handle peer reject event.

Parameters:
Name Type Description
peer Peer
packet RejectPacket
Source:

(private) handleSendCmpct(peer, packet)

Handle sendcmpct packet.

Parameters:
Name Type Description
peer Peer
packet SendCmpctPacket
Source:

(private) handleSendHeaders(peer, packet) → {Promise}

Handle sendheaders packet.

Parameters:
Name Type Description
peer Peer
packet SendHeadersPacket
Source:
Returns:
Type
Promise

(private) handleSocket(socket)

Handle incoming connection.

Parameters:
Name Type Description
socket net.Socket
Source:

(private) handleTX(peer, packet) → {Promise}

Handle a transaction. Attempt to add to mempool.

Parameters:
Name Type Description
peer Peer
packet TXPacket
Source:
Returns:
Type
Promise

(private) handleTXInv(peer, hashes)

Handle peer inv packet (txs).

Parameters:
Name Type Description
peer Peer
hashes Array:.<Hash:>
Source:

(private) handleUnknown(peer, packet)

Handle unknown packet.

Parameters:
Name Type Description
peer Peer
packet UnknownPacket
Source:

(private) handleVerack(peer, packet)

Handle verack packet.

Parameters:
Name Type Description
peer Peer
packet VerackPacket
Source:

(private) handleVersion(peer, packet)

Handle peer version event.

Parameters:
Name Type Description
peer Peer
packet VersionPacket
Source:

hasBlock(hash) → {Promise}

Test whether the chain has or has seen an item.

Parameters:
Name Type Description
hash Hash
Source:
Returns:
  • Returns Boolean.
Type
Promise

hasTX(hash) → {Promise}

Test whether the mempool has or has seen an item.

Parameters:
Name Type Description
hash Hash
Source:
Returns:
  • Returns Boolean.
Type
Promise

(private) listen() → {Promise}

Start listening on a server socket.

Source:
Returns:
Type
Promise

(private) logStatus(block)

Log sync status.

Parameters:
Name Type Description
block Block
Source:

queueFilterLoad()

Queue a resend of the bloom filter.

Source:

(private) refill()

Attempt to refill the pool with peers (no lock).

Source:

(private) removePeer(peer)

Remove a peer from any list. Drop all load requests.

Parameters:
Name Type Description
peer Peer
Source:

resetChain()

Reset header chain.

Source:

(private) resolveChain(peer, hash) → {Promise}

Resolve header chain.

Parameters:
Name Type Description
peer Peer
hash Hash
Source:
Returns:
Type
Promise

(private) resolveHeaders(peer)

Request current header chain blocks.

Parameters:
Name Type Description
peer Peer
Source:

resolveOrphan(peer, orphan) → {Promise}

Send getblocks to peer after building locator and resolving orphan root.

Parameters:
Name Type Description
peer Peer
orphan Hash

Orphan hash to resolve.

Source:
Returns:
Type
Promise

(private) sendBlock(peer, item) → {Boolean}

Send a block from the broadcast list or chain.

Parameters:
Name Type Description
peer Peer
item InvItem
Source:
Returns:
Type
Boolean

sendFilterLoad()

Resend the bloom filter to peers.

Source:

sendGetAddr()

Send getaddr to all peers.

Source:

sendMempool()

Send mempool to all peers.

Source:

sendSync(peer) → {Promise}

Start syncing from peer.

Parameters:
Name Type Description
peer Peer
Source:
Returns:
Type
Promise

setFilter(filter, encnullable)

Set the spv filter.

Parameters:
Name Type Attributes Description
filter Bloom
enc String <nullable>
Source:

(private) setLoader()

Add a loader peer. Necessary for a sync to even begin.

Source:

startSync()

Start the blockchain sync.

Source:

(private) stopSync()

Stop the sync.

Source:

(private) switchSync(peer, hash) → {Promise}

Switch to getblocks.

Parameters:
Name Type Description
peer Peer
hash Hash
Source:
Returns:
Type
Promise

(private) sync()

Send a sync to each peer.

Source:

unban(addr)

Unban peer.

Parameters:
Name Type Description
addr NetAddress
Source:

(private) unlisten() → {Promise}

Stop listening on server socket.

Source:
Returns:
Type
Promise

unwatch()

Reset the spv filter (filterload, SPV-only).

Source:

watch(data, encnullable)

Watch a an address hash (filterload, SPV-only).

Parameters:
Name Type Attributes Description
data Buffer | Hash
enc String <nullable>
Source:

watchAddress(address)

Add an address to the bloom filter (SPV-only).

Parameters:
Name Type Description
address Address | Base58Address
Source:

watchOutpoint(outpoint)

Add an outpoint to the bloom filter (SPV-only).

Parameters:
Name Type Description
outpoint Outpoint
Source: