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) CONNECT_TIMEOUT :Number
Connection timeout.
Type:
- Number
- Source:
(static, constant) DRAIN_MAX :Number
Max output bytes buffered before invoking stall behavior for peer.
Type:
- Number
- Source:
(static, constant) HANDSHAKE_TIMEOUT :Number
Handshake timeout.
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) 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
getServiceNames() → {Array.<String>}
Returns human readable list of services that are available.
- Source:
Returns:
- Type
- Array.<String>
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: