Novel Planetary Movement

    @axerunners/axe-protocol

    3.0.1 • Public • Published

    axe-protocol

    npm version Build Status Dependency Status

    AXE network protocol streams

    This module encodes and decodes low-level network protocol data using streams.

    Usage

    npm install @axerunners/axe-protocol

    const net = require('net');
    const bp = require('@axerunners/axe-protocol');
    
    const decoder = bp.createDecodeStream();
    decoder.on('data', message => console.log);
    
    const encoder = bp.createEncodeStream();
    
    const socket = net.connect(8333, '127.0.0.1');
    socket.pipe(decoder);
    encoder.pipe(socket);
    
    encoder.write({
      magic: 0xb5ce6b04,
      command: 'ping',
      payload: {
        nonce: new Buffer('0123456789abcdef', 'hex')
      }
    })

    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
    }

    Install

    npm i @axerunners/axe-protocol

    DownloadsWeekly Downloads

    2

    Version

    3.0.1

    License

    MIT

    Unpacked Size

    20 kB

    Total Files

    7

    Last publish

    Collaborators

    • charlie137
    • ddude1