mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-15 01:55:48 +00:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c3aa062edd | ||
|
|
0ad8c577c0 | ||
|
|
facc513a52 | ||
|
|
df711ecb06 | ||
|
|
144be08af0 | ||
|
|
c53db4844a | ||
|
|
68b34f7532 | ||
|
|
3fe5d715a5 | ||
|
|
ca74cf1028 | ||
|
|
5b51ff6071 | ||
|
|
3cad4f4aa3 | ||
|
|
365de6d18a | ||
|
|
4a21360e37 | ||
|
|
43a3cfa010 | ||
|
|
b89eae5cb1 |
9
.travis.yml
Normal file
9
.travis.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- 6
|
||||
- 8
|
||||
- 9
|
||||
script:
|
||||
- yarn compile
|
||||
- yarn test
|
||||
- yarn build
|
||||
18
HISTORY.md
18
HISTORY.md
@@ -1,5 +1,22 @@
|
||||
# ripple-lib Release History
|
||||
|
||||
## 0.19.0 (2018-03-02)
|
||||
|
||||
+ [Add support for Checks](https://github.com/ripple/ripple-lib/pull/853)
|
||||
+ [Add support for the Deposit Authorization account root flag](https://github.com/ripple/ripple-lib/pull/852)
|
||||
+ [Generate .ts.d TypeScript declaration files](https://github.com/ripple/ripple-lib/pull/851)
|
||||
+ [Improve documentation of getTransactions params](https://github.com/ripple/ripple-lib/pull/856)
|
||||
+ [Add new request interface](https://github.com/ripple/ripple-lib/pull/843) (private for now)
|
||||
|
||||
The SHA-256 checksums for the browser version of this release can be found
|
||||
below.
|
||||
```
|
||||
% shasum -a 256 *
|
||||
0e7ce4594b7e455fbc57ad81f6fddc391d1e1f349a49c96ad783be50f80fdc14 ripple-0.19.0-debug.js
|
||||
6d716a0357929e51e476f22136880f7a0e5458fd396ac145ce9308f278ff7cc1 ripple-0.19.0-min.js
|
||||
6715db1af638f99226ab7f8f244103306aa6e04d1b8c1da47a63431053bacb84 ripple-0.19.0.js
|
||||
```
|
||||
|
||||
## 0.18.2 (2018-02-13)
|
||||
|
||||
+ [Fix: Publish updated browser builds to npm so that users can easily use
|
||||
@@ -160,7 +177,6 @@ __OTHER CHANGES__
|
||||
__BREAKING CHANGES__
|
||||
+ Add new RippleAPI interface and delete old API
|
||||
- [RippleAPI README and samples](https://github.com/ripple/ripple-lib/tree/develop/docs/samples)
|
||||
- [Method documentation](https://rawgit.com/ripple/ripple-lib/develop/docs/api.html)
|
||||
|
||||
__OTHER CHANGES__
|
||||
+ [Removed timeout method of Request and added default timeout](https://github.com/ripple/ripple-lib/commit/634fe5683a9082e57682ff7d5c4fb9483b4af818)
|
||||
|
||||
264
docs/index.md
264
docs/index.md
@@ -27,6 +27,9 @@
|
||||
- [Escrow Creation](#escrow-creation)
|
||||
- [Escrow Cancellation](#escrow-cancellation)
|
||||
- [Escrow Execution](#escrow-execution)
|
||||
- [Check Create](#check-create)
|
||||
- [Check Cancel](#check-cancel)
|
||||
- [Check Cash](#check-cash)
|
||||
- [Payment Channel Create](#payment-channel-create)
|
||||
- [Payment Channel Fund](#payment-channel-fund)
|
||||
- [Payment Channel Claim](#payment-channel-claim)
|
||||
@@ -60,6 +63,9 @@
|
||||
- [preparePaymentChannelCreate](#preparepaymentchannelcreate)
|
||||
- [preparePaymentChannelClaim](#preparepaymentchannelclaim)
|
||||
- [preparePaymentChannelFund](#preparepaymentchannelfund)
|
||||
- [prepareCheckCreate](#preparecheckcreate)
|
||||
- [prepareCheckCancel](#preparecheckcancel)
|
||||
- [prepareCheckCash](#preparecheckcash)
|
||||
- [sign](#sign)
|
||||
- [combine](#combine)
|
||||
- [submit](#submit)
|
||||
@@ -266,6 +272,9 @@ Type | Description
|
||||
[escrowCreation](#escrow-creation) | An `escrowCreation` transaction creates an escrow on the ledger, which locks XRP until a cryptographic condition is met or it expires. It is like an escrow service where the XRP Ledger acts as the escrow agent.
|
||||
[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.
|
||||
[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.
|
||||
[checkCash](#checkCash) | 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.
|
||||
|
||||
## Transaction Flow
|
||||
|
||||
@@ -280,6 +289,9 @@ Executing a transaction with `RippleAPI` requires the following four steps:
|
||||
* [prepareEscrowCreation](#prepareescrowcreation)
|
||||
* [prepareEscrowCancellation](#prepareescrowcancellation)
|
||||
* [prepareEscrowExecution](#prepareescrowexecution)
|
||||
* [prepareCheckCreate](#preparecheckcreate)
|
||||
* [prepareCheckCancel](#preparecheckcancel)
|
||||
* [prepareCheckCash](#preparecheckcash)
|
||||
2. [Sign](#sign) - Cryptographically sign the transaction locally and save the [transaction ID](#transaction-id). Signing is how the owner of an account authorizes a transaction to take place. For multisignature transactions, the `signedTransaction` fields returned by `sign` must be collected and passed to the [combine](#combine) method.
|
||||
3. [Submit](#submit) - Submit the transaction to the connected server.
|
||||
4. Verify - Verify that the transaction got validated by querying with [getTransaction](#gettransaction). This is necessary because transactions may fail even if they were successfully submitted.
|
||||
@@ -299,7 +311,7 @@ Name | Type | Description
|
||||
fee | [value](#value) | *Optional* An exact fee to pay for the transaction. See [Transaction Fees](#transaction-fees) for more information.
|
||||
maxFee | [value](#value) | *Optional* The maximum fee to pay for the transaction. 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.
|
||||
maxLedgerVersionOffset | integer | *Optional* Offset from current validated legder 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.
|
||||
signersCount | integer | *Optional* Number of signers that will be signing this transaction.
|
||||
|
||||
@@ -346,11 +358,11 @@ destination | object | The destination of the funds to be sent.
|
||||
*destination.* tag | integer | *Optional* An arbitrary unsigned 32-bit integer that identifies a reason for payment or a non-Ripple account.
|
||||
*destination.* address | [address](#address) | The address to send to.
|
||||
*destination.* minAmount | [laxAmount](#amount) | The minimum amount to be delivered. (This field is exclusive with destination.amount)
|
||||
allowPartialPayment | boolean | *Optional* A boolean that, if set to true, indicates that this payment should go through even if the whole amount cannot be delivered because of a lack of liquidity or funds in the source account account
|
||||
allowPartialPayment | boolean | *Optional* If true, this payment should proceed even if the whole amount cannot be delivered due to a lack of liquidity or a lack of funds in the source account.
|
||||
invoiceID | string | *Optional* A 256-bit hash that can be used to identify a particular payment.
|
||||
limitQuality | boolean | *Optional* Only take paths where all the conversions have an input:output ratio that is equal or better than the ratio of destination.amount:source.maxAmount.
|
||||
memos | [memos](#transaction-memos) | *Optional* Array of memos to attach to the transaction.
|
||||
noDirectRipple | boolean | *Optional* A boolean that can be set to true if paths are specified and the sender would like the Ripple Network to disregard any direct paths from the source account to the destination account. This may be used to take advantage of an arbitrage opportunity or by gateways wishing to issue balances from a hot wallet to a user who has mistakenly set a trustline directly to the hot wallet
|
||||
noDirectRipple | boolean | *Optional* If true and paths are specified, the sender would like the XRP Ledger to disregard any direct paths from the source account to the destination account. This may be used to take advantage of an arbitrage opportunity or by gateways wishing to issue balances from a hot wallet to a user who has mistakenly set a trustline directly to the hot wallet.
|
||||
paths | string | *Optional* The paths of trustlines and orders to use in executing the payment.
|
||||
|
||||
### Example
|
||||
@@ -479,7 +491,8 @@ See [Transaction Types](#transaction-types) for a description.
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
defaultRipple | boolean | *Optional* Enable [rippling](https://ripple.com/knowledge_center/understanding-the-noripple-flag/) on this account’s trust lines by default. (New in [rippled 0.27.3](https://github.com/ripple/rippled/releases/tag/0.27.3))
|
||||
defaultRipple | boolean | *Optional* Enable [rippling](https://ripple.com/build/understanding-the-noripple-flag/) on this account’s trust lines by default. (New in [rippled 0.27.3](https://github.com/ripple/rippled/releases/tag/0.27.3))
|
||||
depositAuth | boolean | *Optional* Enable [Deposit Authorization](https://ripple.com/build/deposit-authorization/) on this account. If set, transactions cannot send value of any kind to this account unless the sender of those transactions is the account itself. (Requires the [DepositAuth amendment](https://ripple.com/build/known-amendments/#depositauth))
|
||||
disableMasterKey | boolean | *Optional* Disallows use of the master key to sign transactions for this account.
|
||||
disallowIncomingXRP | boolean | *Optional* Indicates that client applications should not send XRP to this account. Not enforced by rippled.
|
||||
domain | string | *Optional* The domain that owns this account, as a hexadecimal string representing the ASCII for the domain in lowercase.
|
||||
@@ -592,6 +605,74 @@ memos | [memos](#transaction-memos) | *Optional* Array of memos to attach to the
|
||||
```
|
||||
|
||||
|
||||
## Check Create
|
||||
|
||||
See [Transaction Types](#transaction-types) for a description.
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
destination | [address](#address) | Address of the account that can cash the check.
|
||||
sendMax | [laxAmount](#amount) | Amount of source currency the check is allowed to debit the sender, including transfer fees on non-XRP currencies.
|
||||
destinationTag | integer | *Optional* Destination tag that identifies the reason for the check, or a hosted recipient to pay.
|
||||
expiration | date-time string | *Optional* Time after which the check is no longer valid.
|
||||
invoiceID | string | *Optional* 256-bit hash, as a 64-character hexadecimal string, representing a specific reason or identifier for this check.
|
||||
|
||||
### Example
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"destination": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
|
||||
"sendMax": {
|
||||
"currency": "XRP",
|
||||
"value": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Check Cancel
|
||||
|
||||
See [Transaction Types](#transaction-types) for a description.
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
checkID | string | The ID of the Check ledger object to cancel, as a 64-character hexadecimal string.
|
||||
|
||||
### Example
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"checkID": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Check Cash
|
||||
|
||||
See [Transaction Types](#transaction-types) for a description.
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
checkID | string | The ID of the Check ledger object to cash, as a 64-character hexadecimal string.
|
||||
amount | [laxAmount](#amount) | *Optional* Redeem the Check for exactly this amount, if possible. The currency must match that of the sendMax of the corresponding CheckCreate transaction. You must provide either this field or deliverMin.
|
||||
deliverMin | [laxAmount](#amount) | *Optional* Redeem the Check for at least this amount and for as much as possible. The currency must match that of the sendMax of the corresponding CheckCreate transaction. You must provide either this field or amount.
|
||||
|
||||
### Example
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"amount": {
|
||||
"currency": "XRP",
|
||||
"value": "1"
|
||||
},
|
||||
"checkID": "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Payment Channel Create
|
||||
|
||||
See [Transaction Types](#transaction-types) for a description.
|
||||
@@ -1021,7 +1102,7 @@ options | object | *Optional* Options to filter the resulting transactions.
|
||||
*options.* limit | integer | *Optional* If specified, return at most this many transactions.
|
||||
*options.* maxLedgerVersion | integer | *Optional* Return only transactions in this ledger version or lower.
|
||||
*options.* minLedgerVersion | integer | *Optional* Return only transactions in this ledger verion or higher.
|
||||
*options.* start | string | *Optional* If specified, this transaction will be the first transaction in the result.
|
||||
*options.* start | string | *Optional* If specified, this transaction will be the first transaction in the result. You cannot use `start` with `minLedgerVersion` or `maxLedgerVersion`. When `start` is specified, these ledger versions will be determined internally.
|
||||
*options.* types | array\<[transactionType](#transaction-types)\> | *Optional* Only return transactions of the specified [Transaction Types](#transaction-types).
|
||||
|
||||
### Return Value
|
||||
@@ -2718,7 +2799,8 @@ This method returns a promise that resolves with an array of objects with the fo
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
defaultRipple | boolean | *Optional* Enable [rippling](https://ripple.com/knowledge_center/understanding-the-noripple-flag/) on this account’s trust lines by default. (New in [rippled 0.27.3](https://github.com/ripple/rippled/releases/tag/0.27.3))
|
||||
defaultRipple | boolean | *Optional* Enable [rippling](https://ripple.com/build/understanding-the-noripple-flag/) on this account’s trust lines by default. (New in [rippled 0.27.3](https://github.com/ripple/rippled/releases/tag/0.27.3))
|
||||
depositAuth | boolean | *Optional* Enable [Deposit Authorization](https://ripple.com/build/deposit-authorization/) on this account. If set, transactions cannot send value of any kind to this account unless the sender of those transactions is the account itself. (Requires the [DepositAuth amendment](https://ripple.com/build/known-amendments/#depositauth))
|
||||
disableMasterKey | boolean | *Optional* Disallows use of the master key to sign transactions for this account.
|
||||
disallowIncomingXRP | boolean | *Optional* Indicates that client applications should not send XRP to this account. Not enforced by rippled.
|
||||
domain | string | *Optional* The domain that owns this account, as a hexadecimal string representing the ASCII for the domain in lowercase.
|
||||
@@ -3590,6 +3672,176 @@ return api.preparePaymentChannelFund(address, paymentChannelFund).then(prepared
|
||||
```
|
||||
|
||||
|
||||
## prepareCheckCreate
|
||||
|
||||
`prepareCheckCreate(address: string, checkCreate: Object, instructions: Object): Promise<Object>`
|
||||
|
||||
Prepare a Check creation transaction. The prepared transaction must subsequently be [signed](#sign) and [submitted](#submit).
|
||||
|
||||
### Parameters
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
address | [address](#address) | The address of the account that is creating the transaction.
|
||||
checkCreate | [checkCreate](#check-create) | The specification of the Check create creation to prepare.
|
||||
instructions | [instructions](#transaction-instructions) | *Optional* Instructions for executing the transaction
|
||||
|
||||
### Return Value
|
||||
|
||||
This method returns a promise that resolves with an object with the following structure:
|
||||
|
||||
<aside class="notice">
|
||||
All "prepare*" methods have the same return type.
|
||||
</aside>
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
txJSON | string | The prepared transaction in rippled JSON format.
|
||||
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.* 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.
|
||||
|
||||
### Example
|
||||
|
||||
```javascript
|
||||
const address = 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59';
|
||||
const checkCreate = {
|
||||
"destination": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
|
||||
"sendMax": {
|
||||
"currency": "XRP",
|
||||
"value": "1"
|
||||
}
|
||||
};
|
||||
return api.prepareCheckCreate(address, checkCreate).then(prepared =>
|
||||
{/* ... */});
|
||||
```
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"txJSON": "{\"Account\":\"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59\",\"TransactionType\":\"CheckCreate\",\"Destination\":\"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\"SendMax\":\"1000000\",\"Flags\":2147483648,\"LastLedgerSequence\":8820051,\"Sequence\":23,\"Fee\":\"12\"}",
|
||||
"instructions": {
|
||||
"fee": "0.000012",
|
||||
"sequence": 23,
|
||||
"maxLedgerVersion": 8820051
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## prepareCheckCancel
|
||||
|
||||
`prepareCheckCancel(address: string, checkCancel: Object, instructions: Object): Promise<Object>`
|
||||
|
||||
Prepare a Check cancellation transaction. This cancels an unredeemed Check, removing it from the ledger without sending any money. The prepared transaction must subsequently be [signed](#sign) and [submitted](#submit).
|
||||
|
||||
### Parameters
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
address | [address](#address) | The address of the account that is creating the transaction.
|
||||
checkCancel | [checkCancel](#check-cancel) | The specification of the Check cancellation to prepare.
|
||||
instructions | [instructions](#transaction-instructions) | *Optional* Instructions for executing the transaction
|
||||
|
||||
### Return Value
|
||||
|
||||
This method returns a promise that resolves with an object with the following structure:
|
||||
|
||||
<aside class="notice">
|
||||
All "prepare*" methods have the same return type.
|
||||
</aside>
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
txJSON | string | The prepared transaction in rippled JSON format.
|
||||
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.* 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.
|
||||
|
||||
### Example
|
||||
|
||||
```javascript
|
||||
const address = 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59';
|
||||
const checkCancel = {
|
||||
"checkID": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0"
|
||||
};
|
||||
return api.prepareCheckCancel(address, checkCancel).then(prepared =>
|
||||
{/* ... */});
|
||||
```
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"txJSON": "{\"Account\":\"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59\",\"TransactionType\":\"CheckCancel\",\"CheckID\":\"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\"Flags\":2147483648,\"LastLedgerSequence\":8819954,\"Fee\":\"12\",\"Sequence\":23}",
|
||||
"instructions": {
|
||||
"fee": "0.000012",
|
||||
"sequence": 23,
|
||||
"maxLedgerVersion": 8819954
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## prepareCheckCash
|
||||
|
||||
`prepareCheckCash(address: string, checkCash: Object, instructions: Object): Promise<Object>`
|
||||
|
||||
Prepare a Check cashing transaction. This redeems a Check to receive up to the amount authorized by the corresponding CheckCreate transaction. The prepared transaction must subsequently be [signed](#sign) and [submitted](#submit).
|
||||
|
||||
### Parameters
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
address | [address](#address) | The address of the account that is creating the transaction.
|
||||
checkCash | [checkCash](#check-cash) | The specification of the Check cash to prepare.
|
||||
instructions | [instructions](#transaction-instructions) | *Optional* Instructions for executing the transaction
|
||||
|
||||
### Return Value
|
||||
|
||||
This method returns a promise that resolves with an object with the following structure:
|
||||
|
||||
<aside class="notice">
|
||||
All "prepare*" methods have the same return type.
|
||||
</aside>
|
||||
|
||||
Name | Type | Description
|
||||
---- | ---- | -----------
|
||||
txJSON | string | The prepared transaction in rippled JSON format.
|
||||
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.* 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.
|
||||
|
||||
### Example
|
||||
|
||||
```javascript
|
||||
const address = 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59';
|
||||
const checkCash = {
|
||||
"amount": {
|
||||
"currency": "XRP",
|
||||
"value": "1"
|
||||
},
|
||||
"checkID": "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334"
|
||||
};
|
||||
return api.prepareCheckCash(address, checkCash).then(prepared =>
|
||||
{/* ... */});
|
||||
```
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"txJSON": "{\"Account\":\"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59\",\"TransactionType\":\"CheckCash\",\"CheckID\":\"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\"Amount\":\"1000000\",\"Flags\":2147483648,\"LastLedgerSequence\":8819954,\"Sequence\":23,\"Fee\":\"12\"}",
|
||||
"instructions": {
|
||||
"fee": "0.000012",
|
||||
"sequence": 23,
|
||||
"maxLedgerVersion": 8819954
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## sign
|
||||
|
||||
`sign(txJSON: string, secret: string, options: Object): {signedTransaction: string, id: string}`
|
||||
|
||||
@@ -34,6 +34,9 @@
|
||||
<% include preparePaymentChannelCreate.md.ejs %>
|
||||
<% include preparePaymentChannelClaim.md.ejs %>
|
||||
<% include preparePaymentChannelFund.md.ejs %>
|
||||
<% include prepareCheckCreate.md.ejs %>
|
||||
<% include prepareCheckCancel.md.ejs %>
|
||||
<% include prepareCheckCash.md.ejs %>
|
||||
<% include sign.md.ejs %>
|
||||
<% include combine.md.ejs %>
|
||||
<% include submit.md.ejs %>
|
||||
|
||||
30
docs/src/prepareCheckCancel.md.ejs
Normal file
30
docs/src/prepareCheckCancel.md.ejs
Normal file
@@ -0,0 +1,30 @@
|
||||
## prepareCheckCancel
|
||||
|
||||
`prepareCheckCancel(address: string, checkCancel: Object, instructions: Object): Promise<Object>`
|
||||
|
||||
Prepare a Check cancellation transaction. This cancels an unredeemed Check, removing it from the ledger without sending any money. The prepared transaction must subsequently be [signed](#sign) and [submitted](#submit).
|
||||
|
||||
### Parameters
|
||||
|
||||
<%- renderSchema('input/prepare-check-cancel.json') %>
|
||||
|
||||
### Return Value
|
||||
|
||||
This method returns a promise that resolves with an object with the following structure:
|
||||
|
||||
<aside class="notice">
|
||||
All "prepare*" methods have the same return type.
|
||||
</aside>
|
||||
|
||||
<%- renderSchema('output/prepare.json') %>
|
||||
|
||||
### Example
|
||||
|
||||
```javascript
|
||||
const address = 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59';
|
||||
const checkCancel = <%- importFile('test/fixtures/requests/prepare-check-cancel.json') %>;
|
||||
return api.prepareCheckCancel(address, checkCancel).then(prepared =>
|
||||
{/* ... */});
|
||||
```
|
||||
|
||||
<%- renderFixture('responses/prepare-check-cancel.json') %>
|
||||
30
docs/src/prepareCheckCash.md.ejs
Normal file
30
docs/src/prepareCheckCash.md.ejs
Normal file
@@ -0,0 +1,30 @@
|
||||
## prepareCheckCash
|
||||
|
||||
`prepareCheckCash(address: string, checkCash: Object, instructions: Object): Promise<Object>`
|
||||
|
||||
Prepare a Check cashing transaction. This redeems a Check to receive up to the amount authorized by the corresponding CheckCreate transaction. The prepared transaction must subsequently be [signed](#sign) and [submitted](#submit).
|
||||
|
||||
### Parameters
|
||||
|
||||
<%- renderSchema('input/prepare-check-cash.json') %>
|
||||
|
||||
### Return Value
|
||||
|
||||
This method returns a promise that resolves with an object with the following structure:
|
||||
|
||||
<aside class="notice">
|
||||
All "prepare*" methods have the same return type.
|
||||
</aside>
|
||||
|
||||
<%- renderSchema('output/prepare.json') %>
|
||||
|
||||
### Example
|
||||
|
||||
```javascript
|
||||
const address = 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59';
|
||||
const checkCash = <%- importFile('test/fixtures/requests/prepare-check-cash-amount.json') %>;
|
||||
return api.prepareCheckCash(address, checkCash).then(prepared =>
|
||||
{/* ... */});
|
||||
```
|
||||
|
||||
<%- renderFixture('responses/prepare-check-cash-amount.json') %>
|
||||
30
docs/src/prepareCheckCreate.md.ejs
Normal file
30
docs/src/prepareCheckCreate.md.ejs
Normal file
@@ -0,0 +1,30 @@
|
||||
## prepareCheckCreate
|
||||
|
||||
`prepareCheckCreate(address: string, checkCreate: Object, instructions: Object): Promise<Object>`
|
||||
|
||||
Prepare a Check creation transaction. The prepared transaction must subsequently be [signed](#sign) and [submitted](#submit).
|
||||
|
||||
### Parameters
|
||||
|
||||
<%- renderSchema('input/prepare-check-create.json') %>
|
||||
|
||||
### Return Value
|
||||
|
||||
This method returns a promise that resolves with an object with the following structure:
|
||||
|
||||
<aside class="notice">
|
||||
All "prepare*" methods have the same return type.
|
||||
</aside>
|
||||
|
||||
<%- renderSchema('output/prepare.json') %>
|
||||
|
||||
### Example
|
||||
|
||||
```javascript
|
||||
const address = 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59';
|
||||
const checkCreate = <%- importFile('test/fixtures/requests/prepare-check-create.json') %>;
|
||||
return api.prepareCheckCreate(address, checkCreate).then(prepared =>
|
||||
{/* ... */});
|
||||
```
|
||||
|
||||
<%- renderFixture('responses/prepare-check-create.json') %>
|
||||
@@ -82,6 +82,36 @@ See [Transaction Types](#transaction-types) for a description.
|
||||
|
||||
<%- renderFixture('requests/prepare-escrow-execution.json') %>
|
||||
|
||||
## Check Create
|
||||
|
||||
See [Transaction Types](#transaction-types) for a description.
|
||||
|
||||
<%- renderSchema('specifications/check-create.json') %>
|
||||
|
||||
### Example
|
||||
|
||||
<%- renderFixture('requests/prepare-check-create.json') %>
|
||||
|
||||
## Check Cancel
|
||||
|
||||
See [Transaction Types](#transaction-types) for a description.
|
||||
|
||||
<%- renderSchema('specifications/check-cancel.json') %>
|
||||
|
||||
### Example
|
||||
|
||||
<%- renderFixture('requests/prepare-check-cancel.json') %>
|
||||
|
||||
## Check Cash
|
||||
|
||||
See [Transaction Types](#transaction-types) for a description.
|
||||
|
||||
<%- renderSchema('specifications/check-cash.json') %>
|
||||
|
||||
### Example
|
||||
|
||||
<%- renderFixture('requests/prepare-check-cash-amount.json') %>
|
||||
|
||||
## Payment Channel Create
|
||||
|
||||
See [Transaction Types](#transaction-types) for a description.
|
||||
|
||||
@@ -14,6 +14,9 @@ Type | Description
|
||||
[escrowCreation](#escrow-creation) | An `escrowCreation` transaction creates an escrow on the ledger, which locks XRP until a cryptographic condition is met or it expires. It is like an escrow service where the XRP Ledger acts as the escrow agent.
|
||||
[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.
|
||||
[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.
|
||||
[checkCash](#checkCash) | 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.
|
||||
|
||||
## Transaction Flow
|
||||
|
||||
@@ -28,6 +31,9 @@ Executing a transaction with `RippleAPI` requires the following four steps:
|
||||
* [prepareEscrowCreation](#prepareescrowcreation)
|
||||
* [prepareEscrowCancellation](#prepareescrowcancellation)
|
||||
* [prepareEscrowExecution](#prepareescrowexecution)
|
||||
* [prepareCheckCreate](#preparecheckcreate)
|
||||
* [prepareCheckCancel](#preparecheckcancel)
|
||||
* [prepareCheckCash](#preparecheckcash)
|
||||
2. [Sign](#sign) - Cryptographically sign the transaction locally and save the [transaction ID](#transaction-id). Signing is how the owner of an account authorizes a transaction to take place. For multisignature transactions, the `signedTransaction` fields returned by `sign` must be collected and passed to the [combine](#combine) method.
|
||||
3. [Submit](#submit) - Submit the transaction to the connected server.
|
||||
4. Verify - Verify that the transaction got validated by querying with [getTransaction](#gettransaction). This is necessary because transactions may fail even if they were successfully submitted.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ripple-lib",
|
||||
"version": "0.18.2",
|
||||
"version": "0.19.0",
|
||||
"license": "ISC",
|
||||
"description": "A JavaScript API for interacting with Ripple in Node.js and the browser",
|
||||
"files": [
|
||||
@@ -22,7 +22,7 @@
|
||||
"jsonschema": "^1.1.1",
|
||||
"lodash": "^4.17.4",
|
||||
"ripple-address-codec": "^2.0.1",
|
||||
"ripple-binary-codec": "^0.1.10",
|
||||
"ripple-binary-codec": "^0.1.13",
|
||||
"ripple-hashes": "^0.3.1",
|
||||
"ripple-keypairs": "^0.10.1",
|
||||
"ripple-lib-transactionparser": "^0.6.2",
|
||||
|
||||
140
src/api.ts
140
src/api.ts
@@ -1,13 +1,15 @@
|
||||
import * as _ from 'lodash'
|
||||
import {EventEmitter} from 'events'
|
||||
import {Connection, errors, validate} from './common'
|
||||
import * as server from './server/server'
|
||||
const connect = server.connect
|
||||
const disconnect = server.disconnect
|
||||
const getServerInfo = server.getServerInfo
|
||||
const getFee = server.getFee
|
||||
const isConnected = server.isConnected
|
||||
const getLedgerVersion = server.getLedgerVersion
|
||||
import {
|
||||
connect,
|
||||
disconnect,
|
||||
isConnected,
|
||||
getServerInfo,
|
||||
getFee,
|
||||
getLedgerVersion,
|
||||
formatLedgerClose
|
||||
} from './server/server'
|
||||
import getTransaction from './ledger/transaction'
|
||||
import getTransactions from './ledger/transactions'
|
||||
import getTrustlines from './ledger/trustlines'
|
||||
@@ -29,6 +31,9 @@ import prepareEscrowCancellation from './transaction/escrow-cancellation'
|
||||
import preparePaymentChannelCreate from './transaction/payment-channel-create'
|
||||
import preparePaymentChannelFund from './transaction/payment-channel-fund'
|
||||
import preparePaymentChannelClaim from './transaction/payment-channel-claim'
|
||||
import prepareCheckCreate from './transaction/check-create'
|
||||
import prepareCheckCancel from './transaction/check-cancel'
|
||||
import prepareCheckCash from './transaction/check-cash'
|
||||
import prepareSettings from './transaction/settings'
|
||||
import sign from './transaction/sign'
|
||||
import combine from './transaction/combine'
|
||||
@@ -39,12 +44,21 @@ import signPaymentChannelClaim from './offline/sign-payment-channel-claim'
|
||||
import verifyPaymentChannelClaim from './offline/verify-payment-channel-claim'
|
||||
import getLedger from './ledger/ledger'
|
||||
|
||||
import {
|
||||
AccountOffersRequest, AccountOffersResponse,
|
||||
AccountInfoRequest, AccountInfoResponse,
|
||||
AccountLinesRequest, AccountLinesResponse,
|
||||
BookOffersRequest, BookOffersResponse,
|
||||
GatewayBalancesRequest, GatewayBalancesResponse
|
||||
} from './common/types/commands'
|
||||
|
||||
|
||||
import RangeSet from './common/rangeset'
|
||||
import * as ledgerUtils from './ledger/utils'
|
||||
import * as schemaValidator from './common/schema-validator'
|
||||
import {clamp} from './ledger/utils'
|
||||
|
||||
type APIOptions = {
|
||||
export type APIOptions = {
|
||||
server?: string,
|
||||
feeCushion?: number,
|
||||
trace?: boolean,
|
||||
@@ -52,8 +66,25 @@ type APIOptions = {
|
||||
timeout?: number
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response key / property name that contains the listed data for a
|
||||
* command. This varies from command to command, but we need to know it to
|
||||
* properly count across many requests.
|
||||
*/
|
||||
function getCollectKeyFromCommand(command: string): string|undefined {
|
||||
switch (command) {
|
||||
case 'account_offers':
|
||||
case 'book_offers':
|
||||
return 'offers'
|
||||
case 'account_lines':
|
||||
return 'lines'
|
||||
default:
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
|
||||
// prevent access to non-validated ledger versions
|
||||
class RestrictedConnection extends Connection {
|
||||
export class RestrictedConnection extends Connection {
|
||||
request(request: any, timeout?: number) {
|
||||
const ledger_index = request.ledger_index
|
||||
if (ledger_index !== undefined && ledger_index !== 'validated') {
|
||||
@@ -88,7 +119,7 @@ class RippleAPI extends EventEmitter {
|
||||
if (serverURL !== undefined) {
|
||||
this.connection = new RestrictedConnection(serverURL, options)
|
||||
this.connection.on('ledgerClosed', message => {
|
||||
this.emit('ledger', server.formatLedgerClose(message))
|
||||
this.emit('ledger', formatLedgerClose(message))
|
||||
})
|
||||
this.connection.on('error', (errorCode, errorMessage, data) => {
|
||||
this.emit('error', errorCode, errorMessage, data)
|
||||
@@ -106,6 +137,92 @@ class RippleAPI extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a simple request to the API with the given command and any
|
||||
* additional request body parameters.
|
||||
*
|
||||
* NOTE: This command is under development and should not yet be relied
|
||||
* on by external consumers.
|
||||
*/
|
||||
async _request(command: 'account_info', params: AccountInfoRequest):
|
||||
Promise<AccountInfoResponse>
|
||||
async _request(command: 'account_lines', params: AccountLinesRequest):
|
||||
Promise<AccountLinesResponse>
|
||||
async _request(command: 'account_offers', params: AccountOffersRequest):
|
||||
Promise<AccountOffersResponse>
|
||||
async _request(command: 'book_offers', params: BookOffersRequest):
|
||||
Promise<BookOffersResponse>
|
||||
async _request(command: 'gateway_balances', params: GatewayBalancesRequest):
|
||||
Promise<GatewayBalancesResponse>
|
||||
async _request(command: string, params: any = {}) {
|
||||
return this.connection.request({
|
||||
...params,
|
||||
command
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes multiple paged requests to the API to return a given number of
|
||||
* resources. __requestAll() will make multiple requests until the `limit`
|
||||
* number of resources is reached (if no `limit` is provided, a single request
|
||||
* will be made).
|
||||
*
|
||||
* If the command is unknown, an additional `collect` property is required to
|
||||
* know which response key contains the array of resources.
|
||||
*
|
||||
* NOTE: This command is under development and should not yet be relied
|
||||
* on by external consumers.
|
||||
*/
|
||||
async _requestAll(command: 'account_offers', params: AccountOffersRequest):
|
||||
Promise<AccountOffersResponse[]>
|
||||
async _requestAll(command: 'book_offers', params: BookOffersRequest):
|
||||
Promise<BookOffersResponse[]>
|
||||
async _requestAll(command: 'account_lines', params: AccountLinesRequest):
|
||||
Promise<AccountLinesResponse[]>
|
||||
async _requestAll(
|
||||
command: string,
|
||||
params: any = {},
|
||||
options: {collect?: string} = {}): Promise<any[]> {
|
||||
// The data under collection is keyed based on the command. Fail if command
|
||||
// not recognized and collection key not provided.
|
||||
const collectKey = options.collect || getCollectKeyFromCommand(command)
|
||||
if (!collectKey) {
|
||||
throw new errors.ValidationError(`no collect key for command ${command}`)
|
||||
}
|
||||
// If limit is not provided, fetches all data over multiple requests.
|
||||
// NOTE: This may return much more than needed. Set limit when possible.
|
||||
const countTo: number =
|
||||
(params.limit !== undefined) ? params.limit : Infinity
|
||||
let count: number = 0
|
||||
let marker: string = params.marker
|
||||
let lastBatchLength: number
|
||||
const results = []
|
||||
do {
|
||||
const countRemaining = clamp(countTo - count, 10, 400)
|
||||
const repeatProps = {
|
||||
...params,
|
||||
limit: countRemaining,
|
||||
marker
|
||||
}
|
||||
// NOTE: We have to generalize the `this._request()` function signature
|
||||
// here until we add support for unknown commands (since command is some
|
||||
// unknown string).
|
||||
const singleResult = await (<Function>this._request)(command, repeatProps)
|
||||
const collectedData = singleResult[collectKey]
|
||||
marker = singleResult.marker
|
||||
results.push(singleResult)
|
||||
// Make sure we handle when no data (not even an empty array) is returned.
|
||||
const isExpectedFormat = Array.isArray(collectedData)
|
||||
if (isExpectedFormat) {
|
||||
count += collectedData.length
|
||||
lastBatchLength = collectedData.length
|
||||
} else {
|
||||
lastBatchLength = 0
|
||||
}
|
||||
} while(!!marker && count < countTo && lastBatchLength !== 0)
|
||||
return results
|
||||
}
|
||||
|
||||
connect = connect
|
||||
disconnect = disconnect
|
||||
isConnected = isConnected
|
||||
@@ -136,6 +253,9 @@ class RippleAPI extends EventEmitter {
|
||||
preparePaymentChannelCreate = preparePaymentChannelCreate
|
||||
preparePaymentChannelFund = preparePaymentChannelFund
|
||||
preparePaymentChannelClaim = preparePaymentChannelClaim
|
||||
prepareCheckCreate = prepareCheckCreate
|
||||
prepareCheckCash = prepareCheckCash
|
||||
prepareCheckCancel = prepareCheckCancel
|
||||
prepareSettings = prepareSettings
|
||||
sign = sign
|
||||
combine = combine
|
||||
|
||||
@@ -13,7 +13,7 @@ function isStreamMessageType(type) {
|
||||
type === 'path_find'
|
||||
}
|
||||
|
||||
interface ConnectionOptions {
|
||||
export interface ConnectionOptions {
|
||||
trace?: boolean,
|
||||
proxy?: string
|
||||
proxyAuthorization?: string
|
||||
|
||||
@@ -4,7 +4,8 @@ import {txFlagIndices} from './txflags'
|
||||
const accountRootFlags = {
|
||||
PasswordSpent: 0x00010000, // password set fee is spent
|
||||
RequireDestTag: 0x00020000, // require a DestinationTag for payments
|
||||
RequireAuth: 0x00040000, // require a authorization to hold IOUs
|
||||
RequireAuth: 0x00040000, // require authorization to hold IOUs
|
||||
DepositAuth: 0x01000000, // require account to auth deposits
|
||||
DisallowXRP: 0x00080000, // disallow sending XRP
|
||||
DisableMaster: 0x00100000, // force regular key
|
||||
NoFreeze: 0x00200000, // permanently disallowed freezing trustlines
|
||||
@@ -16,6 +17,7 @@ const AccountFlags = {
|
||||
passwordSpent: accountRootFlags.PasswordSpent,
|
||||
requireDestinationTag: accountRootFlags.RequireDestTag,
|
||||
requireAuthorization: accountRootFlags.RequireAuth,
|
||||
depositAuth: accountRootFlags.DepositAuth,
|
||||
disallowIncomingXRP: accountRootFlags.DisallowXRP,
|
||||
disableMasterKey: accountRootFlags.DisableMaster,
|
||||
noFreeze: accountRootFlags.NoFreeze,
|
||||
@@ -26,6 +28,7 @@ const AccountFlags = {
|
||||
const AccountFlagIndices = {
|
||||
requireDestinationTag: txFlagIndices.AccountSet.asfRequireDest,
|
||||
requireAuthorization: txFlagIndices.AccountSet.asfRequireAuth,
|
||||
depositAuth: txFlagIndices.AccountSet.asfDepositAuth,
|
||||
disallowIncomingXRP: txFlagIndices.AccountSet.asfDisallowXRP,
|
||||
disableMasterKey: txFlagIndices.AccountSet.asfDisableMaster,
|
||||
enableTransactionIDTracking: txFlagIndices.AccountSet.asfAccountTxnID,
|
||||
|
||||
@@ -29,7 +29,7 @@ class RippleError extends Error {
|
||||
}
|
||||
|
||||
/* console.log in node uses util.inspect on object, and util.inspect allows
|
||||
us to cutomize its output:
|
||||
us to customize its output:
|
||||
https://nodejs.org/api/util.html#util_custom_inspect_function_on_objects */
|
||||
inspect() {
|
||||
return this.toString()
|
||||
|
||||
@@ -53,6 +53,9 @@ function loadSchemas() {
|
||||
require('./schemas/specifications/payment-channel-create.json'),
|
||||
require('./schemas/specifications/payment-channel-fund.json'),
|
||||
require('./schemas/specifications/payment-channel-claim.json'),
|
||||
require('./schemas/specifications/check-create.json'),
|
||||
require('./schemas/specifications/check-cash.json'),
|
||||
require('./schemas/specifications/check-cancel.json'),
|
||||
require('./schemas/specifications/trustline.json'),
|
||||
require('./schemas/output/sign.json'),
|
||||
require('./schemas/output/submit.json'),
|
||||
@@ -100,6 +103,9 @@ function loadSchemas() {
|
||||
require('./schemas/input/prepare-payment-channel-create.json'),
|
||||
require('./schemas/input/prepare-payment-channel-fund.json'),
|
||||
require('./schemas/input/prepare-payment-channel-claim.json'),
|
||||
require('./schemas/input/prepare-check-create.json'),
|
||||
require('./schemas/input/prepare-check-cash.json'),
|
||||
require('./schemas/input/prepare-check-cancel.json'),
|
||||
require('./schemas/input/compute-ledger-hash.json'),
|
||||
require('./schemas/input/sign.json'),
|
||||
require('./schemas/input/submit.json'),
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"properties": {
|
||||
"start": {
|
||||
"$ref": "hash256",
|
||||
"description": "If specified, this transaction will be the first transaction in the result."
|
||||
"description": "If specified, this transaction will be the first transaction in the result. You cannot use `start` with `minLedgerVersion` or `maxLedgerVersion`. When `start` is specified, these ledger versions will be determined internally."
|
||||
},
|
||||
"limit": {
|
||||
"type": "integer",
|
||||
|
||||
18
src/common/schemas/input/prepare-check-cancel.json
Normal file
18
src/common/schemas/input/prepare-check-cancel.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"title": "prepareCheckCancelParameters",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"address": {
|
||||
"$ref": "address",
|
||||
"description": "The address of the account that is creating the transaction."
|
||||
},
|
||||
"checkCancel": {
|
||||
"$ref": "checkCancel",
|
||||
"description": "The specification of the Check cancellation to prepare."
|
||||
},
|
||||
"instructions": {"$ref": "instructions"}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": ["address", "checkCancel"]
|
||||
}
|
||||
18
src/common/schemas/input/prepare-check-cash.json
Normal file
18
src/common/schemas/input/prepare-check-cash.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"title": "prepareCheckCashParameters",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"address": {
|
||||
"$ref": "address",
|
||||
"description": "The address of the account that is creating the transaction."
|
||||
},
|
||||
"checkCash": {
|
||||
"$ref": "checkCash",
|
||||
"description": "The specification of the Check cash to prepare."
|
||||
},
|
||||
"instructions": {"$ref": "instructions"}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": ["address", "checkCash"]
|
||||
}
|
||||
18
src/common/schemas/input/prepare-check-create.json
Normal file
18
src/common/schemas/input/prepare-check-create.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"title": "prepareCheckCreateParameters",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"address": {
|
||||
"$ref": "address",
|
||||
"description": "The address of the account that is creating the transaction."
|
||||
},
|
||||
"checkCreate": {
|
||||
"$ref": "checkCreate",
|
||||
"description": "The specification of the Check create creation to prepare."
|
||||
},
|
||||
"instructions": {"$ref": "instructions"}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": ["address", "checkCreate"]
|
||||
}
|
||||
@@ -3,41 +3,25 @@
|
||||
"title": "settingsPlusMemos",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"passwordSpent": {
|
||||
"defaultRipple": {
|
||||
"type": "boolean",
|
||||
"description": "Indicates that the account has used its free SetRegularKey transaction."
|
||||
"description": "Enable [rippling](https://ripple.com/build/understanding-the-noripple-flag/) on this account’s trust lines by default. (New in [rippled 0.27.3](https://github.com/ripple/rippled/releases/tag/0.27.3))"
|
||||
},
|
||||
"requireDestinationTag": {
|
||||
"depositAuth": {
|
||||
"type": "boolean",
|
||||
"description": "Requires incoming payments to specify a destination tag."
|
||||
},
|
||||
"requireAuthorization": {
|
||||
"type": "boolean",
|
||||
"description": "If set, this account must individually approve other users in order for those users to hold this account’s issuances."
|
||||
},
|
||||
"disallowIncomingXRP": {
|
||||
"type": "boolean",
|
||||
"description": "Indicates that client applications should not send XRP to this account. Not enforced by rippled."
|
||||
"description": "Enable [Deposit Authorization](https://ripple.com/build/deposit-authorization/) on this account. If set, transactions cannot send value of any kind to this account unless the sender of those transactions is the account itself. (Requires the [DepositAuth amendment](https://ripple.com/build/known-amendments/#depositauth))"
|
||||
},
|
||||
"disableMasterKey": {
|
||||
"type": "boolean",
|
||||
"description": "Disallows use of the master key to sign transactions for this account."
|
||||
},
|
||||
"enableTransactionIDTracking": {
|
||||
"disallowIncomingXRP": {
|
||||
"type": "boolean",
|
||||
"description": "Track the ID of this account’s most recent transaction."
|
||||
"description": "Indicates that client applications should not send XRP to this account. Not enforced by rippled."
|
||||
},
|
||||
"noFreeze": {
|
||||
"type": "boolean",
|
||||
"description": "Permanently give up the ability to freeze individual trust lines. This flag can never be disabled after being enabled."
|
||||
},
|
||||
"globalFreeze": {
|
||||
"type": "boolean",
|
||||
"description": "Freeze all assets issued by this account."
|
||||
},
|
||||
"defaultRipple": {
|
||||
"type": "boolean",
|
||||
"description": "Enable [rippling](https://ripple.com/knowledge_center/understanding-the-noripple-flag/) on this account’s trust lines by default. (New in [rippled 0.27.3](https://github.com/ripple/rippled/releases/tag/0.27.3))"
|
||||
"domain": {
|
||||
"type": "string",
|
||||
"description": " The domain that owns this account, as a hexadecimal string representing the ASCII for the domain in lowercase."
|
||||
},
|
||||
"emailHash": {
|
||||
"description": "Hash of an email address to be used for generating an avatar image. Conventionally, clients use Gravatar to display this image. Use `null` to clear.",
|
||||
@@ -46,20 +30,26 @@
|
||||
{"$ref": "hash128"}
|
||||
]
|
||||
},
|
||||
"enableTransactionIDTracking": {
|
||||
"type": "boolean",
|
||||
"description": "Track the ID of this account’s most recent transaction."
|
||||
},
|
||||
"globalFreeze": {
|
||||
"type": "boolean",
|
||||
"description": "Freeze all assets issued by this account."
|
||||
},
|
||||
"memos": {"$ref": "memos"},
|
||||
"messageKey": {
|
||||
"type": "string",
|
||||
"description": "Public key for sending encrypted messages to this account. Conventionally, it should be a secp256k1 key, the same encryption that is used by the rest of Ripple."
|
||||
},
|
||||
"domain": {
|
||||
"type": "string",
|
||||
"description": " The domain that owns this account, as a hexadecimal string representing the ASCII for the domain in lowercase."
|
||||
"noFreeze": {
|
||||
"type": "boolean",
|
||||
"description": "Permanently give up the ability to freeze individual trust lines. This flag can never be disabled after being enabled."
|
||||
},
|
||||
"transferRate": {
|
||||
"description": " The fee to charge when users transfer this account’s issuances, as the decimal amount that must be sent to deliver 1 unit. Has precision up to 9 digits beyond the decimal point. Use `null` to set no fee.",
|
||||
"oneOf": [
|
||||
{"type": "null"},
|
||||
{"type": "number", "minimum": 1, "maximum": 4.294967295}
|
||||
]
|
||||
"passwordSpent": {
|
||||
"type": "boolean",
|
||||
"description": "Indicates that the account has used its free SetRegularKey transaction."
|
||||
},
|
||||
"regularKey": {
|
||||
"oneOf": [
|
||||
@@ -68,6 +58,14 @@
|
||||
],
|
||||
"description": "The public key of a new keypair, to use as the regular key to this account, as a base-58-encoded string in the same format as an account address. Use `null` to remove the regular key."
|
||||
},
|
||||
"requireAuthorization": {
|
||||
"type": "boolean",
|
||||
"description": "If set, this account must individually approve other users in order for those users to hold this account’s issuances."
|
||||
},
|
||||
"requireDestinationTag": {
|
||||
"type": "boolean",
|
||||
"description": "Requires incoming payments to specify a destination tag."
|
||||
},
|
||||
"signers": {
|
||||
"type": "object",
|
||||
"description": "Settings that determine what sets of accounts can be used to sign a transaction on behalf of this account using multisigning.",
|
||||
@@ -97,7 +95,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"memos": {"$ref": "memos"}
|
||||
"transferRate": {
|
||||
"description": " The fee to charge when users transfer this account’s issuances, as the decimal amount that must be sent to deliver 1 unit. Has precision up to 9 digits beyond the decimal point. Use `null` to set no fee.",
|
||||
"oneOf": [
|
||||
{"type": "null"},
|
||||
{"type": "number", "minimum": 1, "maximum": 4.294967295}
|
||||
]
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
|
||||
@@ -4,8 +4,20 @@
|
||||
"link": "transaction-types",
|
||||
"description": "The type of the transaction.",
|
||||
"type": "string",
|
||||
"enum": ["payment", "order", "orderCancellation", "trustline", "settings",
|
||||
"escrowCreation", "escrowCancellation",
|
||||
"escrowExecution", "paymentChannelCreate",
|
||||
"paymentChannelFund", "paymentChannelClaim"]
|
||||
"enum": [
|
||||
"payment",
|
||||
"order",
|
||||
"orderCancellation",
|
||||
"trustline",
|
||||
"settings",
|
||||
"escrowCreation",
|
||||
"escrowCancellation",
|
||||
"escrowExecution",
|
||||
"paymentChannelCreate",
|
||||
"paymentChannelFund",
|
||||
"paymentChannelClaim",
|
||||
"checkCreate",
|
||||
"checkCancel",
|
||||
"checkCash"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
"title": "getTransaction",
|
||||
"link": "gettransaction",
|
||||
"properties": {
|
||||
"type": {"$ref": "transactionType"},
|
||||
"type": {
|
||||
"$ref": "transactionType"
|
||||
},
|
||||
"specification": {
|
||||
"description": "A specification that would produce the same outcome as this transaction. 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."
|
||||
},
|
||||
@@ -24,73 +26,182 @@
|
||||
"description": "The account sequence number of the transaction for the account that initiated it."
|
||||
}
|
||||
},
|
||||
"required": ["id", "address", "sequence", "type", "specification", "outcome"],
|
||||
"required": [
|
||||
"id",
|
||||
"address",
|
||||
"sequence",
|
||||
"type",
|
||||
"specification",
|
||||
"outcome"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"oneOf": [
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["payment"]},
|
||||
"specification": {"$ref": "payment"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"payment"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "payment"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["order"]},
|
||||
"specification": {"$ref": "order"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"order"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "order"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["orderCancellation"]},
|
||||
"specification": {"$ref": "orderCancellation"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"orderCancellation"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "orderCancellation"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["trustline"]},
|
||||
"specification": {"$ref": "trustline"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"trustline"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "trustline"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["settings"]},
|
||||
"specification": {"$ref": "getSettings"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"settings"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "getSettings"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["escrowCreation"]},
|
||||
"specification": {"$ref": "escrowCreation"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"checkCreate"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "checkCreate"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["escrowCancellation"]},
|
||||
"specification": {"$ref": "escrowCancellation"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"checkCancel"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "checkCancel"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["escrowExecution"]},
|
||||
"specification": {"$ref": "escrowExecution"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"checkCash"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "checkCash"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["paymentChannelCreate"]},
|
||||
"specification": {"$ref": "paymentChannelCreate"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"escrowCreation"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "escrowCreation"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["paymentChannelFund"]},
|
||||
"specification": {"$ref": "paymentChannelFund"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"escrowCancellation"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "escrowCancellation"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {"enum": ["paymentChannelClaim"]},
|
||||
"specification": {"$ref": "paymentChannelClaim"}
|
||||
"type": {
|
||||
"enum": [
|
||||
"escrowExecution"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "escrowExecution"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {
|
||||
"enum": [
|
||||
"paymentChannelCreate"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "paymentChannelCreate"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {
|
||||
"enum": [
|
||||
"paymentChannelFund"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "paymentChannelFund"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"type": {
|
||||
"enum": [
|
||||
"paymentChannelClaim"
|
||||
]
|
||||
},
|
||||
"specification": {
|
||||
"$ref": "paymentChannelClaim"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -2,5 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"title": "getTransactions",
|
||||
"type": "array",
|
||||
"items": {"$ref": "getTransaction"}
|
||||
"items": {
|
||||
"$ref": "getTransaction"
|
||||
}
|
||||
}
|
||||
|
||||
14
src/common/schemas/specifications/check-cancel.json
Normal file
14
src/common/schemas/specifications/check-cancel.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"title": "checkCancel",
|
||||
"link": "check-cancel",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"checkID": {
|
||||
"$ref": "hash256",
|
||||
"description": "The ID of the Check ledger object to cancel, as a 64-character hexadecimal string."
|
||||
}
|
||||
},
|
||||
"required": ["checkID"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
26
src/common/schemas/specifications/check-cash.json
Normal file
26
src/common/schemas/specifications/check-cash.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"title": "checkCash",
|
||||
"link": "check-cash",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"checkID": {
|
||||
"$ref": "hash256",
|
||||
"description": "The ID of the Check ledger object to cash, as a 64-character hexadecimal string."
|
||||
},
|
||||
"amount": {
|
||||
"$ref": "laxAmount",
|
||||
"description": "Redeem the Check for exactly this amount, if possible. The currency must match that of the sendMax of the corresponding CheckCreate transaction. You must provide either this field or deliverMin."
|
||||
},
|
||||
"deliverMin": {
|
||||
"$ref": "laxAmount",
|
||||
"description": "Redeem the Check for at least this amount and for as much as possible. The currency must match that of the sendMax of the corresponding CheckCreate transaction. You must provide either this field or amount."
|
||||
}
|
||||
},
|
||||
"required": ["checkID"],
|
||||
"oneOf": [
|
||||
{"required": ["amount"]},
|
||||
{"required": ["deliverMin"]}
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
31
src/common/schemas/specifications/check-create.json
Normal file
31
src/common/schemas/specifications/check-create.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"title": "checkCreate",
|
||||
"link": "check-create",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"destination": {
|
||||
"$ref": "address",
|
||||
"description": "Address of the account that can cash the check."
|
||||
},
|
||||
"sendMax": {
|
||||
"$ref": "laxAmount",
|
||||
"description": "Amount of source currency the check is allowed to debit the sender, including transfer fees on non-XRP currencies."
|
||||
},
|
||||
"destinationTag": {
|
||||
"$ref": "tag",
|
||||
"description": "Destination tag that identifies the reason for the check, or a hosted recipient to pay."
|
||||
},
|
||||
"expiration": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"description": "Time after which the check is no longer valid."
|
||||
},
|
||||
"invoiceID": {
|
||||
"$ref": "hash256",
|
||||
"description": "256-bit hash, as a 64-character hexadecimal string, representing a specific reason or identifier for this check."
|
||||
}
|
||||
},
|
||||
"required": ["destination", "sendMax"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
@@ -22,11 +22,11 @@
|
||||
"$ref": "hash256"
|
||||
},
|
||||
"allowPartialPayment": {
|
||||
"description": "A boolean that, if set to true, indicates that this payment should go through even if the whole amount cannot be delivered because of a lack of liquidity or funds in the source account account",
|
||||
"description": "If true, this payment should proceed even if the whole amount cannot be delivered due to a lack of liquidity or a lack of funds in the source account.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"noDirectRipple": {
|
||||
"description": "A boolean that can be set to true if paths are specified and the sender would like the Ripple Network to disregard any direct paths from the source account to the destination account. This may be used to take advantage of an arbitrage opportunity or by gateways wishing to issue balances from a hot wallet to a user who has mistakenly set a trustline directly to the hot wallet",
|
||||
"description": "If true and paths are specified, the sender would like the XRP Ledger to disregard any direct paths from the source account to the destination account. This may be used to take advantage of an arbitrage opportunity or by gateways wishing to issue balances from a hot wallet to a user who has mistakenly set a trustline directly to the hot wallet.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"limitQuality": {
|
||||
|
||||
@@ -55,7 +55,8 @@ const txFlagIndices = {
|
||||
asfAccountTxnID: 5,
|
||||
asfNoFreeze: 6,
|
||||
asfGlobalFreeze: 7,
|
||||
asfDefaultRipple: 8
|
||||
asfDefaultRipple: 8,
|
||||
asfDepositAuth: 9
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
|
||||
export type RippledAmountIOU = {
|
||||
currency: string,
|
||||
value: string,
|
||||
issuer?: string
|
||||
}
|
||||
|
||||
export type RippledAmount = string | RippledAmountIOU
|
||||
|
||||
|
||||
export type Amount = {
|
||||
value: string,
|
||||
currency: string,
|
||||
issuer?: string,
|
||||
counterparty?: string
|
||||
}
|
||||
|
||||
|
||||
// Amount where counterparty and value are optional
|
||||
export type LaxLaxAmount = {
|
||||
currency: string,
|
||||
value?: string,
|
||||
issuer?: string,
|
||||
counterparty?: string
|
||||
}
|
||||
|
||||
// A currency-counterparty pair, or just currency if it's XRP
|
||||
export type Issue = {
|
||||
currency: string,
|
||||
issuer?: string,
|
||||
counterparty?: string
|
||||
}
|
||||
|
||||
export type Adjustment = {
|
||||
address: string,
|
||||
amount: Amount,
|
||||
tag?: number
|
||||
}
|
||||
|
||||
export type MaxAdjustment = {
|
||||
address: string,
|
||||
maxAmount: Amount,
|
||||
tag?: number
|
||||
}
|
||||
|
||||
export type MinAdjustment = {
|
||||
address: string,
|
||||
minAmount: Amount,
|
||||
tag?: number
|
||||
}
|
||||
|
||||
export type Memo = {
|
||||
type?: string,
|
||||
format?: string,
|
||||
data?: string
|
||||
}
|
||||
|
||||
export type ApiMemo = {
|
||||
MemoData?: string,
|
||||
MemoType?: string,
|
||||
MemoFormat?: string
|
||||
}
|
||||
|
||||
36
src/common/types/commands/account_info.ts
Normal file
36
src/common/types/commands/account_info.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import {AccountRoot, SignerList} from '../objects'
|
||||
|
||||
export interface AccountInfoRequest {
|
||||
account: string,
|
||||
strict?: boolean,
|
||||
queue?: boolean,
|
||||
ledger_hash?: string,
|
||||
ledger_index?: number | ('validated' | 'closed' | 'current'),
|
||||
signer_lists?: boolean
|
||||
}
|
||||
|
||||
export interface AccountInfoResponse {
|
||||
account_data: AccountRoot,
|
||||
signer_lists?: SignerList[],
|
||||
ledger_current_index?: number,
|
||||
ledger_index?: number,
|
||||
queue_data?: QueueData,
|
||||
validated?: boolean
|
||||
}
|
||||
|
||||
export interface QueueData {
|
||||
txn_count: number,
|
||||
auth_change_queued?: boolean,
|
||||
lowest_sequence?: number,
|
||||
highest_sequence?: number,
|
||||
max_spend_drops_total?: string,
|
||||
transactions?: TransactionData[]
|
||||
}
|
||||
|
||||
export interface TransactionData {
|
||||
auth_change?: boolean,
|
||||
fee?: string,
|
||||
fee_level?: string,
|
||||
max_spend_drops?: string,
|
||||
seq?: number
|
||||
}
|
||||
19
src/common/types/commands/account_lines.ts
Normal file
19
src/common/types/commands/account_lines.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import {Trustline} from '../objects'
|
||||
|
||||
export interface AccountLinesRequest {
|
||||
account: string,
|
||||
ledger_hash?: string,
|
||||
ledger_index?: number | ('validated' | 'closed' | 'current'),
|
||||
peer?: string,
|
||||
limit?: number,
|
||||
marker?: any,
|
||||
}
|
||||
|
||||
export interface AccountLinesResponse {
|
||||
account: string,
|
||||
lines: Trustline[],
|
||||
ledger_current_index?: number,
|
||||
ledger_index?: number,
|
||||
ledger_hash?: string,
|
||||
marker?: any,
|
||||
}
|
||||
27
src/common/types/commands/account_offers.ts
Normal file
27
src/common/types/commands/account_offers.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import {RippledAmount} from '../objects'
|
||||
|
||||
export interface AccountOffersRequest {
|
||||
account: string,
|
||||
ledger_hash?: string,
|
||||
ledger_index?: number | ('validated' | 'closed' | 'current'),
|
||||
limit?: number,
|
||||
marker?: any,
|
||||
}
|
||||
|
||||
export interface AccountOffersResponse {
|
||||
account: string,
|
||||
ledger_hash?: string,
|
||||
ledger_current_index?: number,
|
||||
ledger_index?: number,
|
||||
marker?: any,
|
||||
offers?: AccountOffer[],
|
||||
}
|
||||
|
||||
export interface AccountOffer {
|
||||
seq: number,
|
||||
flags: number,
|
||||
taker_gets: RippledAmount,
|
||||
taker_pays: RippledAmount,
|
||||
quality: string,
|
||||
expiration?: number
|
||||
}
|
||||
30
src/common/types/commands/book_offers.ts
Normal file
30
src/common/types/commands/book_offers.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import {
|
||||
TakerRequestAmount,
|
||||
OfferCreateTransaction,
|
||||
RippledAmount
|
||||
} from '../objects'
|
||||
|
||||
export interface BookOffersRequest {
|
||||
taker?: string,
|
||||
taker_gets: TakerRequestAmount,
|
||||
taker_pays: TakerRequestAmount,
|
||||
ledger_hash?: string,
|
||||
ledger_index?: number | ('validated' | 'closed' | 'current'),
|
||||
limit?: number,
|
||||
marker?: any
|
||||
}
|
||||
|
||||
export interface BookOffersResponse {
|
||||
offers: OrderBookOffer[],
|
||||
ledger_hash?: string,
|
||||
ledger_current_index?: number,
|
||||
ledger_index?: number,
|
||||
marker?: any
|
||||
}
|
||||
|
||||
export interface OrderBookOffer extends OfferCreateTransaction {
|
||||
quality?: number
|
||||
owner_funds?: string,
|
||||
taker_gets_funded?: RippledAmount,
|
||||
taker_pays_funded?: RippledAmount
|
||||
}
|
||||
20
src/common/types/commands/gateway_balances.ts
Normal file
20
src/common/types/commands/gateway_balances.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import {Amount} from '../objects'
|
||||
|
||||
|
||||
export interface GatewayBalancesRequest {
|
||||
account: string,
|
||||
strict?: boolean,
|
||||
hotwallet: string|Array<string>,
|
||||
ledger_hash?: string,
|
||||
ledger_index?: number | ('validated' | 'closed' | 'current')
|
||||
}
|
||||
|
||||
export interface GatewayBalancesResponse {
|
||||
account: string,
|
||||
obligations?: {[currency: string]: string},
|
||||
balances?: {[address: string]: Amount[]},
|
||||
assets?: {[address: string]: Amount[]},
|
||||
ledger_hash?: string,
|
||||
ledger_current_index?: number,
|
||||
ledger_index?: number
|
||||
}
|
||||
5
src/common/types/commands/index.ts
Normal file
5
src/common/types/commands/index.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export * from './account_info'
|
||||
export * from './account_lines'
|
||||
export * from './account_offers'
|
||||
export * from './book_offers'
|
||||
export * from './gateway_balances'
|
||||
17
src/common/types/objects/accounts.ts
Normal file
17
src/common/types/objects/accounts.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
export interface AccountRoot {
|
||||
LedgerEntryType: string,
|
||||
Account: string,
|
||||
Flags: number,
|
||||
Sequence: number,
|
||||
Balance: string,
|
||||
OwnerCount: number,
|
||||
PreviousTxnID: string,
|
||||
PreviousTxnLgrSeq: number,
|
||||
AccountTxnID?: string,
|
||||
RegularKey?: string,
|
||||
EmailHash?: string,
|
||||
MessageKey?: string
|
||||
TickSize?: number,
|
||||
TransferRate?: number,
|
||||
Domain?: string
|
||||
}
|
||||
19
src/common/types/objects/adjustments.ts
Normal file
19
src/common/types/objects/adjustments.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import {Amount} from './amounts'
|
||||
|
||||
export type Adjustment = {
|
||||
address: string,
|
||||
amount: Amount,
|
||||
tag?: number
|
||||
}
|
||||
|
||||
export type MaxAdjustment = {
|
||||
address: string,
|
||||
maxAmount: Amount,
|
||||
tag?: number
|
||||
}
|
||||
|
||||
export type MinAdjustment = {
|
||||
address: string,
|
||||
minAmount: Amount,
|
||||
tag?: number
|
||||
}
|
||||
28
src/common/types/objects/amounts.ts
Normal file
28
src/common/types/objects/amounts.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
export type Amount = {
|
||||
value: string,
|
||||
currency: string,
|
||||
issuer?: string,
|
||||
counterparty?: string
|
||||
}
|
||||
|
||||
|
||||
export type RippledAmount = string | Amount
|
||||
|
||||
/**
|
||||
* Specification of which currency the account taking the offer would pay/
|
||||
* receive, as an object with currency and issuer fields (omit issuer for XRP).
|
||||
* Similar to currency amounts.
|
||||
*/
|
||||
export interface TakerRequestAmount {
|
||||
currency: string
|
||||
issuer?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* A currency-counterparty pair, or just currency if it's XRP.
|
||||
*/
|
||||
export type Issue = {
|
||||
currency: string,
|
||||
issuer?: string,
|
||||
counterparty?: string
|
||||
}
|
||||
7
src/common/types/objects/index.ts
Normal file
7
src/common/types/objects/index.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export * from './accounts'
|
||||
export * from './adjustments'
|
||||
export * from './amounts'
|
||||
export * from './memos'
|
||||
export * from './signers'
|
||||
export * from './transactions'
|
||||
export * from './trustlines'
|
||||
6
src/common/types/objects/memos.ts
Normal file
6
src/common/types/objects/memos.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
export type Memo = {
|
||||
type?: string,
|
||||
format?: string,
|
||||
data?: string
|
||||
}
|
||||
14
src/common/types/objects/signers.ts
Normal file
14
src/common/types/objects/signers.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
export interface SignerList {
|
||||
LedgerEntryType: string,
|
||||
OwnerNode: string,
|
||||
SignerQuorum: number,
|
||||
SignerEntries: SignerEntry[],
|
||||
SignerListID: number,
|
||||
PreviousTxnID: string,
|
||||
PreviousTxnLgrSeq: number
|
||||
}
|
||||
|
||||
export interface SignerEntry {
|
||||
Account: string,
|
||||
SignerWeight: number
|
||||
}
|
||||
22
src/common/types/objects/transactions.ts
Normal file
22
src/common/types/objects/transactions.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import {RippledAmount} from './amounts'
|
||||
import {Memo} from './memos'
|
||||
|
||||
export interface OfferCreateTransaction {
|
||||
TransactionType: 'OfferCreate',
|
||||
Account: string,
|
||||
AccountTxnID?: string,
|
||||
Fee: string,
|
||||
Field: any,
|
||||
Flags: number,
|
||||
LastLedgerSequence?: number,
|
||||
Sequence: number,
|
||||
Signers: any[],
|
||||
SigningPubKey: string,
|
||||
SourceTag?: number,
|
||||
TakerGets: RippledAmount,
|
||||
TakerPays: RippledAmount,
|
||||
TxnSignature: string,
|
||||
Expiration?: number,
|
||||
Memos?: Memo[],
|
||||
OfferSequence?: number,
|
||||
}
|
||||
42
src/common/types/objects/trustlines.ts
Normal file
42
src/common/types/objects/trustlines.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import {Memo} from './memos'
|
||||
|
||||
export interface Trustline {
|
||||
account: string,
|
||||
balance: string,
|
||||
currency: string,
|
||||
limit: string,
|
||||
limit_peer: string,
|
||||
quality_in: number,
|
||||
quality_out: number,
|
||||
no_ripple?: boolean,
|
||||
no_ripple_peer?: boolean,
|
||||
freeze?: boolean,
|
||||
freeze_peer?: boolean,
|
||||
authorized?: boolean,
|
||||
peer_authorized?: boolean,
|
||||
}
|
||||
|
||||
export type FormattedTrustlineSpecification = {
|
||||
currency: string,
|
||||
counterparty: string,
|
||||
limit: string,
|
||||
qualityIn?: number,
|
||||
qualityOut?: number,
|
||||
ripplingDisabled?: boolean,
|
||||
authorized?: boolean,
|
||||
frozen?: boolean,
|
||||
memos?: Memo[]
|
||||
}
|
||||
|
||||
export type FormattedTrustline = {
|
||||
specification: FormattedTrustlineSpecification,
|
||||
counterparty: {
|
||||
limit: string,
|
||||
ripplingDisabled?: boolean,
|
||||
frozen?: boolean,
|
||||
authorized?: boolean
|
||||
},
|
||||
state: {
|
||||
balance: string
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ import * as _ from 'lodash'
|
||||
import BigNumber from 'bignumber.js'
|
||||
const {deriveKeypair} = require('ripple-keypairs')
|
||||
|
||||
import {Amount, RippledAmount} from './types'
|
||||
import {Amount, RippledAmount} from './types/objects'
|
||||
|
||||
function isValidSecret(secret: string): boolean {
|
||||
try {
|
||||
|
||||
@@ -89,6 +89,15 @@ _.partial(schemaValidate, 'preparePaymentChannelFundParameters')
|
||||
export const preparePaymentChannelClaim =
|
||||
_.partial(schemaValidate, 'preparePaymentChannelClaimParameters')
|
||||
|
||||
export const prepareCheckCreate =
|
||||
_.partial(schemaValidate, 'prepareCheckCreateParameters')
|
||||
|
||||
export const prepareCheckCash =
|
||||
_.partial(schemaValidate, 'prepareCheckCashParameters')
|
||||
|
||||
export const prepareCheckCancel =
|
||||
_.partial(schemaValidate, 'prepareCheckCancelParameters')
|
||||
|
||||
export const sign =
|
||||
_.partial(schemaValidate, 'signParameters')
|
||||
|
||||
|
||||
@@ -1,31 +1,12 @@
|
||||
import {validate, removeUndefined, dropsToXrp} from '../common'
|
||||
import {RippleAPI} from '../api'
|
||||
import {AccountInfoResponse} from '../common/types/commands/account_info'
|
||||
|
||||
type AccountData = {
|
||||
Sequence: number,
|
||||
Account: string,
|
||||
Balance: string,
|
||||
Flags: number,
|
||||
LedgerEntryType: string,
|
||||
OwnerCount: number,
|
||||
PreviousTxnID: string,
|
||||
AccountTxnID?: string,
|
||||
PreviousTxnLgrSeq: number,
|
||||
index: string
|
||||
}
|
||||
|
||||
type AccountDataResponse = {
|
||||
account_data: AccountData,
|
||||
ledger_current_index?: number,
|
||||
ledger_hash?: string,
|
||||
ledger_index: number,
|
||||
validated: boolean
|
||||
}
|
||||
|
||||
type AccountInfoOptions = {
|
||||
export type GetAccountInfoOptions = {
|
||||
ledgerVersion?: number
|
||||
}
|
||||
|
||||
type AccountInfoResponse = {
|
||||
export type FormattedGetAccountInfoResponse = {
|
||||
sequence: number,
|
||||
xrpBalance: string,
|
||||
ownerCount: number,
|
||||
@@ -34,7 +15,9 @@ type AccountInfoResponse = {
|
||||
previousAffectingTransactionLedgerVersion: number
|
||||
}
|
||||
|
||||
function formatAccountInfo(response: AccountDataResponse) {
|
||||
function formatAccountInfo(
|
||||
response: AccountInfoResponse
|
||||
): FormattedGetAccountInfoResponse {
|
||||
const data = response.account_data
|
||||
return removeUndefined({
|
||||
sequence: data.Sequence,
|
||||
@@ -46,17 +29,16 @@ function formatAccountInfo(response: AccountDataResponse) {
|
||||
})
|
||||
}
|
||||
|
||||
function getAccountInfo(address: string, options: AccountInfoOptions = {}
|
||||
): Promise<AccountInfoResponse> {
|
||||
export default async function getAccountInfo(
|
||||
this: RippleAPI, address: string, options: GetAccountInfoOptions = {}
|
||||
): Promise<FormattedGetAccountInfoResponse> {
|
||||
// 1. Validate
|
||||
validate.getAccountInfo({address, options})
|
||||
|
||||
const request = {
|
||||
command: 'account_info',
|
||||
// 2. Make Request
|
||||
const response = await this._request('account_info', {
|
||||
account: address,
|
||||
ledger_index: options.ledgerVersion || 'validated'
|
||||
}
|
||||
|
||||
return this.connection.request(request).then(formatAccountInfo)
|
||||
})
|
||||
// 3. Return Formatted Response
|
||||
return formatAccountInfo(response)
|
||||
}
|
||||
|
||||
export default getAccountInfo
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
import * as _ from 'lodash'
|
||||
import * as utils from './utils'
|
||||
import {validate} from '../common'
|
||||
import {Amount} from '../common/types'
|
||||
import {Amount} from '../common/types/objects'
|
||||
import {ensureLedgerVersion} from './utils'
|
||||
import {RippleAPI} from '../api'
|
||||
|
||||
type BalanceSheetOptions = {
|
||||
export type BalanceSheetOptions = {
|
||||
excludeAddresses?: Array<string>,
|
||||
ledgerVersion?: number
|
||||
}
|
||||
|
||||
type GetBalanceSheet = {
|
||||
export type GetBalanceSheet = {
|
||||
balances?: Array<Amount>,
|
||||
assets?: Array<Amount>,
|
||||
obligations?: Array<{
|
||||
@@ -46,21 +47,21 @@ function formatBalanceSheet(balanceSheet): GetBalanceSheet {
|
||||
return result
|
||||
}
|
||||
|
||||
function getBalanceSheet(address: string, options: BalanceSheetOptions = {}
|
||||
async function getBalanceSheet(
|
||||
this: RippleAPI, address: string, options: BalanceSheetOptions = {}
|
||||
): Promise<GetBalanceSheet> {
|
||||
// 1. Validate
|
||||
validate.getBalanceSheet({address, options})
|
||||
|
||||
return utils.ensureLedgerVersion.call(this, options).then(_options => {
|
||||
const request = {
|
||||
command: 'gateway_balances',
|
||||
account: address,
|
||||
strict: true,
|
||||
hotwallet: _options.excludeAddresses,
|
||||
ledger_index: _options.ledgerVersion
|
||||
}
|
||||
|
||||
return this.connection.request(request).then(formatBalanceSheet)
|
||||
options = await ensureLedgerVersion.call(this, options)
|
||||
// 2. Make Request
|
||||
const response = await this._request('gateway_balances', {
|
||||
account: address,
|
||||
strict: true,
|
||||
hotwallet: options.excludeAddresses,
|
||||
ledger_index: options.ledgerVersion
|
||||
})
|
||||
// 3. Return Formatted Response
|
||||
return formatBalanceSheet(response)
|
||||
}
|
||||
|
||||
export default getBalanceSheet
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
import * as utils from './utils'
|
||||
import {validate} from '../common'
|
||||
import {Connection} from '../common'
|
||||
import {TrustlinesOptions, Trustline} from './trustlines-types'
|
||||
import {GetTrustlinesOptions} from './trustlines'
|
||||
import {FormattedTrustline} from '../common/types/objects/trustlines'
|
||||
|
||||
|
||||
type Balance = {
|
||||
export type Balance = {
|
||||
value: string,
|
||||
currency: string,
|
||||
counterparty?: string
|
||||
}
|
||||
|
||||
type GetBalances = Array<Balance>
|
||||
export type GetBalances = Array<Balance>
|
||||
|
||||
function getTrustlineBalanceAmount(trustline: Trustline) {
|
||||
function getTrustlineBalanceAmount(trustline: FormattedTrustline) {
|
||||
return {
|
||||
currency: trustline.specification.currency,
|
||||
counterparty: trustline.specification.counterparty,
|
||||
@@ -46,7 +47,7 @@ function getLedgerVersionHelper(connection: Connection, optionValue?: number
|
||||
return connection.getLedgerVersion()
|
||||
}
|
||||
|
||||
function getBalances(address: string, options: TrustlinesOptions = {}
|
||||
function getBalances(address: string, options: GetTrustlinesOptions = {}
|
||||
): Promise<GetBalances> {
|
||||
validate.getTrustlines({address, options})
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import {validate} from '../common'
|
||||
import parseLedger from './parse/ledger'
|
||||
import {GetLedger} from './types'
|
||||
|
||||
type LedgerOptions = {
|
||||
export type LedgerOptions = {
|
||||
ledgerVersion?: number,
|
||||
includeAllData?: boolean,
|
||||
includeTransactions?: boolean,
|
||||
|
||||
@@ -2,16 +2,22 @@ import * as _ from 'lodash'
|
||||
import * as utils from './utils'
|
||||
import parseOrderbookOrder from './parse/orderbook-order'
|
||||
import {validate} from '../common'
|
||||
import {Connection} from '../common'
|
||||
import {OrdersOptions, OrderSpecification} from './types'
|
||||
import {Amount, Issue} from '../common/types'
|
||||
import {OrderSpecification} from './types'
|
||||
import {Amount, Issue} from '../common/types/objects'
|
||||
import {RippleAPI} from '../api'
|
||||
import {OfferCreateTransaction} from '../common/types/objects'
|
||||
|
||||
type Orderbook = {
|
||||
export type OrdersOptions = {
|
||||
limit?: number,
|
||||
ledgerVersion?: number
|
||||
}
|
||||
|
||||
export type Orderbook = {
|
||||
base: Issue,
|
||||
counter: Issue
|
||||
}
|
||||
|
||||
type OrderbookItem = {
|
||||
export type OrderbookItem = {
|
||||
specification: OrderSpecification,
|
||||
properties: {
|
||||
maker: string,
|
||||
@@ -24,33 +30,13 @@ type OrderbookItem = {
|
||||
}
|
||||
}
|
||||
|
||||
type OrderbookOrders = Array<OrderbookItem>
|
||||
export type OrderbookOrders = Array<OrderbookItem>
|
||||
|
||||
type GetOrderbook = {
|
||||
export type GetOrderbook = {
|
||||
bids: OrderbookOrders,
|
||||
asks: OrderbookOrders
|
||||
}
|
||||
|
||||
// account is to specify a "perspective", which affects which unfunded offers
|
||||
// are returned
|
||||
function getBookOffers(connection: Connection, account: string,
|
||||
ledgerVersion: number|undefined, limit: number|undefined, takerGets: Issue,
|
||||
takerPays: Issue
|
||||
): Promise<Object[]> {
|
||||
const orderData = utils.renameCounterpartyToIssuerInOrder({
|
||||
taker_gets: takerGets,
|
||||
taker_pays: takerPays
|
||||
})
|
||||
return connection.request({
|
||||
command: 'book_offers',
|
||||
taker_gets: orderData.taker_gets,
|
||||
taker_pays: orderData.taker_pays,
|
||||
ledger_index: ledgerVersion || 'validated',
|
||||
limit: limit,
|
||||
taker: account
|
||||
}).then(data => data.offers)
|
||||
}
|
||||
|
||||
function isSameIssue(a: Amount, b: Amount) {
|
||||
return a.currency === b.currency && a.counterparty === b.counterparty
|
||||
}
|
||||
@@ -75,7 +61,8 @@ function alignOrder(base: Amount, order: OrderbookItem) {
|
||||
return isSameIssue(quantity, base) ? order : flipOrder(order)
|
||||
}
|
||||
|
||||
function formatBidsAndAsks(orderbook: Orderbook, offers) {
|
||||
function formatBidsAndAsks(
|
||||
orderbook: Orderbook, offers: OfferCreateTransaction[]) {
|
||||
// the "base" currency is the currency that you are buying or selling
|
||||
// the "counter" is the currency that the "base" is priced in
|
||||
// a "bid"/"ask" is an order to buy/sell the base, respectively
|
||||
@@ -93,17 +80,42 @@ function formatBidsAndAsks(orderbook: Orderbook, offers) {
|
||||
return {bids, asks}
|
||||
}
|
||||
|
||||
function getOrderbook(address: string, orderbook: Orderbook,
|
||||
options: OrdersOptions = {}
|
||||
): Promise<GetOrderbook> {
|
||||
validate.getOrderbook({address, orderbook, options})
|
||||
|
||||
const getter = _.partial(getBookOffers, this.connection, address,
|
||||
options.ledgerVersion, options.limit)
|
||||
const getOffers = _.partial(getter, orderbook.base, orderbook.counter)
|
||||
const getReverseOffers = _.partial(getter, orderbook.counter, orderbook.base)
|
||||
return Promise.all([getOffers(), getReverseOffers()]).then(data =>
|
||||
formatBidsAndAsks(orderbook, _.flatten(data)))
|
||||
// account is to specify a "perspective", which affects which unfunded offers
|
||||
// are returned
|
||||
async function makeRequest(
|
||||
api: RippleAPI, taker: string, options: OrdersOptions,
|
||||
takerGets: Issue, takerPays: Issue
|
||||
) {
|
||||
const orderData = utils.renameCounterpartyToIssuerInOrder({
|
||||
taker_gets: takerGets,
|
||||
taker_pays: takerPays
|
||||
})
|
||||
return api._requestAll('book_offers', {
|
||||
taker_gets: orderData.taker_gets,
|
||||
taker_pays: orderData.taker_pays,
|
||||
ledger_index: options.ledgerVersion || 'validated',
|
||||
limit: options.limit,
|
||||
taker
|
||||
})
|
||||
}
|
||||
|
||||
export default getOrderbook
|
||||
export default async function getOrderbook(
|
||||
this: RippleAPI,
|
||||
address: string,
|
||||
orderbook: Orderbook,
|
||||
options: OrdersOptions = {}
|
||||
): Promise<GetOrderbook> {
|
||||
// 1. Validate
|
||||
validate.getOrderbook({address, orderbook, options})
|
||||
// 2. Make Request
|
||||
const [directOfferResults, reverseOfferResults] = await Promise.all([
|
||||
makeRequest(this, address, options, orderbook.base, orderbook.counter),
|
||||
makeRequest(this, address, options, orderbook.counter, orderbook.base)
|
||||
])
|
||||
// 3. Return Formatted Response
|
||||
const directOffers = _.flatMap(directOfferResults,
|
||||
directOfferResult => directOfferResult.offers)
|
||||
const reverseOffers = _.flatMap(reverseOfferResults,
|
||||
reverseOfferResult => reverseOfferResult.offers)
|
||||
return formatBidsAndAsks(orderbook, [...directOffers, ...reverseOffers])
|
||||
}
|
||||
|
||||
@@ -1,37 +1,39 @@
|
||||
import * as _ from 'lodash'
|
||||
import * as utils from './utils'
|
||||
import {validate} from '../common'
|
||||
import {Connection} from '../common'
|
||||
import parseAccountOrder from './parse/account-order'
|
||||
import {OrdersOptions, Order} from './types'
|
||||
import {Order} from './types'
|
||||
import {RippleAPI} from '../api'
|
||||
import {AccountOffersResponse} from '../common/types/commands/account_offers'
|
||||
|
||||
type GetOrders = Array<Order>
|
||||
|
||||
function requestAccountOffers(connection: Connection, address: string,
|
||||
ledgerVersion: number, marker: string, limit: number
|
||||
): Promise<Object> {
|
||||
return connection.request({
|
||||
command: 'account_offers',
|
||||
account: address,
|
||||
marker: marker,
|
||||
limit: utils.clamp(limit, 10, 400),
|
||||
ledger_index: ledgerVersion
|
||||
}).then(data => ({
|
||||
marker: data.marker,
|
||||
results: data.offers.map(_.partial(parseAccountOrder, address))
|
||||
}))
|
||||
export type GetOrdersOptions = {
|
||||
limit?: number,
|
||||
ledgerVersion?: number
|
||||
}
|
||||
|
||||
function getOrders(address: string, options: OrdersOptions = {}
|
||||
): Promise<GetOrders> {
|
||||
function formatResponse(
|
||||
address: string, responses: AccountOffersResponse[]
|
||||
): Order[] {
|
||||
let orders: Order[] = []
|
||||
for (const response of responses) {
|
||||
const offers = response.offers.map(offer => {
|
||||
return parseAccountOrder(address, offer)
|
||||
})
|
||||
orders = orders.concat(offers)
|
||||
}
|
||||
return _.sortBy(orders, order => order.properties.sequence)
|
||||
}
|
||||
|
||||
export default async function getOrders(
|
||||
this: RippleAPI, address: string, options: GetOrdersOptions = {}
|
||||
): Promise<Order[]> {
|
||||
// 1. Validate
|
||||
validate.getOrders({address, options})
|
||||
|
||||
return utils.ensureLedgerVersion.call(this, options).then(_options => {
|
||||
const getter = _.partial(requestAccountOffers, this.connection, address,
|
||||
_options.ledgerVersion)
|
||||
return utils.getRecursive(getter, _options.limit).then(orders =>
|
||||
_.sortBy(orders, order => order.properties.sequence))
|
||||
// 2. Make Request
|
||||
const responses = await this._requestAll('account_offers', {
|
||||
account: address,
|
||||
ledger_index: options.ledgerVersion || await this.getLedgerVersion(),
|
||||
limit: options.limit
|
||||
})
|
||||
// 3. Return Formatted Response
|
||||
return formatResponse(address, responses)
|
||||
}
|
||||
|
||||
export default getOrders
|
||||
|
||||
@@ -3,6 +3,7 @@ import parseAmount from './amount'
|
||||
import {parseTimestamp, adjustQualityForXRP} from './utils'
|
||||
import {removeUndefined} from '../../common'
|
||||
import {orderFlags} from './flags'
|
||||
import {Order} from '../types'
|
||||
|
||||
// TODO: remove this function once rippled provides quality directly
|
||||
function computeQuality(takerGets, takerPays) {
|
||||
@@ -12,7 +13,7 @@ function computeQuality(takerGets, takerPays) {
|
||||
|
||||
// rippled 'account_offers' returns a different format for orders than 'tx'
|
||||
// the flags are also different
|
||||
function parseAccountOrder(address: string, order: any): Object {
|
||||
function parseAccountOrder(address: string, order: any): Order {
|
||||
const direction = (order.flags & orderFlags.Sell) === 0 ? 'buy' : 'sell'
|
||||
const takerGetsAmount = parseAmount(order.taker_gets)
|
||||
const takerPaysAmount = parseAmount(order.taker_pays)
|
||||
|
||||
@@ -1,24 +1,13 @@
|
||||
import {parseQuality} from './utils'
|
||||
import {removeUndefined} from '../../common'
|
||||
|
||||
type Trustline = {
|
||||
account: string, limit: number, currency: string, quality_in: number|null,
|
||||
quality_out: number|null, no_ripple: boolean, freeze: boolean,
|
||||
authorized: boolean, limit_peer: string, no_ripple_peer: boolean,
|
||||
freeze_peer: boolean, peer_authorized: boolean, balance: any
|
||||
}
|
||||
|
||||
type TrustlineSpecification = {}
|
||||
type TrustlineCounterParty = {}
|
||||
type TrustlineState = {balance: number}
|
||||
type AccountTrustline = {
|
||||
specification: TrustlineSpecification, counterparty: TrustlineCounterParty,
|
||||
state: TrustlineState
|
||||
}
|
||||
import {
|
||||
Trustline,
|
||||
FormattedTrustline
|
||||
} from '../../common/types/objects/trustlines'
|
||||
|
||||
// rippled 'account_lines' returns a different format for
|
||||
// trustlines than 'tx'
|
||||
function parseAccountTrustline(trustline: Trustline): AccountTrustline {
|
||||
function parseAccountTrustline(trustline: Trustline): FormattedTrustline {
|
||||
const specification = removeUndefined({
|
||||
limit: trustline.limit,
|
||||
currency: trustline.currency,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as common from '../../common'
|
||||
import {Amount, RippledAmount} from '../../common/types'
|
||||
import {Amount, RippledAmount} from '../../common/types/objects'
|
||||
|
||||
|
||||
function parseAmount(amount: RippledAmount): Amount {
|
||||
|
||||
18
src/ledger/parse/check-cancel.ts
Normal file
18
src/ledger/parse/check-cancel.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import * as assert from 'assert'
|
||||
import {removeUndefined} from '../../common'
|
||||
|
||||
export type FormattedCheckCancel = {
|
||||
|
||||
// ID of the Check ledger object to cancel.
|
||||
checkID: string
|
||||
}
|
||||
|
||||
function parseCheckCancel(tx: any): FormattedCheckCancel {
|
||||
assert(tx.TransactionType === 'CheckCancel')
|
||||
|
||||
return removeUndefined({
|
||||
checkID: tx.CheckID
|
||||
})
|
||||
}
|
||||
|
||||
export default parseCheckCancel
|
||||
35
src/ledger/parse/check-cash.ts
Normal file
35
src/ledger/parse/check-cash.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import * as assert from 'assert'
|
||||
import {removeUndefined} from '../../common'
|
||||
import parseAmount from './amount'
|
||||
import {Amount} from '../../common/types/objects'
|
||||
|
||||
export type FormattedCheckCash = {
|
||||
|
||||
// ID of the Check ledger object to cash.
|
||||
checkID: string,
|
||||
|
||||
// (Optional) redeem the Check for exactly this amount, if possible.
|
||||
// The currency must match that of the `SendMax` of the corresponding
|
||||
// `CheckCreate` transaction.
|
||||
amount: Amount,
|
||||
|
||||
// (Optional) redeem the Check for at least this amount and
|
||||
// for as much as possible.
|
||||
// The currency must match that of the `SendMax` of the corresponding
|
||||
// `CheckCreate` transaction.
|
||||
deliverMin: Amount
|
||||
|
||||
// *must* include either Amount or DeliverMin, but not both.
|
||||
}
|
||||
|
||||
function parseCheckCash(tx: any): FormattedCheckCash {
|
||||
assert(tx.TransactionType === 'CheckCash')
|
||||
|
||||
return removeUndefined({
|
||||
checkID: tx.CheckID,
|
||||
amount: tx.Amount && parseAmount(tx.Amount),
|
||||
deliverMin: tx.DeliverMin && parseAmount(tx.DeliverMin)
|
||||
})
|
||||
}
|
||||
|
||||
export default parseCheckCash
|
||||
38
src/ledger/parse/check-create.ts
Normal file
38
src/ledger/parse/check-create.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import * as assert from 'assert'
|
||||
import {parseTimestamp} from './utils'
|
||||
import {removeUndefined} from '../../common'
|
||||
import parseAmount from './amount'
|
||||
import {Amount} from '../../common/types/objects'
|
||||
|
||||
export type FormattedCheckCreate = {
|
||||
|
||||
// account that can cash the check.
|
||||
destination: string,
|
||||
|
||||
// amount the check is allowed to debit the sender,
|
||||
// including transfer fees on non-XRP currencies.
|
||||
sendMax: Amount,
|
||||
|
||||
// (Optional) identifies the reason for the check, or a hosted recipient.
|
||||
destinationTag?: string,
|
||||
|
||||
// (Optional) time in seconds since the Ripple Epoch.
|
||||
expiration?: string,
|
||||
|
||||
// (Optional) 256-bit hash representing a specific reason or identifier.
|
||||
invoiceID?: string
|
||||
}
|
||||
|
||||
function parseCheckCreate(tx: any): FormattedCheckCreate {
|
||||
assert(tx.TransactionType === 'CheckCreate')
|
||||
|
||||
return removeUndefined({
|
||||
destination: tx.Destination,
|
||||
sendMax: parseAmount(tx.SendMax),
|
||||
destinationTag: tx.DestinationTag,
|
||||
expiration: tx.Expiration && parseTimestamp(tx.Expiration),
|
||||
invoiceID: tx.InvoiceID
|
||||
})
|
||||
}
|
||||
|
||||
export default parseCheckCreate
|
||||
@@ -1,6 +1,6 @@
|
||||
import * as _ from 'lodash'
|
||||
import parseAmount from './amount'
|
||||
import {Amount, RippledAmount} from '../../common/types'
|
||||
import {Amount, RippledAmount} from '../../common/types/objects'
|
||||
import {Path, GetPaths, RippledPathsResponse} from '../pathfind-types'
|
||||
|
||||
function parsePaths(paths) {
|
||||
|
||||
@@ -29,7 +29,7 @@ export type LedgerEntryResponse = {
|
||||
validated: boolean
|
||||
}
|
||||
|
||||
type PaymentChannelResponse = {
|
||||
export type PaymentChannelResponse = {
|
||||
account: string,
|
||||
balance: string,
|
||||
publicKey: string,
|
||||
|
||||
@@ -9,6 +9,9 @@ import parseSettings from './settings'
|
||||
import parseEscrowCreation from './escrow-creation'
|
||||
import parseEscrowExecution from './escrow-execution'
|
||||
import parseEscrowCancellation from './escrow-cancellation'
|
||||
import parseCheckCreate from './check-create'
|
||||
import parseCheckCash from './check-cash'
|
||||
import parseCheckCancel from './check-cancel'
|
||||
import parsePaymentChannelCreate from './payment-channel-create'
|
||||
import parsePaymentChannelFund from './payment-channel-fund'
|
||||
import parsePaymentChannelClaim from './payment-channel-claim'
|
||||
@@ -26,6 +29,9 @@ function parseTransactionType(type) {
|
||||
EscrowCreate: 'escrowCreation',
|
||||
EscrowFinish: 'escrowExecution',
|
||||
EscrowCancel: 'escrowCancellation',
|
||||
CheckCreate: 'checkCreate',
|
||||
CheckCash: 'checkCash',
|
||||
CheckCancel: 'checkCancel',
|
||||
PaymentChannelCreate: 'paymentChannelCreate',
|
||||
PaymentChannelFund: 'paymentChannelFund',
|
||||
PaymentChannelClaim: 'paymentChannelClaim',
|
||||
@@ -47,6 +53,9 @@ function parseTransaction(tx: any): any {
|
||||
'escrowCreation': parseEscrowCreation,
|
||||
'escrowExecution': parseEscrowExecution,
|
||||
'escrowCancellation': parseEscrowCancellation,
|
||||
'checkCreate': parseCheckCreate,
|
||||
'checkCash': parseCheckCash,
|
||||
'checkCancel': parseCheckCancel,
|
||||
'paymentChannelCreate': parsePaymentChannelCreate,
|
||||
'paymentChannelFund': parsePaymentChannelFund,
|
||||
'paymentChannelClaim': parsePaymentChannelClaim,
|
||||
|
||||
@@ -4,7 +4,7 @@ import BigNumber from 'bignumber.js'
|
||||
import * as common from '../../common'
|
||||
import parseAmount from './amount'
|
||||
|
||||
import {Amount, Memo} from '../../common/types'
|
||||
import {Amount, Memo} from '../../common/types/objects'
|
||||
|
||||
function adjustQualityForXRP(
|
||||
quality: string, takerGetsCurrency: string, takerPaysCurrency: string
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
|
||||
import {Amount, LaxLaxAmount, RippledAmount, Adjustment, MaxAdjustment,
|
||||
MinAdjustment} from '../common/types'
|
||||
import {Amount, RippledAmount, Adjustment, MaxAdjustment,
|
||||
MinAdjustment} from '../common/types/objects'
|
||||
|
||||
// Amount where counterparty and value are optional
|
||||
export type LaxLaxAmount = {
|
||||
currency: string,
|
||||
value?: string,
|
||||
issuer?: string,
|
||||
counterparty?: string
|
||||
}
|
||||
|
||||
export type Path = {
|
||||
source: Adjustment | MaxAdjustment,
|
||||
|
||||
@@ -4,7 +4,7 @@ import {getXRPBalance, renameCounterpartyToIssuer} from './utils'
|
||||
import {validate, toRippledAmount, errors} from '../common'
|
||||
import {Connection} from '../common'
|
||||
import parsePathfind from './parse/pathfind'
|
||||
import {RippledAmount, Amount} from '../common/types'
|
||||
import {RippledAmount, Amount} from '../common/types/objects'
|
||||
import {
|
||||
GetPaths, PathFind, RippledPathsResponse, PathFindRequest
|
||||
} from './pathfind-types'
|
||||
|
||||
@@ -3,14 +3,15 @@ import parseFields from './parse/fields'
|
||||
import {validate, constants} from '../common'
|
||||
const AccountFlags = constants.AccountFlags
|
||||
|
||||
type SettingsOptions = {
|
||||
export type SettingsOptions = {
|
||||
ledgerVersion?: number
|
||||
}
|
||||
|
||||
type GetSettings = {
|
||||
export type GetSettings = {
|
||||
passwordSpent?: boolean,
|
||||
requireDestinationTag?: boolean,
|
||||
requireAuthorization?: boolean,
|
||||
depositAuthorization?: boolean,
|
||||
disallowIncomingXRP?: boolean,
|
||||
disableMasterKey?: boolean,
|
||||
enableTransactionIDTracking?: boolean,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
import {Amount, Memo} from '../common/types'
|
||||
import {Amount, Memo} from '../common/types/objects'
|
||||
|
||||
type Outcome = {
|
||||
export type Outcome = {
|
||||
result: string,
|
||||
ledgerVersion: number,
|
||||
indexInLedger: number,
|
||||
@@ -17,7 +17,7 @@ type Outcome = {
|
||||
timestamp?: string
|
||||
}
|
||||
|
||||
type Adjustment = {
|
||||
export type Adjustment = {
|
||||
address: string,
|
||||
amount: {
|
||||
currency: string,
|
||||
@@ -27,7 +27,7 @@ type Adjustment = {
|
||||
tag?: number
|
||||
}
|
||||
|
||||
type Trustline = {
|
||||
export type Trustline = {
|
||||
currency: string,
|
||||
counterparty: string,
|
||||
limit: string,
|
||||
@@ -38,10 +38,11 @@ type Trustline = {
|
||||
frozen?: boolean
|
||||
}
|
||||
|
||||
type Settings = {
|
||||
export type Settings = {
|
||||
passwordSpent?: boolean,
|
||||
requireDestinationTag?: boolean,
|
||||
requireAuthorization?: boolean,
|
||||
depositAuthorization?: boolean,
|
||||
disallowIncomingXRP?: boolean,
|
||||
disableMasterKey?: boolean,
|
||||
enableTransactionIDTracking?: boolean,
|
||||
@@ -55,11 +56,11 @@ type Settings = {
|
||||
regularKey?: string
|
||||
}
|
||||
|
||||
type OrderCancellation = {
|
||||
export type OrderCancellation = {
|
||||
orderSequence: number
|
||||
}
|
||||
|
||||
type Payment = {
|
||||
export type Payment = {
|
||||
source: Adjustment,
|
||||
destination: Adjustment,
|
||||
paths?: string,
|
||||
@@ -70,7 +71,7 @@ type Payment = {
|
||||
limitQuality?: boolean
|
||||
}
|
||||
|
||||
type PaymentTransaction = {
|
||||
export type PaymentTransaction = {
|
||||
type: string,
|
||||
specification: Payment,
|
||||
outcome: Outcome,
|
||||
@@ -91,7 +92,7 @@ export type Order = {
|
||||
memos?: Memo[]
|
||||
}
|
||||
|
||||
type OrderTransaction = {
|
||||
export type OrderTransaction = {
|
||||
type: string,
|
||||
specification: Order,
|
||||
outcome: Outcome,
|
||||
@@ -100,7 +101,7 @@ type OrderTransaction = {
|
||||
sequence: number
|
||||
}
|
||||
|
||||
type OrderCancellationTransaction = {
|
||||
export type OrderCancellationTransaction = {
|
||||
type: string,
|
||||
specification: OrderCancellation,
|
||||
outcome: Outcome,
|
||||
@@ -109,7 +110,7 @@ type OrderCancellationTransaction = {
|
||||
sequence: number
|
||||
}
|
||||
|
||||
type TrustlineTransaction = {
|
||||
export type TrustlineTransaction = {
|
||||
type: string,
|
||||
specification: Trustline,
|
||||
outcome: Outcome,
|
||||
@@ -118,7 +119,7 @@ type TrustlineTransaction = {
|
||||
sequence: number
|
||||
}
|
||||
|
||||
type SettingsTransaction = {
|
||||
export type SettingsTransaction = {
|
||||
type: string,
|
||||
specification: Settings,
|
||||
outcome: Outcome,
|
||||
|
||||
@@ -9,7 +9,7 @@ import {Connection} from '../common'
|
||||
import {TransactionType} from './transaction-types'
|
||||
|
||||
|
||||
type TransactionsOptions = {
|
||||
export type TransactionsOptions = {
|
||||
start?: string,
|
||||
limit?: number,
|
||||
minLedgerVersion?: number,
|
||||
@@ -23,7 +23,7 @@ type TransactionsOptions = {
|
||||
startTx?: TransactionType
|
||||
}
|
||||
|
||||
type GetTransactionsResponse = Array<TransactionType>
|
||||
export type GetTransactionsResponse = Array<TransactionType>
|
||||
|
||||
function parseBinaryTransaction(transaction) {
|
||||
const tx = binary.decode(transaction.tx_blob)
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
import {Memo} from '../common/types'
|
||||
|
||||
export type TrustLineSpecification = {
|
||||
currency: string,
|
||||
counterparty: string,
|
||||
limit: string,
|
||||
qualityIn?: number,
|
||||
qualityOut?: number,
|
||||
ripplingDisabled?: boolean,
|
||||
authorized?: boolean,
|
||||
frozen?: boolean,
|
||||
memos?: Memo[]
|
||||
}
|
||||
|
||||
export type Trustline = {
|
||||
specification: TrustLineSpecification,
|
||||
counterparty: {
|
||||
limit: string,
|
||||
ripplingDisabled?: boolean,
|
||||
frozen?: boolean,
|
||||
authorized?: boolean
|
||||
},
|
||||
state: {
|
||||
balance: string
|
||||
}
|
||||
}
|
||||
|
||||
export type TrustlinesOptions = {
|
||||
counterparty?: string,
|
||||
currency?: string,
|
||||
limit?: number,
|
||||
ledgerVersion?: number
|
||||
}
|
||||
@@ -1,53 +1,37 @@
|
||||
import * as _ from 'lodash'
|
||||
import * as utils from './utils'
|
||||
import {validate} from '../common'
|
||||
import {Connection} from '../common'
|
||||
import parseAccountTrustline from './parse/account-trustline'
|
||||
import {TrustlinesOptions, Trustline} from './trustlines-types'
|
||||
import {RippleAPI} from '../api'
|
||||
import {FormattedTrustline} from '../common/types/objects/trustlines'
|
||||
|
||||
|
||||
type GetTrustlinesResponse = Array<Trustline>
|
||||
interface GetAccountLinesResponse {
|
||||
marker?: any,
|
||||
results: Trustline[]
|
||||
export type GetTrustlinesOptions = {
|
||||
counterparty?: string,
|
||||
currency?: string,
|
||||
limit?: number,
|
||||
ledgerVersion?: number
|
||||
}
|
||||
|
||||
function currencyFilter(currency: string, trustline: Trustline) {
|
||||
function currencyFilter(currency: string, trustline: FormattedTrustline) {
|
||||
return currency === null || trustline.specification.currency === currency
|
||||
}
|
||||
|
||||
function formatResponse(options: TrustlinesOptions, data: any) {
|
||||
return {
|
||||
marker: data.marker,
|
||||
results: data.lines.map(parseAccountTrustline)
|
||||
.filter(_.partial(currencyFilter, options.currency || null))
|
||||
}
|
||||
}
|
||||
|
||||
function getAccountLines(connection: Connection, address: string,
|
||||
ledgerVersion: number, options: TrustlinesOptions, marker: string,
|
||||
limit: number
|
||||
): Promise<GetAccountLinesResponse> {
|
||||
const request = {
|
||||
command: 'account_lines',
|
||||
async function getTrustlines(
|
||||
this: RippleAPI, address: string, options: GetTrustlinesOptions = {}
|
||||
): Promise<FormattedTrustline[]> {
|
||||
// 1. Validate
|
||||
validate.getTrustlines({address, options})
|
||||
const ledgerVersion = await this.getLedgerVersion()
|
||||
// 2. Make Request
|
||||
const responses = await this._requestAll('account_lines', {
|
||||
account: address,
|
||||
ledger_index: ledgerVersion,
|
||||
marker: marker,
|
||||
limit: utils.clamp(limit, 10, 400),
|
||||
limit: options.limit,
|
||||
peer: options.counterparty
|
||||
}
|
||||
|
||||
return connection.request(request).then(_.partial(formatResponse, options))
|
||||
}
|
||||
|
||||
function getTrustlines(address: string, options: TrustlinesOptions = {}
|
||||
): Promise<GetTrustlinesResponse> {
|
||||
validate.getTrustlines({address, options})
|
||||
|
||||
return this.getLedgerVersion().then(ledgerVersion => {
|
||||
const getter = _.partial(getAccountLines, this.connection, address,
|
||||
options.ledgerVersion || ledgerVersion, options)
|
||||
return utils.getRecursive(getter, options.limit)
|
||||
})
|
||||
// 3. Return Formatted Response
|
||||
const trustlines = _.flatMap(responses, response => response.lines)
|
||||
return trustlines.map(parseAccountTrustline).filter(trustline => {
|
||||
return currencyFilter(options.currency || null, trustline)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
|
||||
import {Amount} from '../common/types'
|
||||
|
||||
export type OrdersOptions = {
|
||||
limit?: number,
|
||||
ledgerVersion?: number
|
||||
}
|
||||
import {Amount} from '../common/types/objects'
|
||||
|
||||
export type OrderSpecification = {
|
||||
direction: string,
|
||||
|
||||
@@ -3,14 +3,14 @@ import * as assert from 'assert'
|
||||
import * as common from '../common'
|
||||
import {Connection} from '../common'
|
||||
import {TransactionType} from './transaction-types'
|
||||
import {Issue} from '../common/types'
|
||||
import {Issue} from '../common/types/objects'
|
||||
|
||||
type RecursiveData = {
|
||||
export type RecursiveData = {
|
||||
marker: string,
|
||||
results: Array<any>
|
||||
}
|
||||
|
||||
type Getter = (marker?: string, limit?: number) => Promise<RecursiveData>
|
||||
export type Getter = (marker?: string, limit?: number) => Promise<RecursiveData>
|
||||
|
||||
function clamp(value: number, min: number, max: number): number {
|
||||
assert(min <= max, 'Illegal clamp bounds')
|
||||
@@ -59,7 +59,7 @@ function renameCounterpartyToIssuer<T>(
|
||||
return withIssuer
|
||||
}
|
||||
|
||||
type RequestBookOffersArgs = {taker_gets: Issue, taker_pays: Issue}
|
||||
export type RequestBookOffersArgs = {taker_gets: Issue, taker_pays: Issue}
|
||||
|
||||
function renameCounterpartyToIssuerInOrder(order: RequestBookOffersArgs) {
|
||||
const taker_gets = renameCounterpartyToIssuer(order.taker_gets)
|
||||
|
||||
32
src/transaction/check-cancel.ts
Normal file
32
src/transaction/check-cancel.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import * as utils from './utils'
|
||||
import {validate} from '../common'
|
||||
import {Instructions, Prepare} from './types'
|
||||
|
||||
export type CheckCancel = {
|
||||
checkID: string
|
||||
}
|
||||
|
||||
function createCheckCancelTransaction(account: string,
|
||||
cancel: CheckCancel
|
||||
): object {
|
||||
const txJSON = {
|
||||
Account: account,
|
||||
TransactionType: 'CheckCancel',
|
||||
CheckID: cancel.checkID
|
||||
}
|
||||
|
||||
return txJSON
|
||||
}
|
||||
|
||||
function prepareCheckCancel(address: string,
|
||||
checkCancel: CheckCancel,
|
||||
instructions: Instructions = {}
|
||||
): Promise<Prepare> {
|
||||
validate.prepareCheckCancel(
|
||||
{address, checkCancel, instructions})
|
||||
const txJSON = createCheckCancelTransaction(
|
||||
address, checkCancel)
|
||||
return utils.prepareTransaction(txJSON, this, instructions)
|
||||
}
|
||||
|
||||
export default prepareCheckCancel
|
||||
50
src/transaction/check-cash.ts
Normal file
50
src/transaction/check-cash.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import * as utils from './utils'
|
||||
const ValidationError = utils.common.errors.ValidationError
|
||||
const toRippledAmount = utils.common.toRippledAmount
|
||||
import {validate} from '../common'
|
||||
import {Instructions, Prepare} from './types'
|
||||
import {Amount} from '../common/types/objects'
|
||||
|
||||
export type CheckCash = {
|
||||
checkID: string,
|
||||
amount?: Amount,
|
||||
deliverMin?: Amount
|
||||
}
|
||||
|
||||
function createCheckCashTransaction(account: string,
|
||||
checkCash: CheckCash
|
||||
): object {
|
||||
if (checkCash.amount && checkCash.deliverMin) {
|
||||
throw new ValidationError('"amount" and "deliverMin" properties on '
|
||||
+ 'CheckCash are mutually exclusive')
|
||||
}
|
||||
|
||||
const txJSON: any = {
|
||||
Account: account,
|
||||
TransactionType: 'CheckCash',
|
||||
CheckID: checkCash.checkID
|
||||
}
|
||||
|
||||
if (checkCash.amount !== undefined) {
|
||||
txJSON.Amount = toRippledAmount(checkCash.amount)
|
||||
}
|
||||
|
||||
if (checkCash.deliverMin !== undefined) {
|
||||
txJSON.DeliverMin = toRippledAmount(checkCash.deliverMin)
|
||||
}
|
||||
|
||||
return txJSON
|
||||
}
|
||||
|
||||
function prepareCheckCash(address: string,
|
||||
checkCash: CheckCash,
|
||||
instructions: Instructions = {}
|
||||
): Promise<Prepare> {
|
||||
validate.prepareCheckCash(
|
||||
{address, checkCash, instructions})
|
||||
const txJSON = createCheckCashTransaction(
|
||||
address, checkCash)
|
||||
return utils.prepareTransaction(txJSON, this, instructions)
|
||||
}
|
||||
|
||||
export default prepareCheckCash
|
||||
51
src/transaction/check-create.ts
Normal file
51
src/transaction/check-create.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import * as utils from './utils'
|
||||
const toRippledAmount = utils.common.toRippledAmount
|
||||
import {validate, iso8601ToRippleTime} from '../common'
|
||||
import {Instructions, Prepare} from './types'
|
||||
import {Amount} from '../common/types/objects'
|
||||
|
||||
export type CheckCreate = {
|
||||
destination: string,
|
||||
sendMax: Amount,
|
||||
destinationTag?: number,
|
||||
expiration?: string,
|
||||
invoiceID?: string
|
||||
}
|
||||
|
||||
function createCheckCreateTransaction(account: string,
|
||||
check: CheckCreate
|
||||
): object {
|
||||
const txJSON: any = {
|
||||
Account: account,
|
||||
TransactionType: 'CheckCreate',
|
||||
Destination: check.destination,
|
||||
SendMax: toRippledAmount(check.sendMax)
|
||||
}
|
||||
|
||||
if (check.destinationTag !== undefined) {
|
||||
txJSON.DestinationTag = check.destinationTag
|
||||
}
|
||||
|
||||
if (check.expiration !== undefined) {
|
||||
txJSON.Expiration = iso8601ToRippleTime(check.expiration)
|
||||
}
|
||||
|
||||
if (check.invoiceID !== undefined) {
|
||||
txJSON.InvoiceID = check.invoiceID
|
||||
}
|
||||
|
||||
return txJSON
|
||||
}
|
||||
|
||||
function prepareCheckCreate(address: string,
|
||||
checkCreate: CheckCreate,
|
||||
instructions: Instructions = {}
|
||||
): Promise<Prepare> {
|
||||
validate.prepareCheckCreate(
|
||||
{address, checkCreate, instructions})
|
||||
const txJSON = createCheckCreateTransaction(
|
||||
address, checkCreate)
|
||||
return utils.prepareTransaction(txJSON, this, instructions)
|
||||
}
|
||||
|
||||
export default prepareCheckCreate
|
||||
@@ -2,9 +2,9 @@ import * as _ from 'lodash'
|
||||
import * as utils from './utils'
|
||||
const validate = utils.common.validate
|
||||
import {Instructions, Prepare} from './types'
|
||||
import {Memo} from '../common/types'
|
||||
import {Memo} from '../common/types/objects'
|
||||
|
||||
type EscrowCancellation = {
|
||||
export type EscrowCancellation = {
|
||||
owner: string,
|
||||
escrowSequence: number,
|
||||
memos?: Array<Memo>
|
||||
|
||||
@@ -3,9 +3,9 @@ import * as utils from './utils'
|
||||
import {validate, iso8601ToRippleTime, xrpToDrops} from '../common'
|
||||
const ValidationError = utils.common.errors.ValidationError
|
||||
import {Instructions, Prepare} from './types'
|
||||
import {Memo} from '../common/types'
|
||||
import {Memo} from '../common/types/objects'
|
||||
|
||||
type EscrowCreation = {
|
||||
export type EscrowCreation = {
|
||||
amount: string,
|
||||
destination: string,
|
||||
memos?: Array<Memo>,
|
||||
|
||||
@@ -3,9 +3,9 @@ import * as utils from './utils'
|
||||
const validate = utils.common.validate
|
||||
const ValidationError = utils.common.errors.ValidationError
|
||||
import {Instructions, Prepare} from './types'
|
||||
import {Memo} from '../common/types'
|
||||
import {Memo} from '../common/types/objects'
|
||||
|
||||
type EscrowExecution = {
|
||||
export type EscrowExecution = {
|
||||
owner: string,
|
||||
escrowSequence: number,
|
||||
memos?: Array<Memo>,
|
||||
|
||||
@@ -4,7 +4,7 @@ const claimFlags = utils.common.txFlags.PaymentChannelClaim
|
||||
import {validate, xrpToDrops} from '../common'
|
||||
import {Instructions, Prepare} from './types'
|
||||
|
||||
type PaymentChannelClaim = {
|
||||
export type PaymentChannelClaim = {
|
||||
channel: string,
|
||||
balance?: string,
|
||||
amount?: string,
|
||||
|
||||
@@ -2,7 +2,7 @@ import * as utils from './utils'
|
||||
import {validate, iso8601ToRippleTime, xrpToDrops} from '../common'
|
||||
import {Instructions, Prepare} from './types'
|
||||
|
||||
type PaymentChannelCreate = {
|
||||
export type PaymentChannelCreate = {
|
||||
amount: string,
|
||||
destination: string,
|
||||
settleDelay: number,
|
||||
|
||||
@@ -2,7 +2,7 @@ import * as utils from './utils'
|
||||
import {validate, iso8601ToRippleTime, xrpToDrops} from '../common'
|
||||
import {Instructions, Prepare} from './types'
|
||||
|
||||
type PaymentChannelFund = {
|
||||
export type PaymentChannelFund = {
|
||||
channel: string,
|
||||
amount: string,
|
||||
expiration?: string
|
||||
|
||||
@@ -6,10 +6,10 @@ const paymentFlags = utils.common.txFlags.Payment
|
||||
const ValidationError = utils.common.errors.ValidationError
|
||||
import {Instructions, Prepare} from './types'
|
||||
import {Amount, Adjustment, MaxAdjustment,
|
||||
MinAdjustment, Memo} from '../common/types'
|
||||
MinAdjustment, Memo} from '../common/types/objects'
|
||||
|
||||
|
||||
type Payment = {
|
||||
export type Payment = {
|
||||
source: Adjustment & MaxAdjustment,
|
||||
destination: Adjustment & MinAdjustment,
|
||||
paths?: string,
|
||||
|
||||
@@ -6,14 +6,14 @@ const validate = utils.common.validate
|
||||
const AccountFlagIndices = utils.common.constants.AccountFlagIndices
|
||||
const AccountFields = utils.common.constants.AccountFields
|
||||
import {Instructions, Prepare} from './types'
|
||||
import {Memo} from '../common/types'
|
||||
import {Memo} from '../common/types/objects'
|
||||
|
||||
type WeightedSigner = {address: string, weight: number}
|
||||
type SettingsSigners = {
|
||||
export type WeightedSigner = {address: string, weight: number}
|
||||
export type SettingsSigners = {
|
||||
threshold?: number,
|
||||
weights: WeightedSigner[]
|
||||
}
|
||||
type Settings = {
|
||||
export type Settings = {
|
||||
passwordSpent?: boolean,
|
||||
requireDestinationTag?: boolean,
|
||||
requireAuthorization?: boolean,
|
||||
|
||||
@@ -4,14 +4,16 @@ import * as utils from './utils'
|
||||
const validate = utils.common.validate
|
||||
const trustlineFlags = utils.common.txFlags.TrustSet
|
||||
import {Instructions, Prepare} from './types'
|
||||
import {TrustLineSpecification} from '../ledger/trustlines-types'
|
||||
import {
|
||||
FormattedTrustlineSpecification
|
||||
} from '../common/types/objects/trustlines'
|
||||
|
||||
function convertQuality(quality) {
|
||||
return (new BigNumber(quality)).shift(9).truncated().toNumber()
|
||||
}
|
||||
|
||||
function createTrustlineTransaction(account: string,
|
||||
trustline: TrustLineSpecification
|
||||
trustline: FormattedTrustlineSpecification
|
||||
): Object {
|
||||
const limit = {
|
||||
currency: trustline.currency,
|
||||
@@ -49,7 +51,7 @@ function createTrustlineTransaction(account: string,
|
||||
}
|
||||
|
||||
function prepareTrustline(address: string,
|
||||
trustline: TrustLineSpecification, instructions: Instructions = {}
|
||||
trustline: FormattedTrustlineSpecification, instructions: Instructions = {}
|
||||
): Promise<Prepare> {
|
||||
validate.prepareTrustline({address, trustline, instructions})
|
||||
const txJSON = createTrustlineTransaction(address, trustline)
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
import BigNumber from 'bignumber.js'
|
||||
import * as common from '../common'
|
||||
import {Memo, ApiMemo} from '../common/types'
|
||||
import {Memo} from '../common/types/objects'
|
||||
const txFlags = common.txFlags
|
||||
import {Instructions, Prepare} from './types'
|
||||
import {RippleAPI} from '../api'
|
||||
|
||||
export type ApiMemo = {
|
||||
MemoData?: string,
|
||||
MemoType?: string,
|
||||
MemoFormat?: string
|
||||
}
|
||||
|
||||
function formatPrepareResponse(txJSON: any): Prepare {
|
||||
const instructions = {
|
||||
fee: common.dropsToXrp(txJSON.Fee),
|
||||
|
||||
738
test/api-test.js
738
test/api-test.js
File diff suppressed because it is too large
Load Diff
11
test/fixtures/requests/index.js
vendored
11
test/fixtures/requests/index.js
vendored
@@ -38,6 +38,17 @@ module.exports = {
|
||||
normal: require('./prepare-escrow-cancellation'),
|
||||
memos: require('./prepare-escrow-cancellation-memos')
|
||||
},
|
||||
prepareCheckCreate: {
|
||||
normal: require('./prepare-check-create'),
|
||||
full: require('./prepare-check-create-full')
|
||||
},
|
||||
prepareCheckCash: {
|
||||
amount: require('./prepare-check-cash-amount'),
|
||||
deliverMin: require('./prepare-check-cash-delivermin')
|
||||
},
|
||||
prepareCheckCancel: {
|
||||
normal: require('./prepare-check-cancel')
|
||||
},
|
||||
preparePaymentChannelCreate: {
|
||||
normal: require('./prepare-payment-channel-create'),
|
||||
full: require('./prepare-payment-channel-create-full')
|
||||
|
||||
3
test/fixtures/requests/prepare-check-cancel.json
vendored
Normal file
3
test/fixtures/requests/prepare-check-cancel.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"checkID": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0"
|
||||
}
|
||||
7
test/fixtures/requests/prepare-check-cash-amount.json
vendored
Normal file
7
test/fixtures/requests/prepare-check-cash-amount.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"amount": {
|
||||
"currency": "XRP",
|
||||
"value": "1"
|
||||
},
|
||||
"checkID": "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334"
|
||||
}
|
||||
7
test/fixtures/requests/prepare-check-cash-delivermin.json
vendored
Normal file
7
test/fixtures/requests/prepare-check-cash-delivermin.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"deliverMin": {
|
||||
"currency": "XRP",
|
||||
"value": "0.8"
|
||||
},
|
||||
"checkID": "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334"
|
||||
}
|
||||
10
test/fixtures/requests/prepare-check-create-full.json
vendored
Normal file
10
test/fixtures/requests/prepare-check-create-full.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"destination": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
|
||||
"sendMax": {
|
||||
"currency": "XRP",
|
||||
"value": "1"
|
||||
},
|
||||
"destinationTag": 2,
|
||||
"expiration": "2018-09-24T21:21:50.000Z",
|
||||
"invoiceID": "1F40FC92DA241694750979EE6CF582F2D5D7D28E18335DE05ABC54D0560E0F53"
|
||||
}
|
||||
7
test/fixtures/requests/prepare-check-create.json
vendored
Normal file
7
test/fixtures/requests/prepare-check-create.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"destination": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
|
||||
"sendMax": {
|
||||
"currency": "XRP",
|
||||
"value": "1"
|
||||
}
|
||||
}
|
||||
25
test/fixtures/responses/get-transaction-check-cancel.json
vendored
Normal file
25
test/fixtures/responses/get-transaction-check-cancel.json
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"type": "checkCancel",
|
||||
"address": "rNpdNFXNMvEcaXDqMypi48gdSABZkYuyQE",
|
||||
"sequence": 6,
|
||||
"id": "B4105D1B2D83819647E4692B7C5843D674283F669524BD50C9614182E3A12CD4",
|
||||
"specification": {
|
||||
"checkID": "6EE1727598693635183A3D967342A46C739FC06F973CA6A3277A92E8D997E7A8"
|
||||
},
|
||||
"outcome": {
|
||||
"result": "tesSUCCESS",
|
||||
"timestamp": "2018-02-23T22:45:41.000Z",
|
||||
"fee": "0.000012",
|
||||
"balanceChanges": {
|
||||
"rNpdNFXNMvEcaXDqMypi48gdSABZkYuyQE": [
|
||||
{
|
||||
"currency": "XRP",
|
||||
"value": "-0.000012"
|
||||
}
|
||||
]
|
||||
},
|
||||
"orderbookChanges": {},
|
||||
"ledgerVersion": 6967970,
|
||||
"indexInLedger": 4
|
||||
}
|
||||
}
|
||||
35
test/fixtures/responses/get-transaction-check-cash.json
vendored
Normal file
35
test/fixtures/responses/get-transaction-check-cash.json
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "checkCash",
|
||||
"address": "raLHvSZXacoGiCoWrdBhVGstZm6GhF7oRr",
|
||||
"sequence": 3,
|
||||
"id": "8321208465F70BA52C28BCC4F646BAF3B012BA13B57576C0336F42D77E3E0749",
|
||||
"specification": {
|
||||
"checkID": "4F6DDA7972A5E8C8F2AA3D2A475E56475FA573C65B935E26EABDA5F06A982C70",
|
||||
"amount": {
|
||||
"currency": "XRP",
|
||||
"value": "2.5"
|
||||
}
|
||||
},
|
||||
"outcome": {
|
||||
"result": "tesSUCCESS",
|
||||
"timestamp": "2018-02-23T22:26:52.000Z",
|
||||
"fee": "0.000012",
|
||||
"balanceChanges": {
|
||||
"raLHvSZXacoGiCoWrdBhVGstZm6GhF7oRr": [
|
||||
{
|
||||
"currency": "XRP",
|
||||
"value": "2.499988"
|
||||
}
|
||||
],
|
||||
"rNpdNFXNMvEcaXDqMypi48gdSABZkYuyQE": [
|
||||
{
|
||||
"currency": "XRP",
|
||||
"value": "-2.5"
|
||||
}
|
||||
]
|
||||
},
|
||||
"orderbookChanges": {},
|
||||
"ledgerVersion": 6967596,
|
||||
"indexInLedger": 0
|
||||
}
|
||||
}
|
||||
32
test/fixtures/responses/get-transaction-check-create.json
vendored
Normal file
32
test/fixtures/responses/get-transaction-check-create.json
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"type": "checkCreate",
|
||||
"address": "rNpdNFXNMvEcaXDqMypi48gdSABZkYuyQE",
|
||||
"sequence": 3,
|
||||
"id": "605A2E2C8E48AECAF5C56085D1AEAA0348DC838CE122C9188F94EB19DA05C2FE",
|
||||
"specification": {
|
||||
"destination": "raLHvSZXacoGiCoWrdBhVGstZm6GhF7oRr",
|
||||
"sendMax": {
|
||||
"currency": "XRP",
|
||||
"value": "3"
|
||||
},
|
||||
"destinationTag": 1235,
|
||||
"expiration": "2018-02-25T21:22:47.000Z",
|
||||
"invoiceID": "DEADBEEF2FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B"
|
||||
},
|
||||
"outcome": {
|
||||
"result": "tesSUCCESS",
|
||||
"timestamp": "2018-02-23T22:20:01.000Z",
|
||||
"fee": "0.000012",
|
||||
"balanceChanges": {
|
||||
"rNpdNFXNMvEcaXDqMypi48gdSABZkYuyQE": [
|
||||
{
|
||||
"currency": "XRP",
|
||||
"value": "-0.000012"
|
||||
}
|
||||
]
|
||||
},
|
||||
"orderbookChanges": {},
|
||||
"ledgerVersion": 6967458,
|
||||
"indexInLedger": 1
|
||||
}
|
||||
}
|
||||
29
test/fixtures/responses/index.js
vendored
29
test/fixtures/responses/index.js
vendored
@@ -1,5 +1,9 @@
|
||||
'use strict'; // eslint-disable-line strict
|
||||
|
||||
function buildList(options) {
|
||||
return new Array(options.count).fill(options.item);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
generateAddress: require('./generate-address.json'),
|
||||
getAccountInfo: require('./get-account-info.json'),
|
||||
@@ -38,8 +42,14 @@ module.exports = {
|
||||
trustlineFrozenOff: require('./get-transaction-trust-set-frozen-off.json'),
|
||||
trustlineNoQuality: require('./get-transaction-trust-no-quality.json'),
|
||||
notValidated: require('./get-transaction-not-validated.json'),
|
||||
checkCreate:
|
||||
require('./get-transaction-check-create.json'),
|
||||
checkCancel:
|
||||
require('./get-transaction-check-cancel.json'),
|
||||
checkCash:
|
||||
require('./get-transaction-check-cash.json'),
|
||||
escrowCreation:
|
||||
require('./get-transaction-escrow-create.json'),
|
||||
require('./get-transaction-escrow-creation.json'),
|
||||
escrowCancellation:
|
||||
require('./get-transaction-escrow-cancellation.json'),
|
||||
escrowExecution:
|
||||
@@ -61,6 +71,10 @@ module.exports = {
|
||||
},
|
||||
getTrustlines: {
|
||||
filtered: require('./get-trustlines.json'),
|
||||
moreThan400Items: buildList({
|
||||
item: require('./trustline-item.json'),
|
||||
count: 401
|
||||
}),
|
||||
all: require('./get-trustlines-all.json')
|
||||
},
|
||||
getLedger: {
|
||||
@@ -96,6 +110,8 @@ module.exports = {
|
||||
flagsMultisign: require('./prepare-settings-multisign.json'),
|
||||
flagSet: require('./prepare-settings-flag-set.json'),
|
||||
flagClear: require('./prepare-settings-flag-clear.json'),
|
||||
flagSetDepositAuth: require('./prepare-settings-flag-set-deposit-auth.json'),
|
||||
flagClearDepositAuth: require('./prepare-settings-flag-clear-deposit-auth.json'),
|
||||
setTransferRate: require('./prepare-settings-set-transfer-rate.json'),
|
||||
fieldClear: require('./prepare-settings-field-clear.json'),
|
||||
noInstructions: require('./prepare-settings-no-instructions.json'),
|
||||
@@ -103,6 +119,17 @@ module.exports = {
|
||||
noMaxLedgerVersion: require('./prepare-settings-no-maxledgerversion.json'),
|
||||
signers: require('./prepare-settings-signers.json')
|
||||
},
|
||||
prepareCheckCreate: {
|
||||
normal: require('./prepare-check-create'),
|
||||
full: require('./prepare-check-create-full')
|
||||
},
|
||||
prepareCheckCash: {
|
||||
amount: require('./prepare-check-cash-amount'),
|
||||
deliverMin: require('./prepare-check-cash-delivermin')
|
||||
},
|
||||
prepareCheckCancel: {
|
||||
normal: require('./prepare-check-cancel')
|
||||
},
|
||||
prepareEscrowCreation: {
|
||||
normal: require('./prepare-escrow-creation'),
|
||||
full: require('./prepare-escrow-creation-full')
|
||||
|
||||
8
test/fixtures/responses/prepare-check-cancel.json
vendored
Normal file
8
test/fixtures/responses/prepare-check-cancel.json
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"txJSON": "{\"Account\":\"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59\",\"TransactionType\":\"CheckCancel\",\"CheckID\":\"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\"Flags\":2147483648,\"LastLedgerSequence\":8819954,\"Fee\":\"12\",\"Sequence\":23}",
|
||||
"instructions": {
|
||||
"fee": "0.000012",
|
||||
"sequence": 23,
|
||||
"maxLedgerVersion": 8819954
|
||||
}
|
||||
}
|
||||
8
test/fixtures/responses/prepare-check-cash-amount.json
vendored
Normal file
8
test/fixtures/responses/prepare-check-cash-amount.json
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"txJSON": "{\"Account\":\"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59\",\"TransactionType\":\"CheckCash\",\"CheckID\":\"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\"Amount\":\"1000000\",\"Flags\":2147483648,\"LastLedgerSequence\":8819954,\"Sequence\":23,\"Fee\":\"12\"}",
|
||||
"instructions": {
|
||||
"fee": "0.000012",
|
||||
"sequence": 23,
|
||||
"maxLedgerVersion": 8819954
|
||||
}
|
||||
}
|
||||
8
test/fixtures/responses/prepare-check-cash-delivermin.json
vendored
Normal file
8
test/fixtures/responses/prepare-check-cash-delivermin.json
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"txJSON": "{\"Account\":\"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59\",\"TransactionType\":\"CheckCash\",\"CheckID\":\"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\"DeliverMin\":\"800000\",\"Flags\":2147483648,\"LastLedgerSequence\":8819954,\"Sequence\":23,\"Fee\":\"12\"}",
|
||||
"instructions": {
|
||||
"fee": "0.000012",
|
||||
"sequence": 23,
|
||||
"maxLedgerVersion": 8819954
|
||||
}
|
||||
}
|
||||
8
test/fixtures/responses/prepare-check-create-full.json
vendored
Normal file
8
test/fixtures/responses/prepare-check-create-full.json
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"txJSON": "{\"Account\":\"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59\",\"TransactionType\":\"CheckCreate\",\"Destination\":\"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\"SendMax\":\"1000000\",\"DestinationTag\":2,\"Expiration\":591139310,\"InvoiceID\":\"1F40FC92DA241694750979EE6CF582F2D5D7D28E18335DE05ABC54D0560E0F53\",\"Flags\":2147483648,\"LastLedgerSequence\":8819954,\"Sequence\":23,\"Fee\":\"12\"}",
|
||||
"instructions": {
|
||||
"fee": "0.000012",
|
||||
"sequence": 23,
|
||||
"maxLedgerVersion": 8819954
|
||||
}
|
||||
}
|
||||
8
test/fixtures/responses/prepare-check-create.json
vendored
Normal file
8
test/fixtures/responses/prepare-check-create.json
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"txJSON": "{\"Account\":\"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59\",\"TransactionType\":\"CheckCreate\",\"Destination\":\"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\"SendMax\":\"1000000\",\"Flags\":2147483648,\"LastLedgerSequence\":8820051,\"Sequence\":23,\"Fee\":\"12\"}",
|
||||
"instructions": {
|
||||
"fee": "0.000012",
|
||||
"sequence": 23,
|
||||
"maxLedgerVersion": 8820051
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user