/xrpl-tagged-address-codec

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

Primary LanguageTypeScriptMIT LicenseMIT

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.