terracoin-protocol
Terracoin network protocol streams
This module encodes and decodes low-level network protocol data using streams.
Usage
npm install terracoin-protocol
var net = var bp = var decoder = bpdecoder var encoder = bp var socket = netsocketencoder encoder
Methods
createDecodeStream([opts])
Creates a stream which parses raw network bytes written to it and outputs message objects.
Opts may contain:
magic: Number // If provided, the decoder will check if messages' "magic" field matches // this value. If it does not match, the stream will emit an error.
createEncodeStream([opts])
Creates a stream which encodes message objects to raw network bytes.
Opts may contain:
magic: Number // If provided, the encoder will automatically add the "magic" field to each // message written to it.
Format
Decoder
Emitted by the decoder:
magic: Number command: String length: Number checksum: Buffer // 8 bytes, payload: Object // see below for detailed payload formats
Encoder
Written to the encoder:
magic: Number // optional if you set this in the options command: String payload: Object // see below for detailed payload formats
Payload Reference
The formats for the objects used as message payloads for the various commands are as follows. See the wiki for more information about these messages.
version
version: Number services: Buffer // 8 bytes timestamp: Number receiverAddress: services: Buffer // 8 bytes address: String // ipv4 or ipv6 port: Number senderAddress: services: Buffer // 8 bytes address: String // ipv4 or ipv6 port: Number nonce: Buffer // 8 bytes userAgent: String startHeight: Number relay: Boolean
verack
, getaddr
, mempool
, filterclear
, sendheaders
// no payload needed
addr
time: Number services: Buffer // 8 bytes address: String // ipv4 or ipv6 port: Number ...
inv
, getdata
, notfound
type: Number hash: Buffer // 32 bytes ...
getblocks
, getheaders
version: Number locator: Buffer // 32 bytes hashStop: Buffer // 32 bytes
tx
version: Number ins: hash: Buffer // 32 bytes index: Number script: Buffer // varying length sequence: Number ... outs: value: BN // from 'bn.js' package script: Buffer // varying length ... locktime: Number
block
header: version: Number prevHash: Buffer // 32 bytes merkleRoot: Buffer // 32 bytes timestamp: Number bits: Number nonce: Number transactions: {} // same format as 'tx' message ...
headers
header: version: Number prevHash: Buffer // 32 bytes merkleRoot: Buffer // 32 bytes timestamp: Number bits: Number nonce: Number nTransactions: Number ...
ping
, pong
nonce: Buffer // 8 bytes
reject
message: String ccode: Number reason: String data: Buffer // varying length
filterload
data: Buffer // varying length nHashFuncs: Number nTweak: Number nFlags: Number
filteradd
data: Buffer // varying length
merkleblock
header: version: Number prevHash: Buffer // 32 bytes merkleRoot: Buffer // 32 bytes timestamp: Number bits: Number nonce: Number numTransactions: Number hashes: Buffer // 32 bytes flags: Buffer // varying length
alert
payload: Buffer // varying length signature: Buffer // varying length