{"_id":"@axerunners/axe-protocol","_rev":"1-d6be16f3b55e49f76a4d45ab92291886","name":"@axerunners/axe-protocol","dist-tags":{"latest":"3.0.1"},"versions":{"3.0.1":{"name":"@axerunners/axe-protocol","version":"3.0.1","description":"AXE network protocol streams","keywords":["axe","networking","p2p","network","encode","decode","webcoin","axerunners"],"homepage":"https://github.com/axerunners/axe-protocol#readme","bugs":{"url":"https://github.com/axerunners/axe-protocol/issues"},"author":{"name":"AXErunners"},"license":"MIT","files":["index.js","src"],"main":"index.js","repository":{"type":"git","url":"git+https://github.com/axerunners/axe-protocol.git"},"scripts":{"test":"standard && nyc tape test/*.js | faucet && nyc report","test-integration":"tape test/integration/*.js | faucet","test-browser":"test/browser.sh"},"dependencies":{"bl":"^1.0.1","buffer-equals":"^1.0.3","create-hash":"^1.1.2","from2":"^2.1.1","ip":"^1.1.0","through2":"^2.0.0","varstruct":"^5.2.0","varuint-bitcoin":"^1.0.1"},"devDependencies":{"bitcoin":"^3.0.1","bitcoinjs-lib":"^2.2.0","buffer-reverse":"^1.0.1","coininfo":"^0.8.1","faucet":"0.0.1","nyc":"^6.1.1","standard":"^6.0.3","stream-buffers":"^3.0.0","tape":"^4.5.1","tmp":"0.0.28","zuul":"^3.10.1"},"gitHead":"e8c6a234c10d7b97bbe176eaef32c4d748dbfb73","_id":"@axerunners/axe-protocol@3.0.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"charlie137","email":"charlie@axerunners.com"},"dist":{"integrity":"sha512-ZAMQtTlgc4DuNvrINNV/ufp/JPZnjOa43g399tRYuAcYcOSZ6D+1HlARHUzomGQ1o2w+4eERkSZFhcNLDsTSeg==","shasum":"2c4cf3357fe0ffa4e2cd51855c82d5cbb337cbef","tarball":"https://registry.npmjs.org/@axerunners/axe-protocol/-/axe-protocol-3.0.1.tgz","fileCount":7,"unpackedSize":19963,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbK9SkCRA9TVsSAnZWagAAL7MQAIHGalE8zPUyh0dzZMO3\naMQRitR0XivyNEy2cfAVxczGRvTnpIkrIBR8+99CKSSozRODgN1MlTI0RYbi\nVvcNTdxtfGyTRynHha7cP5URmar98BVrUXzegpPcXeithAkiB+8iw+c6A4e/\n9KOyKRzezZ72auVeYOndvSTaXjMzwXar8mfonBdKtOA8OdGkOVjMw2hRozfk\nQ6/AWiVTaKXQOK4DeWgIyFkio4TQoT0AsAfgHb6xilMujKut6QuPRh0WSqLT\n7ttHjTSee6JcyF9SjpbINBIebcAxuFM+OmNU2ID4v3+rqmnM19rzQdICGAKN\nzpDAVepWZbzV3/2w+qWRnAUYwTnn+quNltiwFAv+dsBBFHuFRyKVrgXHAAzq\nLgBfvqWpMuh056aX/dS4JP09MSG7wgtwLBXTqHKSbwRh2PCsvn7vItyXfsh5\nBYivcenIn2rm+9J5PM/Pj/jv2zXcRocsDeNufAEa/LPQwCJLEJBdyXKDuxyu\n0ePC5HKcObvp9r+mLlAgPt4rfPh0GsZUPlFQ7NSMId0vHoY9tn801e4Rha0S\n/J8FZ/Nm5/4y56j+0B0ZX3vpPLdNJIoi+5zKtoxmMXy1PHEb2i7vIu9qgAkO\nTkuF8sI9kNaJy3tRWlEKoloWNxx0JjWuFQzbuNvnZybFYbA3/BBBjwTHcZWU\nYlQF\r\n=OeWG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDASVqj2GDBCtNoUQxRtf9d/fLzPMp59jwSykvLPreY3wIgLEDX6MLcnPBghLkDFAulX/TO16RC7ROrHm/gPRAwXbc="}]},"maintainers":[{"name":"charlie137","email":"charlie@axerunners.com"},{"name":"ddude1","email":"bence.coronation@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/axe-protocol_3.0.1_1529599140469_0.3782203749298614"},"_hasShrinkwrap":false}},"time":{"created":"2018-06-21T16:39:00.279Z","3.0.1":"2018-06-21T16:39:00.530Z","modified":"2022-04-04T17:09:33.515Z"},"maintainers":[{"name":"charlie137","email":"charlie@axerunners.com"},{"name":"ddude1","email":"bence.coronation@gmail.com"}],"description":"AXE network protocol streams","homepage":"https://github.com/axerunners/axe-protocol#readme","keywords":["axe","networking","p2p","network","encode","decode","webcoin","axerunners"],"repository":{"type":"git","url":"git+https://github.com/axerunners/axe-protocol.git"},"author":{"name":"AXErunners"},"bugs":{"url":"https://github.com/axerunners/axe-protocol/issues"},"license":"MIT","readme":"# axe-protocol\n\n[![npm version](https://img.shields.io/npm/v/axe-protocol.svg)](https://www.npmjs.com/package/axe-protocol)\n[![Build Status](https://travis-ci.com/AXErunners/axe-protocol.svg?branch=master)](https://travis-ci.com/AXErunners/axe-protocol)\n[![Dependency Status](https://david-dm.org/axerunners/axe-protocol.svg)](https://david-dm.org/axerunners/axe-protocol)\n\n**AXE network protocol streams**\n\nThis module encodes and decodes low-level network protocol data using streams.\n\n## Usage\n\n`npm install @axerunners/axe-protocol`\n\n```js\nconst net = require('net');\nconst bp = require('@axerunners/axe-protocol');\n\nconst decoder = bp.createDecodeStream();\ndecoder.on('data', message => console.log);\n\nconst encoder = bp.createEncodeStream();\n\nconst socket = net.connect(8333, '127.0.0.1');\nsocket.pipe(decoder);\nencoder.pipe(socket);\n\nencoder.write({\n  magic: 0xb5ce6b04,\n  command: 'ping',\n  payload: {\n    nonce: new Buffer('0123456789abcdef', 'hex')\n  }\n})\n```\n\n### Methods\n\n#### `createDecodeStream([opts])`\n\nCreates a stream which parses raw network bytes written to it and outputs message objects.\n\nOpts may contain:\n```js\n{\n  magic: Number\n  // If provided, the decoder will check if messages' \"magic\" field matches\n  // this value. If it does not match, the stream will emit an error.\n}\n```\n\n#### `createEncodeStream([opts])`\n\nCreates a stream which encodes message objects to raw network bytes.\n\nOpts may contain:\n```js\n{\n  magic: Number\n  // If provided, the encoder will automatically add the \"magic\" field to each\n  // message written to it.\n}\n```\n\n### Format\n\n**Decoder**\n\nEmitted by the decoder:\n```js\n{\n  magic: Number,\n  command: String,\n  length: Number,\n  checksum: Buffer, // 8 bytes,\n  payload: Object // see below for detailed payload formats\n}\n```\n\n**Encoder**\n\nWritten to the encoder:\n```js\n{\n  magic: Number, // optional if you set this in the options\n  command: String,\n  payload: Object // see below for detailed payload formats\n}\n```\n\n### Payload Reference\n\nThe formats for the objects used as message payloads for the various commands are as follows. See [the wiki](https://en.bitcoin.it/wiki/Protocol_documentation) for more information about these messages.\n\n#### `version`\n```js\n{\n  version: Number,\n  services: Buffer, // 8 bytes\n  timestamp: Number,\n  receiverAddress: {\n    services: Buffer, // 8 bytes\n    address: String, // ipv4 or ipv6\n    port: Number\n  },\n  senderAddress: {\n    services: Buffer, // 8 bytes\n    address: String, // ipv4 or ipv6\n    port: Number\n  },\n  nonce: Buffer, // 8 bytes\n  userAgent: String,\n  startHeight: Number,\n  relay: Boolean\n}\n```\n\n#### `verack`, `getaddr`, `mempool`, `filterclear`, `sendheaders`\n```js\n// no payload needed\n```\n\n#### `addr`\n```js\n[\n  {\n    time: Number,\n    services: Buffer, // 8 bytes\n    address: String, // ipv4 or ipv6\n    port: Number\n  },\n  ...\n]\n```\n\n#### `inv`, `getdata`, `notfound`\n```js\n[\n  {\n    type: Number,\n    hash: Buffer // 32 bytes\n  },\n  ...\n]\n```\n\n#### `getblocks`, `getheaders`\n```js\n{\n  version: Number,\n  locator: [\n    Buffer // 32 bytes\n  ],\n  hashStop: Buffer // 32 bytes\n}\n```\n\n#### `tx`\n```js\n{\n  version: Number,\n  ins: [\n    {\n      hash: Buffer, // 32 bytes\n      index: Number,\n      script: Buffer, // varying length\n      sequence: Number\n    },\n    ...\n  ],\n  outs: [\n    {\n      value: BN, // from 'bn.js' package\n      script: Buffer // varying length\n    },\n    ...\n  ],\n  locktime: Number\n}\n```\n\n#### `block`\n```js\n{\n  header: {\n    version: Number,\n    prevHash: Buffer, // 32 bytes\n    merkleRoot: Buffer, // 32 bytes\n    timestamp: Number,\n    bits: Number,\n    nonce: Number,\n  },\n  transactions: [\n    {}, // same format as 'tx' message\n    ...\n  ]\n}\n```\n\n#### `headers`\n```js\n[\n  {\n    header: {\n      version: Number,\n      prevHash: Buffer, // 32 bytes\n      merkleRoot: Buffer, // 32 bytes\n      timestamp: Number,\n      bits: Number,\n      nonce: Number,\n    },\n    nTransactions: Number\n  },\n  ...\n]\n```\n\n#### `ping`, `pong`\n```js\n{\n  nonce: Buffer // 8 bytes\n}\n```\n\n#### `reject`\n```js\n{\n  message: String,\n  ccode: Number,\n  reason: String,\n  data: Buffer // varying length\n}\n```\n\n#### `filterload`\n```js\n{\n  data: Buffer, // varying length\n  nHashFuncs: Number,\n  nTweak: Number,\n  nFlags: Number\n}\n```\n\n#### `filteradd`\n```js\n{\n  data: Buffer // varying length\n}\n```\n\n#### `merkleblock`\n```js\n{\n  header: {\n    version: Number,\n    prevHash: Buffer, // 32 bytes\n    merkleRoot: Buffer, // 32 bytes\n    timestamp: Number,\n    bits: Number,\n    nonce: Number\n  },\n  numTransactions: Number,\n  hashes: [\n    Buffer // 32 bytes\n  ],\n  flags: Buffer // varying length\n}\n```\n\n#### `alert`\n```js\n{\n  payload: Buffer, // varying length\n  signature: Buffer // varying length\n}\n```\n","readmeFilename":"README.md"}