JSPM

xrpl-tagged-address-codec

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 665
  • Score
    100M100P100Q118951F
  • License MIT

Encode and Decode an XRPL account address and destination tag to/from X-formatted (tagged) address

Package Exports

  • xrpl-tagged-address-codec
  • xrpl-tagged-address-codec/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (xrpl-tagged-address-codec) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

XRPL Tagged Address Codec npm version

Encode and Decode an XRPL account address and destination tag to/from X-formatted (tagged) address.

Destination tags provide a way for exchanges, payment processors, corporates or entities which accept incoming payments, escrows, checks and similar transcations to use a single receiving wallet while being able to disambiguate incoming transactions by instructing the senders to include a destination tag.

This package allows encoding and decoding from an XRPL address and destination tag to / from 'Tagged Addresses', containing both the destination account address and tag in one string. This way users can simply copy-paste the string, eliminating possible user error when copying / entering a numeric destination tag.

Hopefully all exchanges, wallets & other software using destination tags will implement this address codec. A migration period will be required to allow users to enter both address formats.

The website https://xrpaddress.info is available for users, exchanges and developers to provide some context and best practices.

Use

1. Import

Node
const {Encode, Decode} = require('xrpl-tagged-address-codec')

... and use: Encode() / Decode() or:

const codec = require('xrpl-tagged-address-codec')

... and use: codec.Encode() / codec.Decode()

TypeScript
import {Encode, Decode} from 'xrpl-tagged-address-codec'

... and use: Encode() / Decode() or:

import * as codec from 'xrpl-tagged-address-codec'

... and use: codec.Encode() / codec.Decode()

2. Encode / Decode

Encode a separate account address and destination tag:

const tagged = Encode({
  account: 'rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY',
  tag: 1337,
  test: false
})

The output will be a tagged address (string). The tag and test can be omitted, rendering tag to be null and test to be false.

Decode a tagged address:

const tagged = 'XVLhHMPHU98es4dbozjVtdWzVrDjtV8xvjGQTYPiAx6gwDC'
const untagged = Decode(tagged)

The output will be a destination object containing the untagged address (r....), the destination tag (null or a string containing the destination tag) and a test (bool) indicator.

Development

Run npm run prepublish to clean, lint, test and build. Or just run npm run build, npm run test or npm run lint.

Tests are in ./test. Run tsc -w if you want are developing and want to auto-build to ./dist when you make changes on the fly.

Scripts:

  • Build: npm run build, output: ./dist
  • Test: npm run test
  • Lint: npm run lint
  • Clean, test, lint and build: npm run prepublish
  • Browserify: npm run browserify, output: dist/xrpl-tagged-address-codec-browser.js

Credits

This concept is based on the concept from @nbougalis

Big thanks to @sublimator for his fiddles, ideas and fixes and @intelliot for the idea of adding an X / T prefix for (new) address recognizability.