Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@brtnetwork/brt-binary-codec

BRTNetwork2ISC1.1.1TypeScript support: included

BRT Ledger binary codec

readme

brt-binary-codec NPM

Functions to encode/decode to/from the ripple binary serialization format

NPM

API

> const api = require('brt-binary-codec')

decode(binary: string): object

Decode a hex-string into a transaction object.

> api.decode('1100612200000000240000000125000000072D0000000055DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF6240000002540BE4008114D0F5430B66E06498D4CEEC816C7B3337F9982337')
{
  LedgerEntryType: 'AccountRoot',
  Flags: 0,
  Sequence: 1,
  PreviousTxnLgrSeq: 7,
  OwnerCount: 0,
  PreviousTxnID: 'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF',
  Balance: '10000000000',
  Account: 'bKtiLzjoVexS2uAGC5dSYJMapeUUhaZJQv'
}

encode(json: object): string

Encode a transaction object into a hex-string. Note that encode filters out fields with undefined values.

> api.encode({
  LedgerEntryType: 'AccountRoot',
  Flags: 0,
  Sequence: 1,
  PreviousTxnLgrSeq: 7,
  OwnerCount: 0,
  PreviousTxnID: 'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF',
  Balance: '10000000000',
  Account: 'bKtiLzjoVexS2uAGC5dSYJMapeUUhaZJQv' 
})
'1100612200000000240000000125000000072D0000000055DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF6240000002540BE4008114D0F5430B66E06498D4CEEC816C7B3337F9982337'

X-Address Compatibility

  • brt-binary-codec handles X-addresses by looking for a few specific files (Account/SourceTag, Destination/DestinationTag).
  • If other fields (in the future) must to support X-addresses with tags, this library will need to be updated.
  • When decoding rippled binary, the output will always output classic address + tag, with no X-addresses. X-address support only applies when encoding to binary.

Encoding Currency Codes

  • The standard format for currency codes is a three-letter string such as USD. This is intended for use with ISO 4217 Currency Codes.
  • Currency codes must be exactly 3 ASCII characters in length and there are a few other rules.
  • brt-binary-codec allows any 3-character ASCII string to be encoded as a currency code, although rippled may enforce tighter restrictions.
  • When decoding, if a currency code is three uppercase letters or numbers (/^[A-Z0-9]{3}$/), then it will be decoded into that string. For example,0000000000000000000000004142430000000000 decodes as ABC.
  • When decoding, if a currency code is does not match the regex, then it is not considered to be an ISO 4217 or pseudo-ISO currency. brt-binary-codec will return a 160-bit hex-string (40 hex characters). For example, 0000000000000000000000006142430000000000 (aBC) decodes as 0000000000000000000000006142430000000000 because it contains a lowercase letter.

encodeForSigning(json: object): string

Encode the transaction object for signing.

encodeForSigningClaim(json: object): string

Encode the transaction object for payment channel claim.

encodeForMultisigning(json: object, signer: string): string

Encode the transaction object for multi-signing.

encodeQuality(value: string): string

> api.encodeQuality('195796912.5171664')
'5D06F4C3362FE1D0'

decodeQuality(value: string): string

> api.decodeQuality('5D06F4C3362FE1D0')
'195796912.5171664'

decodeLedgerData(binary: string): object

> api.decodeLedgerData("01E91435016340767BF1C4A3EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F873B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D521276CDE21276CE60A00")
{
  ledger_index: 32052277,
  total_coins: '99994494362043555',
  parent_hash: 'EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6',
  transaction_hash: 'DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F87',
  account_hash: '3B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D5',
  parent_close_time: 556231902,
  close_time: 556231910,
  close_time_resolution: 10,
  close_flags: 0
}

Tests

Run unit tests with:

yarn test

Use --coverage to generate and display code coverage information:

yarn test --coverage

This tells jest to output code coverage info in the ./coverage directory, in addition to showing it on the command line.

changelog

brt-binary-codec Release History

1.1.1 (2021-02-12)

  • PathSet.toJSON() does not return undefined values
  • Add support for X-Addresses in Issued Currency Amounts
  • Fix STArray error message

1.1.0 (2020-12-03)

  • Add support for Tickets (TicketBatch amendment)
  • Fix web browser compatibility

1.0.2 (2020-09-11)

  • Allow currencies to be encoded from any 3 character ASCII code

1.0.1 (2020-09-08)

  • Filter out fields with undefined values

1.0.0 (2020-08-17)

  • Migrate to TypeScript
    • Javascript classes used
    • Generics for constructing core types
  • Reduced dependencies
    • Dependent on create-hash, decimal.js, brt-address-codec
  • Migrate testing to Jest and added tests
    • Tests for pseudo-transactions
  • Added support for NegativeUNL pseudo-transactions

0.2.6 (2019-12-31)

  • Update dependencies
    • decimal.js, fs-extra, mocha, handlebars, bn.js, babel-eslint, brt-address-codec

0.2.5 (2019-12-14)

  • Add support for AccountDelete (#37)

0.2.4 (2019-09-04)

  • Update brt-address-codec to 3.0.4

0.2.3 (2019-08-29)

  • Expand node version compatibility (#32, #33)

0.2.2 (2019-07-26)

  • Input validation - Amount and Fee should not allow fractional BRT drops (#31)
  • Fix lint errors
  • Update dependencies (including lodash and mocha)
  • Require node 10 (.nvmrc)
  • Remove assert-diff
  • Remove codecov.io as it did not appear to work. The package.json script was:
    • "codecov": "cat ./coverage/coverage.json | ./node_modules/codecov.io/bin/codecov.io.js"

0.2.1

  • Add tecKILLED from amendment fix1578 (PR #27 fixes #25)

0.2.0

0.1.14

  • Skip amount validation when deserializing f72c115

0.1.13

  • Add Check, CheckCreate, CheckCash, CheckCancel

0.1.11

  • Add ledger header decode function

0.1.8

0.1.7

0.1.6

0.1.3