XRPL Tagged Address Codec
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.