Class: Peer

net.Peer(options)

Represents a network peer.

Constructor

new Peer(options)

Create a peer.

Extends:
  • EventEmitter
Parameters:
Name Type Description
options PeerOptions
Source:

Extends

  • EventEmitter

Members

(static, constant) BLOCK_TIMEOUT :Number

Required time for loader to respond with block/merkleblock.

Type:
  • Number
Default Value:
  • 120000
Source:

(static, constant) DRAIN_MAX :Number

Max output bytes buffered before invoking stall behavior for peer.

Type:
  • Number
Source:

(static, constant) INV_INTERVAL :Number

Interval to flush invs. Higher means more invs (usually txs) will be accumulated before flushing.

Type:
  • Number
Default Value:
  • 5000
Source:

(static, constant) NAME_TIMEOUT :Number

Required time for peer to respond with a name.

Type:
  • Number
Default Value:
  • 5000
Source:

(static, constant) PING_INTERVAL :Number

Interval for pinging peers.

Type:
  • Number
Default Value:
  • 30000
Source:

(static, constant) RESPONSE_TIMEOUT :Number

Required time for peers to respond to messages (i.e. getblocks/getdata).

Type:
  • Number
Default Value:
  • 30000
Source:

(static, constant) STALL_INTERVAL :Number

Interval to check for drainage and required responses from peer.

Type:
  • Number
Default Value:
  • 5000
Source:

(static, constant) TIMEOUT_INTERVAL :Number

Generic timeout interval.

Type:
  • Number
Source:

(static, constant) TX_TIMEOUT :Number

Required time for loader to respond with a tx.

Type:
  • Number
Default Value:
  • 120000
Source:

Methods

(static) fromInbound(options, socket) → {Peer}

Create inbound peer from socket.

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

(static) fromOptions(options) → {Peer}

Create a peer from options.

Parameters:
Name Type Description
options Object
Source:
Returns:
Type
Peer

(static) fromOutbound(options, addr) → {Peer}

Create outbound peer from net address.

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

_bind(socket)

Bind to socket.

Parameters:
Name Type Description
socket net.Socket
Source:

(async) _open() → {Promise}

Open and perform initial handshake.

Source:
Returns:
Type
Promise

accept(socket) → {net.Socket}

Accept an inbound socket.

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

(private) addTimeout(packet)

Potentially add response timeout.

Parameters:
Name Type Description
packet Packet
Source:

announceAirdrop(proofs)

Broadcast transactions to peer.

Parameters:
Name Type Description
proofs Array.<AirdropProof>
Source:

announceBlock(blocks)

Broadcast blocks to peer.

Parameters:
Name Type Description
blocks Array.<Block>
Source:

announceClaim(claims)

Broadcast transactions to peer.

Parameters:
Name Type Description
claims Array.<Claim>
Source:

announceTX(txs)

Broadcast transactions to peer.

Parameters:
Name Type Description
txs Array.<TX>
Source:

ban()

Ban peer.

Source:

blockType() → {Number}

Calculate peer block inv type (filtered, compact, witness, or non-witness).

Source:
Returns:
Type
Number

connect(addr) → {net.Socket}

Create the socket and begin connecting. This method will use options.createSocket if provided.

Parameters:
Name Type Description
addr NetAddress
Source:
Returns:
Type
net.Socket

destroy()

Disconnect from and destroy the peer.

Source:

drain() → {Promise}

Wait for a drain event.

Source:
Returns:
Type
Promise

(private) error(err)

Emit an error and destroy the peer.

Parameters:
Name Type Description
err String | Error
Source:

feedParser(data)

Feed data to the parser.

Parameters:
Name Type Description
data Buffer
Source:

(async, private) finalize() → {Promise}

Finalize peer after handshake.

Source:
Returns:
Type
Promise

(private) flushInv()

Flush inv queue.

Source:

framePacket(cmd, payload) → {Buffer}

Frame a payload with a header.

Parameters:
Name Type Description
cmd String

Packet type.

payload Buffer
Source:
Returns:

Payload with header prepended.

Type
Buffer

(private) fulfill(packet)

Potentially finish response timeout.

Parameters:
Name Type Description
packet Packet
Source:

getAirdrop(hashes)

Send batched getdata to peer (airdrops).

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

getBlock(hashes)

Send batched getdata to peer (blocks).

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

getClaim(hashes)

Send batched getdata to peer (claims).

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

getData(items)

Send getdata to peer.

Parameters:
Name Type Description
items Array.<InvItem>
Source:

getFullBlock(hash)

Send getdata to peer for a single block.

Parameters:
Name Type Description
hash Hash
Source:

getItems(type, hashes)

Send batched getdata to peer.

Parameters:
Name Type Description
type InvType
hashes Array.<Hash>
Source:

(async) getName() → {Promise}

Do a reverse dns lookup on peer's addr.

Source:
Returns:
Type
Promise

getTX(hashes)

Send batched getdata to peer (txs).

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

(private) handleDrain()

Handle drain event.

Source:

(async, private) handleFeeFilter(packet)

Handle feefilter packet.

Parameters:
Name Type Description
packet FeeFilterPacket
Source:

(async, private) handleFilterAdd(packet)

Handle filteradd packet.

Parameters:
Name Type Description
packet FilterAddPacket
Source:

(async, private) handleFilterClear(packet)

Handle filterclear packet.

Parameters:
Name Type Description
packet FilterClearPacket
Source:

(async, private) handleFilterLoad(packet)

Handle filterload packet.

Parameters:
Name Type Description
packet FilterLoadPacket
Source:

(async, private) handlePacket(packet)

Handle a packet payload without a lock.

Parameters:
Name Type Description
packet Packet
Source:

(async, private) handlePing(packet)

Handle ping packet.

Parameters:
Name Type Description
packet PingPacket
Source:

(async, private) handlePong(packet)

Handle pong packet.

Parameters:
Name Type Description
packet PongPacket
Source:

(async, private) handleSendCmpct(packet)

Handle sendcmpct packet.

Parameters:
Name Type Description
packet SendCmpctPacket
Source:

(async, private) handleSendHeaders(packet)

Handle sendheaders packet.

Parameters:
Name Type Description
packet SendHeadersPacket
Source:

(async, private) handleVerack(packet)

Handle verack packet.

Parameters:
Name Type Description
packet VerackPacket
Source:

(async, private) handleVersion(packet)

Handle version packet.

Parameters:
Name Type Description
packet VersionPacket
Source:

hasCompact() → {Boolean}

Test whether the peer sent us a compatible compact block handshake.

Source:
Returns:
Type
Boolean

hasServices(services) → {Boolean}

Test whether required services are available.

Parameters:
Name Type Description
services Number
Source:
Returns:
Type
Boolean

hostname() → {String}

Getter to retrieve hostname.

Source:
Returns:
Type
String

increaseBan(score) → {Boolean}

Increase banscore on peer.

Parameters:
Name Type Description
score Number
Source:
Returns:
Type
Boolean

(private) init()

Begin peer initialization.

Source:

(async, private) initConnect() → {Promise}

Wait for connection.

Source:
Returns:
Type
Promise

(private) initStall() → {Promise}

Setup stall timer.

Source:
Returns:
Type
Promise

(async, private) initVersion() → {Promise}

Handle post handshake.

Source:
Returns:
Type
Promise

inspect() → {String}

Inspect the peer.

Source:
Returns:
Type
String

(private) maybeTimeout()

Potentially timeout peer if it hasn't responded.

Source:

(private) needsDrain(size)

Add to drain counter.

Parameters:
Name Type Description
size Number
Source:

(async) open() → {Promise}

Open and perform initial handshake.

Source:
Returns:
Type
Promise

queueInv(items)

Send inv to a peer.

Parameters:
Name Type Description
items Array.<InvItem>
Source:

(async, private) readPacket(packet)

Handle a packet payload.

Parameters:
Name Type Description
packet Packet
Source:

reject(msg, err) → {Boolean}

Send a reject packet to peer.

Parameters:
Name Type Description
msg Number
err VerifyError
Source:
Returns:
Type
Boolean

(private) request(type, timeout) → {RequestEntry}

Wait for a packet to be received from peer.

Parameters:
Name Type Description
type Number

Packet type.

timeout Number
Source:
Returns:
Type
RequestEntry

(private) response(type, payload)

Fulfill awaiting requests created with Peer#request.

Parameters:
Name Type Description
type Number

Packet type.

payload Object
Source:

send(packet)

Send a packet.

Parameters:
Name Type Description
packet Packet
Source:

sendCompact(mode)

Send a sendcmpct packet.

Parameters:
Name Type Description
mode Number
Source:

(private) sendCompactBlock(block) → {Boolean}

Send a compact block.

Parameters:
Name Type Description
block Block
Source:
Returns:
Type
Boolean

sendFeeRate(rate)

Set a fee rate filter for the peer.

Parameters:
Name Type Description
rate Rate
Source:

sendFilterLoad()

Send filterload to update the local bloom filter.

Source:

sendGetAddr()

Send a getaddr packet.

Source:

sendGetBlocks(locator, stop)

Send getblocks to peer.

Parameters:
Name Type Description
locator Array.<Hash>

Chain locator.

stop Hash

Hash to stop at.

Source:

sendGetHeaders(locator, stop)

Send getheaders to peer. Note that unlike getblocks, getheaders can have a null locator.

Parameters:
Name Type Description
locator Array.<Hash>

Chain locator.

stop Hash

Hash to stop at.

Source:

sendGetProof(root, key)

Send a getproof packet.

Parameters:
Name Type Description
root Buffer
key Buffer
Source:

sendHeaders(items)

Send headers to a peer.

Parameters:
Name Type Description
items Array.<Headers>
Source:

sendInv(items)

Force send an inv (no filter check).

Parameters:
Name Type Description
items Array.<InvItem>
Source:

sendMempool()

Send mempool to peer.

Source:

sendPing()

Send a ping packet.

Source:

sendProof(version, root, key, proof)

Send a proof packet.

Parameters:
Name Type Description
version Number
root Buffer
key Buffer
proof Proof
Source:

sendRaw(packet)

Send a packet.

Parameters:
Name Type Description
packet Packet
Source:

sendReject(code, reason, msg, hash)

Send reject to peer.

Parameters:
Name Type Description
code Number
reason String
msg Number
hash Hash
Source:

sendVersion()

Send a version packet.

Source:

(async) tryOpen() → {Promise}

Open and perform initial handshake (without rejection).

Source:
Returns:
Type
Promise

txType() → {Number}

Calculate peer tx inv type (witness or non-witness).

Source:
Returns:
Type
Number

(private) wait(type) → {Promise}

Wait for a packet to be received from peer.

Parameters:
Name Type Description
type Number

Packet type.

Source:
Returns:
  • Returns Object(payload). Executed on timeout or once packet is received.
Type
Promise

write(data)

Write data to the peer's socket.

Parameters:
Name Type Description
data Buffer
Source: