Encode and Decode an XRPL account address and destination tag to/from X-formatted (tagged) address
npm install 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.
- Browserified sample
- RunKit sample in node
##### Node
```
const {Encode, Decode} = require('xrpl-tagged-address-codec')Encode()
... and use: / 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()
#### 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.
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: ./distnpm run test
- Test: npm run lint
- Lint: npm run prepublish
- Clean, test, lint and build: npm run browserify
- Browserify: , output: dist/xrpl-tagged-address-codec-browser.js
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.