mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-14 17:45:48 +00:00
Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51dad19f88 | ||
|
|
3d1a530796 | ||
|
|
f6a22d2121 | ||
|
|
6f2d448059 | ||
|
|
0d5103a3f3 | ||
|
|
4da80028bf | ||
|
|
bb40dbde9d | ||
|
|
50fc36ec3e | ||
|
|
1abcef73a0 | ||
|
|
0d7879b25c | ||
|
|
8278dc5b5b | ||
|
|
c90d486454 | ||
|
|
35f9b7ec8d | ||
|
|
69e621af86 | ||
|
|
0e92e696d4 | ||
|
|
0b1445bfe9 | ||
|
|
db2d7ba1f5 | ||
|
|
d82703f41b | ||
|
|
8213861ab7 | ||
|
|
a842c380cf | ||
|
|
5bf6f1849a | ||
|
|
bfe4877f73 | ||
|
|
63dcddf6f4 | ||
|
|
68735ddb35 | ||
|
|
1fd9ca7ef2 | ||
|
|
2445004333 | ||
|
|
dc148bf954 | ||
|
|
f3c34bd75a | ||
|
|
5419e67dbc | ||
|
|
8d37da0952 | ||
|
|
a8075d98df |
7
.gitignore
vendored
7
.gitignore
vendored
@@ -1,5 +1,9 @@
|
|||||||
# .gitignore
|
# .gitignore
|
||||||
|
|
||||||
|
# Ignore package locks other than Yarn.
|
||||||
|
package-lock.json
|
||||||
|
npm-shrinkwrap.json
|
||||||
|
|
||||||
# Ignore vim swap files.
|
# Ignore vim swap files.
|
||||||
*.swp
|
*.swp
|
||||||
|
|
||||||
@@ -54,6 +58,9 @@ npm-debug.log
|
|||||||
# Ignore dist folder, built from tsc
|
# Ignore dist folder, built from tsc
|
||||||
dist/
|
dist/
|
||||||
|
|
||||||
|
# TypeScript incremental compilation cache
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
# Ignore perf test cache
|
# Ignore perf test cache
|
||||||
scripts/cache
|
scripts/cache
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ language: node_js
|
|||||||
node_js:
|
node_js:
|
||||||
- 6
|
- 6
|
||||||
- 8
|
- 8
|
||||||
- 9
|
|
||||||
- 10
|
- 10
|
||||||
|
- 11
|
||||||
script:
|
script:
|
||||||
- yarn compile
|
- yarn compile
|
||||||
- yarn test
|
- yarn test
|
||||||
|
|||||||
119
APPLICATIONS.md
Normal file
119
APPLICATIONS.md
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
# Applications using ripple-lib (RippleAPI)
|
||||||
|
|
||||||
|
A curated list of some of the projects and apps that leverage `ripple-lib` in some way.
|
||||||
|
|
||||||
|
**Have one to add?** Please edit this file and open a PR!
|
||||||
|
|
||||||
|
## Notice (disclaimer)
|
||||||
|
|
||||||
|
These sites are independent of Ripple and have not been authorized, endorsed, sponsored or otherwise approved by Ripple or its affiliates.
|
||||||
|
|
||||||
|
Warning: Use at your own risk.
|
||||||
|
|
||||||
|
## Data and visualizations
|
||||||
|
|
||||||
|
- **[Wipple - XRP Intelligence](https://wipple.devnull.network/)**
|
||||||
|
|
||||||
|
Monitor the XRP Network in real time and explore historical statistics.
|
||||||
|
|
||||||
|
- **[XRP Charts](https://xrpcharts.ripple.com/)** (xrpcharts.ripple.com)
|
||||||
|
|
||||||
|
XRP Charts provides information based on public data, including trade volume, top markets, metrics, transactions, and more.
|
||||||
|
|
||||||
|
- **[Ripple Live](https://gatehub.net/live)** (gatehub.net/live)
|
||||||
|
|
||||||
|
Visualize XRP network transactions.
|
||||||
|
|
||||||
|
- **[XRPL Dev. Dashboard](https://xrp.fans/)** (xrp.fans)
|
||||||
|
|
||||||
|
Debugging dashboard for `rippled-ws-client-pool`, transaction and query explorer, and transaction signing and submission tool.
|
||||||
|
|
||||||
|
- **[XRP Value](http://xrpvalue.com/)**
|
||||||
|
|
||||||
|
Real-time XRP price, trades, and orderbook data from the XRP Ledger.
|
||||||
|
|
||||||
|
- **[Bithomp - XRPL validators](https://bithomp.com/validators)**
|
||||||
|
|
||||||
|
List of XRPL validators, nodes, and testnet validators.
|
||||||
|
|
||||||
|
## Send and request payments
|
||||||
|
|
||||||
|
- **[XRP Tip Bot](https://www.xrptipbot.com/)**
|
||||||
|
|
||||||
|
A bot that enables users on reddit, Twitter and Discord to send XRP to each other through reddit comments and Twitter tweets.
|
||||||
|
|
||||||
|
- **[XRP Text](https://xrptext.com/)**
|
||||||
|
|
||||||
|
Send XRP using SMS text messages.
|
||||||
|
|
||||||
|
- **[XRParrot](https://xrparrot.com/)** (uses `ripple-address-codec`)
|
||||||
|
|
||||||
|
Easy EUR (SEPA) to XRP transfer (currency conversion).
|
||||||
|
|
||||||
|
- **[XRP Payment](https://xrpayments.co/)** (xrpayments.co)
|
||||||
|
|
||||||
|
Tool for generating a XRP payment request URI in a QR code, with currency converter.
|
||||||
|
|
||||||
|
## Wallets and wallet tools
|
||||||
|
|
||||||
|
- **[Toast Wallet](https://toastwallet.com/)**
|
||||||
|
|
||||||
|
A free, open source XRP Wallet for iOS, Android, Windows, Mac and Linux.
|
||||||
|
|
||||||
|
- **[Toastify Ledger](https://github.com/WietseWind/toastify-ledger)** (uses `ripple-keypairs`)
|
||||||
|
|
||||||
|
Add a Regular Key to a mnemonic XRP Wallet (e.g. Ledger Nano S) to use the account with a Family Seed (secret).
|
||||||
|
|
||||||
|
- **[Bithomp-submit](https://github.com/Bithomp/bithomp-submit)** (GitHub)
|
||||||
|
|
||||||
|
A tool to submit an offline-signed XRPL transaction.
|
||||||
|
|
||||||
|
- **[Kyte](https://kyteapp.co/)** (kyteapp.co) ([Source](https://github.com/WietseWind/Zerp-Wallet)) (Deprecated)
|
||||||
|
|
||||||
|
Web-based XRP wallet.
|
||||||
|
|
||||||
|
- **[XRP Vanity Address Generator](https://github.com/WietseWind/xrp-vanity-generator)** (Node.js)
|
||||||
|
|
||||||
|
A vanity address is a wallet address containing a few characters you like at the beginning or the end of the wallet address.
|
||||||
|
|
||||||
|
- **[XRP Account Mnemonic Recovery](https://github.com/WietseWind/xrp-mnemonic-recovery)** (uses `ripple-keypairs`)
|
||||||
|
|
||||||
|
Recover a 24 word mnemonic if one word is wrong or one word is missing.
|
||||||
|
|
||||||
|
## Development tools
|
||||||
|
|
||||||
|
- **[XRP Test Net Faucet](https://developers.ripple.com/xrp-test-net-faucet.html)**
|
||||||
|
|
||||||
|
Get some test funds for development on the test network. The faucet was built using `ripple-lib`.
|
||||||
|
|
||||||
|
## Code samples and libraries
|
||||||
|
|
||||||
|
- **[ilp-plugin-xrp-paychan](https://github.com/interledgerjs/ilp-plugin-xrp-paychan)**
|
||||||
|
|
||||||
|
Send ILP payments using XRP and payment channels (PayChan).
|
||||||
|
|
||||||
|
- **[RunKit: WietseWind](https://runkit.com/wietsewind/)**
|
||||||
|
|
||||||
|
XRP Ledger code samples for Node.js.
|
||||||
|
|
||||||
|
- **[GitHub Gist: WietseWind](https://gist.github.com/WietseWind)**
|
||||||
|
|
||||||
|
XRP Ledger code samples for Node.js and the web (mostly).
|
||||||
|
|
||||||
|
- **[rippled-ws-client-sign](https://github.com/WietseWind/rippled-ws-client-sign)**
|
||||||
|
|
||||||
|
Sign transactions, with support for MultiSign.
|
||||||
|
|
||||||
|
- **[ILP-enabled power switch](https://xrpcommunity.blog/raspberry-pi-interledger-xp-powerswitch-howto/)** ([video](https://www.youtube.com/watch?v=c-eS0HQUuJg)) (uses [`moneyd-uplink-xrp`](https://github.com/interledgerjs/moneyd-uplink-xrp))
|
||||||
|
|
||||||
|
For about $30 in parts (Raspberry Pi, 3.3V Relay board and a few wires) you can build your own power switch that will switch on if a streaming ILP payment comes in. When the payment stream stops, the power turns off.
|
||||||
|
|
||||||
|
## Related apps that do not appear to use ripple-lib
|
||||||
|
|
||||||
|
- **[XRP Stats](https://ledger.exposed/)** (ledger.exposed)
|
||||||
|
|
||||||
|
Rich list, live ledger stats and XRP distribution. Visualize escrows and flow of funds.
|
||||||
|
|
||||||
|
- **[XRP Vanity](https://xrpvanity.com/)** (xrpvanity.com)
|
||||||
|
|
||||||
|
Custom XRP addresses for sale, delivered by SetRegularKey.
|
||||||
@@ -53,12 +53,13 @@ function getWebpackConfig(extension, overrides) {
|
|||||||
use: [{
|
use: [{
|
||||||
loader: 'ts-loader',
|
loader: 'ts-loader',
|
||||||
options: {
|
options: {
|
||||||
compilerOptions: {declaration: false}
|
compilerOptions: {
|
||||||
|
composite: false,
|
||||||
|
declaration: false,
|
||||||
|
declarationMap: false
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}],
|
}],
|
||||||
}, {
|
|
||||||
test: /\.json/,
|
|
||||||
use: 'json-loader',
|
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
|
|||||||
187
HISTORY.md
187
HISTORY.md
@@ -1,5 +1,192 @@
|
|||||||
# ripple-lib Release History
|
# ripple-lib Release History
|
||||||
|
|
||||||
|
## 1.2.3 (2019-05-30)
|
||||||
|
|
||||||
|
* Fix browser builds
|
||||||
|
|
||||||
|
The SHA-256 checksums for the browser version of this release can be found
|
||||||
|
below.
|
||||||
|
```
|
||||||
|
% shasum -a 256 *
|
||||||
|
efb0f29cde94534a015d8a2171abb11b9a4345ba01418bf5b6ab6042a6d51dde ripple-1.2.3-debug.js
|
||||||
|
b86145c0e30099b966ed8d3830ba25988d72877f1f87044d9954d6707be098ac ripple-1.2.3-min.js
|
||||||
|
e027d91c7321d41ba94bb1bdc77dcff0107a5fd9eb833c6dbd06f1bbedef3900 ripple-1.2.3.js
|
||||||
|
```
|
||||||
|
|
||||||
|
## 1.2.2 (2019-04-15)
|
||||||
|
|
||||||
|
* Prevent `prepareTransaction` from overwriting `Fee` and/or `LastLedgerSequence` (#997)
|
||||||
|
* Add `deliveredAmount` as optional field for type `Outcome` (#996)
|
||||||
|
* Fix build failure with TS strict checks (#993)
|
||||||
|
|
||||||
|
Minor changes:
|
||||||
|
|
||||||
|
* Use TypeScript project references
|
||||||
|
* Travis: Drop node 9 and add node 11 for testing
|
||||||
|
* Bump versions of devDependencies
|
||||||
|
|
||||||
|
Note: There is no browser version of this release.
|
||||||
|
|
||||||
|
## 1.2.1 (2019-03-23)
|
||||||
|
|
||||||
|
* Update `ripple-binary-codec` to 0.2.1 to support `tecKILLED`
|
||||||
|
|
||||||
|
The SHA-256 checksums for the browser version of this release can be found
|
||||||
|
below.
|
||||||
|
|
||||||
|
```
|
||||||
|
% shasum -a 256 *
|
||||||
|
531c2a8f4bf6d6b5bd4afe6a40b6a68a77179a343902cfa4210d7e35b5697af0 ripple-1.2.1-debug.js
|
||||||
|
201ee99922b16b7e32afb5317ef4bb9facc23b20c272bb5c4ed7010f5d996cab ripple-1.2.1-min.js
|
||||||
|
c1b984581299bf00e0e3c8ac4e62eadfc9b190bd78a2458a76e59ceb56046148 ripple-1.2.1.js
|
||||||
|
```
|
||||||
|
|
||||||
|
## 1.2.0 (2019-03-19)
|
||||||
|
|
||||||
|
This release:
|
||||||
|
|
||||||
|
* changes the way you handle errors for the `prepare*` methods.
|
||||||
|
* improves the `message` field of `RippledError`s.
|
||||||
|
* allows `Sequence` to be set in the transaction JSON provided to
|
||||||
|
`prepareTransaction`.
|
||||||
|
|
||||||
|
For details, continue reading:
|
||||||
|
|
||||||
|
### [BREAKING CHANGE] `prepare*` methods reject the Promise on error
|
||||||
|
|
||||||
|
The `prepare*` methods now always reject the Promise when an error occurs, instead of throwing.
|
||||||
|
|
||||||
|
Previously, the methods would synchronously throw on validation errors, despite being asynchronous methods that return Promises.
|
||||||
|
|
||||||
|
In other words, to handle errors in the past, you would need to use a try/catch block:
|
||||||
|
|
||||||
|
```
|
||||||
|
// OBSOLETE - no need for try/catch anymore
|
||||||
|
try {
|
||||||
|
api.preparePayment(address, payment, instructions).then(prepared => {
|
||||||
|
res.send(prepared.txJSON);
|
||||||
|
}).catch(error => {
|
||||||
|
// Handle asynchronous error
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
// Handle synchronous error
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Now, you can rely on the Promise's `catch` handler, which is called with the error when the Promise is rejected:
|
||||||
|
|
||||||
|
```
|
||||||
|
api.preparePayment(address, payment, instructions).then(prepared => {
|
||||||
|
res.send(prepared.txJSON);
|
||||||
|
}).catch(error => {
|
||||||
|
// Handle error
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
This applies to:
|
||||||
|
* preparePayment
|
||||||
|
* prepareTrustline
|
||||||
|
* prepareOrder
|
||||||
|
* prepareOrderCancellation
|
||||||
|
* prepareSettings
|
||||||
|
* prepareEscrowCreation
|
||||||
|
* prepareEscrowExecution
|
||||||
|
* prepareCheckCreate
|
||||||
|
* prepareCheckCash
|
||||||
|
* prepareCheckCancel
|
||||||
|
* preparePaymentChannelCreate
|
||||||
|
* preparePaymentChannelClaim
|
||||||
|
* preparePaymentChannelFund
|
||||||
|
|
||||||
|
### Improved `RippledError` `message`
|
||||||
|
|
||||||
|
Previously, `RippledErrors` (errors from rippled) used rippled's `error` field as the `message`.
|
||||||
|
|
||||||
|
Now, the `error_message` field is used as the `message`.
|
||||||
|
|
||||||
|
This helps to surface the specific cause of an error.
|
||||||
|
|
||||||
|
For example, before:
|
||||||
|
```
|
||||||
|
[RippledError(invalidParams, { error: 'invalidParams',
|
||||||
|
error_code: 31,
|
||||||
|
error_message: 'Missing field \'account\'.',
|
||||||
|
id: 3,
|
||||||
|
request: { command: 'account_info', id: 3 },
|
||||||
|
status: 'error',
|
||||||
|
type: 'response' })]
|
||||||
|
```
|
||||||
|
|
||||||
|
After:
|
||||||
|
```
|
||||||
|
[RippledError(Missing field 'account'., { error: 'invalidParams',
|
||||||
|
error_code: 31,
|
||||||
|
error_message: 'Missing field \'account\'.',
|
||||||
|
id: 3,
|
||||||
|
request: { command: 'account_info', id: 3 },
|
||||||
|
status: 'error',
|
||||||
|
type: 'response' })]
|
||||||
|
```
|
||||||
|
|
||||||
|
In this case, you can see at a glance that `account` is the missing field.
|
||||||
|
|
||||||
|
The `error` field is still available in `errorObject.data.error`.
|
||||||
|
|
||||||
|
When `error_message` is not set (as with e.g. error 'entryNotFound'), the `error` field is used as the `message`.
|
||||||
|
|
||||||
|
### [BUG FIX] `prepareTransaction` does not overwrite the `Sequence` field
|
||||||
|
|
||||||
|
The `prepareTransaction` method now allows `Sequence` to be set in the Transaction JSON object, instead of overwriting it with the account's expected sequence based on the state of the ledger.
|
||||||
|
|
||||||
|
Previously, you had to use the `sequence` field in the `instructions` object to manually set a transaction's sequence number.
|
||||||
|
|
||||||
|
### New in rippled 1.2.1
|
||||||
|
|
||||||
|
As this is the first release of ripple-lib following the release of rippled 1.2.1, we would like to highlight the following API improvements:
|
||||||
|
|
||||||
|
1. The [`delivered_amount` field](https://developers.ripple.com/partial-payments.html#the-delivered-amount-field) has been added to the `ledger` method, and to transaction subscriptions.
|
||||||
|
|
||||||
|
api.getLedger({includeTransactions: true, includeAllData: true, ledgerVersion: 17718771}).then(...)
|
||||||
|
|
||||||
|
You can also call `ledger` directly:
|
||||||
|
|
||||||
|
request('ledger', {...}).then(...)
|
||||||
|
|
||||||
|
2. [Support for Ed25519 seeds encoded using ripple-lib](https://github.com/ripple/rippled/pull/2734)
|
||||||
|
|
||||||
|
You have access to these improvements when you use a rippled server running version 1.2.1 or later. At the time of writing, we recommend using rippled version **1.2.2** or later.
|
||||||
|
|
||||||
|
The SHA-256 checksums for the browser version of this release can be found
|
||||||
|
below.
|
||||||
|
```
|
||||||
|
% shasum -a 256 *
|
||||||
|
13021fe3efbdd59faf68597b0b18204b39847b285cca82f84c737e3d19922cc2 ripple-1.2.0-debug.js
|
||||||
|
0070225e731afd8c2c0a0976111ebf326c19a96ee1549368de9f016abdd53d2f ripple-1.2.0-min.js
|
||||||
|
d440268397c03ad5137a3294e53a07b959ef93cd23b1990d6f82621c4776ba9f ripple-1.2.0.js
|
||||||
|
```
|
||||||
|
|
||||||
|
## 1.1.2 (2018-12-12)
|
||||||
|
|
||||||
|
+ Update `submit` response (#978)
|
||||||
|
+ Includes the full object returned by rippled, while keeping the existing
|
||||||
|
fields for backward compatibility
|
||||||
|
+ Add `getLedger` option for ledger hash (#980)
|
||||||
|
+ Use the `ledgerHash` option to get a specific ledger by hash
|
||||||
|
|
||||||
|
Thanks to @alexchiriac for the contributions in this release.
|
||||||
|
|
||||||
|
When using `ripple-lib` with `rippled`, we recommend using `rippled` version
|
||||||
|
1.1.2 or later.
|
||||||
|
|
||||||
|
The SHA-256 checksums for the browser version of this release can be found
|
||||||
|
below.
|
||||||
|
```
|
||||||
|
% shasum -a 256 *
|
||||||
|
e6cc52395d0c3e205263777ba2e528e50f4d1f84bb4b16763a3bf7f5fcc290f5 ripple-1.1.2-debug.js
|
||||||
|
82df879bc2970e0e4fd161975a99448b4859b0cde751d8ea34e9f51d672090b9 ripple-1.1.2-min.js
|
||||||
|
12f56330dc71bba8ac3004025cbc9698413a0c619df302dda105b31228a67319 ripple-1.1.2.js
|
||||||
|
```
|
||||||
|
|
||||||
## 1.1.1 (2018-11-27)
|
## 1.1.1 (2018-11-27)
|
||||||
|
|
||||||
+ Fix `getOrderbook` offer sorting (#970)
|
+ Fix `getOrderbook` offer sorting (#970)
|
||||||
|
|||||||
12
README.md
12
README.md
@@ -7,8 +7,8 @@ A JavaScript API for interacting with the XRP Ledger
|
|||||||
### Features
|
### Features
|
||||||
|
|
||||||
+ Connect to a `rippled` server from Node.js or a web browser
|
+ Connect to a `rippled` server from Node.js or a web browser
|
||||||
+ Issue [rippled API](https://ripple.com/build/rippled-apis/) requests
|
+ Helpers for creating requests and parsing responses for the [rippled API](https://developers.ripple.com/rippled-api.html)
|
||||||
+ Listen to events on the XRP Ledger (transaction, ledger, etc.)
|
+ Listen to events on the XRP Ledger (transactions, ledger, validations, etc.)
|
||||||
+ Sign and submit transactions to the XRP Ledger
|
+ Sign and submit transactions to the XRP Ledger
|
||||||
+ Type definitions for TypeScript
|
+ Type definitions for TypeScript
|
||||||
|
|
||||||
@@ -30,6 +30,8 @@ $ yarn add ripple-lib
|
|||||||
|
|
||||||
Then see the [documentation](https://github.com/ripple/ripple-lib/blob/develop/docs/index.md) and [code samples](https://github.com/ripple/ripple-lib/tree/develop/docs/samples).
|
Then see the [documentation](https://github.com/ripple/ripple-lib/blob/develop/docs/index.md) and [code samples](https://github.com/ripple/ripple-lib/tree/develop/docs/samples).
|
||||||
|
|
||||||
|
**What is ripple-lib used for?** Here's a [list of applications](APPLICATIONS.md) that use `ripple-lib`. Open a PR to add your app or project to the list!
|
||||||
|
|
||||||
### Mailing Lists
|
### Mailing Lists
|
||||||
|
|
||||||
We have a low-traffic mailing list for announcements of new ripple-lib releases. (About 1 email per week)
|
We have a low-traffic mailing list for announcements of new ripple-lib releases. (About 1 email per week)
|
||||||
@@ -56,7 +58,7 @@ $ yarn build
|
|||||||
|
|
||||||
Gulp will [output](./Gulpfile.js) the resulting JS files in `./build/`.
|
Gulp will [output](./Gulpfile.js) the resulting JS files in `./build/`.
|
||||||
|
|
||||||
For more details, see the `scripts` in `package.json`.
|
For details, see the `scripts` in `package.json`.
|
||||||
|
|
||||||
## Running Tests
|
## Running Tests
|
||||||
|
|
||||||
@@ -64,12 +66,12 @@ For more details, see the `scripts` in `package.json`.
|
|||||||
2. `cd` into the repository and install dependencies with `yarn install`
|
2. `cd` into the repository and install dependencies with `yarn install`
|
||||||
3. `yarn test`
|
3. `yarn test`
|
||||||
|
|
||||||
|
Also, run `yarn lint` to lint the code with `tslint`.
|
||||||
|
|
||||||
## Generating Documentation
|
## Generating Documentation
|
||||||
|
|
||||||
The continuous integration tests require that the documentation stays up-to-date. If you make changes to the JSON schemas, fixtures, or documentation sources, you must update the documentation by running `yarn run docgen`.
|
The continuous integration tests require that the documentation stays up-to-date. If you make changes to the JSON schemas, fixtures, or documentation sources, you must update the documentation by running `yarn run docgen`.
|
||||||
|
|
||||||
`npm` may be used instead of `yarn` in the commands above.
|
|
||||||
|
|
||||||
## More Information
|
## More Information
|
||||||
|
|
||||||
+ [Ripple Developer Center](https://ripple.com/build/)
|
+ [Ripple Developer Center](https://ripple.com/build/)
|
||||||
|
|||||||
9
custom_typings/node.d.ts
vendored
9
custom_typings/node.d.ts
vendored
@@ -1,9 +0,0 @@
|
|||||||
/**
|
|
||||||
* This is an extension of Node's `process` object to include the browser
|
|
||||||
* property, which is added by webpack.
|
|
||||||
*/
|
|
||||||
interface AmbiguousProcess extends NodeJS.Process {
|
|
||||||
browser?: true
|
|
||||||
}
|
|
||||||
|
|
||||||
declare var process: AmbiguousProcess;
|
|
||||||
151
docs/index.md
151
docs/index.md
@@ -293,7 +293,7 @@ Type | Description
|
|||||||
[escrowCancellation](#escrow-cancellation) | An `escrowCancellation` transaction unlocks the funds in an escrow and sends them back to the creator of the escrow, but it will only work after the escrow expires.
|
[escrowCancellation](#escrow-cancellation) | An `escrowCancellation` transaction unlocks the funds in an escrow and sends them back to the creator of the escrow, but it will only work after the escrow expires.
|
||||||
[escrowExecution](#escrow-execution) | An `escrowExecution` transaction unlocks the funds in an escrow and sends them to the destination of the escrow, but it will only work if the cryptographic condition is provided.
|
[escrowExecution](#escrow-execution) | An `escrowExecution` transaction unlocks the funds in an escrow and sends them to the destination of the escrow, but it will only work if the cryptographic condition is provided.
|
||||||
[checkCreate](#check-create) | A `checkCreate` transaction creates a check on the ledger, which is a deferred payment that can be cashed by its intended destination.
|
[checkCreate](#check-create) | A `checkCreate` transaction creates a check on the ledger, which is a deferred payment that can be cashed by its intended destination.
|
||||||
[checkCancel](#check-cancel) | A `checkCancel` transaction cancels an unreedemed Check, removing it from the ledger without sending any money.
|
[checkCancel](#check-cancel) | A `checkCancel` transaction cancels an unredeemed Check, removing it from the ledger without sending any money.
|
||||||
[checkCash](#check-cash) | A `checkCash` transaction redeems a Check to receive up to the amount authorized by the corresponding `checkCreate` transaction. Only the `destination` address of a Check can cash it.
|
[checkCash](#check-cash) | A `checkCash` transaction redeems a Check to receive up to the amount authorized by the corresponding `checkCreate` transaction. Only the `destination` address of a Check can cash it.
|
||||||
[paymentChannelCreate](#payment-channel-create) | A `paymentChannelCreate` transaction opens a payment channel between two addresses with XRP set aside for asynchronous payments.
|
[paymentChannelCreate](#payment-channel-create) | A `paymentChannelCreate` transaction opens a payment channel between two addresses with XRP set aside for asynchronous payments.
|
||||||
[paymentChannelFund](#payment-channel-fund) | A `paymentChannelFund` transaction adds XRP to a payment channel and optionally sets a new expiration for the channel.
|
[paymentChannelFund](#payment-channel-fund) | A `paymentChannelFund` transaction adds XRP to a payment channel and optionally sets a new expiration for the channel.
|
||||||
@@ -333,13 +333,13 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
fee | [value](#value) | *Optional* An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
fee | [value](#value) | *Optional* An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
||||||
maxFee | [value](#value) | *Optional* Deprecated: Use `maxFeeXRP` in the RippleAPI constructor instead. The maximum fee to pay for this transaction. If this exceeds `maxFeeXRP`, `maxFeeXRP` will be used instead. See [Transaction Fees](#transaction-fees) for more information.
|
maxFee | [value](#value) | *Optional* Deprecated: Use `maxFeeXRP` in the RippleAPI constructor instead. The maximum fee to pay for this transaction. If this exceeds `maxFeeXRP`, `maxFeeXRP` will be used instead. See [Transaction Fees](#transaction-fees) for more information.
|
||||||
maxLedgerVersion | integer,null | *Optional* The highest ledger version that the transaction can be included in. If this option and `maxLedgerVersionOffset` are both omitted, the `maxLedgerVersion` option will default to 3 greater than the current validated ledger version (equivalent to `maxLedgerVersionOffset=3`). Use `null` to not set a maximum ledger version.
|
maxLedgerVersion | integer,null | *Optional* The highest ledger version that the transaction can be included in. If this option and `maxLedgerVersionOffset` are both omitted, the `maxLedgerVersion` option will default to 3 greater than the current validated ledger version (equivalent to `maxLedgerVersionOffset=3`). Use `null` to not set a maximum ledger version. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
maxLedgerVersion | string,null | *Optional* The highest ledger version that the transaction can be included in. If this option and `maxLedgerVersionOffset` are both omitted, the `maxLedgerVersion` option will default to 3 greater than the current validated ledger version (equivalent to `maxLedgerVersionOffset=3`). Use `null` to not set a maximum ledger version.
|
maxLedgerVersion | string,null | *Optional* The highest ledger version that the transaction can be included in. If this option and `maxLedgerVersionOffset` are both omitted, the `maxLedgerVersion` option will default to 3 greater than the current validated ledger version (equivalent to `maxLedgerVersionOffset=3`). Use `null` to not set a maximum ledger version. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
maxLedgerVersionOffset | integer | *Optional* Offset from current validated ledger version to highest ledger version that the transaction can be included in.
|
maxLedgerVersionOffset | integer | *Optional* Offset from current validated ledger version to highest ledger version that the transaction can be included in.
|
||||||
sequence | [sequence](#account-sequence-number) | *Optional* The initiating account's sequence number for this transaction.
|
sequence | [sequence](#account-sequence-number) | *Optional* The initiating account's sequence number for this transaction.
|
||||||
signersCount | integer | *Optional* Number of signers that will be signing this transaction.
|
signersCount | integer | *Optional* Number of signers that will be signing this transaction.
|
||||||
|
|
||||||
We recommend that you specify a `maxLedgerVersion` so that you can quickly determine that a failed transaction will never succeeed in the future. It is impossible for a transaction to succeed after the XRP Ledger's consensus-validated ledger version exceeds the transaction's `maxLedgerVersion`. If you omit `maxLedgerVersion`, the "prepare\*" method automatically supplies a `maxLedgerVersion` equal to the current ledger plus 3, which it includes in the return value from the "prepare\*" method.
|
We recommend that you specify a `maxLedgerVersion` so that you can quickly determine that a failed transaction will never succeed in the future. It is impossible for a transaction to succeed after the XRP Ledger's consensus-validated ledger version exceeds the transaction's `maxLedgerVersion`. If you omit `maxLedgerVersion`, the "prepare\*" method automatically supplies a `maxLedgerVersion` equal to the current ledger plus 3, which it includes in the return value from the "prepare\*" method.
|
||||||
|
|
||||||
## Transaction ID
|
## Transaction ID
|
||||||
|
|
||||||
@@ -1476,11 +1476,11 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
id | [transactionHash](#transaction-id) | A hash of a transaction used to identify the transaction, represented in hexadecimal.
|
id | [transactionHash](#transaction-id) | A hash of a transaction used to identify the transaction, represented in hexadecimal.
|
||||||
options | object | *Optional* Options to limit the ledger versions to search and/or to include raw transaction data.
|
options | object | *Optional* Options to limit the ledger versions to search and/or to include raw transaction data.
|
||||||
*options.* includeRawTransaction | object | *Optional* Include raw transaction data. For advanced users; exercise caution when interpreting this data.
|
*options.* includeRawTransaction | object | *Optional* Include raw transaction data. For advanced users; exercise caution when interpreting this data.
|
||||||
*options.* maxLedgerVersion | integer | *Optional* The highest ledger version to search
|
*options.* maxLedgerVersion | integer | *Optional* The highest ledger version to search. This must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*options.* maxLedgerVersion | string | *Optional* The highest ledger version to search
|
*options.* maxLedgerVersion | string | *Optional* The highest ledger version to search. This must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*options.* minLedgerVersion | integer | *Optional* The lowest ledger version to search.
|
*options.* minLedgerVersion | integer | *Optional* The lowest ledger version to search. This must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*options.* minLedgerVersion | string | *Optional* The lowest ledger version to search.
|
*options.* minLedgerVersion | string | *Optional* The lowest ledger version to search. This must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Return Value
|
### Return Value
|
||||||
|
|
||||||
@@ -1494,7 +1494,7 @@ sequence | [sequence](#account-sequence-number) | The account sequence number of
|
|||||||
type | [transactionType](#transaction-types) | The type of the transaction.
|
type | [transactionType](#transaction-types) | The type of the transaction.
|
||||||
specification | object | A specification that would produce the same outcome as this transaction. *Exception:* For payment transactions, this omits the `destination.amount` field, to prevent misunderstanding. The structure of the specification depends on the value of the `type` field (see [Transaction Types](#transaction-types) for details). *Note:* This is **not** necessarily the same as the original specification.
|
specification | object | A specification that would produce the same outcome as this transaction. *Exception:* For payment transactions, this omits the `destination.amount` field, to prevent misunderstanding. The structure of the specification depends on the value of the `type` field (see [Transaction Types](#transaction-types) for details). *Note:* This is **not** necessarily the same as the original specification.
|
||||||
outcome | object | The outcome of the transaction (what effects it had).
|
outcome | object | The outcome of the transaction (what effects it had).
|
||||||
*outcome.* result | string | Result code returned by rippled. See [Transaction Results](https://ripple.com/build/transactions/#full-transaction-response-list) for a complete list.
|
*outcome.* result | string | Result code returned by rippled. See [Transaction Results](https://developers.ripple.com/transaction-results.html) for a complete list.
|
||||||
*outcome.* fee | [value](#value) | The XRP fee that was charged for the transaction.
|
*outcome.* fee | [value](#value) | The XRP fee that was charged for the transaction.
|
||||||
*outcome.balanceChanges.* \* | array\<[balance](#amount)\> | Key is the XRP Ledger address; value is an array of signed amounts representing changes of balances for that address.
|
*outcome.balanceChanges.* \* | array\<[balance](#amount)\> | Key is the XRP Ledger address; value is an array of signed amounts representing changes of balances for that address.
|
||||||
*outcome.orderbookChanges.* \* | array | Key is the maker's XRP Ledger address; value is an array of changes
|
*outcome.orderbookChanges.* \* | array | Key is the maker's XRP Ledger address; value is an array of changes
|
||||||
@@ -4387,6 +4387,7 @@ options | object | *Optional* Options affecting what ledger and how much data to
|
|||||||
*options.* includeAllData | boolean | *Optional* Include full transactions and/or state information if `includeTransactions` and/or `includeState` is set.
|
*options.* includeAllData | boolean | *Optional* Include full transactions and/or state information if `includeTransactions` and/or `includeState` is set.
|
||||||
*options.* includeState | boolean | *Optional* Return an array of hashes for all state data or an array of all state data in this ledger version, depending on whether `includeAllData` is set.
|
*options.* includeState | boolean | *Optional* Return an array of hashes for all state data or an array of all state data in this ledger version, depending on whether `includeAllData` is set.
|
||||||
*options.* includeTransactions | boolean | *Optional* Return an array of hashes for each transaction or an array of all transactions that were validated in this ledger version, depending on whether `includeAllData` is set.
|
*options.* includeTransactions | boolean | *Optional* Return an array of hashes for each transaction or an array of all transactions that were validated in this ledger version, depending on whether `includeAllData` is set.
|
||||||
|
*options.* ledgerHash | string | *Optional* Get ledger data for this historical ledger hash.
|
||||||
*options.* ledgerVersion | integer | *Optional* Get ledger data for this historical ledger version.
|
*options.* ledgerVersion | integer | *Optional* Get ledger data for this historical ledger version.
|
||||||
*options.* ledgerVersion | string | *Optional* Get ledger data for this historical ledger version.
|
*options.* ledgerVersion | string | *Optional* Get ledger data for this historical ledger version.
|
||||||
|
|
||||||
@@ -4474,7 +4475,7 @@ console.log(JSON.stringify(flags, null, 2))
|
|||||||
|
|
||||||
## prepareTransaction
|
## prepareTransaction
|
||||||
|
|
||||||
`prepareTransaction(address: string, transaction: object, instructions: object): Promise<object>`
|
`prepareTransaction(transaction: object, instructions: object): Promise<object>`
|
||||||
|
|
||||||
Prepare a transaction. The prepared transaction must subsequently be [signed](#sign) and [submitted](#submit).
|
Prepare a transaction. The prepared transaction must subsequently be [signed](#sign) and [submitted](#submit).
|
||||||
|
|
||||||
@@ -4501,10 +4502,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -4556,10 +4557,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -4583,8 +4584,11 @@ const payment = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return api.preparePayment(address, payment).then(prepared =>
|
return api.preparePayment(address, payment).then(prepared => {
|
||||||
{/* ... */});
|
/* ... */
|
||||||
|
}).catch(error => {
|
||||||
|
/* ... as with all prepare* methods, use a Promise catch block to handle errors ... */
|
||||||
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -4626,10 +4630,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -4694,10 +4698,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -4762,10 +4766,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -4815,10 +4819,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -4885,10 +4889,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -4943,10 +4947,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -4999,10 +5003,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -5057,10 +5061,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -5115,10 +5119,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -5170,10 +5174,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -5226,10 +5230,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -5285,10 +5289,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -5340,10 +5344,10 @@ Name | Type | Description
|
|||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
txJSON | string | The prepared transaction in rippled JSON format.
|
txJSON | string | The prepared transaction in rippled JSON format.
|
||||||
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
instructions | object | The instructions for how to execute the transaction after adding automatic defaults.
|
||||||
*instructions.* fee | [value](#value) | An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
*instructions.* fee | [value](#value) | The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide.
|
||||||
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
*instructions.* sequence | [sequence](#account-sequence-number) | The initiating account's sequence number for this transaction.
|
||||||
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | integer,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum.
|
*instructions.* maxLedgerVersion | string,null | The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -5481,8 +5485,13 @@ This method returns an object with the following structure:
|
|||||||
|
|
||||||
Name | Type | Description
|
Name | Type | Description
|
||||||
---- | ---- | -----------
|
---- | ---- | -----------
|
||||||
resultCode | string | The result code returned by rippled. [List of transaction responses](https://ripple.com/build/transactions/#full-transaction-response-list)
|
resultCode | string | Deprecated: Use `engine_result` instead.
|
||||||
resultMessage | string | Human-readable explanation of the status of the transaction.
|
resultMessage | string | Deprecated: Use `engine_result_message` instead.
|
||||||
|
engine_result | string | Code indicating the preliminary result of the transaction, for example `tesSUCCESS`. [List of transaction responses](https://developers.ripple.com/transaction-results.html)
|
||||||
|
engine_result_code | integer | Numeric code indicating the preliminary result of the transaction, directly correlated to `engine_result`
|
||||||
|
engine_result_message | string | Human-readable explanation of the transaction's preliminary result.
|
||||||
|
tx_blob | string | The complete transaction in hex string format.
|
||||||
|
tx_json | [tx-json](https://developers.ripple.com/transaction-formats.html) | The complete transaction in JSON format.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@@ -5496,7 +5505,27 @@ return api.submit(signedTransaction)
|
|||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"resultCode": "tesSUCCESS",
|
"resultCode": "tesSUCCESS",
|
||||||
"resultMessage": "The transaction was applied. Only final in a validated ledger."
|
"resultMessage": "The transaction was applied. Only final in a validated ledger.",
|
||||||
|
"engine_result": "tesSUCCESS",
|
||||||
|
"engine_result_code": 0,
|
||||||
|
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
|
||||||
|
"tx_blob": "1200002280000000240000016861D4838D7EA4C6800000000000000000000000000055534400000000004B4E9C06F24296074F7BC48F92A97916C6DC5EA9684000000000002710732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402200E5C2DD81FDF0BE9AB2A8D797885ED49E804DBF28E806604D878756410CA98B102203349581946B0DDA06B36B35DBC20EDA27552C1F167BCF5C6ECFF49C6A46F858081144B4E9C06F24296074F7BC48F92A97916C6DC5EA983143E9D4A2B8AA0780F682D136F7A56D6724EF53754",
|
||||||
|
"tx_json": {
|
||||||
|
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
|
||||||
|
"Amount": {
|
||||||
|
"currency": "USD",
|
||||||
|
"issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
|
||||||
|
"value": "1"
|
||||||
|
},
|
||||||
|
"Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
|
||||||
|
"Fee": "10000",
|
||||||
|
"Flags": 2147483648,
|
||||||
|
"Sequence": 360,
|
||||||
|
"SigningPubKey": "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
|
||||||
|
"TransactionType": "Payment",
|
||||||
|
"TxnSignature": "304402200E5C2DD81FDF0BE9AB2A8D797885ED49E804DBF28E806604D878756410CA98B102203349581946B0DDA06B36B35DBC20EDA27552C1F167BCF5C6ECFF49C6A46F8580",
|
||||||
|
"hash": "4D5D90890F8D49519E4151938601EF3D0B30B16CD6A519D9C99102C9FA77F7E0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -23,8 +23,11 @@ All "prepare*" methods have the same return type.
|
|||||||
```javascript
|
```javascript
|
||||||
const address = 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59';
|
const address = 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59';
|
||||||
const payment = <%- importFile('test/fixtures/requests/prepare-payment.json') %>;
|
const payment = <%- importFile('test/fixtures/requests/prepare-payment.json') %>;
|
||||||
return api.preparePayment(address, payment).then(prepared =>
|
return api.preparePayment(address, payment).then(prepared => {
|
||||||
{/* ... */});
|
/* ... */
|
||||||
|
}).catch(error => {
|
||||||
|
/* ... as with all prepare* methods, use a Promise catch block to handle errors ... */
|
||||||
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
<%- renderFixture("responses/prepare-payment.json") %>
|
<%- renderFixture("responses/prepare-payment.json") %>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
## prepareTransaction
|
## prepareTransaction
|
||||||
|
|
||||||
`prepareTransaction(address: string, transaction: object, instructions: object): Promise<object>`
|
`prepareTransaction(transaction: object, instructions: object): Promise<object>`
|
||||||
|
|
||||||
Prepare a transaction. The prepared transaction must subsequently be [signed](#sign) and [submitted](#submit).
|
Prepare a transaction. The prepared transaction must subsequently be [signed](#sign) and [submitted](#submit).
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ Type | Description
|
|||||||
[escrowCancellation](#escrow-cancellation) | An `escrowCancellation` transaction unlocks the funds in an escrow and sends them back to the creator of the escrow, but it will only work after the escrow expires.
|
[escrowCancellation](#escrow-cancellation) | An `escrowCancellation` transaction unlocks the funds in an escrow and sends them back to the creator of the escrow, but it will only work after the escrow expires.
|
||||||
[escrowExecution](#escrow-execution) | An `escrowExecution` transaction unlocks the funds in an escrow and sends them to the destination of the escrow, but it will only work if the cryptographic condition is provided.
|
[escrowExecution](#escrow-execution) | An `escrowExecution` transaction unlocks the funds in an escrow and sends them to the destination of the escrow, but it will only work if the cryptographic condition is provided.
|
||||||
[checkCreate](#check-create) | A `checkCreate` transaction creates a check on the ledger, which is a deferred payment that can be cashed by its intended destination.
|
[checkCreate](#check-create) | A `checkCreate` transaction creates a check on the ledger, which is a deferred payment that can be cashed by its intended destination.
|
||||||
[checkCancel](#check-cancel) | A `checkCancel` transaction cancels an unreedemed Check, removing it from the ledger without sending any money.
|
[checkCancel](#check-cancel) | A `checkCancel` transaction cancels an unredeemed Check, removing it from the ledger without sending any money.
|
||||||
[checkCash](#check-cash) | A `checkCash` transaction redeems a Check to receive up to the amount authorized by the corresponding `checkCreate` transaction. Only the `destination` address of a Check can cash it.
|
[checkCash](#check-cash) | A `checkCash` transaction redeems a Check to receive up to the amount authorized by the corresponding `checkCreate` transaction. Only the `destination` address of a Check can cash it.
|
||||||
[paymentChannelCreate](#payment-channel-create) | A `paymentChannelCreate` transaction opens a payment channel between two addresses with XRP set aside for asynchronous payments.
|
[paymentChannelCreate](#payment-channel-create) | A `paymentChannelCreate` transaction opens a payment channel between two addresses with XRP set aside for asynchronous payments.
|
||||||
[paymentChannelFund](#payment-channel-fund) | A `paymentChannelFund` transaction adds XRP to a payment channel and optionally sets a new expiration for the channel.
|
[paymentChannelFund](#payment-channel-fund) | A `paymentChannelFund` transaction adds XRP to a payment channel and optionally sets a new expiration for the channel.
|
||||||
@@ -53,7 +53,7 @@ Transaction instructions indicate how to execute a transaction, complementary wi
|
|||||||
|
|
||||||
<%- renderSchema("objects/instructions.json") %>
|
<%- renderSchema("objects/instructions.json") %>
|
||||||
|
|
||||||
We recommend that you specify a `maxLedgerVersion` so that you can quickly determine that a failed transaction will never succeeed in the future. It is impossible for a transaction to succeed after the XRP Ledger's consensus-validated ledger version exceeds the transaction's `maxLedgerVersion`. If you omit `maxLedgerVersion`, the "prepare\*" method automatically supplies a `maxLedgerVersion` equal to the current ledger plus 3, which it includes in the return value from the "prepare\*" method.
|
We recommend that you specify a `maxLedgerVersion` so that you can quickly determine that a failed transaction will never succeed in the future. It is impossible for a transaction to succeed after the XRP Ledger's consensus-validated ledger version exceeds the transaction's `maxLedgerVersion`. If you omit `maxLedgerVersion`, the "prepare\*" method automatically supplies a `maxLedgerVersion` equal to the current ledger plus 3, which it includes in the return value from the "prepare\*" method.
|
||||||
|
|
||||||
## Transaction ID
|
## Transaction ID
|
||||||
|
|
||||||
|
|||||||
31
package.json
31
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ripple-lib",
|
"name": "ripple-lib",
|
||||||
"version": "1.1.1",
|
"version": "1.2.3",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"description": "A JavaScript API for interacting with Ripple in Node.js and the browser",
|
"description": "A JavaScript API for interacting with Ripple in Node.js and the browser",
|
||||||
"files": [
|
"files": [
|
||||||
@@ -10,7 +10,8 @@
|
|||||||
"main": "dist/npm/",
|
"main": "dist/npm/",
|
||||||
"types": "dist/npm/index.d.ts",
|
"types": "dist/npm/index.d.ts",
|
||||||
"browser": {
|
"browser": {
|
||||||
"ws": "./dist/npm/common/wswrapper.js"
|
"ws": "./dist/npm/common/wswrapper.js",
|
||||||
|
"https-proxy-agent": false
|
||||||
},
|
},
|
||||||
"directories": {
|
"directories": {
|
||||||
"test": "test"
|
"test": "test"
|
||||||
@@ -23,51 +24,47 @@
|
|||||||
"jsonschema": "1.2.2",
|
"jsonschema": "1.2.2",
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"ripple-address-codec": "^2.0.1",
|
"ripple-address-codec": "^2.0.1",
|
||||||
"ripple-binary-codec": "0.2.0",
|
"ripple-binary-codec": "0.2.1",
|
||||||
"ripple-hashes": "^0.3.1",
|
"ripple-hashes": "0.3.2",
|
||||||
"ripple-keypairs": "^0.10.1",
|
"ripple-keypairs": "^0.10.1",
|
||||||
"ripple-lib-transactionparser": "0.7.1",
|
"ripple-lib-transactionparser": "0.7.1",
|
||||||
"ws": "^3.3.1"
|
"ws": "^3.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^8.0.53",
|
"@types/node": "11.13.0",
|
||||||
"assert-diff": "^1.0.1",
|
"assert-diff": "^1.0.1",
|
||||||
"coveralls": "^2.13.1",
|
|
||||||
"doctoc": "^0.15.0",
|
"doctoc": "^0.15.0",
|
||||||
"ejs": "^2.3.4",
|
"ejs": "^2.3.4",
|
||||||
"eventemitter2": "^0.4.14",
|
"eventemitter2": "^0.4.14",
|
||||||
"gulp": "^3.8.10",
|
"gulp": "^3.8.10",
|
||||||
"gulp-bump": "^0.1.13",
|
"gulp-bump": "^0.1.13",
|
||||||
"gulp-rename": "^1.2.0",
|
"gulp-rename": "^1.2.0",
|
||||||
"http-server": "^0.8.5",
|
|
||||||
"jayson": "^1.2.2",
|
"jayson": "^1.2.2",
|
||||||
"json-loader": "^0.5.2",
|
"json-loader": "^0.5.2",
|
||||||
"json-schema-to-markdown-table": "^0.4.0",
|
"json-schema-to-markdown-table": "^0.4.0",
|
||||||
"mocha": "^2.1.0",
|
"mocha": "6.1.3",
|
||||||
"mocha-in-sauce": "^0.0.1",
|
|
||||||
"mocha-junit-reporter": "^1.9.1",
|
"mocha-junit-reporter": "^1.9.1",
|
||||||
"null-loader": "^0.1.1",
|
"null-loader": "^0.1.1",
|
||||||
"nyc": "^11.3.0",
|
"nyc": "13.3.0",
|
||||||
"source-map-support": "^0.5.0",
|
"source-map-support": "0.5.12",
|
||||||
"ts-loader": "^3.2.0",
|
"ts-loader": "^3.2.0",
|
||||||
"ts-node": "^3.3.0",
|
"ts-node": "8.0.3",
|
||||||
"tslint": "^5.8.0",
|
"tslint": "^5.8.0",
|
||||||
"tslint-eslint-rules": "^4.1.1",
|
"tslint-eslint-rules": "^4.1.1",
|
||||||
"typescript": "2.9.2",
|
"typescript": "3.4.2",
|
||||||
"uglifyjs-webpack-plugin": "^1.1.4",
|
"uglifyjs-webpack-plugin": "^1.1.4",
|
||||||
"webpack": "3.12.0",
|
"webpack": "3.12.0",
|
||||||
"yargs": "^8.0.2"
|
"yargs": "13.2.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "gulp",
|
"build": "gulp",
|
||||||
"doctoc": "doctoc docs/index.md --title '# RippleAPI Reference' --github --maxlevel 2",
|
"doctoc": "doctoc docs/index.md --title '# RippleAPI Reference' --github --maxlevel 2",
|
||||||
"docgen": "node --harmony scripts/build_docs.js",
|
"docgen": "node --harmony scripts/build_docs.js",
|
||||||
"clean": "rm -rf dist/npm",
|
"clean": "rm -rf dist/npm",
|
||||||
"compile": "mkdir -p dist/npm/common && cp -r src/common/schemas dist/npm/common/ && tsc",
|
"compile": "mkdir -p dist/npm/common && cp -r src/common/schemas dist/npm/common/ && tsc --build",
|
||||||
"watch": "tsc -w",
|
"watch": "tsc -w",
|
||||||
"prepublish": "npm run clean && npm run compile && npm run build",
|
"prepublish": "npm run clean && npm run compile && npm run build",
|
||||||
"test": "nyc mocha",
|
"test": "TS_NODE_PROJECT=src/tsconfig.json nyc mocha --exit",
|
||||||
"coveralls": "cat ./coverage/lcov.info | coveralls",
|
|
||||||
"lint": "tslint -p ./",
|
"lint": "tslint -p ./",
|
||||||
"perf": "./scripts/perf_test.sh",
|
"perf": "./scripts/perf_test.sh",
|
||||||
"start": "node scripts/http.js",
|
"start": "node scripts/http.js",
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ unittest() {
|
|||||||
# test "src"
|
# test "src"
|
||||||
mocha test --reporter mocha-junit-reporter --reporter-options mochaFile=$CIRCLE_TEST_REPORTS/test-results.xml
|
mocha test --reporter mocha-junit-reporter --reporter-options mochaFile=$CIRCLE_TEST_REPORTS/test-results.xml
|
||||||
yarn test --coverage
|
yarn test --coverage
|
||||||
yarn run coveralls
|
#yarn run coveralls
|
||||||
|
|
||||||
# test compiled version in "dist/npm"
|
# test compiled version in "dist/npm"
|
||||||
$(npm bin)/babel -D --optional runtime --ignore "**/node_modules/**" -d test-compiled/ test/
|
$(npm bin)/babel -D --optional runtime --ignore "**/node_modules/**" -d test-compiled/ test/
|
||||||
|
|||||||
@@ -1,100 +0,0 @@
|
|||||||
|
|
||||||
const _ = require('lodash');
|
|
||||||
const MochaSauce = require('mocha-in-sauce');
|
|
||||||
|
|
||||||
const testUrl = 'http://testripple.circleci.com:8080/test/saucerunner.html';
|
|
||||||
|
|
||||||
|
|
||||||
function main() {
|
|
||||||
// uncomment for more debug info
|
|
||||||
// process.env.DEBUG = '*';
|
|
||||||
|
|
||||||
// configure
|
|
||||||
const config = {
|
|
||||||
name: 'RippleAPI',
|
|
||||||
host: 'localhost',
|
|
||||||
port: 4445,
|
|
||||||
maxDuration: 180000,
|
|
||||||
// the current build name (optional)
|
|
||||||
build: Date.now(),
|
|
||||||
url: testUrl,
|
|
||||||
runSauceConnect: true
|
|
||||||
};
|
|
||||||
|
|
||||||
if (process.env.CIRCLE_BUILD_NUM) {
|
|
||||||
config.build = process.env.CIRCLE_BUILD_NUM;
|
|
||||||
config.tags = [process.env.CIRCLE_BRANCH, process.env.CIRCLE_SHA1];
|
|
||||||
config.tunnelIdentifier = process.env.CIRCLE_BUILD_NUM;
|
|
||||||
}
|
|
||||||
|
|
||||||
const sauce = new MochaSauce(config);
|
|
||||||
|
|
||||||
sauce.concurrency(5);
|
|
||||||
|
|
||||||
// setup what browsers to test with
|
|
||||||
sauce.browser({browserName: 'firefox', platform: 'Linux',
|
|
||||||
version: '43'});
|
|
||||||
sauce.browser({browserName: 'firefox', platform: 'Windows 8.1',
|
|
||||||
version: '43'});
|
|
||||||
sauce.browser({browserName: 'firefox', platform: 'OS X 10.11',
|
|
||||||
version: '43'});
|
|
||||||
sauce.browser({browserName: 'safari', platform: 'OS X 10.11',
|
|
||||||
version: '9'});
|
|
||||||
sauce.browser({browserName: 'safari', platform: 'OS X 10.10',
|
|
||||||
version: '8'});
|
|
||||||
sauce.browser({browserName: 'safari', platform: 'OS X 10.9',
|
|
||||||
version: '7'});
|
|
||||||
sauce.browser({browserName: 'chrome', platform: 'OS X 10.11',
|
|
||||||
version: '47'});
|
|
||||||
sauce.browser({browserName: 'chrome', platform: 'Linux',
|
|
||||||
version: '47'});
|
|
||||||
sauce.browser({browserName: 'chrome', platform: 'Windows 8.1',
|
|
||||||
version: '47'});
|
|
||||||
sauce.browser({browserName: 'internet explorer', platform: 'Windows 10',
|
|
||||||
version: '11'});
|
|
||||||
sauce.browser({browserName: 'MicrosoftEdge', platform: 'Windows 10',
|
|
||||||
version: '20'});
|
|
||||||
|
|
||||||
sauce.on('init', function(browser) {
|
|
||||||
console.log(' init : %s %s', browser.browserName, browser.platform);
|
|
||||||
});
|
|
||||||
|
|
||||||
sauce.on('start', function(browser) {
|
|
||||||
console.log(' start : %s %s', browser.browserName, browser.platform);
|
|
||||||
});
|
|
||||||
|
|
||||||
sauce.on('end', function(browser, res) {
|
|
||||||
console.log(' end : %s %s : %d failures', browser.browserName,
|
|
||||||
browser.platform, res && res.failures);
|
|
||||||
});
|
|
||||||
|
|
||||||
sauce.on('connected', sauceConnectProcess => {
|
|
||||||
sauceConnectProcess.on('exit', function(code, /* signal */) {
|
|
||||||
if (code > 0) {
|
|
||||||
console.log('something wrong - exiting');
|
|
||||||
process.exit();
|
|
||||||
} else {
|
|
||||||
console.log('normal tunnel exit');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
sauce.start(function(err, res) {
|
|
||||||
let failure = false;
|
|
||||||
if (err) {
|
|
||||||
console.log('Error starting Sauce');
|
|
||||||
console.error(err);
|
|
||||||
process.exitCode = 2;
|
|
||||||
} else {
|
|
||||||
console.log('-------------- done --------------');
|
|
||||||
failure = _.some(res, 'failures');
|
|
||||||
console.log('Tests are failed:', failure);
|
|
||||||
if (failure) {
|
|
||||||
process.exitCode = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
main();
|
|
||||||
17
snippets/src/getTransaction.ts
Normal file
17
snippets/src/getTransaction.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import {RippleAPI} from '../../dist/npm'
|
||||||
|
|
||||||
|
const api = new RippleAPI({
|
||||||
|
server: 'wss://s.altnet.rippletest.net:51233'
|
||||||
|
})
|
||||||
|
|
||||||
|
getTransaction()
|
||||||
|
|
||||||
|
async function getTransaction() {
|
||||||
|
await api.connect()
|
||||||
|
const ledger = await api.getLedger({includeTransactions: true})
|
||||||
|
console.log(ledger)
|
||||||
|
const tx = await api.getTransaction(ledger.transactionHashes[0])
|
||||||
|
console.log(tx)
|
||||||
|
console.log('deliveredAmount:', tx.outcome.deliveredAmount)
|
||||||
|
process.exit(0)
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
const RippleAPI = require('../dist/npm').RippleAPI
|
import {RippleAPI} from '../../dist/npm'
|
||||||
|
|
||||||
const api = new RippleAPI({server: 'wss://s.altnet.rippletest.net:51233'})
|
const api = new RippleAPI({server: 'wss://s.altnet.rippletest.net:51233'})
|
||||||
|
|
||||||
parseAccountFlags()
|
parseAccountFlags()
|
||||||
@@ -8,4 +9,5 @@ async function parseAccountFlags() {
|
|||||||
const account_info = await api.request('account_info', {account: 'rKsdkGhyZH6b2Zzd5hNnEqSv2wpznn4n6N'})
|
const account_info = await api.request('account_info', {account: 'rKsdkGhyZH6b2Zzd5hNnEqSv2wpznn4n6N'})
|
||||||
const flags = api.parseAccountFlags(account_info.account_data.Flags)
|
const flags = api.parseAccountFlags(account_info.account_data.Flags)
|
||||||
console.log(JSON.stringify(flags, null, 2))
|
console.log(JSON.stringify(flags, null, 2))
|
||||||
|
process.exit(0)
|
||||||
}
|
}
|
||||||
13
snippets/tsconfig.json
Normal file
13
snippets/tsconfig.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"extends": "../tsconfig-base",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./dist",
|
||||||
|
"rootDir": "./src"
|
||||||
|
},
|
||||||
|
"references": [
|
||||||
|
{ "path": "../src" }
|
||||||
|
],
|
||||||
|
"include": [
|
||||||
|
"./src/**/*.ts"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -71,7 +71,7 @@ import * as transactionUtils from './transaction/utils'
|
|||||||
import * as schemaValidator from './common/schema-validator'
|
import * as schemaValidator from './common/schema-validator'
|
||||||
import {getServerInfo, getFee} from './common/serverinfo'
|
import {getServerInfo, getFee} from './common/serverinfo'
|
||||||
import {clamp, renameCounterpartyToIssuer} from './ledger/utils'
|
import {clamp, renameCounterpartyToIssuer} from './ledger/utils'
|
||||||
import {Instructions, Prepare} from './transaction/types'
|
import {TransactionJSON, Instructions, Prepare} from './transaction/types'
|
||||||
|
|
||||||
export type APIOptions = {
|
export type APIOptions = {
|
||||||
server?: string,
|
server?: string,
|
||||||
@@ -210,7 +210,7 @@ class RippleAPI extends EventEmitter {
|
|||||||
*
|
*
|
||||||
* You can later submit the transaction with `submit()`.
|
* You can later submit the transaction with `submit()`.
|
||||||
*/
|
*/
|
||||||
async prepareTransaction(txJSON: object, instructions: Instructions = {}):
|
async prepareTransaction(txJSON: TransactionJSON, instructions: Instructions = {}):
|
||||||
Promise<Prepare> {
|
Promise<Prepare> {
|
||||||
return transactionUtils.prepareTransaction(txJSON, this, instructions)
|
return transactionUtils.prepareTransaction(txJSON, this, instructions)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -206,12 +206,6 @@ class Connection extends EventEmitter {
|
|||||||
|
|
||||||
this._retry = 0
|
this._retry = 0
|
||||||
this._ws.on('error', error => {
|
this._ws.on('error', error => {
|
||||||
// TODO: "type" does not exist on official error type, safe to remove?
|
|
||||||
if (process.browser && error && (<any>error).type === 'error') {
|
|
||||||
// we are in browser, ignore error - `close` event will be fired
|
|
||||||
// after error
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.emit('error', 'websocket', error.message, error)
|
this.emit('error', 'websocket', error.message, error)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -268,7 +262,7 @@ class Connection extends EventEmitter {
|
|||||||
options.agent = new HttpsProxyAgent(proxyOptions)
|
options.agent = new HttpsProxyAgent(proxyOptions)
|
||||||
}
|
}
|
||||||
if (this._authorization !== undefined) {
|
if (this._authorization !== undefined) {
|
||||||
const base64 = new Buffer(this._authorization).toString('base64')
|
const base64 = Buffer.from(this._authorization).toString('base64')
|
||||||
options.headers = {Authorization: `Basic ${base64}`}
|
options.headers = {Authorization: `Basic ${base64}`}
|
||||||
}
|
}
|
||||||
const optionsOverrides = _.omitBy({
|
const optionsOverrides = _.omitBy({
|
||||||
@@ -287,7 +281,7 @@ class Connection extends EventEmitter {
|
|||||||
return websocket
|
return websocket
|
||||||
}
|
}
|
||||||
|
|
||||||
connect() {
|
connect(): Promise<void> {
|
||||||
this._clearReconnectTimer()
|
this._clearReconnectTimer()
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!this._url) {
|
if (!this._url) {
|
||||||
@@ -322,11 +316,11 @@ class Connection extends EventEmitter {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect() {
|
disconnect(): Promise<void> {
|
||||||
return this._disconnect(true)
|
return this._disconnect(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
_disconnect(calledByUser) {
|
_disconnect(calledByUser): Promise<void> {
|
||||||
if (calledByUser) {
|
if (calledByUser) {
|
||||||
this._clearReconnectTimer()
|
this._clearReconnectTimer()
|
||||||
this._retry = 0
|
this._retry = 0
|
||||||
@@ -445,7 +439,7 @@ class Connection extends EventEmitter {
|
|||||||
|
|
||||||
this.once(eventName, response => {
|
this.once(eventName, response => {
|
||||||
if (response.status === 'error') {
|
if (response.status === 'error') {
|
||||||
_reject(new RippledError(response.error, response))
|
_reject(new RippledError(response.error_message || response.error, response))
|
||||||
} else if (response.status === 'success') {
|
} else if (response.status === 'success') {
|
||||||
_resolve(response.result)
|
_resolve(response.result)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
"options": {
|
"options": {
|
||||||
"description": "Options affecting what ledger and how much data to return.",
|
"description": "Options affecting what ledger and how much data to return.",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"ledgerHash": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Get ledger data for this historical ledger hash."
|
||||||
|
},
|
||||||
"ledgerVersion": {
|
"ledgerVersion": {
|
||||||
"$ref": "ledgerVersion",
|
"$ref": "ledgerVersion",
|
||||||
"description": "Get ledger data for this historical ledger version."
|
"description": "Get ledger data for this historical ledger version."
|
||||||
|
|||||||
@@ -10,14 +10,14 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"minLedgerVersion": {
|
"minLedgerVersion": {
|
||||||
"$ref": "ledgerVersion",
|
"$ref": "ledgerVersion",
|
||||||
"description": "The lowest ledger version to search."
|
"description": "The lowest ledger version to search. This must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'."
|
||||||
},
|
},
|
||||||
"maxLedgerVersion": {
|
"maxLedgerVersion": {
|
||||||
"$ref": "ledgerVersion",
|
"$ref": "ledgerVersion",
|
||||||
"description": "The highest ledger version to search"
|
"description": "The highest ledger version to search. This must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'."
|
||||||
},
|
},
|
||||||
"includeRawTransaction": {
|
"includeRawTransaction": {
|
||||||
"description": "Include raw transaction data. For advanced users; exercise caution when interpreting this data. "
|
"description": "Include raw transaction data. For advanced users; exercise caution when interpreting this data."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties": false
|
"additionalProperties": false
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
"$ref": "value"
|
"$ref": "value"
|
||||||
},
|
},
|
||||||
"maxLedgerVersion": {
|
"maxLedgerVersion": {
|
||||||
"description": "The highest ledger version that the transaction can be included in. If this option and `maxLedgerVersionOffset` are both omitted, the `maxLedgerVersion` option will default to 3 greater than the current validated ledger version (equivalent to `maxLedgerVersionOffset=3`). Use `null` to not set a maximum ledger version.",
|
"description": "The highest ledger version that the transaction can be included in. If this option and `maxLedgerVersionOffset` are both omitted, the `maxLedgerVersion` option will default to 3 greater than the current validated ledger version (equivalent to `maxLedgerVersionOffset=3`). Use `null` to not set a maximum ledger version. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'.",
|
||||||
"oneOf": [
|
"oneOf": [
|
||||||
{"$ref": "ledgerVersion"},
|
{"$ref": "ledgerVersion"},
|
||||||
{"type": "null"}
|
{"type": "null"}
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||||
"title": "tx",
|
"title": "tx-json",
|
||||||
"link": "https://ripple.com/build/transactions/",
|
"link": "https://developers.ripple.com/transaction-formats.html",
|
||||||
"description": "An object in rippled txJSON format",
|
"description": "An object in rippled txJSON format",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"Account": {"$ref": "address"}
|
"Account": {"$ref": "address"},
|
||||||
|
"TransactionType": {"type": "string"}
|
||||||
},
|
},
|
||||||
"required": ["Account"]
|
"required": ["Account", "TransactionType"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"result": {
|
"result": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Result code returned by rippled. See [Transaction Results](https://ripple.com/build/transactions/#full-transaction-response-list) for a complete list."
|
"description": "Result code returned by rippled. See [Transaction Results](https://developers.ripple.com/transaction-results.html) for a complete list."
|
||||||
},
|
},
|
||||||
"timestamp": {
|
"timestamp": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"fee": {
|
"fee": {
|
||||||
"$ref": "value",
|
"$ref": "value",
|
||||||
"description": "An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information."
|
"description": "The fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information. For multi-signed transactions, this fee will be multiplied by (N+1), where N is the number of signatures you plan to provide."
|
||||||
},
|
},
|
||||||
"sequence": {
|
"sequence": {
|
||||||
"$ref": "sequence",
|
"$ref": "sequence",
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
{"$ref": "ledgerVersion"},
|
{"$ref": "ledgerVersion"},
|
||||||
{"type": "null"}
|
{"type": "null"}
|
||||||
],
|
],
|
||||||
"description": "The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum."
|
"description": "The highest ledger version that the transaction can be included in. Set to `null` if there is no maximum. If not null, this must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
|
|||||||
@@ -5,13 +5,33 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"resultCode": {
|
"resultCode": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "The result code returned by rippled. [List of transaction responses](https://ripple.com/build/transactions/#full-transaction-response-list)"
|
"description": "Deprecated: Use `engine_result` instead."
|
||||||
},
|
},
|
||||||
"resultMessage": {
|
"resultMessage": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Human-readable explanation of the status of the transaction."
|
"description": "Deprecated: Use `engine_result_message` instead."
|
||||||
|
},
|
||||||
|
"engine_result": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Code indicating the preliminary result of the transaction, for example `tesSUCCESS`. [List of transaction responses](https://developers.ripple.com/transaction-results.html)"
|
||||||
|
},
|
||||||
|
"engine_result_code": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Numeric code indicating the preliminary result of the transaction, directly correlated to `engine_result`"
|
||||||
|
},
|
||||||
|
"engine_result_message": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Human-readable explanation of the transaction's preliminary result."
|
||||||
|
},
|
||||||
|
"tx_blob": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The complete transaction in hex string format."
|
||||||
|
},
|
||||||
|
"tx_json": {
|
||||||
|
"$ref": "tx-json",
|
||||||
|
"description": "The complete transaction in JSON format."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["resultCode", "resultMessage"],
|
"required": ["resultCode", "resultMessage", "engine_result", "engine_result_code", "engine_result_message", "tx_blob", "tx_json"],
|
||||||
"additionalProperties": false
|
"additionalProperties": false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as _ from 'lodash'
|
import * as _ from 'lodash'
|
||||||
import {convertKeysFromSnakeCaseToCamelCase} from './utils'
|
import {convertKeysFromSnakeCaseToCamelCase} from './utils'
|
||||||
import BigNumber from 'bignumber.js'
|
import BigNumber from 'bignumber.js'
|
||||||
import {RippleAPI} from '../index'
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type GetServerInfoResponse = {
|
export type GetServerInfoResponse = {
|
||||||
buildVersion: string,
|
buildVersion: string,
|
||||||
|
|||||||
@@ -18,5 +18,6 @@ export interface Ledger {
|
|||||||
hash?: string,
|
hash?: string,
|
||||||
close_flags?: number,
|
close_flags?: number,
|
||||||
parent_close_time?: number,
|
parent_close_time?: number,
|
||||||
accountState?: any[]
|
accountState?: any[],
|
||||||
|
validated?: boolean
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,7 +125,6 @@ function removeUndefined<T extends object>(obj: T): T {
|
|||||||
/**
|
/**
|
||||||
* @param {Number} rpepoch (seconds since 1/1/2000 GMT)
|
* @param {Number} rpepoch (seconds since 1/1/2000 GMT)
|
||||||
* @return {Number} ms since unix epoch
|
* @return {Number} ms since unix epoch
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
function rippleToUnixTimestamp(rpepoch: number): number {
|
function rippleToUnixTimestamp(rpepoch: number): number {
|
||||||
return (rpepoch + 0x386D4380) * 1000
|
return (rpepoch + 0x386D4380) * 1000
|
||||||
|
|||||||
@@ -124,3 +124,6 @@ _.partial(schemaValidate, 'api-options')
|
|||||||
|
|
||||||
export const instructions =
|
export const instructions =
|
||||||
_.partial(schemaValidate, 'instructions')
|
_.partial(schemaValidate, 'instructions')
|
||||||
|
|
||||||
|
export const tx_json =
|
||||||
|
_.partial(schemaValidate, 'tx-json')
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import {validate, removeUndefined, dropsToXrp} from '../common'
|
import {validate, removeUndefined, dropsToXrp} from '../common'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
import {AccountInfoResponse} from '../common/types/commands/account_info'
|
import {AccountInfoResponse} from '../common/types/commands/account_info'
|
||||||
|
|
||||||
export type GetAccountInfoOptions = {
|
export type GetAccountInfoOptions = {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import {removeUndefined} from '../common'
|
import {removeUndefined} from '../common'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
import {
|
import {
|
||||||
GetAccountObjectsOptions,
|
GetAccountObjectsOptions,
|
||||||
AccountObjectsResponse
|
AccountObjectsResponse
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import * as _ from 'lodash'
|
|||||||
import {validate} from '../common'
|
import {validate} from '../common'
|
||||||
import {Amount} from '../common/types/objects'
|
import {Amount} from '../common/types/objects'
|
||||||
import {ensureLedgerVersion} from './utils'
|
import {ensureLedgerVersion} from './utils'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type BalanceSheetOptions = {
|
export type BalanceSheetOptions = {
|
||||||
excludeAddresses?: Array<string>,
|
excludeAddresses?: Array<string>,
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import {validate} from '../common'
|
|||||||
import {Connection} from '../common'
|
import {Connection} from '../common'
|
||||||
import {GetTrustlinesOptions} from './trustlines'
|
import {GetTrustlinesOptions} from './trustlines'
|
||||||
import {FormattedTrustline} from '../common/types/objects/trustlines'
|
import {FormattedTrustline} from '../common/types/objects/trustlines'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
|
|
||||||
export type Balance = {
|
export type Balance = {
|
||||||
@@ -47,7 +48,7 @@ function getLedgerVersionHelper(connection: Connection, optionValue?: number
|
|||||||
return connection.getLedgerVersion()
|
return connection.getLedgerVersion()
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBalances(address: string, options: GetTrustlinesOptions = {}
|
function getBalances(this: RippleAPI, address: string, options: GetTrustlinesOptions = {}
|
||||||
): Promise<GetBalances> {
|
): Promise<GetBalances> {
|
||||||
validate.getTrustlines({address, options})
|
validate.getTrustlines({address, options})
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import {validate} from '../common'
|
import {validate} from '../common'
|
||||||
import {FormattedLedger, parseLedger} from './parse/ledger'
|
import {FormattedLedger, parseLedger} from './parse/ledger'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type GetLedgerOptions = {
|
export type GetLedgerOptions = {
|
||||||
|
ledgerHash?: string,
|
||||||
ledgerVersion?: number,
|
ledgerVersion?: number,
|
||||||
includeAllData?: boolean,
|
includeAllData?: boolean,
|
||||||
includeTransactions?: boolean,
|
includeTransactions?: boolean,
|
||||||
@@ -16,6 +17,7 @@ async function getLedger(
|
|||||||
validate.getLedger({options})
|
validate.getLedger({options})
|
||||||
// 2. Make Request
|
// 2. Make Request
|
||||||
const response = await this.request('ledger', {
|
const response = await this.request('ledger', {
|
||||||
|
ledger_hash: options.ledgerHash,
|
||||||
ledger_index: options.ledgerVersion || 'validated',
|
ledger_index: options.ledgerVersion || 'validated',
|
||||||
expand: options.includeAllData,
|
expand: options.includeAllData,
|
||||||
transactions: options.includeTransactions,
|
transactions: options.includeTransactions,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
import {validate} from '../common'
|
import {validate} from '../common'
|
||||||
import {Amount, Issue} from '../common/types/objects'
|
import {Amount, Issue} from '../common/types/objects'
|
||||||
import {BookOffer} from '../common/types/commands'
|
import {BookOffer} from '../common/types/commands'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
import BigNumber from 'bignumber.js'
|
import BigNumber from 'bignumber.js'
|
||||||
|
|
||||||
export type FormattedOrderbook = {
|
export type FormattedOrderbook = {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as _ from 'lodash'
|
import * as _ from 'lodash'
|
||||||
import {validate} from '../common'
|
import {validate} from '../common'
|
||||||
import {FormattedAccountOrder, parseAccountOrder} from './parse/account-order'
|
import {FormattedAccountOrder, parseAccountOrder} from './parse/account-order'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
import {AccountOffersResponse} from '../common/types/commands'
|
import {AccountOffersResponse} from '../common/types/commands'
|
||||||
|
|
||||||
export type GetOrdersOptions = {
|
export type GetOrdersOptions = {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ const AccountFields = constants.AccountFields
|
|||||||
|
|
||||||
function parseField(info, value) {
|
function parseField(info, value) {
|
||||||
if (info.encoding === 'hex' && !info.length) { // e.g. "domain"
|
if (info.encoding === 'hex' && !info.length) { // e.g. "domain"
|
||||||
return new Buffer(value, 'hex').toString('ascii')
|
return Buffer.from(value, 'hex').toString('ascii')
|
||||||
}
|
}
|
||||||
if (info.shift) {
|
if (info.shift) {
|
||||||
return (new BigNumber(value)).shift(-info.shift).toNumber()
|
return (new BigNumber(value)).shift(-info.shift).toNumber()
|
||||||
|
|||||||
@@ -59,6 +59,11 @@ function parseState(state) {
|
|||||||
return {rawState: JSON.stringify(state)}
|
return {rawState: JSON.stringify(state)}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Ledger} ledger must be a *closed* ledger with valid `close_time` and `parent_close_time`
|
||||||
|
* @returns {FormattedLedger} formatted ledger
|
||||||
|
* @throws RangeError: Invalid time value (rippleTimeToISO8601)
|
||||||
|
*/
|
||||||
export function parseLedger(ledger: Ledger): FormattedLedger {
|
export function parseLedger(ledger: Ledger): FormattedLedger {
|
||||||
const ledgerVersion = parseInt(ledger.ledger_index || ledger.seqNum, 10)
|
const ledgerVersion = parseInt(ledger.ledger_index || ledger.seqNum, 10)
|
||||||
return removeUndefined(Object.assign(
|
return removeUndefined(Object.assign(
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {PayChannelLedgerEntry} from '../../common/types/objects'
|
|||||||
|
|
||||||
export type FormattedPaymentChannel = {
|
export type FormattedPaymentChannel = {
|
||||||
account: string,
|
account: string,
|
||||||
|
amount: string,
|
||||||
balance: string,
|
balance: string,
|
||||||
publicKey: string,
|
publicKey: string,
|
||||||
destination: string,
|
destination: string,
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ function parseOutcome(tx: any): any|undefined {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function hexToString(hex: string): string|undefined {
|
function hexToString(hex: string): string|undefined {
|
||||||
return hex ? new Buffer(hex, 'hex').toString('utf-8') : undefined
|
return hex ? Buffer.from(hex, 'hex').toString('utf-8') : undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseMemos(tx: any): Array<Memo>|undefined {
|
function parseMemos(tx: any): Array<Memo>|undefined {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import {RippledAmount, Amount} from '../common/types/objects'
|
|||||||
import {
|
import {
|
||||||
GetPaths, PathFind, RippledPathsResponse, PathFindRequest
|
GetPaths, PathFind, RippledPathsResponse, PathFindRequest
|
||||||
} from './pathfind-types'
|
} from './pathfind-types'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
const NotFoundError = errors.NotFoundError
|
const NotFoundError = errors.NotFoundError
|
||||||
const ValidationError = errors.ValidationError
|
const ValidationError = errors.ValidationError
|
||||||
|
|
||||||
@@ -46,9 +47,7 @@ function requestPathFind(connection: Connection, pathfind: PathFind
|
|||||||
&& !request.destination_amount.issuer) {
|
&& !request.destination_amount.issuer) {
|
||||||
// Convert blank issuer to sender's address
|
// Convert blank issuer to sender's address
|
||||||
// (Ripple convention for 'any issuer')
|
// (Ripple convention for 'any issuer')
|
||||||
// https://ripple.com/build/transactions/
|
// https://developers.ripple.com/payment.html#special-issuer-values-for-sendmax-and-amount
|
||||||
// #special-issuer-values-for-sendmax-and-amount
|
|
||||||
// https://ripple.com/build/ripple-rest/#counterparties-in-payments
|
|
||||||
request.destination_amount.issuer = request.destination_account
|
request.destination_amount.issuer = request.destination_account
|
||||||
}
|
}
|
||||||
if (pathfind.source.currencies && pathfind.source.currencies.length > 0) {
|
if (pathfind.source.currencies && pathfind.source.currencies.length > 0) {
|
||||||
@@ -149,7 +148,7 @@ function formatResponse(pathfind: PathFind, paths: RippledPathsResponse) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPaths(pathfind: PathFind): Promise<GetPaths> {
|
function getPaths(this: RippleAPI, pathfind: PathFind): Promise<GetPaths> {
|
||||||
validate.getPaths({pathfind})
|
validate.getPaths({pathfind})
|
||||||
|
|
||||||
const address = pathfind.source.address
|
const address = pathfind.source.address
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
FormattedPaymentChannel
|
FormattedPaymentChannel
|
||||||
} from './parse/payment-channel'
|
} from './parse/payment-channel'
|
||||||
import {validate, errors} from '../common'
|
import {validate, errors} from '../common'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
import {LedgerEntryResponse} from '../common/types/commands'
|
import {LedgerEntryResponse} from '../common/types/commands'
|
||||||
const NotFoundError = errors.NotFoundError
|
const NotFoundError = errors.NotFoundError
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import parseFields from './parse/fields'
|
|||||||
import {validate, constants} from '../common'
|
import {validate, constants} from '../common'
|
||||||
import {FormattedSettings} from '../common/types/objects'
|
import {FormattedSettings} from '../common/types/objects'
|
||||||
import {AccountInfoResponse} from '../common/types/commands'
|
import {AccountInfoResponse} from '../common/types/commands'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
const AccountFlags = constants.AccountFlags
|
const AccountFlags = constants.AccountFlags
|
||||||
|
|
||||||
export type SettingsOptions = {
|
export type SettingsOptions = {
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import parseTransaction from './parse/transaction'
|
|||||||
import {validate, errors} from '../common'
|
import {validate, errors} from '../common'
|
||||||
import {Connection} from '../common'
|
import {Connection} from '../common'
|
||||||
import {FormattedTransactionType} from '../transaction/types'
|
import {FormattedTransactionType} from '../transaction/types'
|
||||||
|
import {RippledError} from '../common/errors'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type TransactionOptions = {
|
export type TransactionOptions = {
|
||||||
minLedgerVersion?: number,
|
minLedgerVersion?: number,
|
||||||
@@ -59,10 +61,16 @@ function isTransactionInRange(tx: any, options: TransactionOptions) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function convertError(connection: Connection, options: TransactionOptions,
|
function convertError(connection: Connection, options: TransactionOptions,
|
||||||
error: Error
|
error: RippledError
|
||||||
): Promise<Error> {
|
): Promise<Error> {
|
||||||
const _error = (error.message === 'txnNotFound') ?
|
let shouldUseNotFoundError = false
|
||||||
new errors.NotFoundError('Transaction not found') : error
|
if ((error.data && error.data.error === 'txnNotFound') || error.message === 'txnNotFound') {
|
||||||
|
shouldUseNotFoundError = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// In the future, we should deprecate this error, instead passing through the one from rippled.
|
||||||
|
const _error = shouldUseNotFoundError ? new errors.NotFoundError('Transaction not found') : error
|
||||||
|
|
||||||
if (_error instanceof errors.NotFoundError) {
|
if (_error instanceof errors.NotFoundError) {
|
||||||
return utils.hasCompleteLedgerRange(connection, options.minLedgerVersion,
|
return utils.hasCompleteLedgerRange(connection, options.minLedgerVersion,
|
||||||
options.maxLedgerVersion).then(hasCompleteLedgerRange => {
|
options.maxLedgerVersion).then(hasCompleteLedgerRange => {
|
||||||
@@ -89,7 +97,7 @@ function formatResponse(options: TransactionOptions, tx: TransactionResponse
|
|||||||
return parseTransaction(tx, options.includeRawTransaction)
|
return parseTransaction(tx, options.includeRawTransaction)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getTransaction(id: string, options: TransactionOptions = {}
|
async function getTransaction(this: RippleAPI, id: string, options: TransactionOptions = {}
|
||||||
): Promise<FormattedTransactionType> {
|
): Promise<FormattedTransactionType> {
|
||||||
validate.getTransaction({id, options})
|
validate.getTransaction({id, options})
|
||||||
const _options = await utils.ensureLedgerVersion.call(this, options)
|
const _options = await utils.ensureLedgerVersion.call(this, options)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import parseTransaction from './parse/transaction'
|
|||||||
import getTransaction from './transaction'
|
import getTransaction from './transaction'
|
||||||
import {validate, errors, Connection} from '../common'
|
import {validate, errors, Connection} from '../common'
|
||||||
import {FormattedTransactionType} from '../transaction/types'
|
import {FormattedTransactionType} from '../transaction/types'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
|
|
||||||
export type TransactionsOptions = {
|
export type TransactionsOptions = {
|
||||||
@@ -162,7 +163,7 @@ function getTransactionsInternal(connection: Connection, address: string,
|
|||||||
return utils.getRecursive(getter, options.limit).then(format)
|
return utils.getRecursive(getter, options.limit).then(format)
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTransactions(address: string, options: TransactionsOptions = {}
|
function getTransactions(this: RippleAPI, address: string, options: TransactionsOptions = {}
|
||||||
): Promise<GetTransactionsResponse> {
|
): Promise<GetTransactionsResponse> {
|
||||||
validate.getTransactions({address, options})
|
validate.getTransactions({address, options})
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as _ from 'lodash'
|
import * as _ from 'lodash'
|
||||||
import {validate} from '../common'
|
import {validate} from '../common'
|
||||||
import parseAccountTrustline from './parse/account-trustline'
|
import parseAccountTrustline from './parse/account-trustline'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
import {FormattedTrustline} from '../common/types/objects/trustlines'
|
import {FormattedTrustline} from '../common/types/objects/trustlines'
|
||||||
|
|
||||||
export type GetTrustlinesOptions = {
|
export type GetTrustlinesOptions = {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import * as common from '../common'
|
|||||||
import {Connection} from '../common'
|
import {Connection} from '../common'
|
||||||
import {FormattedTransactionType} from '../transaction/types'
|
import {FormattedTransactionType} from '../transaction/types'
|
||||||
import {Issue} from '../common/types/objects'
|
import {Issue} from '../common/types/objects'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type RecursiveData = {
|
export type RecursiveData = {
|
||||||
marker: string,
|
marker: string,
|
||||||
@@ -76,7 +77,7 @@ function signum(num) {
|
|||||||
* Order two rippled transactions based on their ledger_index.
|
* Order two rippled transactions based on their ledger_index.
|
||||||
* If two transactions took place in the same ledger, sort
|
* If two transactions took place in the same ledger, sort
|
||||||
* them based on TransactionIndex
|
* them based on TransactionIndex
|
||||||
* See: https://ripple.com/build/transactions/
|
* See: https://developers.ripple.com/transaction-metadata.html
|
||||||
*/
|
*/
|
||||||
function compareTransactions(
|
function compareTransactions(
|
||||||
first: FormattedTransactionType, second: FormattedTransactionType
|
first: FormattedTransactionType, second: FormattedTransactionType
|
||||||
@@ -105,7 +106,7 @@ function isPendingLedgerVersion(connection: Connection,
|
|||||||
ledgerVersion < (maxLedgerVersion || 0))
|
ledgerVersion < (maxLedgerVersion || 0))
|
||||||
}
|
}
|
||||||
|
|
||||||
function ensureLedgerVersion(options: any
|
function ensureLedgerVersion(this: RippleAPI, options: any
|
||||||
): Promise<object> {
|
): Promise<object> {
|
||||||
if (Boolean(options) && options.ledgerVersion !== undefined &&
|
if (Boolean(options) && options.ledgerVersion !== undefined &&
|
||||||
options.ledgerVersion !== null
|
options.ledgerVersion !== null
|
||||||
|
|||||||
@@ -4,4 +4,3 @@ export {
|
|||||||
deriveKeypair,
|
deriveKeypair,
|
||||||
deriveAddress
|
deriveAddress
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,19 @@
|
|||||||
import * as common from '../common'
|
import * as common from '../common'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
function isConnected(): boolean {
|
function isConnected(this: RippleAPI): boolean {
|
||||||
return this.connection.isConnected()
|
return this.connection.isConnected()
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLedgerVersion(): Promise<number> {
|
function getLedgerVersion(this: RippleAPI): Promise<number> {
|
||||||
return this.connection.getLedgerVersion()
|
return this.connection.getLedgerVersion()
|
||||||
}
|
}
|
||||||
|
|
||||||
function connect(): Promise<void> {
|
function connect(this: RippleAPI): Promise<void> {
|
||||||
return this.connection.connect()
|
return this.connection.connect()
|
||||||
}
|
}
|
||||||
|
|
||||||
function disconnect(): Promise<void> {
|
function disconnect(this: RippleAPI): Promise<void> {
|
||||||
return this.connection.disconnect()
|
return this.connection.disconnect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
import * as utils from './utils'
|
import {TransactionJSON, prepareTransaction} from './utils'
|
||||||
import {validate} from '../common'
|
import {validate} from '../common'
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare} from './types'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type CheckCancel = {
|
export type CheckCancelParameters = {
|
||||||
checkID: string
|
checkID: string
|
||||||
}
|
}
|
||||||
|
|
||||||
function createCheckCancelTransaction(account: string,
|
function createCheckCancelTransaction(account: string,
|
||||||
cancel: CheckCancel
|
cancel: CheckCancelParameters
|
||||||
): object {
|
): TransactionJSON {
|
||||||
const txJSON = {
|
const txJSON = {
|
||||||
Account: account,
|
Account: account,
|
||||||
TransactionType: 'CheckCancel',
|
TransactionType: 'CheckCancel',
|
||||||
@@ -18,15 +19,19 @@ function createCheckCancelTransaction(account: string,
|
|||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareCheckCancel(address: string,
|
function prepareCheckCancel(this: RippleAPI, address: string,
|
||||||
checkCancel: CheckCancel,
|
checkCancel: CheckCancelParameters,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.prepareCheckCancel(
|
try {
|
||||||
{address, checkCancel, instructions})
|
validate.prepareCheckCancel(
|
||||||
const txJSON = createCheckCancelTransaction(
|
{address, checkCancel, instructions})
|
||||||
address, checkCancel)
|
const txJSON = createCheckCancelTransaction(
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
address, checkCancel)
|
||||||
|
return prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default prepareCheckCancel
|
export default prepareCheckCancel
|
||||||
|
|||||||
@@ -2,18 +2,19 @@ import * as utils from './utils'
|
|||||||
const ValidationError = utils.common.errors.ValidationError
|
const ValidationError = utils.common.errors.ValidationError
|
||||||
const toRippledAmount = utils.common.toRippledAmount
|
const toRippledAmount = utils.common.toRippledAmount
|
||||||
import {validate} from '../common'
|
import {validate} from '../common'
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare, TransactionJSON} from './types'
|
||||||
import {Amount} from '../common/types/objects'
|
import {Amount} from '../common/types/objects'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type CheckCash = {
|
export type CheckCashParameters = {
|
||||||
checkID: string,
|
checkID: string,
|
||||||
amount?: Amount,
|
amount?: Amount,
|
||||||
deliverMin?: Amount
|
deliverMin?: Amount
|
||||||
}
|
}
|
||||||
|
|
||||||
function createCheckCashTransaction(account: string,
|
function createCheckCashTransaction(account: string,
|
||||||
checkCash: CheckCash
|
checkCash: CheckCashParameters
|
||||||
): object {
|
): TransactionJSON {
|
||||||
if (checkCash.amount && checkCash.deliverMin) {
|
if (checkCash.amount && checkCash.deliverMin) {
|
||||||
throw new ValidationError('"amount" and "deliverMin" properties on '
|
throw new ValidationError('"amount" and "deliverMin" properties on '
|
||||||
+ 'CheckCash are mutually exclusive')
|
+ 'CheckCash are mutually exclusive')
|
||||||
@@ -36,15 +37,19 @@ function createCheckCashTransaction(account: string,
|
|||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareCheckCash(address: string,
|
function prepareCheckCash(this: RippleAPI, address: string,
|
||||||
checkCash: CheckCash,
|
checkCash: CheckCashParameters,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.prepareCheckCash(
|
try {
|
||||||
{address, checkCash, instructions})
|
validate.prepareCheckCash(
|
||||||
const txJSON = createCheckCashTransaction(
|
{address, checkCash, instructions})
|
||||||
address, checkCash)
|
const txJSON = createCheckCashTransaction(
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
address, checkCash)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default prepareCheckCash
|
export default prepareCheckCash
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import * as utils from './utils'
|
import * as utils from './utils'
|
||||||
const toRippledAmount = utils.common.toRippledAmount
|
const toRippledAmount = utils.common.toRippledAmount
|
||||||
import {validate, iso8601ToRippleTime} from '../common'
|
import {validate, iso8601ToRippleTime} from '../common'
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare, TransactionJSON} from './types'
|
||||||
import {Amount} from '../common/types/objects'
|
import {Amount} from '../common/types/objects'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type CheckCreate = {
|
export type CheckCreateParameters = {
|
||||||
destination: string,
|
destination: string,
|
||||||
sendMax: Amount,
|
sendMax: Amount,
|
||||||
destinationTag?: number,
|
destinationTag?: number,
|
||||||
@@ -13,8 +14,8 @@ export type CheckCreate = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createCheckCreateTransaction(account: string,
|
function createCheckCreateTransaction(account: string,
|
||||||
check: CheckCreate
|
check: CheckCreateParameters
|
||||||
): object {
|
): TransactionJSON {
|
||||||
const txJSON: any = {
|
const txJSON: any = {
|
||||||
Account: account,
|
Account: account,
|
||||||
TransactionType: 'CheckCreate',
|
TransactionType: 'CheckCreate',
|
||||||
@@ -37,15 +38,19 @@ function createCheckCreateTransaction(account: string,
|
|||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareCheckCreate(address: string,
|
function prepareCheckCreate(this: RippleAPI, address: string,
|
||||||
checkCreate: CheckCreate,
|
checkCreate: CheckCreateParameters,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.prepareCheckCreate(
|
try {
|
||||||
{address, checkCreate, instructions})
|
validate.prepareCheckCreate(
|
||||||
const txJSON = createCheckCreateTransaction(
|
{address, checkCreate, instructions})
|
||||||
address, checkCreate)
|
const txJSON = createCheckCreateTransaction(
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
address, checkCreate)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default prepareCheckCreate
|
export default prepareCheckCreate
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {validate} from '../common'
|
|||||||
import {computeBinaryTransactionHash} from 'ripple-hashes'
|
import {computeBinaryTransactionHash} from 'ripple-hashes'
|
||||||
|
|
||||||
function addressToBigNumber(address) {
|
function addressToBigNumber(address) {
|
||||||
const hex = (new Buffer(decodeAddress(address))).toString('hex')
|
const hex = (Buffer.from(decodeAddress(address))).toString('hex')
|
||||||
return new BigNumber(hex, 16)
|
return new BigNumber(hex, 16)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,21 @@
|
|||||||
import * as _ from 'lodash'
|
|
||||||
import * as utils from './utils'
|
import * as utils from './utils'
|
||||||
const validate = utils.common.validate
|
const validate = utils.common.validate
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare, TransactionJSON} from './types'
|
||||||
import {Memo} from '../common/types/objects'
|
import {Memo} from '../common/types/objects'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type EscrowCancellation = {
|
export type EscrowCancellation = {
|
||||||
owner: string,
|
owner: string,
|
||||||
escrowSequence: number,
|
escrowSequence: number,
|
||||||
|
|
||||||
|
// TODO: This ripple-lib memo format should be deprecated in favor of rippled's format.
|
||||||
|
// If necessary, expose a public method for converting between the two formats.
|
||||||
memos?: Array<Memo>
|
memos?: Array<Memo>
|
||||||
}
|
}
|
||||||
|
|
||||||
function createEscrowCancellationTransaction(account: string,
|
function createEscrowCancellationTransaction(account: string,
|
||||||
payment: EscrowCancellation
|
payment: EscrowCancellation
|
||||||
): object {
|
): TransactionJSON {
|
||||||
const txJSON: any = {
|
const txJSON: any = {
|
||||||
TransactionType: 'EscrowCancel',
|
TransactionType: 'EscrowCancel',
|
||||||
Account: account,
|
Account: account,
|
||||||
@@ -20,12 +23,12 @@ function createEscrowCancellationTransaction(account: string,
|
|||||||
OfferSequence: payment.escrowSequence
|
OfferSequence: payment.escrowSequence
|
||||||
}
|
}
|
||||||
if (payment.memos !== undefined) {
|
if (payment.memos !== undefined) {
|
||||||
txJSON.Memos = _.map(payment.memos, utils.convertMemo)
|
txJSON.Memos = payment.memos.map(utils.convertMemo)
|
||||||
}
|
}
|
||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareEscrowCancellation(address: string,
|
function prepareEscrowCancellation(this: RippleAPI, address: string,
|
||||||
escrowCancellation: EscrowCancellation,
|
escrowCancellation: EscrowCancellation,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import * as _ from 'lodash'
|
|
||||||
import * as utils from './utils'
|
import * as utils from './utils'
|
||||||
import {validate, iso8601ToRippleTime, xrpToDrops} from '../common'
|
import {validate, iso8601ToRippleTime, xrpToDrops} from '../common'
|
||||||
const ValidationError = utils.common.errors.ValidationError
|
const ValidationError = utils.common.errors.ValidationError
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare, TransactionJSON} from './types'
|
||||||
import {Memo} from '../common/types/objects'
|
import {Memo} from '../common/types/objects'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type EscrowCreation = {
|
export type EscrowCreation = {
|
||||||
amount: string,
|
amount: string,
|
||||||
@@ -18,7 +18,7 @@ export type EscrowCreation = {
|
|||||||
|
|
||||||
function createEscrowCreationTransaction(account: string,
|
function createEscrowCreationTransaction(account: string,
|
||||||
payment: EscrowCreation
|
payment: EscrowCreation
|
||||||
): object {
|
): TransactionJSON {
|
||||||
const txJSON: any = {
|
const txJSON: any = {
|
||||||
TransactionType: 'EscrowCreate',
|
TransactionType: 'EscrowCreate',
|
||||||
Account: account,
|
Account: account,
|
||||||
@@ -42,7 +42,7 @@ function createEscrowCreationTransaction(account: string,
|
|||||||
txJSON.DestinationTag = payment.destinationTag
|
txJSON.DestinationTag = payment.destinationTag
|
||||||
}
|
}
|
||||||
if (payment.memos !== undefined) {
|
if (payment.memos !== undefined) {
|
||||||
txJSON.Memos = _.map(payment.memos, utils.convertMemo)
|
txJSON.Memos = payment.memos.map(utils.convertMemo)
|
||||||
}
|
}
|
||||||
if (Boolean(payment.allowCancelAfter) && Boolean(payment.allowExecuteAfter) &&
|
if (Boolean(payment.allowCancelAfter) && Boolean(payment.allowExecuteAfter) &&
|
||||||
txJSON.CancelAfter <= txJSON.FinishAfter) {
|
txJSON.CancelAfter <= txJSON.FinishAfter) {
|
||||||
@@ -52,15 +52,19 @@ function createEscrowCreationTransaction(account: string,
|
|||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareEscrowCreation(address: string,
|
function prepareEscrowCreation(this: RippleAPI, address: string,
|
||||||
escrowCreation: EscrowCreation,
|
escrowCreation: EscrowCreation,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.prepareEscrowCreation(
|
try {
|
||||||
{address, escrowCreation, instructions})
|
validate.prepareEscrowCreation(
|
||||||
const txJSON = createEscrowCreationTransaction(
|
{address, escrowCreation, instructions})
|
||||||
address, escrowCreation)
|
const txJSON = createEscrowCreationTransaction(
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
address, escrowCreation)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default prepareEscrowCreation
|
export default prepareEscrowCreation
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import * as _ from 'lodash'
|
|
||||||
import * as utils from './utils'
|
import * as utils from './utils'
|
||||||
const validate = utils.common.validate
|
const validate = utils.common.validate
|
||||||
const ValidationError = utils.common.errors.ValidationError
|
const ValidationError = utils.common.errors.ValidationError
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare} from './types'
|
||||||
import {Memo} from '../common/types/objects'
|
import {Memo} from '../common/types/objects'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type EscrowExecution = {
|
export type EscrowExecution = {
|
||||||
owner: string,
|
owner: string,
|
||||||
@@ -15,7 +15,7 @@ export type EscrowExecution = {
|
|||||||
|
|
||||||
function createEscrowExecutionTransaction(account: string,
|
function createEscrowExecutionTransaction(account: string,
|
||||||
payment: EscrowExecution
|
payment: EscrowExecution
|
||||||
): object {
|
): utils.TransactionJSON {
|
||||||
const txJSON: any = {
|
const txJSON: any = {
|
||||||
TransactionType: 'EscrowFinish',
|
TransactionType: 'EscrowFinish',
|
||||||
Account: account,
|
Account: account,
|
||||||
@@ -35,20 +35,24 @@ function createEscrowExecutionTransaction(account: string,
|
|||||||
txJSON.Fulfillment = payment.fulfillment
|
txJSON.Fulfillment = payment.fulfillment
|
||||||
}
|
}
|
||||||
if (payment.memos !== undefined) {
|
if (payment.memos !== undefined) {
|
||||||
txJSON.Memos = _.map(payment.memos, utils.convertMemo)
|
txJSON.Memos = payment.memos.map(utils.convertMemo)
|
||||||
}
|
}
|
||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareEscrowExecution(address: string,
|
function prepareEscrowExecution(this: RippleAPI, address: string,
|
||||||
escrowExecution: EscrowExecution,
|
escrowExecution: EscrowExecution,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.prepareEscrowExecution(
|
try {
|
||||||
{address, escrowExecution, instructions})
|
validate.prepareEscrowExecution(
|
||||||
const txJSON = createEscrowExecutionTransaction(
|
{address, escrowExecution, instructions})
|
||||||
address, escrowExecution)
|
const txJSON = createEscrowExecutionTransaction(
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
address, escrowExecution)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default prepareEscrowExecution
|
export default prepareEscrowExecution
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import * as _ from 'lodash'
|
|
||||||
import * as utils from './utils'
|
import * as utils from './utils'
|
||||||
const offerFlags = utils.common.txFlags.OfferCreate
|
const offerFlags = utils.common.txFlags.OfferCreate
|
||||||
import {validate, iso8601ToRippleTime} from '../common'
|
import {validate, iso8601ToRippleTime} from '../common'
|
||||||
import {Instructions, Prepare, OfferCreateTransaction} from './types'
|
import {Instructions, Prepare, OfferCreateTransaction} from './types'
|
||||||
import {FormattedOrderSpecification} from '../common/types/objects/index'
|
import {FormattedOrderSpecification} from '../common/types/objects/index'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
function createOrderTransaction(
|
function createOrderTransaction(
|
||||||
account: string, order: FormattedOrderSpecification
|
account: string, order: FormattedOrderSpecification
|
||||||
@@ -39,17 +39,21 @@ function createOrderTransaction(
|
|||||||
txJSON.OfferSequence = order.orderToReplace
|
txJSON.OfferSequence = order.orderToReplace
|
||||||
}
|
}
|
||||||
if (order.memos !== undefined) {
|
if (order.memos !== undefined) {
|
||||||
txJSON.Memos = _.map(order.memos, utils.convertMemo)
|
txJSON.Memos = order.memos.map(utils.convertMemo)
|
||||||
}
|
}
|
||||||
return txJSON as OfferCreateTransaction
|
return txJSON as OfferCreateTransaction
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareOrder(address: string, order: FormattedOrderSpecification,
|
function prepareOrder(this: RippleAPI, address: string, order: FormattedOrderSpecification,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.prepareOrder({address, order, instructions})
|
try {
|
||||||
const txJSON = createOrderTransaction(address, order)
|
validate.prepareOrder({address, order, instructions})
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
const txJSON = createOrderTransaction(address, order)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default prepareOrder
|
export default prepareOrder
|
||||||
|
|||||||
@@ -1,28 +1,32 @@
|
|||||||
import * as _ from 'lodash'
|
|
||||||
import * as utils from './utils'
|
import * as utils from './utils'
|
||||||
const validate = utils.common.validate
|
const validate = utils.common.validate
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare, TransactionJSON} from './types'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
function createOrderCancellationTransaction(account: string,
|
function createOrderCancellationTransaction(account: string,
|
||||||
orderCancellation: any
|
orderCancellation: any
|
||||||
): object {
|
): TransactionJSON {
|
||||||
const txJSON: any = {
|
const txJSON: any = {
|
||||||
TransactionType: 'OfferCancel',
|
TransactionType: 'OfferCancel',
|
||||||
Account: account,
|
Account: account,
|
||||||
OfferSequence: orderCancellation.orderSequence
|
OfferSequence: orderCancellation.orderSequence
|
||||||
}
|
}
|
||||||
if (orderCancellation.memos !== undefined) {
|
if (orderCancellation.memos !== undefined) {
|
||||||
txJSON.Memos = _.map(orderCancellation.memos, utils.convertMemo)
|
txJSON.Memos = orderCancellation.memos.map(utils.convertMemo)
|
||||||
}
|
}
|
||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareOrderCancellation(address: string, orderCancellation: object,
|
function prepareOrderCancellation(this: RippleAPI, address: string, orderCancellation: object,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.prepareOrderCancellation({address, orderCancellation, instructions})
|
try {
|
||||||
const txJSON = createOrderCancellationTransaction(address, orderCancellation)
|
validate.prepareOrderCancellation({address, orderCancellation, instructions})
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
const txJSON = createOrderCancellationTransaction(address, orderCancellation)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default prepareOrderCancellation
|
export default prepareOrderCancellation
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ const ValidationError = utils.common.errors.ValidationError
|
|||||||
const claimFlags = utils.common.txFlags.PaymentChannelClaim
|
const claimFlags = utils.common.txFlags.PaymentChannelClaim
|
||||||
import {validate, xrpToDrops} from '../common'
|
import {validate, xrpToDrops} from '../common'
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare} from './types'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type PaymentChannelClaim = {
|
export type PaymentChannelClaim = {
|
||||||
channel: string,
|
channel: string,
|
||||||
@@ -16,8 +17,8 @@ export type PaymentChannelClaim = {
|
|||||||
|
|
||||||
function createPaymentChannelClaimTransaction(account: string,
|
function createPaymentChannelClaimTransaction(account: string,
|
||||||
claim: PaymentChannelClaim
|
claim: PaymentChannelClaim
|
||||||
): object {
|
): utils.TransactionJSON {
|
||||||
const txJSON: any = {
|
const txJSON: utils.TransactionJSON = {
|
||||||
Account: account,
|
Account: account,
|
||||||
TransactionType: 'PaymentChannelClaim',
|
TransactionType: 'PaymentChannelClaim',
|
||||||
Channel: claim.channel,
|
Channel: claim.channel,
|
||||||
@@ -58,15 +59,19 @@ function createPaymentChannelClaimTransaction(account: string,
|
|||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function preparePaymentChannelClaim(address: string,
|
function preparePaymentChannelClaim(this: RippleAPI, address: string,
|
||||||
paymentChannelClaim: PaymentChannelClaim,
|
paymentChannelClaim: PaymentChannelClaim,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.preparePaymentChannelClaim(
|
try {
|
||||||
{address, paymentChannelClaim, instructions})
|
validate.preparePaymentChannelClaim(
|
||||||
const txJSON = createPaymentChannelClaimTransaction(
|
{address, paymentChannelClaim, instructions})
|
||||||
address, paymentChannelClaim)
|
const txJSON = createPaymentChannelClaimTransaction(
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
address, paymentChannelClaim)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default preparePaymentChannelClaim
|
export default preparePaymentChannelClaim
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import * as utils from './utils'
|
import * as utils from './utils'
|
||||||
import {validate, iso8601ToRippleTime, xrpToDrops} from '../common'
|
import {validate, iso8601ToRippleTime, xrpToDrops} from '../common'
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare} from './types'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type PaymentChannelCreate = {
|
export type PaymentChannelCreate = {
|
||||||
amount: string,
|
amount: string,
|
||||||
@@ -14,7 +15,7 @@ export type PaymentChannelCreate = {
|
|||||||
|
|
||||||
function createPaymentChannelCreateTransaction(account: string,
|
function createPaymentChannelCreateTransaction(account: string,
|
||||||
paymentChannel: PaymentChannelCreate
|
paymentChannel: PaymentChannelCreate
|
||||||
): object {
|
): utils.TransactionJSON {
|
||||||
const txJSON: any = {
|
const txJSON: any = {
|
||||||
Account: account,
|
Account: account,
|
||||||
TransactionType: 'PaymentChannelCreate',
|
TransactionType: 'PaymentChannelCreate',
|
||||||
@@ -37,15 +38,19 @@ function createPaymentChannelCreateTransaction(account: string,
|
|||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function preparePaymentChannelCreate(address: string,
|
function preparePaymentChannelCreate(this: RippleAPI, address: string,
|
||||||
paymentChannelCreate: PaymentChannelCreate,
|
paymentChannelCreate: PaymentChannelCreate,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.preparePaymentChannelCreate(
|
try {
|
||||||
{address, paymentChannelCreate, instructions})
|
validate.preparePaymentChannelCreate(
|
||||||
const txJSON = createPaymentChannelCreateTransaction(
|
{address, paymentChannelCreate, instructions})
|
||||||
address, paymentChannelCreate)
|
const txJSON = createPaymentChannelCreateTransaction(
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
address, paymentChannelCreate)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default preparePaymentChannelCreate
|
export default preparePaymentChannelCreate
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import * as utils from './utils'
|
import * as utils from './utils'
|
||||||
import {validate, iso8601ToRippleTime, xrpToDrops} from '../common'
|
import {validate, iso8601ToRippleTime, xrpToDrops} from '../common'
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare} from './types'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
export type PaymentChannelFund = {
|
export type PaymentChannelFund = {
|
||||||
channel: string,
|
channel: string,
|
||||||
@@ -10,8 +11,8 @@ export type PaymentChannelFund = {
|
|||||||
|
|
||||||
function createPaymentChannelFundTransaction(account: string,
|
function createPaymentChannelFundTransaction(account: string,
|
||||||
fund: PaymentChannelFund
|
fund: PaymentChannelFund
|
||||||
): object {
|
): utils.TransactionJSON {
|
||||||
const txJSON: any = {
|
const txJSON: utils.TransactionJSON = {
|
||||||
Account: account,
|
Account: account,
|
||||||
TransactionType: 'PaymentChannelFund',
|
TransactionType: 'PaymentChannelFund',
|
||||||
Channel: fund.channel,
|
Channel: fund.channel,
|
||||||
@@ -25,15 +26,19 @@ function createPaymentChannelFundTransaction(account: string,
|
|||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function preparePaymentChannelFund(address: string,
|
function preparePaymentChannelFund(this: RippleAPI, address: string,
|
||||||
paymentChannelFund: PaymentChannelFund,
|
paymentChannelFund: PaymentChannelFund,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.preparePaymentChannelFund(
|
try {
|
||||||
{address, paymentChannelFund, instructions})
|
validate.preparePaymentChannelFund(
|
||||||
const txJSON = createPaymentChannelFundTransaction(
|
{address, paymentChannelFund, instructions})
|
||||||
address, paymentChannelFund)
|
const txJSON = createPaymentChannelFundTransaction(
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
address, paymentChannelFund)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default preparePaymentChannelFund
|
export default preparePaymentChannelFund
|
||||||
|
|||||||
@@ -4,10 +4,11 @@ const validate = utils.common.validate
|
|||||||
const toRippledAmount = utils.common.toRippledAmount
|
const toRippledAmount = utils.common.toRippledAmount
|
||||||
const paymentFlags = utils.common.txFlags.Payment
|
const paymentFlags = utils.common.txFlags.Payment
|
||||||
const ValidationError = utils.common.errors.ValidationError
|
const ValidationError = utils.common.errors.ValidationError
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare, TransactionJSON} from './types'
|
||||||
import {Amount, Adjustment, MaxAdjustment,
|
import {Amount, Adjustment, MaxAdjustment,
|
||||||
MinAdjustment, Memo} from '../common/types/objects'
|
MinAdjustment, Memo} from '../common/types/objects'
|
||||||
import {xrpToDrops} from '../common'
|
import {xrpToDrops} from '../common'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
|
|
||||||
export interface Payment {
|
export interface Payment {
|
||||||
@@ -59,9 +60,7 @@ function isIOUWithoutCounterparty(amount: Amount): boolean {
|
|||||||
function applyAnyCounterpartyEncoding(payment: Payment): void {
|
function applyAnyCounterpartyEncoding(payment: Payment): void {
|
||||||
// Convert blank counterparty to sender or receiver's address
|
// Convert blank counterparty to sender or receiver's address
|
||||||
// (Ripple convention for 'any counterparty')
|
// (Ripple convention for 'any counterparty')
|
||||||
// https://ripple.com/build/transactions/
|
// https://developers.ripple.com/payment.html#special-issuer-values-for-sendmax-and-amount
|
||||||
// #special-issuer-values-for-sendmax-and-amount
|
|
||||||
// https://ripple.com/build/ripple-rest/#counterparties-in-payments
|
|
||||||
_.forEach([payment.source, payment.destination], adjustment => {
|
_.forEach([payment.source, payment.destination], adjustment => {
|
||||||
_.forEach(['amount', 'minAmount', 'maxAmount'], key => {
|
_.forEach(['amount', 'minAmount', 'maxAmount'], key => {
|
||||||
if (isIOUWithoutCounterparty(adjustment[key])) {
|
if (isIOUWithoutCounterparty(adjustment[key])) {
|
||||||
@@ -86,7 +85,7 @@ function createMaximalAmount(amount: Amount): Amount {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createPaymentTransaction(address: string, paymentArgument: Payment
|
function createPaymentTransaction(address: string, paymentArgument: Payment
|
||||||
): object {
|
): TransactionJSON {
|
||||||
const payment = _.cloneDeep(paymentArgument)
|
const payment = _.cloneDeep(paymentArgument)
|
||||||
applyAnyCounterpartyEncoding(payment)
|
applyAnyCounterpartyEncoding(payment)
|
||||||
|
|
||||||
@@ -169,12 +168,16 @@ function createPaymentTransaction(address: string, paymentArgument: Payment
|
|||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function preparePayment(address: string, payment: Payment,
|
function preparePayment(this: RippleAPI, address: string, payment: Payment,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.preparePayment({address, payment, instructions})
|
try {
|
||||||
const txJSON = createPaymentTransaction(address, payment)
|
validate.preparePayment({address, payment, instructions})
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
const txJSON = createPaymentTransaction(address, payment)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default preparePayment
|
export default preparePayment
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
import * as _ from 'lodash'
|
|
||||||
import * as assert from 'assert'
|
import * as assert from 'assert'
|
||||||
import BigNumber from 'bignumber.js'
|
import BigNumber from 'bignumber.js'
|
||||||
import * as utils from './utils'
|
import * as utils from './utils'
|
||||||
const validate = utils.common.validate
|
const validate = utils.common.validate
|
||||||
const AccountFlagIndices = utils.common.constants.AccountFlagIndices
|
const AccountFlagIndices = utils.common.constants.AccountFlagIndices
|
||||||
const AccountFields = utils.common.constants.AccountFields
|
const AccountFields = utils.common.constants.AccountFields
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare, SettingsTransaction} from './types'
|
||||||
import {FormattedSettings, WeightedSigner} from '../common/types/objects'
|
import {FormattedSettings, WeightedSigner} from '../common/types/objects'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
// Emptry string passed to setting will clear it
|
function setTransactionFlags(txJSON: utils.TransactionJSON, values: FormattedSettings) {
|
||||||
const CLEAR_SETTING = null
|
|
||||||
|
|
||||||
function setTransactionFlags(txJSON: any, values: FormattedSettings) {
|
|
||||||
const keys = Object.keys(values)
|
const keys = Object.keys(values)
|
||||||
assert(keys.length === 1, 'ERROR: can only set one setting per transaction')
|
assert(keys.length === 1, 'ERROR: can only set one setting per transaction')
|
||||||
const flagName = keys[0]
|
const flagName = keys[0]
|
||||||
@@ -26,7 +23,8 @@ function setTransactionFlags(txJSON: any, values: FormattedSettings) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setTransactionFields(txJSON: object, input: FormattedSettings) {
|
// Sets `null` fields to their `default`.
|
||||||
|
function setTransactionFields(txJSON: utils.TransactionJSON, input: FormattedSettings) {
|
||||||
const fieldSchema = AccountFields
|
const fieldSchema = AccountFields
|
||||||
for (const fieldName in fieldSchema) {
|
for (const fieldName in fieldSchema) {
|
||||||
const field = fieldSchema[fieldName]
|
const field = fieldSchema[fieldName]
|
||||||
@@ -37,13 +35,13 @@ function setTransactionFields(txJSON: object, input: FormattedSettings) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// The value required to clear an account root field varies
|
// The value required to clear an account root field varies
|
||||||
if (value === CLEAR_SETTING && field.hasOwnProperty('defaults')) {
|
if (value === null && field.hasOwnProperty('defaults')) {
|
||||||
value = field.defaults
|
value = field.defaults
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field.encoding === 'hex' && !field.length) {
|
if (field.encoding === 'hex' && !field.length) {
|
||||||
// This is currently only used for Domain field
|
// This is currently only used for Domain field
|
||||||
value = new Buffer(value, 'ascii').toString('hex').toUpperCase()
|
value = Buffer.from(value, 'ascii').toString('hex').toUpperCase()
|
||||||
}
|
}
|
||||||
|
|
||||||
txJSON[fieldName] = value
|
txJSON[fieldName] = value
|
||||||
@@ -63,7 +61,7 @@ function setTransactionFields(txJSON: object, input: FormattedSettings) {
|
|||||||
* are returned
|
* are returned
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function convertTransferRate(transferRate: number | string): number | string {
|
function convertTransferRate(transferRate: number): number {
|
||||||
return (new BigNumber(transferRate)).shift(9).toNumber()
|
return (new BigNumber(transferRate)).shift(9).toNumber()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,7 +76,7 @@ function formatSignerEntry(signer: WeightedSigner): object {
|
|||||||
|
|
||||||
function createSettingsTransactionWithoutMemos(
|
function createSettingsTransactionWithoutMemos(
|
||||||
account: string, settings: FormattedSettings
|
account: string, settings: FormattedSettings
|
||||||
): any {
|
): SettingsTransaction {
|
||||||
if (settings.regularKey !== undefined) {
|
if (settings.regularKey !== undefined) {
|
||||||
const removeRegularKey = {
|
const removeRegularKey = {
|
||||||
TransactionType: 'SetRegularKey',
|
TransactionType: 'SetRegularKey',
|
||||||
@@ -87,7 +85,7 @@ function createSettingsTransactionWithoutMemos(
|
|||||||
if (settings.regularKey === null) {
|
if (settings.regularKey === null) {
|
||||||
return removeRegularKey
|
return removeRegularKey
|
||||||
}
|
}
|
||||||
return _.assign({}, removeRegularKey, {RegularKey: settings.regularKey})
|
return Object.assign({}, removeRegularKey, {RegularKey: settings.regularKey})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.signers !== undefined) {
|
if (settings.signers !== undefined) {
|
||||||
@@ -95,17 +93,19 @@ function createSettingsTransactionWithoutMemos(
|
|||||||
TransactionType: 'SignerListSet',
|
TransactionType: 'SignerListSet',
|
||||||
Account: account,
|
Account: account,
|
||||||
SignerQuorum: settings.signers.threshold,
|
SignerQuorum: settings.signers.threshold,
|
||||||
SignerEntries: _.map(settings.signers.weights, formatSignerEntry)
|
SignerEntries: settings.signers.weights.map(formatSignerEntry)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const txJSON: any = {
|
const txJSON: SettingsTransaction = {
|
||||||
TransactionType: 'AccountSet',
|
TransactionType: 'AccountSet',
|
||||||
Account: account
|
Account: account
|
||||||
}
|
}
|
||||||
|
|
||||||
setTransactionFlags(txJSON, _.omit(settings, 'memos'))
|
const settingsWithoutMemos = Object.assign({}, settings)
|
||||||
setTransactionFields(txJSON, settings)
|
delete settingsWithoutMemos.memos
|
||||||
|
setTransactionFlags(txJSON, settingsWithoutMemos)
|
||||||
|
setTransactionFields(txJSON, settings) // Sets `null` fields to their `default`.
|
||||||
|
|
||||||
if (txJSON.TransferRate !== undefined) {
|
if (txJSON.TransferRate !== undefined) {
|
||||||
txJSON.TransferRate = convertTransferRate(txJSON.TransferRate)
|
txJSON.TransferRate = convertTransferRate(txJSON.TransferRate)
|
||||||
@@ -114,20 +114,24 @@ function createSettingsTransactionWithoutMemos(
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createSettingsTransaction(account: string, settings: FormattedSettings
|
function createSettingsTransaction(account: string, settings: FormattedSettings
|
||||||
): object {
|
): SettingsTransaction {
|
||||||
const txJSON = createSettingsTransactionWithoutMemos(account, settings)
|
const txJSON = createSettingsTransactionWithoutMemos(account, settings)
|
||||||
if (settings.memos !== undefined) {
|
if (settings.memos !== undefined) {
|
||||||
txJSON.Memos = _.map(settings.memos, utils.convertMemo)
|
txJSON.Memos = settings.memos.map(utils.convertMemo)
|
||||||
}
|
}
|
||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareSettings(address: string, settings: FormattedSettings,
|
function prepareSettings(this: RippleAPI, address: string, settings: FormattedSettings,
|
||||||
instructions: Instructions = {}
|
instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.prepareSettings({address, settings, instructions})
|
try {
|
||||||
const txJSON = createSettingsTransaction(address, settings)
|
validate.prepareSettings({address, settings, instructions})
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
const txJSON = createSettingsTransaction(address, settings)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default prepareSettings
|
export default prepareSettings
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {computeBinaryTransactionHash} from 'ripple-hashes'
|
|||||||
import {SignOptions, KeyPair} from './types'
|
import {SignOptions, KeyPair} from './types'
|
||||||
import {BigNumber} from 'bignumber.js'
|
import {BigNumber} from 'bignumber.js'
|
||||||
import {xrpToDrops} from '../common'
|
import {xrpToDrops} from '../common'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
const validate = utils.common.validate
|
const validate = utils.common.validate
|
||||||
|
|
||||||
function computeSignature(tx: object, privateKey: string, signAs?: string) {
|
function computeSignature(tx: object, privateKey: string, signAs?: string) {
|
||||||
|
|||||||
@@ -20,8 +20,15 @@ function isImmediateRejection(engineResult: string): boolean {
|
|||||||
|
|
||||||
function formatSubmitResponse(response): FormattedSubmitResponse {
|
function formatSubmitResponse(response): FormattedSubmitResponse {
|
||||||
const data = {
|
const data = {
|
||||||
|
// @deprecated
|
||||||
resultCode: response.engine_result,
|
resultCode: response.engine_result,
|
||||||
resultMessage: response.engine_result_message
|
// @deprecated
|
||||||
|
resultMessage: response.engine_result_message,
|
||||||
|
engine_result: response.engine_result,
|
||||||
|
engine_result_code: response.engine_result_code,
|
||||||
|
engine_result_message: response.engine_result_message,
|
||||||
|
tx_blob: response.tx_blob,
|
||||||
|
tx_json: response.tx_json
|
||||||
}
|
}
|
||||||
if (isImmediateRejection(response.engine_result)) {
|
if (isImmediateRejection(response.engine_result)) {
|
||||||
throw new utils.common.errors.RippledError('Submit failed', data)
|
throw new utils.common.errors.RippledError('Submit failed', data)
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import * as _ from 'lodash'
|
|
||||||
import BigNumber from 'bignumber.js'
|
import BigNumber from 'bignumber.js'
|
||||||
import * as utils from './utils'
|
import * as utils from './utils'
|
||||||
const validate = utils.common.validate
|
const validate = utils.common.validate
|
||||||
const trustlineFlags = utils.common.txFlags.TrustSet
|
const trustlineFlags = utils.common.txFlags.TrustSet
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare, TransactionJSON} from './types'
|
||||||
import {
|
import {
|
||||||
FormattedTrustlineSpecification
|
FormattedTrustlineSpecification
|
||||||
} from '../common/types/objects/trustlines'
|
} from '../common/types/objects/trustlines'
|
||||||
|
import {RippleAPI} from '..'
|
||||||
|
|
||||||
function convertQuality(quality) {
|
function convertQuality(quality) {
|
||||||
return (new BigNumber(quality)).shift(9).truncated().toNumber()
|
return (new BigNumber(quality)).shift(9).truncated().toNumber()
|
||||||
@@ -14,7 +14,7 @@ function convertQuality(quality) {
|
|||||||
|
|
||||||
function createTrustlineTransaction(account: string,
|
function createTrustlineTransaction(account: string,
|
||||||
trustline: FormattedTrustlineSpecification
|
trustline: FormattedTrustlineSpecification
|
||||||
): object {
|
): TransactionJSON {
|
||||||
const limit = {
|
const limit = {
|
||||||
currency: trustline.currency,
|
currency: trustline.currency,
|
||||||
issuer: trustline.counterparty,
|
issuer: trustline.counterparty,
|
||||||
@@ -45,17 +45,21 @@ function createTrustlineTransaction(account: string,
|
|||||||
trustlineFlags.SetFreeze : trustlineFlags.ClearFreeze
|
trustlineFlags.SetFreeze : trustlineFlags.ClearFreeze
|
||||||
}
|
}
|
||||||
if (trustline.memos !== undefined) {
|
if (trustline.memos !== undefined) {
|
||||||
txJSON.Memos = _.map(trustline.memos, utils.convertMemo)
|
txJSON.Memos = trustline.memos.map(utils.convertMemo)
|
||||||
}
|
}
|
||||||
return txJSON
|
return txJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareTrustline(address: string,
|
function prepareTrustline(this: RippleAPI, address: string,
|
||||||
trustline: FormattedTrustlineSpecification, instructions: Instructions = {}
|
trustline: FormattedTrustlineSpecification, instructions: Instructions = {}
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
validate.prepareTrustline({address, trustline, instructions})
|
try {
|
||||||
const txJSON = createTrustlineTransaction(address, trustline)
|
validate.prepareTrustline({address, trustline, instructions})
|
||||||
return utils.prepareTransaction(txJSON, this, instructions)
|
const txJSON = createTrustlineTransaction(address, trustline)
|
||||||
|
return utils.prepareTransaction(txJSON, this, instructions)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default prepareTrustline
|
export default prepareTrustline
|
||||||
|
|||||||
@@ -7,7 +7,12 @@ import {
|
|||||||
Memo,
|
Memo,
|
||||||
FormattedSettings
|
FormattedSettings
|
||||||
} from '../common/types/objects'
|
} from '../common/types/objects'
|
||||||
import {ApiMemo} from './utils'
|
import {
|
||||||
|
ApiMemo,
|
||||||
|
TransactionJSON
|
||||||
|
} from './utils'
|
||||||
|
|
||||||
|
export type TransactionJSON = TransactionJSON
|
||||||
|
|
||||||
export type Instructions = {
|
export type Instructions = {
|
||||||
sequence?: number,
|
sequence?: number,
|
||||||
@@ -37,7 +42,7 @@ export type Submit = {
|
|||||||
txJson?: object
|
txJson?: object
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OfferCreateTransaction {
|
export interface OfferCreateTransaction extends TransactionJSON {
|
||||||
TransactionType: 'OfferCreate',
|
TransactionType: 'OfferCreate',
|
||||||
Account: string,
|
Account: string,
|
||||||
Fee: string,
|
Fee: string,
|
||||||
@@ -48,7 +53,11 @@ export interface OfferCreateTransaction {
|
|||||||
TakerPays: RippledAmount,
|
TakerPays: RippledAmount,
|
||||||
Expiration?: number,
|
Expiration?: number,
|
||||||
OfferSequence?: number,
|
OfferSequence?: number,
|
||||||
Memos: {Memo: ApiMemo}[]
|
Memos?: {Memo: ApiMemo}[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SettingsTransaction extends TransactionJSON {
|
||||||
|
TransferRate?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export type KeyPair = {
|
export type KeyPair = {
|
||||||
@@ -73,6 +82,11 @@ export type Outcome = {
|
|||||||
}[]
|
}[]
|
||||||
},
|
},
|
||||||
orderbookChanges: object,
|
orderbookChanges: object,
|
||||||
|
deliveredAmount?: {
|
||||||
|
currency: string,
|
||||||
|
counterparty?: string,
|
||||||
|
value: string
|
||||||
|
},
|
||||||
timestamp?: string
|
timestamp?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import BigNumber from 'bignumber.js'
|
import BigNumber from 'bignumber.js'
|
||||||
import * as common from '../common'
|
import * as common from '../common'
|
||||||
import {Memo} from '../common/types/objects'
|
import {Memo, RippledAmount} from '../common/types/objects'
|
||||||
const txFlags = common.txFlags
|
const txFlags = common.txFlags
|
||||||
import {Instructions, Prepare} from './types'
|
import {Instructions, Prepare} from './types'
|
||||||
import {RippleAPI} from '../api'
|
import {RippleAPI} from '..'
|
||||||
import {ValidationError} from '../common/errors'
|
import {ValidationError} from '../common/errors'
|
||||||
|
|
||||||
export type ApiMemo = {
|
export type ApiMemo = {
|
||||||
@@ -12,6 +12,15 @@ export type ApiMemo = {
|
|||||||
MemoFormat?: string
|
MemoFormat?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type TransactionJSON = {
|
||||||
|
Account: string,
|
||||||
|
TransactionType: string,
|
||||||
|
Memos?: {Memo: ApiMemo}[],
|
||||||
|
Flags?: number,
|
||||||
|
Fulfillment?: string,
|
||||||
|
[Field: string]: string | number | Array<any> | RippledAmount | undefined
|
||||||
|
}
|
||||||
|
|
||||||
function formatPrepareResponse(txJSON: any): Prepare {
|
function formatPrepareResponse(txJSON: any): Prepare {
|
||||||
const instructions = {
|
const instructions = {
|
||||||
fee: common.dropsToXrp(txJSON.Fee),
|
fee: common.dropsToXrp(txJSON.Fee),
|
||||||
@@ -37,15 +46,37 @@ function scaleValue(value, multiplier, extra = 0) {
|
|||||||
return (new BigNumber(value)).times(multiplier).plus(extra).toString()
|
return (new BigNumber(value)).times(multiplier).plus(extra).toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareTransaction(txJSON: any, api: RippleAPI,
|
function prepareTransaction(txJSON: TransactionJSON, api: RippleAPI,
|
||||||
instructions: Instructions
|
instructions: Instructions
|
||||||
): Promise<Prepare> {
|
): Promise<Prepare> {
|
||||||
common.validate.instructions(instructions)
|
common.validate.instructions(instructions)
|
||||||
|
common.validate.tx_json(txJSON)
|
||||||
|
const disallowedFieldsInTxJSON = ['maxLedgerVersion', 'maxLedgerVersionOffset', 'fee', 'sequence']
|
||||||
|
const badFields = disallowedFieldsInTxJSON.filter(field => txJSON[field])
|
||||||
|
if (badFields.length) {
|
||||||
|
return Promise.reject(new ValidationError('txJSON additionalProperty "' + badFields[0] +
|
||||||
|
'" exists in instance when not allowed'))
|
||||||
|
}
|
||||||
|
|
||||||
const account = txJSON.Account
|
const account = txJSON.Account
|
||||||
setCanonicalFlag(txJSON)
|
setCanonicalFlag(txJSON)
|
||||||
|
|
||||||
function prepareMaxLedgerVersion(): Promise<object> {
|
function prepareMaxLedgerVersion(): Promise<TransactionJSON> {
|
||||||
|
// Up to one of the following is allowed:
|
||||||
|
// txJSON.LastLedgerSequence
|
||||||
|
// instructions.maxLedgerVersion
|
||||||
|
// instructions.maxLedgerVersionOffset
|
||||||
|
if (txJSON.LastLedgerSequence && instructions.maxLedgerVersion) {
|
||||||
|
return Promise.reject(new ValidationError('`LastLedgerSequence` in txJSON and `maxLedgerVersion`' +
|
||||||
|
' in `instructions` cannot both be set'))
|
||||||
|
}
|
||||||
|
if (txJSON.LastLedgerSequence && instructions.maxLedgerVersionOffset) {
|
||||||
|
return Promise.reject(new ValidationError('`LastLedgerSequence` in txJSON and `maxLedgerVersionOffset`' +
|
||||||
|
' in `instructions` cannot both be set'))
|
||||||
|
}
|
||||||
|
if (txJSON.LastLedgerSequence) {
|
||||||
|
return Promise.resolve(txJSON)
|
||||||
|
}
|
||||||
if (instructions.maxLedgerVersion !== undefined) {
|
if (instructions.maxLedgerVersion !== undefined) {
|
||||||
if (instructions.maxLedgerVersion !== null) {
|
if (instructions.maxLedgerVersion !== null) {
|
||||||
txJSON.LastLedgerSequence = instructions.maxLedgerVersion
|
txJSON.LastLedgerSequence = instructions.maxLedgerVersion
|
||||||
@@ -60,16 +91,27 @@ function prepareTransaction(txJSON: any, api: RippleAPI,
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareFee(): Promise<object> {
|
function prepareFee(): Promise<TransactionJSON> {
|
||||||
|
// instructions.fee is scaled (for multi-signed transactions) while txJSON.Fee is not.
|
||||||
|
// Due to this difference, we do NOT allow both to be set, as the behavior would be complex and
|
||||||
|
// potentially ambiguous.
|
||||||
|
// Furthermore, txJSON.Fee is in drops while instructions.fee is in XRP, which would just add to
|
||||||
|
// the confusion. It is simpler to require that only one is used.
|
||||||
|
if (txJSON.Fee && instructions.fee) {
|
||||||
|
return Promise.reject(new ValidationError('`Fee` in txJSON and `fee` in `instructions` cannot both be set'))
|
||||||
|
}
|
||||||
|
if (txJSON.Fee) {
|
||||||
|
// txJSON.Fee is set. Use this value and do not scale it.
|
||||||
|
return Promise.resolve(txJSON)
|
||||||
|
}
|
||||||
const multiplier = instructions.signersCount === undefined ? 1 :
|
const multiplier = instructions.signersCount === undefined ? 1 :
|
||||||
instructions.signersCount + 1
|
instructions.signersCount + 1
|
||||||
if (instructions.fee !== undefined) {
|
if (instructions.fee !== undefined) {
|
||||||
const fee = new BigNumber(instructions.fee)
|
const fee = new BigNumber(instructions.fee)
|
||||||
if (fee.greaterThan(api._maxFeeXRP)) {
|
if (fee.greaterThan(api._maxFeeXRP)) {
|
||||||
const errorMessage = `Fee of ${fee.toString(10)} XRP exceeds ` +
|
return Promise.reject(new ValidationError(`Fee of ${fee.toString(10)} XRP exceeds ` +
|
||||||
`max of ${api._maxFeeXRP} XRP. To use this fee, increase ` +
|
`max of ${api._maxFeeXRP} XRP. To use this fee, increase ` +
|
||||||
'`maxFeeXRP` in the RippleAPI constructor.'
|
'`maxFeeXRP` in the RippleAPI constructor.'))
|
||||||
throw new ValidationError(errorMessage)
|
|
||||||
}
|
}
|
||||||
txJSON.Fee = scaleValue(common.xrpToDrops(instructions.fee), multiplier)
|
txJSON.Fee = scaleValue(common.xrpToDrops(instructions.fee), multiplier)
|
||||||
return Promise.resolve(txJSON)
|
return Promise.resolve(txJSON)
|
||||||
@@ -81,7 +123,7 @@ function prepareTransaction(txJSON: any, api: RippleAPI,
|
|||||||
(txJSON.TransactionType !== 'EscrowFinish' ||
|
(txJSON.TransactionType !== 'EscrowFinish' ||
|
||||||
txJSON.Fulfillment === undefined) ? 0 :
|
txJSON.Fulfillment === undefined) ? 0 :
|
||||||
(cushion * feeRef * (32 + Math.floor(
|
(cushion * feeRef * (32 + Math.floor(
|
||||||
new Buffer(txJSON.Fulfillment, 'hex').length / 16)))
|
Buffer.from(txJSON.Fulfillment, 'hex').length / 16)))
|
||||||
const feeDrops = common.xrpToDrops(fee)
|
const feeDrops = common.xrpToDrops(fee)
|
||||||
const maxFeeXRP = instructions.maxFee ?
|
const maxFeeXRP = instructions.maxFee ?
|
||||||
BigNumber.min(api._maxFeeXRP, instructions.maxFee) : api._maxFeeXRP
|
BigNumber.min(api._maxFeeXRP, instructions.maxFee) : api._maxFeeXRP
|
||||||
@@ -94,16 +136,30 @@ function prepareTransaction(txJSON: any, api: RippleAPI,
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function prepareSequence(): Promise<object> {
|
async function prepareSequence(): Promise<TransactionJSON> {
|
||||||
if (instructions.sequence !== undefined) {
|
if (instructions.sequence !== undefined) {
|
||||||
txJSON.Sequence = instructions.sequence
|
if (txJSON.Sequence === undefined || instructions.sequence === txJSON.Sequence) {
|
||||||
|
txJSON.Sequence = instructions.sequence
|
||||||
|
return Promise.resolve(txJSON)
|
||||||
|
} else {
|
||||||
|
// Both txJSON.Sequence and instructions.sequence are defined, and they are NOT equal
|
||||||
|
return Promise.reject(new ValidationError('`Sequence` in txJSON must match `sequence` in `instructions`'))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (txJSON.Sequence !== undefined) {
|
||||||
return Promise.resolve(txJSON)
|
return Promise.resolve(txJSON)
|
||||||
}
|
}
|
||||||
const response = await api.request('account_info', {
|
|
||||||
account: account as string
|
try {
|
||||||
})
|
// Consider requesting from the 'current' ledger (instead of 'validated').
|
||||||
txJSON.Sequence = response.account_data.Sequence
|
const response = await api.request('account_info', {
|
||||||
return txJSON
|
account
|
||||||
|
})
|
||||||
|
txJSON.Sequence = response.account_data.Sequence
|
||||||
|
return Promise.resolve(txJSON)
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
@@ -114,7 +170,7 @@ function prepareTransaction(txJSON: any, api: RippleAPI,
|
|||||||
}
|
}
|
||||||
|
|
||||||
function convertStringToHex(string: string): string {
|
function convertStringToHex(string: string): string {
|
||||||
return new Buffer(string, 'utf8').toString('hex').toUpperCase()
|
return Buffer.from(string, 'utf8').toString('hex').toUpperCase()
|
||||||
}
|
}
|
||||||
|
|
||||||
function convertMemo(memo: Memo): {Memo: ApiMemo} {
|
function convertMemo(memo: Memo): {Memo: ApiMemo} {
|
||||||
|
|||||||
11
src/tsconfig.json
Normal file
11
src/tsconfig.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extends": "../tsconfig-base",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../dist/npm",
|
||||||
|
"rootDir": ".",
|
||||||
|
"composite": true
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"**/*.ts"
|
||||||
|
]
|
||||||
|
}
|
||||||
1375
test/api-test.js
1375
test/api-test.js
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ const ledgerClosed = require('./fixtures/rippled/ledger-close');
|
|||||||
const RippleAPI = require('ripple-api').RippleAPI;
|
const RippleAPI = require('ripple-api').RippleAPI;
|
||||||
const schemaValidator = RippleAPI._PRIVATE.schemaValidator;
|
const schemaValidator = RippleAPI._PRIVATE.schemaValidator;
|
||||||
|
|
||||||
const TIMEOUT = process.browser ? 25000 : 10000;
|
const TIMEOUT = 20000;
|
||||||
|
|
||||||
function checkResult(expected, schemaName, response) {
|
function checkResult(expected, schemaName, response) {
|
||||||
if (expected.txJSON) {
|
if (expected.txJSON) {
|
||||||
@@ -29,9 +29,7 @@ describe('RippleAPIBroadcast', function() {
|
|||||||
|
|
||||||
it('base', function() {
|
it('base', function() {
|
||||||
const expected = {request_server_info: 1};
|
const expected = {request_server_info: 1};
|
||||||
if (!process.browser) {
|
this.mocks.forEach(mock => mock.expect(_.assign({}, expected)));
|
||||||
this.mocks.forEach(mock => mock.expect(_.assign({}, expected)));
|
|
||||||
}
|
|
||||||
assert(this.api.isConnected());
|
assert(this.api.isConnected());
|
||||||
return this.api.getServerInfo().then(
|
return this.api.getServerInfo().then(
|
||||||
_.partial(checkResult, responses.getServerInfo, 'getServerInfo'));
|
_.partial(checkResult, responses.getServerInfo, 'getServerInfo'));
|
||||||
|
|||||||
@@ -396,7 +396,8 @@ describe('Connection', function() {
|
|||||||
it('propagates RippledError data', function(done) {
|
it('propagates RippledError data', function(done) {
|
||||||
this.api.request('subscribe', {streams: 'validations'}).catch(error => {
|
this.api.request('subscribe', {streams: 'validations'}).catch(error => {
|
||||||
assert.strictEqual(error.name, 'RippledError')
|
assert.strictEqual(error.name, 'RippledError')
|
||||||
assert.strictEqual(error.message, 'invalidParams')
|
assert.strictEqual(error.data.error, 'invalidParams')
|
||||||
|
assert.strictEqual(error.message, 'Invalid parameters.')
|
||||||
assert.strictEqual(error.data.error_code, 31)
|
assert.strictEqual(error.data.error_code, 31)
|
||||||
assert.strictEqual(error.data.error_message, 'Invalid parameters.')
|
assert.strictEqual(error.data.error_message, 'Invalid parameters.')
|
||||||
assert.deepEqual(error.data.request, { command: 'subscribe', id: 0, streams: 'validations' })
|
assert.deepEqual(error.data.request, { command: 'subscribe', id: 0, streams: 'validations' })
|
||||||
|
|||||||
12
test/fixtures/responses/get-ledger-by-hash.json
vendored
Normal file
12
test/fixtures/responses/get-ledger-by-hash.json
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"stateHash": "A155BFE86054BE654796EC449E7C374CD5CAA3789BA75D302E7F0F4CE470CCB3",
|
||||||
|
"closeTime": "2018-12-07T11:10:30.000Z",
|
||||||
|
"closeTimeResolution": 10,
|
||||||
|
"closeFlags": 0,
|
||||||
|
"ledgerHash": "15F20E5FA6EA9770BBFFDBD62787400960B04BE32803B20C41F117F41C13830D",
|
||||||
|
"ledgerVersion": 14995338,
|
||||||
|
"parentLedgerHash": "E0BC4F5FB8D9025087BE238664833DFA5658C9E7CE413B3B6F7DF4FFF1EDBF40",
|
||||||
|
"parentCloseTime": "2018-12-07T11:10:22.000Z",
|
||||||
|
"totalDrops": "99997114637345372",
|
||||||
|
"transactionHash": "52C0B6604D2EF203710FEA24F4A3750A4F2BCD5C67D6EB5FB1B2DBAE9A14DCE8"
|
||||||
|
}
|
||||||
1
test/fixtures/responses/index.js
vendored
1
test/fixtures/responses/index.js
vendored
@@ -83,6 +83,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
getLedger: {
|
getLedger: {
|
||||||
header: require('./get-ledger'),
|
header: require('./get-ledger'),
|
||||||
|
headerByHash: require('./get-ledger-by-hash'),
|
||||||
full: require('./get-ledger-full'),
|
full: require('./get-ledger-full'),
|
||||||
withSettingsTx: require('./get-ledger-with-settings-tx'),
|
withSettingsTx: require('./get-ledger-with-settings-tx'),
|
||||||
withStateAsHashes: require('./get-ledger-with-state-as-hashes'),
|
withStateAsHashes: require('./get-ledger-with-state-as-hashes'),
|
||||||
|
|||||||
22
test/fixtures/responses/submit.json
vendored
22
test/fixtures/responses/submit.json
vendored
@@ -1,4 +1,24 @@
|
|||||||
{
|
{
|
||||||
"resultCode": "tesSUCCESS",
|
"resultCode": "tesSUCCESS",
|
||||||
"resultMessage": "The transaction was applied. Only final in a validated ledger."
|
"resultMessage": "The transaction was applied. Only final in a validated ledger.",
|
||||||
|
"engine_result": "tesSUCCESS",
|
||||||
|
"engine_result_code": 0,
|
||||||
|
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
|
||||||
|
"tx_blob": "1200002280000000240000016861D4838D7EA4C6800000000000000000000000000055534400000000004B4E9C06F24296074F7BC48F92A97916C6DC5EA9684000000000002710732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402200E5C2DD81FDF0BE9AB2A8D797885ED49E804DBF28E806604D878756410CA98B102203349581946B0DDA06B36B35DBC20EDA27552C1F167BCF5C6ECFF49C6A46F858081144B4E9C06F24296074F7BC48F92A97916C6DC5EA983143E9D4A2B8AA0780F682D136F7A56D6724EF53754",
|
||||||
|
"tx_json": {
|
||||||
|
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
|
||||||
|
"Amount": {
|
||||||
|
"currency": "USD",
|
||||||
|
"issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
|
||||||
|
"value": "1"
|
||||||
|
},
|
||||||
|
"Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
|
||||||
|
"Fee": "10000",
|
||||||
|
"Flags": 2147483648,
|
||||||
|
"Sequence": 360,
|
||||||
|
"SigningPubKey": "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
|
||||||
|
"TransactionType": "Payment",
|
||||||
|
"TxnSignature": "304402200E5C2DD81FDF0BE9AB2A8D797885ED49E804DBF28E806604D878756410CA98B102203349581946B0DDA06B36B35DBC20EDA27552C1F167BCF5C6ECFF49C6A46F8580",
|
||||||
|
"hash": "4D5D90890F8D49519E4151938601EF3D0B30B16CD6A519D9C99102C9FA77F7E0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
test/fixtures/rippled/index.js
vendored
1
test/fixtures/rippled/index.js
vendored
@@ -7,6 +7,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
ledger: {
|
ledger: {
|
||||||
normal: require('./ledger'),
|
normal: require('./ledger'),
|
||||||
|
normalByHash: require('./ledger-by-hash'),
|
||||||
notFound: require('./ledger-not-found'),
|
notFound: require('./ledger-not-found'),
|
||||||
withoutCloseTime: require('./ledger-without-close-time'),
|
withoutCloseTime: require('./ledger-without-close-time'),
|
||||||
withSettingsTx: require('./ledger-with-settings-tx'),
|
withSettingsTx: require('./ledger-with-settings-tx'),
|
||||||
|
|||||||
28
test/fixtures/rippled/ledger-by-hash.json
vendored
Normal file
28
test/fixtures/rippled/ledger-by-hash.json
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"id":1,
|
||||||
|
"result": {
|
||||||
|
"ledger": {
|
||||||
|
"accepted": true,
|
||||||
|
"account_hash": "A155BFE86054BE654796EC449E7C374CD5CAA3789BA75D302E7F0F4CE470CCB3",
|
||||||
|
"close_flags": 0,
|
||||||
|
"close_time": 597496230,
|
||||||
|
"close_time_human": "2018-Dec-07 11:10:30.000000000",
|
||||||
|
"close_time_resolution": 10,
|
||||||
|
"closed": true,
|
||||||
|
"hash": "15F20E5FA6EA9770BBFFDBD62787400960B04BE32803B20C41F117F41C13830D",
|
||||||
|
"ledger_hash": "15F20E5FA6EA9770BBFFDBD62787400960B04BE32803B20C41F117F41C13830D",
|
||||||
|
"ledger_index": "14995338",
|
||||||
|
"parent_close_time": 597496222,
|
||||||
|
"parent_hash": "E0BC4F5FB8D9025087BE238664833DFA5658C9E7CE413B3B6F7DF4FFF1EDBF40",
|
||||||
|
"seqNum": "14995338",
|
||||||
|
"totalCoins": "99997114637345372",
|
||||||
|
"total_coins": "99997114637345372",
|
||||||
|
"transaction_hash": "52C0B6604D2EF203710FEA24F4A3750A4F2BCD5C67D6EB5FB1B2DBAE9A14DCE8"
|
||||||
|
},
|
||||||
|
"ledger_hash": "15F20E5FA6EA9770BBFFDBD62787400960B04BE32803B20C41F117F41C13830D",
|
||||||
|
"ledger_index": 14995338,
|
||||||
|
"validated": true
|
||||||
|
},
|
||||||
|
"status": "success",
|
||||||
|
"type": "response"
|
||||||
|
}
|
||||||
19
test/fixtures/rippled/submit.json
vendored
19
test/fixtures/rippled/submit.json
vendored
@@ -7,7 +7,22 @@
|
|||||||
"engine_result": "tesSUCCESS",
|
"engine_result": "tesSUCCESS",
|
||||||
"engine_result_code": 0,
|
"engine_result_code": 0,
|
||||||
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
|
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
|
||||||
"tx_blob": "12000322000000002400000017201B0086955468400000000000000C732102F89EAEC7667B30F33D0687BBA86C3FE2A08CCA40A9186C5BDE2DAA6FA97A37D87446304402207660BDEF67105CE1EBA9AD35DC7156BAB43FF1D47633199EE257D70B6B9AAFBF02207F5517BC8AEF2ADC1325897ECDBA8C673838048BCA62F4E98B252F19BE88796D770A726970706C652E636F6D81144FBFF73DA4ECF9B701940F27341FA8020C313443",
|
"tx_blob": "1200002280000000240000016861D4838D7EA4C6800000000000000000000000000055534400000000004B4E9C06F24296074F7BC48F92A97916C6DC5EA9684000000000002710732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402200E5C2DD81FDF0BE9AB2A8D797885ED49E804DBF28E806604D878756410CA98B102203349581946B0DDA06B36B35DBC20EDA27552C1F167BCF5C6ECFF49C6A46F858081144B4E9C06F24296074F7BC48F92A97916C6DC5EA983143E9D4A2B8AA0780F682D136F7A56D6724EF53754",
|
||||||
"tx_json": {}
|
"tx_json": {
|
||||||
|
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
|
||||||
|
"Amount": {
|
||||||
|
"currency": "USD",
|
||||||
|
"issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
|
||||||
|
"value": "1"
|
||||||
|
},
|
||||||
|
"Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
|
||||||
|
"Fee": "10000",
|
||||||
|
"Flags": 2147483648,
|
||||||
|
"Sequence": 360,
|
||||||
|
"SigningPubKey": "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
|
||||||
|
"TransactionType": "Payment",
|
||||||
|
"TxnSignature": "304402200E5C2DD81FDF0BE9AB2A8D797885ED49E804DBF28E806604D878756410CA98B102203349581946B0DDA06B36B35DBC20EDA27552C1F167BCF5C6ECFF49C6A46F8580",
|
||||||
|
"hash": "4D5D90890F8D49519E4151938601EF3D0B30B16CD6A519D9C99102C9FA77F7E0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const {payTo, ledgerAccept} = require('./utils');
|
|||||||
|
|
||||||
|
|
||||||
// how long before each test case times out
|
// how long before each test case times out
|
||||||
const TIMEOUT = process.browser ? 25000 : 10000;
|
const TIMEOUT = 20000;
|
||||||
const INTERVAL = 1000; // how long to wait between checks for validated ledger
|
const INTERVAL = 1000; // how long to wait between checks for validated ledger
|
||||||
|
|
||||||
const serverUrl = 'ws://127.0.0.1:6006';
|
const serverUrl = 'ws://127.0.0.1:6006';
|
||||||
|
|||||||
@@ -238,11 +238,40 @@ module.exports = function createMockRippled(port) {
|
|||||||
} else if (request.account === addresses.NOTFOUND) {
|
} else if (request.account === addresses.NOTFOUND) {
|
||||||
conn.send(createResponse(request, fixtures.account_info.notfound));
|
conn.send(createResponse(request, fixtures.account_info.notfound));
|
||||||
} else if (request.account === addresses.THIRD_ACCOUNT) {
|
} else if (request.account === addresses.THIRD_ACCOUNT) {
|
||||||
const response = _.assign({}, fixtures.account_info.normal);
|
const response = Object.assign({}, fixtures.account_info.normal);
|
||||||
response.Account = addresses.THIRD_ACCOUNT;
|
response.Account = addresses.THIRD_ACCOUNT;
|
||||||
conn.send(createResponse(request, response));
|
conn.send(createResponse(request, response));
|
||||||
|
} else if (request.account === undefined) {
|
||||||
|
const response = Object.assign({}, {
|
||||||
|
error: 'invalidParams',
|
||||||
|
error_code: 31,
|
||||||
|
error_message: 'Missing field \'account\'.',
|
||||||
|
id: 2,
|
||||||
|
request: { command: 'account_info', id: 2 },
|
||||||
|
status: 'error',
|
||||||
|
type: 'response'
|
||||||
|
});
|
||||||
|
conn.send(createResponse(request, response));
|
||||||
} else {
|
} else {
|
||||||
assert(false, 'Unrecognized account address: ' + request.account);
|
const response = Object.assign({}, {
|
||||||
|
account: request.account,
|
||||||
|
error: 'actNotFound',
|
||||||
|
error_code: 19,
|
||||||
|
error_message: 'Account not found.',
|
||||||
|
id: 2,
|
||||||
|
ledger_current_index: 17714714,
|
||||||
|
request:
|
||||||
|
|
||||||
|
// This will be inaccurate, but that's OK because this is just a mock rippled
|
||||||
|
{ account: 'rogvkYnY8SWjxkJNgU4ZRVfLeRyt5DR9i',
|
||||||
|
command: 'account_info',
|
||||||
|
id: 2 },
|
||||||
|
|
||||||
|
status: 'error',
|
||||||
|
type: 'response',
|
||||||
|
validated: false
|
||||||
|
});
|
||||||
|
conn.send(createResponse(request, response));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -268,6 +297,8 @@ module.exports = function createMockRippled(port) {
|
|||||||
const response = _.assign({}, fixtures.ledger.normal,
|
const response = _.assign({}, fixtures.ledger.normal,
|
||||||
{ result: { ledger: fullLedger } });
|
{ result: { ledger: fullLedger } });
|
||||||
conn.send(createLedgerResponse(request, response));
|
conn.send(createLedgerResponse(request, response));
|
||||||
|
} else if (request.ledger_hash === '15F20E5FA6EA9770BBFFDBD62787400960B04BE32803B20C41F117F41C13830D') {
|
||||||
|
conn.send(createLedgerResponse(request, fixtures.ledger.normalByHash));
|
||||||
} else if (request.ledger_index === 'validated' ||
|
} else if (request.ledger_index === 'validated' ||
|
||||||
request.ledger_index === 14661789 ||
|
request.ledger_index === 14661789 ||
|
||||||
request.ledger_index === 14661788 /* getTransaction - order */) {
|
request.ledger_index === 14661788 /* getTransaction - order */) {
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<!-- encoding must be set for mocha's special characters to render properly -->
|
|
||||||
<link rel="stylesheet" href="../node_modules/mocha/mocha.css" />
|
|
||||||
<script src="/test/vendor/lodash.min.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="deb"></div>
|
|
||||||
<div id="mocha"></div>
|
|
||||||
<script src="/node_modules/mocha/mocha.js"></script>
|
|
||||||
|
|
||||||
<script src="/node_modules/mocha-in-sauce/client.js"></script>
|
|
||||||
|
|
||||||
<script src="/build/ripple-latest-min.js"></script>
|
|
||||||
<script>
|
|
||||||
mocha.ui('bdd')
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script src="../test-compiled-for-web/api-test.js"></script>
|
|
||||||
|
|
||||||
<script src="../test-compiled-for-web/broadcast-api-test.js"></script>
|
|
||||||
|
|
||||||
<script src="../test-compiled-for-web/connection-test.js"></script>
|
|
||||||
|
|
||||||
<script src="/test-compiled-for-web/rangeset-test.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
mochaSaucePlease({xunit: false});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
26
tsconfig-base.json
Normal file
26
tsconfig-base.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"pretty": true,
|
||||||
|
"lib": [
|
||||||
|
"es2017"
|
||||||
|
],
|
||||||
|
"target": "es6",
|
||||||
|
|
||||||
|
"declaration": true,
|
||||||
|
"declarationMap": true /* Added 2019-04-13 */,
|
||||||
|
"sourceMap": true,
|
||||||
|
"noEmitOnError": true /* Added 2019-04-13 */,
|
||||||
|
|
||||||
|
"strictNullChecks": false,
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noUnusedParameters": true,
|
||||||
|
"removeComments": true,
|
||||||
|
"strict": true /* Enable all strict type-checking options. */,
|
||||||
|
"preserveConstEnums": false,
|
||||||
|
|
||||||
|
"module": "commonjs",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"suppressImplicitAnyIndexErrors": false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,26 +1,8 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"files": [],
|
||||||
"target": "es6",
|
"include": [],
|
||||||
"lib": [
|
"references": [
|
||||||
"es2017"
|
{ "path": "./src" },
|
||||||
],
|
{ "path": "./snippets" }
|
||||||
"outDir": "dist/npm",
|
|
||||||
"rootDir": "src",
|
|
||||||
"module": "commonjs",
|
|
||||||
"moduleResolution": "node",
|
|
||||||
"strictNullChecks": false,
|
|
||||||
"noImplicitAny": false,
|
|
||||||
"noUnusedLocals": true,
|
|
||||||
"noUnusedParameters": true,
|
|
||||||
"removeComments": false,
|
|
||||||
"preserveConstEnums": false,
|
|
||||||
"suppressImplicitAnyIndexErrors": false,
|
|
||||||
"declaration": true,
|
|
||||||
"sourceMap": true,
|
|
||||||
"skipLibCheck": true
|
|
||||||
},
|
|
||||||
"include": [
|
|
||||||
"custom_typings/**/*.ts",
|
|
||||||
"src/**/*.ts"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user