Files
xahau.js/packages/ripple-binary-codec
Mayukha Vadari 91e7369f1b feat: add support for current sidechain design (#2039)
* Update definitions.json

* add new st types

* add tests

* add XChainClaim tx

* add XChainCommit tx

* add XChainCreateBridge tx

* add XChainCreateClaimID tx

* update definitions.json

* rename Bridge -> XChainBridge in binary codec, fix tests

* rename Bridge -> XChainBridge in models

* add codec support for XChainAddAttestation

* add XChainAddAttestation model

* undo debugging change

* fix linting issues

* update definitions.json for new rippled code, add new tests/update old tests

* add/update models

* update history

* update binary-codec

* add XChainModifyBridge model

* update RPCs

* update to latest rippled

* more fixes

* fix definitions.json

* fix spacing

* update definitions.json to avoid conflict with amm

* update definitions.json to resolve amm conflicts

* audit code

* more updates

* update rpcs

* switch to beta version

* add destination tag to XChainClaim

* rename IssuedCurrency -> Issue to match rippled

* update Issue form

* fix account object filters

* fix issue from typing

* fix LedgerEntry types

* fix attestation destination type

* Update definitions.json

* rename XChainAddAttestation -> XChainAddAttestationBatch

* add XChainAddClaimAttestation

* add XChainAddAccountCreateAttestation

* remove XChainAddAttestationBatch

* update definitions

* fix attestation txns

* fix attestation object

* add validate for new txs

* add Bridge ledger object

* add XChainOwnedClaimID ledger object

* add XChainOwnedCreateAccountClaimID ledger object

* update account_objects

* update models to latest rippled

* fix minor issues

* fix bridge ledger_entry

* add XChainModifyBridge flag

* Update definitions.json

* add rbc tests for the new txs

* update validateXChainModifyBridge

* add validate methods to other xchain txs

* fix isXChainBridge

* fix isIssue typing

* fix model types

* update changelog

* switch prepare to prepublishOnly

* add docs

* fix AccountObjectsType filter

* export common types

* fix account_objects filter

* update LedgerEntry

* add sidechain faucet info

* add snippet

* improve snippet

* fix spacing issues

* update ledger_entry

* remove AMMDelete tests for now

* Update definitions.json

* fix unit tests

* convert createValidate script to JS
* remove unneeded linter ignores

* respond to comments

* more snippet fixes

* make validate functions more readable

* add getXChainClaimID method to parse metadata

* re-add linter rules

* clean up common

* fix getXChainClaimID test

* return undefined for failed tx

* test: add model tests for new sidechain transactions (#2059)

* add XChainAddAttestation tests, fix model

* add XChainClaim model tests

* add XChainCommit model tests, fix typo

* add XChainCreateBridge model tests

* add XChainCreateClaimID model tests

* add XChainModifyBridge tests

* update to most recent version of code

* remove XChainAddAttestationBatch tests

* add more validation tests

* switch createValidateTests to JS
2023-09-26 10:01:21 -04:00
..
2020-06-26 07:14:31 -07:00
2023-02-03 17:03:07 -06:00
2015-10-07 10:57:21 -07:00
2023-08-24 13:44:29 -04:00
2021-10-13 16:11:55 -04:00
2023-02-03 17:03:07 -06:00

ripple-binary-codec NPM

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

NPM

API

> const api = require('ripple-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: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv'
}

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: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv' 
})
'1100612200000000240000000125000000072D0000000055DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF6240000002540BE4008114D0F5430B66E06498D4CEEC816C7B3337F9982337'

X-Address Compatibility

  • ripple-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.
  • ripple-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. ripple-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:

npm test

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

npm test --coverage

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