feat: expose address codec methods (#1386)

Fix #1385

* docs: add classicAddressToXAddress and xAddressToClassicAddress static methods
This commit is contained in:
Elliot Lee
2021-03-16 20:58:16 -07:00
committed by GitHub
parent 2be7a8fa94
commit fa2385ee1c
5 changed files with 204 additions and 6 deletions

View File

@@ -2,6 +2,57 @@
Subscribe to [the **ripple-lib-announce** mailing list](https://groups.google.com/forum/#!forum/ripple-lib-announce) for release announcements. We recommend that ripple-lib users stay up-to-date with the latest stable release.
## UNRELEASED
* Expose ripple-address-codec methods. These are static methods on RippleAPI, so you do not need to create a RippleAPI instance.
* `classicAddressToXAddress` / `xAddressToClassicAddress`
* `isValidXAddress` / `isValidClassicAddress`
* `encodeSeed` / `decodeSeed`
* `encodeAccountID` / `decodeAccountID`
* `encodeNodePublic` / `decodeNodePublic`
* `encodeAccountPublic` / `decodeAccountPublic`
* `encodeXAddress` / `decodeXAddress`
Example 1. Encode an X-address with tag 4294967295:
```js
const RippleAPI = require('ripple-lib').RippleAPI
const xAddress = RippleAPI.classicAddressToXAddress('rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', 4294967295)
console.log(xAddress)
```
Output for Example 1:
```
XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi
```
Example 2. Encode a test address for use with Testnet or Devnet:
```js
const RippleAPI = require('ripple-lib').RippleAPI
const address = RippleAPI.classicAddressToXAddress('r3SVzk8ApofDJuVBPKdmbbLjWGCCXpBQ2g', 123, true)
console.log(address)
```
Output for Example 2:
```
T7oKJ3q7s94kDH6tpkBowhetT1JKfcfdSCmAXbS75iATyLD
```
Example 3. Decode an X-address:
```js
const RippleAPI = require('ripple-lib').RippleAPI
const address = RippleAPI.xAddressToClassicAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi')
console.log(address)
```
Output for Example 3:
```js
{
classicAddress: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
tag: 4294967295,
test: false
}
```
## 1.9.2 (2021-03-12)
* Docs

View File

@@ -43,6 +43,8 @@
- [requestNextPage](#requestnextpage)
- [Static Methods](#static-methods)
- [computeBinaryTransactionHash](#computebinarytransactionhash)
- [classicAddressToXAddress](#classicaddresstoxaddress)
- [xAddressToClassicAddress](#xaddresstoclassicaddress)
- [renameCounterpartyToIssuer](#renamecounterpartytoissuer)
- [formatBidsAndAsks](#formatbidsandasks)
- [API Methods](#api-methods)
@@ -1037,7 +1039,14 @@ return api.request(command, params).then(response => {
# Static Methods
ripple-lib features a number of static methods that you can access directly on the `RippleAPI` object. The most commonly-used one is `computeBinaryTransactionHash`, described below. For the full list, see the [XRP Ledger Hashes README](https://github.com/ripple/ripple-lib/blob/develop/src/common/hashes/README.md).
You can access static methods directly on the `RippleAPI` class. For example, `RippleAPI.computeBinaryTransactionHash(...)`.
A few of the most commonly-used methods are documented below.
For a full list, refer to these docs:
- [XRP Ledger Hashes](https://github.com/ripple/ripple-lib/blob/develop/src/common/hashes/README.md)
- [ripple-address-codec API](https://github.com/ripple/ripple-address-codec/blob/master/README.md#api)
## computeBinaryTransactionHash
@@ -1071,6 +1080,64 @@ Transaction hash: 80C5E11E1A21A626759D6CB944B33DBAAC66BD704A289C86E330B847904F5C
[RunKit Example: computeBinaryTransactionHash](https://runkit.com/intelliot/computebinarytransactionhash-example)
## classicAddressToXAddress
`classicAddressToXAddress(classicAddress: string, tag: number | false[, test: boolean]): string`
Convert a classic address and tag to an X-address.
If `test` is `true`, the address with start with `T` and readers of the address will know that the address is intended for use on a test network.
### Example: Encode an X-address with tag 4294967295
```javascript
const RippleAPI = require('ripple-lib').RippleAPI
const xAddress = RippleAPI.classicAddressToXAddress('rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', 4294967295)
console.log(xAddress)
```
```
XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi
```
### Example: Encode a test address for use with Testnet or Devnet
```javascript
const RippleAPI = require('ripple-lib').RippleAPI
const address = RippleAPI.classicAddressToXAddress('r3SVzk8ApofDJuVBPKdmbbLjWGCCXpBQ2g', 123, true)
console.log(address)
```
```
T7oKJ3q7s94kDH6tpkBowhetT1JKfcfdSCmAXbS75iATyLD
```
## xAddressToClassicAddress
`xAddressToClassicAddress(xAddress: string): {classicAddress: string, tag: number | false, test: boolean}`
Convert an X-address to a classic address and tag.
Since `0` is a valid tag, use `if (tag !== false)` to you want to check for a tag.
If the address is intended for use on a test network, `test === true`. Otherwise, `test === false`.
### Example
```javascript
const RippleAPI = require('ripple-lib').RippleAPI
const address = RippleAPI.xAddressToClassicAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi')
console.log(address)
```
```
{
classicAddress: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
tag: 4294967295,
test: false
}
```
## renameCounterpartyToIssuer
`renameCounterpartyToIssuer(issue: {currency: string, counterparty: address}): {currency: string, issuer: address}`

View File

@@ -1,6 +1,13 @@
# Static Methods
ripple-lib features a number of static methods that you can access directly on the `RippleAPI` object. The most commonly-used one is `computeBinaryTransactionHash`, described below. For the full list, see the [XRP Ledger Hashes README](https://github.com/ripple/ripple-lib/blob/develop/src/common/hashes/README.md).
You can access static methods directly on the `RippleAPI` class. For example, `RippleAPI.computeBinaryTransactionHash(...)`.
A few of the most commonly-used methods are documented below.
For a full list, refer to these docs:
- [XRP Ledger Hashes](https://github.com/ripple/ripple-lib/blob/develop/src/common/hashes/README.md)
- [ripple-address-codec API](https://github.com/ripple/ripple-address-codec/blob/master/README.md#api)
## computeBinaryTransactionHash
@@ -33,3 +40,61 @@ Transaction hash: 80C5E11E1A21A626759D6CB944B33DBAAC66BD704A289C86E330B847904F5C
```
[RunKit Example: computeBinaryTransactionHash](https://runkit.com/intelliot/computebinarytransactionhash-example)
## classicAddressToXAddress
`classicAddressToXAddress(classicAddress: string, tag: number | false[, test: boolean]): string`
Convert a classic address and tag to an X-address.
If `test` is `true`, the address with start with `T` and readers of the address will know that the address is intended for use on a test network.
### Example: Encode an X-address with tag 4294967295
```javascript
const RippleAPI = require('ripple-lib').RippleAPI
const xAddress = RippleAPI.classicAddressToXAddress('rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', 4294967295)
console.log(xAddress)
```
```
XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi
```
### Example: Encode a test address for use with Testnet or Devnet
```javascript
const RippleAPI = require('ripple-lib').RippleAPI
const address = RippleAPI.classicAddressToXAddress('r3SVzk8ApofDJuVBPKdmbbLjWGCCXpBQ2g', 123, true)
console.log(address)
```
```
T7oKJ3q7s94kDH6tpkBowhetT1JKfcfdSCmAXbS75iATyLD
```
## xAddressToClassicAddress
`xAddressToClassicAddress(xAddress: string): {classicAddress: string, tag: number | false, test: boolean}`
Convert an X-address to a classic address and tag.
Since `0` is a valid tag, use `if (tag !== false)` to you want to check for a tag.
If the address is intended for use on a test network, `test === true`. Otherwise, `test === false`.
### Example
```javascript
const RippleAPI = require('ripple-lib').RippleAPI
const address = RippleAPI.xAddressToClassicAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi')
console.log(address)
```
```
{
classicAddress: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
tag: 4294967295,
test: false
}
```

View File

@@ -1,6 +1,6 @@
{
"name": "ripple-lib",
"version": "1.9.2",
"version": "1.9.3-beta.0",
"license": "ISC",
"description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser",
"files": [

View File

@@ -89,7 +89,7 @@ import {getServerInfo, getFee} from './common/serverinfo'
import {clamp, renameCounterpartyToIssuer} from './ledger/utils'
import {TransactionJSON, Instructions, Prepare} from './transaction/types'
import {ConnectionUserOptions} from './common/connection'
import {isValidXAddress, isValidClassicAddress} from 'ripple-address-codec'
import {classicAddressToXAddress, xAddressToClassicAddress, isValidXAddress, isValidClassicAddress, encodeSeed, decodeSeed, encodeAccountID, decodeAccountID, encodeNodePublic, decodeNodePublic, encodeAccountPublic, decodeAccountPublic, encodeXAddress, decodeXAddress} from 'ripple-address-codec'
import {
computeBinaryTransactionHash,
computeTransactionHash,
@@ -415,8 +415,23 @@ class RippleAPI extends EventEmitter {
// RippleAPI.deriveClassicAddress (static) is a new name for api.deriveAddress
static deriveClassicAddress = deriveAddress
/**
* Static methods to expose ripple-address-codec methods
*/
static classicAddressToXAddress = classicAddressToXAddress
static xAddressToClassicAddress = xAddressToClassicAddress
static isValidXAddress = isValidXAddress
static isValidClassicAddress = isValidClassicAddress
static encodeSeed = encodeSeed
static decodeSeed = decodeSeed
static encodeAccountID = encodeAccountID
static decodeAccountID = decodeAccountID
static encodeNodePublic = encodeNodePublic
static decodeNodePublic = decodeNodePublic
static encodeAccountPublic = encodeAccountPublic
static decodeAccountPublic = decodeAccountPublic
static encodeXAddress = encodeXAddress
static decodeXAddress = decodeXAddress
/**
* Static methods that replace functionality from the now-deprecated ripple-hashes library