mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-20 20:25:48 +00:00
Compare commits
6 Commits
@transia/x
...
denis-urit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
015f92d9e7 | ||
|
|
a47d7e34a7 | ||
|
|
925eee464c | ||
|
|
e1a3594ff3 | ||
|
|
0b4cd01f94 | ||
|
|
93b15ee9f6 |
8
package-lock.json
generated
8
package-lock.json
generated
@@ -17148,7 +17148,7 @@
|
|||||||
},
|
},
|
||||||
"packages/ripple-binary-codec": {
|
"packages/ripple-binary-codec": {
|
||||||
"name": "@transia/ripple-binary-codec",
|
"name": "@transia/ripple-binary-codec",
|
||||||
"version": "1.4.6-alpha.2",
|
"version": "1.4.6-alpha.1",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
||||||
@@ -17188,11 +17188,11 @@
|
|||||||
},
|
},
|
||||||
"packages/xrpl": {
|
"packages/xrpl": {
|
||||||
"name": "@transia/xrpl",
|
"name": "@transia/xrpl",
|
||||||
"version": "2.7.3-alpha.5",
|
"version": "2.7.3-alpha.1",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
||||||
"@transia/ripple-binary-codec": "^1.4.6-alpha.2",
|
"@transia/ripple-binary-codec": "^1.4.6-alpha.1",
|
||||||
"@transia/ripple-keypairs": "^1.1.8-alpha.0",
|
"@transia/ripple-keypairs": "^1.1.8-alpha.0",
|
||||||
"bignumber.js": "^9.0.0",
|
"bignumber.js": "^9.0.0",
|
||||||
"bip32": "^2.0.6",
|
"bip32": "^2.0.6",
|
||||||
@@ -19388,7 +19388,7 @@
|
|||||||
"requires": {
|
"requires": {
|
||||||
"@geut/browser-node-core": "^2.0.13",
|
"@geut/browser-node-core": "^2.0.13",
|
||||||
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
||||||
"@transia/ripple-binary-codec": "^1.4.6-alpha.2",
|
"@transia/ripple-binary-codec": "^1.4.6-alpha.1",
|
||||||
"@transia/ripple-keypairs": "^1.1.8-alpha.0",
|
"@transia/ripple-keypairs": "^1.1.8-alpha.0",
|
||||||
"@types/node": "^14.18.36",
|
"@types/node": "^14.18.36",
|
||||||
"assert-browserify": "^2.0.0",
|
"assert-browserify": "^2.0.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@transia/ripple-binary-codec",
|
"name": "@transia/ripple-binary-codec",
|
||||||
"version": "1.4.6-alpha.2",
|
"version": "1.4.6-alpha.1",
|
||||||
"description": "XRP Ledger binary codec",
|
"description": "XRP Ledger binary codec",
|
||||||
"files": [
|
"files": [
|
||||||
"dist/*",
|
"dist/*",
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import { STObject } from './types/st-object'
|
|||||||
import { JsonObject } from './types/serialized-type'
|
import { JsonObject } from './types/serialized-type'
|
||||||
import { Buffer } from 'buffer/'
|
import { Buffer } from 'buffer/'
|
||||||
import bigInt = require('big-integer')
|
import bigInt = require('big-integer')
|
||||||
import { AmountObject } from './types/amount'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a BinaryParser
|
* Construct a BinaryParser
|
||||||
@@ -123,7 +122,7 @@ function signingData(
|
|||||||
*/
|
*/
|
||||||
interface ClaimObject extends JsonObject {
|
interface ClaimObject extends JsonObject {
|
||||||
channel: string
|
channel: string
|
||||||
amount: AmountObject
|
amount: string | number
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -134,19 +133,16 @@ interface ClaimObject extends JsonObject {
|
|||||||
* @returns the serialized object with appropriate prefix
|
* @returns the serialized object with appropriate prefix
|
||||||
*/
|
*/
|
||||||
function signingClaimData(claim: ClaimObject): Buffer {
|
function signingClaimData(claim: ClaimObject): Buffer {
|
||||||
|
const num = bigInt(String(claim.amount))
|
||||||
const prefix = HashPrefix.paymentChannelClaim
|
const prefix = HashPrefix.paymentChannelClaim
|
||||||
const channel = coreTypes.Hash256.from(claim.channel).toBytes()
|
const channel = coreTypes.Hash256.from(claim.channel).toBytes()
|
||||||
|
const amount = coreTypes.UInt64.from(num).toBytes()
|
||||||
|
|
||||||
const bytesList = new BytesList()
|
const bytesList = new BytesList()
|
||||||
|
|
||||||
bytesList.put(prefix)
|
bytesList.put(prefix)
|
||||||
bytesList.put(channel)
|
bytesList.put(channel)
|
||||||
if (typeof claim.amount === 'string') {
|
bytesList.put(amount)
|
||||||
const num = bigInt(String(claim.amount))
|
|
||||||
const amount = coreTypes.UInt64.from(num).toBytes()
|
|
||||||
bytesList.put(amount)
|
|
||||||
} else {
|
|
||||||
const amount = coreTypes.Amount.from(claim.amount).toBytes()
|
|
||||||
bytesList.put(amount)
|
|
||||||
}
|
|
||||||
return bytesList.toBytes()
|
return bytesList.toBytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,59 @@ describe('Signing data', function () {
|
|||||||
].join(''),
|
].join(''),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
test('can create native claim blob', function () {
|
|
||||||
|
test('can create multi signing blobs with custom definitions', function () {
|
||||||
|
const customPaymentDefinitions = JSON.parse(
|
||||||
|
JSON.stringify(normalDefinitions),
|
||||||
|
)
|
||||||
|
customPaymentDefinitions.TRANSACTION_TYPES.Payment = 31
|
||||||
|
|
||||||
|
const newDefs = new XrplDefinitions(customPaymentDefinitions)
|
||||||
|
const signingAccount = 'rJZdUusLDtY9NEsGea7ijqhVrXv98rYBYN'
|
||||||
|
const signingJson = { ...tx_json, SigningPubKey: '' }
|
||||||
|
const actual = encodeForMultisigning(signingJson, signingAccount, newDefs)
|
||||||
|
expect(actual).toBe(
|
||||||
|
[
|
||||||
|
'534D5400', // signingPrefix
|
||||||
|
// TransactionType
|
||||||
|
'12',
|
||||||
|
'001F',
|
||||||
|
// Flags
|
||||||
|
'22',
|
||||||
|
'80000000',
|
||||||
|
// Sequence
|
||||||
|
'24',
|
||||||
|
'00000001',
|
||||||
|
// Amount
|
||||||
|
'61',
|
||||||
|
// native amount
|
||||||
|
'40000000000003E8',
|
||||||
|
// Fee
|
||||||
|
'68',
|
||||||
|
// native amount
|
||||||
|
'400000000000000A',
|
||||||
|
// SigningPubKey
|
||||||
|
'73',
|
||||||
|
// VLLength
|
||||||
|
'00',
|
||||||
|
// '',
|
||||||
|
// Account
|
||||||
|
'81',
|
||||||
|
// VLLength
|
||||||
|
'14',
|
||||||
|
'5B812C9D57731E27A2DA8B1830195F88EF32A3B6',
|
||||||
|
// Destination
|
||||||
|
'83',
|
||||||
|
// VLLength
|
||||||
|
'14',
|
||||||
|
'B5F762798A53D543A014CAF8B297CFF8F2F937E8',
|
||||||
|
// signingAccount suffix
|
||||||
|
'C0A5ABEF242802EFED4B041E8F2D4A8CC86AE3D1',
|
||||||
|
].join(''),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('can create claim blob', function () {
|
||||||
const channel =
|
const channel =
|
||||||
'43904CBFCDCEC530B4037871F86EE90BF799DF8D2E0EA564BC8A3F332E4F5FB1'
|
'43904CBFCDCEC530B4037871F86EE90BF799DF8D2E0EA564BC8A3F332E4F5FB1'
|
||||||
const amount = '1000'
|
const amount = '1000'
|
||||||
@@ -187,27 +239,4 @@ describe('Signing data', function () {
|
|||||||
].join(''),
|
].join(''),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
test('can create ic claim blob', function () {
|
|
||||||
const channel =
|
|
||||||
'43904CBFCDCEC530B4037871F86EE90BF799DF8D2E0EA564BC8A3F332E4F5FB1'
|
|
||||||
const amount = {
|
|
||||||
issuer: 'rJZdUusLDtY9NEsGea7ijqhVrXv98rYBYN',
|
|
||||||
currency: 'USD',
|
|
||||||
value: '10',
|
|
||||||
}
|
|
||||||
const json = { channel, amount }
|
|
||||||
const actual = encodeForSigningClaim(json)
|
|
||||||
expect(actual).toBe(
|
|
||||||
[
|
|
||||||
// hash prefix
|
|
||||||
'434C4D00',
|
|
||||||
// channel ID
|
|
||||||
'43904CBFCDCEC530B4037871F86EE90BF799DF8D2E0EA564BC8A3F332E4F5FB1',
|
|
||||||
// amount as a uint64
|
|
||||||
'D4C38D7EA4C680000000000000000000000000005553440000000000C0A5ABEF',
|
|
||||||
// amount as a uint64
|
|
||||||
'242802EFED4B041E8F2D4A8CC86AE3D1',
|
|
||||||
].join(''),
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@transia/xrpl",
|
"name": "@transia/xrpl",
|
||||||
"version": "2.7.3-alpha.10",
|
"version": "2.7.3-alpha.1",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser",
|
"description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser",
|
||||||
"files": [
|
"files": [
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
||||||
"@transia/ripple-binary-codec": "^1.4.6-alpha.2",
|
"@transia/ripple-binary-codec": "^1.4.6-alpha.1",
|
||||||
"@transia/ripple-keypairs": "^1.1.8-alpha.0",
|
"@transia/ripple-keypairs": "^1.1.8-alpha.0",
|
||||||
"bignumber.js": "^9.0.0",
|
"bignumber.js": "^9.0.0",
|
||||||
"bip32": "^2.0.6",
|
"bip32": "^2.0.6",
|
||||||
|
|||||||
@@ -195,13 +195,3 @@ export interface NFTOffer {
|
|||||||
destination?: string
|
destination?: string
|
||||||
expiration?: number
|
expiration?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* This information is added to emitted Transactions.
|
|
||||||
*/
|
|
||||||
export interface EmitDetails {
|
|
||||||
EmitBurden: number
|
|
||||||
EmitGeneration: number
|
|
||||||
EmitHookHash: string
|
|
||||||
EmitParentTxnID: string
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
import { Amount } from '../common'
|
|
||||||
|
|
||||||
import BaseLedgerEntry from './BaseLedgerEntry'
|
import BaseLedgerEntry from './BaseLedgerEntry'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Escrow object type represents a held payment waiting to be
|
* The Escrow object type represents a held payment of XRP waiting to be
|
||||||
* executed or canceled.
|
* executed or canceled.
|
||||||
*
|
*
|
||||||
* @category Ledger Entries
|
* @category Ledger Entries
|
||||||
@@ -12,17 +10,17 @@ export default interface Escrow extends BaseLedgerEntry {
|
|||||||
LedgerEntryType: 'Escrow'
|
LedgerEntryType: 'Escrow'
|
||||||
/**
|
/**
|
||||||
* The address of the owner (sender) of this held payment. This is the
|
* The address of the owner (sender) of this held payment. This is the
|
||||||
* account that provided the amounts, and gets it back if the held payment is
|
* account that provided the XRP, and gets it back if the held payment is
|
||||||
* canceled.
|
* canceled.
|
||||||
*/
|
*/
|
||||||
Account: string
|
Account: string
|
||||||
/**
|
/**
|
||||||
* The destination address where the amounts are paid if the held payment is
|
* The destination address where the XRP is paid if the held payment is
|
||||||
* successful.
|
* successful.
|
||||||
*/
|
*/
|
||||||
Destination: string
|
Destination: string
|
||||||
/** The amount to be delivered by the held payment. */
|
/** The amount of XRP, in drops, to be delivered by the held payment. */
|
||||||
Amount: Amount
|
Amount: string
|
||||||
/**
|
/**
|
||||||
* A PREIMAGE-SHA-256 crypto-condition, as hexadecimal. If present, the
|
* A PREIMAGE-SHA-256 crypto-condition, as hexadecimal. If present, the
|
||||||
* EscrowFinish transaction must contain a fulfillment that satisfies this
|
* EscrowFinish transaction must contain a fulfillment that satisfies this
|
||||||
@@ -73,9 +71,4 @@ export default interface Escrow extends BaseLedgerEntry {
|
|||||||
* modified this object.
|
* modified this object.
|
||||||
*/
|
*/
|
||||||
PreviousTxnLgrSeq: number
|
PreviousTxnLgrSeq: number
|
||||||
/**
|
|
||||||
* The fee to charge when users finish an escrow, initially set on the
|
|
||||||
* creation of an escrow contract, and updated on subsequent finish transactions
|
|
||||||
*/
|
|
||||||
TransferRate?: number
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import { Amount } from '../common'
|
|
||||||
|
|
||||||
import BaseLedgerEntry from './BaseLedgerEntry'
|
import BaseLedgerEntry from './BaseLedgerEntry'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The PayChannel object type represents a payment channel. Payment channels
|
* The PayChannel object type represents a payment channel. Payment channels
|
||||||
* enable small, rapid off-ledger payments that can be later reconciled
|
* enable small, rapid off-ledger payments of XRP that can be later reconciled
|
||||||
* with the consensus ledger. A payment channel holds a balance that can
|
* with the consensus ledger. A payment channel holds a balance of XRP that can
|
||||||
* only be paid out to a specific destination address until the channel is
|
* only be paid out to a specific destination address until the channel is
|
||||||
* closed.
|
* closed.
|
||||||
*
|
*
|
||||||
@@ -20,37 +18,37 @@ export default interface PayChannel extends BaseLedgerEntry {
|
|||||||
Account: string
|
Account: string
|
||||||
/**
|
/**
|
||||||
* The destination address for this payment channel. While the payment
|
* The destination address for this payment channel. While the payment
|
||||||
* channel is open, this address is the only one that can receive amounts from the
|
* channel is open, this address is the only one that can receive XRP from the
|
||||||
* channel. This comes from the Destination field of the transaction that
|
* channel. This comes from the Destination field of the transaction that
|
||||||
* created the channel.
|
* created the channel.
|
||||||
*/
|
*/
|
||||||
Destination: string
|
Destination: string
|
||||||
/**
|
/**
|
||||||
* Total amount that has been allocated to this channel. This includes amounts
|
* Total XRP, in drops, that has been allocated to this channel. This
|
||||||
* that have been paid to the destination address. This is initially set by the
|
* includes XRP that has been paid to the destination address. This is
|
||||||
* transaction that created the channel and can be increased if the source
|
* initially set by the transaction that created the channel and can be
|
||||||
* address sends a PaymentChannelFund transaction.
|
* increased if the source address sends a PaymentChannelFund transaction.
|
||||||
*/
|
*/
|
||||||
Amount: Amount
|
Amount: string
|
||||||
/**
|
/**
|
||||||
* Total amount already paid out by the channel. The difference between this value
|
* Total XRP, in drops, already paid out by the channel. The difference
|
||||||
* and the Amount field is how much can still be paid to the destination address
|
* between this value and the Amount field is how much XRP can still be paid
|
||||||
* with PaymentChannelClaim transactions. If the channel closes, the remaining
|
* to the destination address with PaymentChannelClaim transactions. If the
|
||||||
* difference is returned to the source address.
|
* channel closes, the remaining difference is returned to the source address.
|
||||||
*/
|
*/
|
||||||
Balance: Amount
|
Balance: string
|
||||||
/**
|
/**
|
||||||
* Public key, in hexadecimal, of the key pair that can be used to sign
|
* Public key, in hexadecimal, of the key pair that can be used to sign
|
||||||
* claims against this channel. This can be any valid secp256k1 or Ed25519
|
* claims against this channel. This can be any valid secp256k1 or Ed25519
|
||||||
* public key. This is set by the transaction that created the channel and
|
* public key. This is set by the transaction that created the channel and
|
||||||
* must match the public key used in claims against the channel. The channel
|
* must match the public key used in claims against the channel. The channel
|
||||||
* source address can also send amounts from this channel to the destination
|
* source address can also send XRP from this channel to the destination
|
||||||
* without signed claims.
|
* without signed claims.
|
||||||
*/
|
*/
|
||||||
PublicKey: string
|
PublicKey: string
|
||||||
/**
|
/**
|
||||||
* Number of seconds the source address must wait to close the channel if
|
* Number of seconds the source address must wait to close the channel if
|
||||||
* it still has any amount in it. Smaller values mean that the destination
|
* it still has any XRP in it. Smaller values mean that the destination
|
||||||
* address has less time to redeem any outstanding claims after the source
|
* address has less time to redeem any outstanding claims after the source
|
||||||
* address requests to close the channel. Can be any value that fits in a
|
* address requests to close the channel. Can be any value that fits in a
|
||||||
* 32-bit unsigned integer (0 to 2^32-1). This is set by the transaction that
|
* 32-bit unsigned integer (0 to 2^32-1). This is set by the transaction that
|
||||||
@@ -106,10 +104,4 @@ export default interface PayChannel extends BaseLedgerEntry {
|
|||||||
* this object, in case the directory consists of multiple pages.
|
* this object, in case the directory consists of multiple pages.
|
||||||
*/
|
*/
|
||||||
DestinationNode?: string
|
DestinationNode?: string
|
||||||
/**
|
|
||||||
* The fee to charge when users make claims on a payment channel, initially
|
|
||||||
* set on the creation of a payment channel and updated on subsequent funding
|
|
||||||
* or claim transactions.
|
|
||||||
*/
|
|
||||||
TransferRate?: number
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
import { Amount } from '../common'
|
|
||||||
|
|
||||||
import BaseLedgerEntry from './BaseLedgerEntry'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The URIToken object type contains the
|
|
||||||
*
|
|
||||||
* @category Ledger Entries
|
|
||||||
*/
|
|
||||||
export default interface URIToken extends BaseLedgerEntry {
|
|
||||||
LedgerEntryType: 'URIToken'
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
Owner: string
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A hint indicating which page of the sender's owner directory links to this
|
|
||||||
* object, in case the directory consists of multiple pages.
|
|
||||||
*/
|
|
||||||
OwnerNode: string
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
Issuer: string
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
URI: string
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
Digest: string
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
Amount: Amount
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
Destination: string
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The identifying hash of the transaction that most recently modified this
|
|
||||||
* object.
|
|
||||||
*/
|
|
||||||
PreviousTxnID: string
|
|
||||||
/**
|
|
||||||
* The index of the ledger that contains the transaction that most recently
|
|
||||||
* modified this object.
|
|
||||||
*/
|
|
||||||
PreviousTxnLgrSeq: number
|
|
||||||
}
|
|
||||||
@@ -21,7 +21,6 @@ import PayChannel from './PayChannel'
|
|||||||
import RippleState, { RippleStateFlags } from './RippleState'
|
import RippleState, { RippleStateFlags } from './RippleState'
|
||||||
import SignerList, { SignerListFlags } from './SignerList'
|
import SignerList, { SignerListFlags } from './SignerList'
|
||||||
import Ticket from './Ticket'
|
import Ticket from './Ticket'
|
||||||
import URIToken from './URIToken'
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
AccountRoot,
|
AccountRoot,
|
||||||
@@ -49,5 +48,4 @@ export {
|
|||||||
SignerList,
|
SignerList,
|
||||||
SignerListFlags,
|
SignerListFlags,
|
||||||
Ticket,
|
Ticket,
|
||||||
URIToken,
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { Amount, LedgerIndex } from '../common'
|
import { LedgerIndex } from '../common'
|
||||||
|
|
||||||
import { BaseRequest, BaseResponse } from './baseMethod'
|
import { BaseRequest, BaseResponse } from './baseMethod'
|
||||||
|
|
||||||
interface Channel {
|
interface Channel {
|
||||||
account: string
|
account: string
|
||||||
amount: Amount
|
amount: string
|
||||||
balance: string
|
balance: string
|
||||||
channel_id: string
|
channel_id: string
|
||||||
destination_account: string
|
destination_account: string
|
||||||
@@ -15,7 +15,6 @@ interface Channel {
|
|||||||
cancel_after?: number
|
cancel_after?: number
|
||||||
source_tab?: number
|
source_tab?: number
|
||||||
destination_tag?: number
|
destination_tag?: number
|
||||||
transfer_rate?: number
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Amount, LedgerIndex } from '../common'
|
import { LedgerIndex } from '../common'
|
||||||
|
|
||||||
import { BaseRequest, BaseResponse } from './baseMethod'
|
import { BaseRequest, BaseResponse } from './baseMethod'
|
||||||
|
|
||||||
@@ -64,14 +64,6 @@ export interface Trustline {
|
|||||||
* false.
|
* false.
|
||||||
*/
|
*/
|
||||||
freeze_peer?: boolean
|
freeze_peer?: boolean
|
||||||
/**
|
|
||||||
* The total amount of FT, in drops/Amount locked in payment channels or escrow.
|
|
||||||
*/
|
|
||||||
locked_balance?: Amount
|
|
||||||
/**
|
|
||||||
* The total number of lock balances on a RippleState ledger object.
|
|
||||||
*/
|
|
||||||
lock_count?: number
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import {
|
|||||||
RippleState,
|
RippleState,
|
||||||
SignerList,
|
SignerList,
|
||||||
Ticket,
|
Ticket,
|
||||||
URIToken,
|
|
||||||
} from '../ledger'
|
} from '../ledger'
|
||||||
|
|
||||||
import { BaseRequest, BaseResponse } from './baseMethod'
|
import { BaseRequest, BaseResponse } from './baseMethod'
|
||||||
@@ -23,7 +22,6 @@ type AccountObjectType =
|
|||||||
| 'signer_list'
|
| 'signer_list'
|
||||||
| 'state'
|
| 'state'
|
||||||
| 'ticket'
|
| 'ticket'
|
||||||
| 'uritoken'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The account_objects command returns the raw ledger format for all objects
|
* The account_objects command returns the raw ledger format for all objects
|
||||||
@@ -80,7 +78,6 @@ type AccountObject =
|
|||||||
| SignerList
|
| SignerList
|
||||||
| RippleState
|
| RippleState
|
||||||
| Ticket
|
| Ticket
|
||||||
| URIToken
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Response expected from an {@link AccountObjectsRequest}.
|
* Response expected from an {@link AccountObjectsRequest}.
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import { BaseRequest, BaseResponse } from './baseMethod'
|
|||||||
*/
|
*/
|
||||||
export interface ChannelVerifyRequest extends BaseRequest {
|
export interface ChannelVerifyRequest extends BaseRequest {
|
||||||
command: 'channel_verify'
|
command: 'channel_verify'
|
||||||
/** The amount the provided signature authorizes. */
|
/** The amount of XRP, in drops, the provided signature authorizes. */
|
||||||
amount: string
|
amount: string
|
||||||
/**
|
/**
|
||||||
* The Channel ID of the channel that provides the XRP. This is a
|
* The Channel ID of the channel that provides the XRP. This is a
|
||||||
|
|||||||
@@ -79,11 +79,6 @@ export interface LedgerEntryRequest extends BaseRequest {
|
|||||||
}
|
}
|
||||||
| string
|
| string
|
||||||
|
|
||||||
/**
|
|
||||||
* The object ID of a transaction emitted by the ledger entry.
|
|
||||||
*/
|
|
||||||
emitted_txn?: string
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Escrow object to retrieve. If a string, must be the object ID of the
|
* The Escrow object to retrieve. If a string, must be the object ID of the
|
||||||
* escrow, as hexadecimal. If an object, requires owner and seq sub-fields.
|
* escrow, as hexadecimal. If an object, requires owner and seq sub-fields.
|
||||||
@@ -97,36 +92,6 @@ export interface LedgerEntryRequest extends BaseRequest {
|
|||||||
}
|
}
|
||||||
| string
|
| string
|
||||||
|
|
||||||
/**
|
|
||||||
* The hash of the Hook object to retrieve.
|
|
||||||
*/
|
|
||||||
hook_definition?: string
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Hook object to retrieve. If a string, must be the object ID of the Hook.
|
|
||||||
* If an object, requires `account` sub-field.
|
|
||||||
*/
|
|
||||||
hook?:
|
|
||||||
| {
|
|
||||||
/** The account of the Hook object. */
|
|
||||||
account: string
|
|
||||||
}
|
|
||||||
| string
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Object specifying the HookState object to retrieve. Requires the sub-fields
|
|
||||||
* `account`, `key`, and `namespace_id` to uniquely specify the HookState entry
|
|
||||||
* to retrieve.
|
|
||||||
*/
|
|
||||||
hook_state?: {
|
|
||||||
/** The account of the Hook object. */
|
|
||||||
account: string
|
|
||||||
/** The key of the state. */
|
|
||||||
key: string
|
|
||||||
/** The namespace of the state. */
|
|
||||||
namespace_id: string
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Offer object to retrieve. If a string, interpret as the unique object
|
* The Offer object to retrieve. If a string, interpret as the unique object
|
||||||
* ID to the Offer. If an object, requires the sub-fields `account` and `seq`
|
* ID to the Offer. If an object, requires the sub-fields `account` and `seq`
|
||||||
@@ -172,20 +137,40 @@ export interface LedgerEntryRequest extends BaseRequest {
|
|||||||
ticket_sequence: number
|
ticket_sequence: number
|
||||||
}
|
}
|
||||||
| string
|
| string
|
||||||
|
/**
|
||||||
|
* The object ID of a transaction emitted by the ledger entry.
|
||||||
|
*/
|
||||||
|
emitted_txn?: string
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The URIToken object to retrieve. If a string, must be the object ID of the
|
* The hash of the Hook object to retrieve.
|
||||||
* URIToken, as hexadecimal. If an object, the `issuer` and `uri`
|
|
||||||
* sub-fields are required to uniquely specify the URIToken entry.
|
|
||||||
*/
|
*/
|
||||||
uri_token?:
|
hook_definition?: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Hook object to retrieve. If a string, must be the object ID of the Hook.
|
||||||
|
* If an object, requires `account` sub-field.
|
||||||
|
*/
|
||||||
|
hook?:
|
||||||
| {
|
| {
|
||||||
/** The issuer of the URIToken object. */
|
/** The account of the Hook object. */
|
||||||
issuer: string
|
account: string
|
||||||
/** The URIToken uri string (ascii). */
|
|
||||||
uri: string
|
|
||||||
}
|
}
|
||||||
| string
|
| string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object specifying the HookState object to retrieve. Requires the sub-fields
|
||||||
|
* `account`, `key`, and `namespace_id` to uniquely specify the HookState entry
|
||||||
|
* to retrieve.
|
||||||
|
*/
|
||||||
|
hook_state?: {
|
||||||
|
/** The account of the Hook object. */
|
||||||
|
account: string
|
||||||
|
/** The key of the state. */
|
||||||
|
key: string
|
||||||
|
/** The namespace of the state. */
|
||||||
|
namespace_id: string
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ export enum AccountSetAsfFlags {
|
|||||||
*/
|
*/
|
||||||
asfAuthorizedNFTokenMinter = 10,
|
asfAuthorizedNFTokenMinter = 10,
|
||||||
/** asf 11 is reserved for Hooks amendment */
|
/** asf 11 is reserved for Hooks amendment */
|
||||||
asfTshCollect = 11,
|
|
||||||
/** Disallow other accounts from creating incoming NFTOffers */
|
/** Disallow other accounts from creating incoming NFTOffers */
|
||||||
asfDisallowIncomingNFTokenOffer = 12,
|
asfDisallowIncomingNFTokenOffer = 12,
|
||||||
/** Disallow other accounts from creating incoming Checks */
|
/** Disallow other accounts from creating incoming Checks */
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import {
|
|||||||
IssuedCurrencyAmount,
|
IssuedCurrencyAmount,
|
||||||
Memo,
|
Memo,
|
||||||
Signer,
|
Signer,
|
||||||
EmitDetails,
|
|
||||||
} from '../common'
|
} from '../common'
|
||||||
import { onlyHasFields } from '../utils'
|
import { onlyHasFields } from '../utils'
|
||||||
|
|
||||||
@@ -174,10 +173,6 @@ export interface BaseTransaction {
|
|||||||
* The hook parameters of the transaction.
|
* The hook parameters of the transaction.
|
||||||
*/
|
*/
|
||||||
HookParameters?: HookParameter[]
|
HookParameters?: HookParameter[]
|
||||||
/**
|
|
||||||
* The hook parameters of the transaction.
|
|
||||||
*/
|
|
||||||
EmitDetails?: EmitDetails
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { ValidationError } from '../../errors'
|
|||||||
import { BaseTransaction, validateBaseTransaction } from './common'
|
import { BaseTransaction, validateBaseTransaction } from './common'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return escrowed amount to the sender.
|
* Return escrowed XRP to the sender.
|
||||||
*
|
*
|
||||||
* @category Transaction Models
|
* @category Transaction Models
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,23 +1,22 @@
|
|||||||
/* eslint-disable complexity -- Necessary for validateEscrowCreate */
|
/* eslint-disable complexity -- Necessary for validateEscrowCreate */
|
||||||
import { ValidationError } from '../../errors'
|
import { ValidationError } from '../../errors'
|
||||||
import { Amount } from '../common'
|
|
||||||
|
|
||||||
import { BaseTransaction, isAmount, validateBaseTransaction } from './common'
|
import { BaseTransaction, validateBaseTransaction } from './common'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sequester amount until the escrow process either finishes or is canceled.
|
* Sequester XRP until the escrow process either finishes or is canceled.
|
||||||
*
|
*
|
||||||
* @category Transaction Models
|
* @category Transaction Models
|
||||||
*/
|
*/
|
||||||
export interface EscrowCreate extends BaseTransaction {
|
export interface EscrowCreate extends BaseTransaction {
|
||||||
TransactionType: 'EscrowCreate'
|
TransactionType: 'EscrowCreate'
|
||||||
/**
|
/**
|
||||||
* Amount to deduct from the sender's balance and escrow. Once escrowed, the
|
* Amount of XRP, in drops, to deduct from the sender's balance and escrow.
|
||||||
* amount can either go to the Destination address (after the FinishAfter time)
|
* Once escrowed, the XRP can either go to the Destination address (after the.
|
||||||
* or returned to the sender (after the CancelAfter time).
|
* FinishAfter time) or returned to the sender (after the CancelAfter time).
|
||||||
*/
|
*/
|
||||||
Amount: Amount
|
Amount: string
|
||||||
/** Address to receive escrowed amount. */
|
/** Address to receive escrowed XRP. */
|
||||||
Destination: string
|
Destination: string
|
||||||
/**
|
/**
|
||||||
* The time, in seconds since the Ripple Epoch, when this escrow expires.
|
* The time, in seconds since the Ripple Epoch, when this escrow expires.
|
||||||
@@ -26,7 +25,7 @@ export interface EscrowCreate extends BaseTransaction {
|
|||||||
*/
|
*/
|
||||||
CancelAfter?: number
|
CancelAfter?: number
|
||||||
/**
|
/**
|
||||||
* The time, in seconds since the Ripple Epoch, when the escrowed amount can be
|
* The time, in seconds since the Ripple Epoch, when the escrowed XRP can be
|
||||||
* released to the recipient. This value is immutable; the funds cannot move.
|
* released to the recipient. This value is immutable; the funds cannot move.
|
||||||
* until this time is reached.
|
* until this time is reached.
|
||||||
*/
|
*/
|
||||||
@@ -56,8 +55,8 @@ export function validateEscrowCreate(tx: Record<string, unknown>): void {
|
|||||||
throw new ValidationError('EscrowCreate: missing field Amount')
|
throw new ValidationError('EscrowCreate: missing field Amount')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof tx.Amount !== 'string' && !isAmount(tx.Amount)) {
|
if (typeof tx.Amount !== 'string') {
|
||||||
throw new ValidationError('EscrowCreate: Amount must be an Amount')
|
throw new ValidationError('EscrowCreate: Amount must be a string')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx.Destination === undefined) {
|
if (tx.Destination === undefined) {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { ValidationError } from '../../errors'
|
|||||||
import { BaseTransaction, validateBaseTransaction } from './common'
|
import { BaseTransaction, validateBaseTransaction } from './common'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deliver amount from a held payment to the recipient.
|
* Deliver XRP from a held payment to the recipient.
|
||||||
*
|
*
|
||||||
* @category Transaction Models
|
* @category Transaction Models
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import { ValidationError } from '../../errors'
|
|
||||||
|
|
||||||
import { BaseTransaction, validateBaseTransaction } from './common'
|
import { BaseTransaction, validateBaseTransaction } from './common'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -9,10 +7,6 @@ import { BaseTransaction, validateBaseTransaction } from './common'
|
|||||||
*/
|
*/
|
||||||
export interface Import extends BaseTransaction {
|
export interface Import extends BaseTransaction {
|
||||||
TransactionType: 'Import'
|
TransactionType: 'Import'
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
Issuer?: string
|
|
||||||
/**
|
/**
|
||||||
* Hex value representing a VL Blob.
|
* Hex value representing a VL Blob.
|
||||||
*/
|
*/
|
||||||
@@ -27,12 +21,4 @@ export interface Import extends BaseTransaction {
|
|||||||
*/
|
*/
|
||||||
export function validateImport(tx: Record<string, unknown>): void {
|
export function validateImport(tx: Record<string, unknown>): void {
|
||||||
validateBaseTransaction(tx)
|
validateBaseTransaction(tx)
|
||||||
|
|
||||||
if (tx.Issuer !== undefined && typeof tx.Issuer !== 'string') {
|
|
||||||
throw new ValidationError('Import: Issuer must be a string')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tx.Account === tx.Issuer) {
|
|
||||||
throw new ValidationError('Import: Issuer and Account must not be equal')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,7 @@
|
|||||||
/* eslint-disable complexity -- Necessary for validatePaymentChannelClaim */
|
/* eslint-disable complexity -- Necessary for validatePaymentChannelClaim */
|
||||||
import { ValidationError } from '../../errors'
|
import { ValidationError } from '../../errors'
|
||||||
import { Amount } from '../common'
|
|
||||||
|
|
||||||
import {
|
import { BaseTransaction, GlobalFlags, validateBaseTransaction } from './common'
|
||||||
BaseTransaction,
|
|
||||||
GlobalFlags,
|
|
||||||
validateBaseTransaction,
|
|
||||||
isAmount,
|
|
||||||
} from './common'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enum representing values for PaymentChannelClaim transaction flags.
|
* Enum representing values for PaymentChannelClaim transaction flags.
|
||||||
@@ -24,15 +18,15 @@ export enum PaymentChannelClaimFlags {
|
|||||||
/**
|
/**
|
||||||
* Request to close the channel. Only the channel source and destination
|
* Request to close the channel. Only the channel source and destination
|
||||||
* addresses can use this flag. This flag closes the channel immediately if it
|
* addresses can use this flag. This flag closes the channel immediately if it
|
||||||
* has no more funds allocated to it after processing the current claim, or if
|
* has no more XRP allocated to it after processing the current claim, or if
|
||||||
* the destination address uses it. If the source address uses this flag when
|
* the destination address uses it. If the source address uses this flag when
|
||||||
* the channel still holds an amount, this schedules the channel to close after
|
* the channel still holds XRP, this schedules the channel to close after
|
||||||
* SettleDelay seconds have passed. (Specifically, this sets the Expiration of
|
* SettleDelay seconds have passed. (Specifically, this sets the Expiration of
|
||||||
* the channel to the close time of the previous ledger plus the channel's
|
* the channel to the close time of the previous ledger plus the channel's
|
||||||
* SettleDelay time, unless the channel already has an earlier Expiration
|
* SettleDelay time, unless the channel already has an earlier Expiration
|
||||||
* time.) If the destination address uses this flag when the channel still
|
* time.) If the destination address uses this flag when the channel still
|
||||||
* holds an amount, any amount that remains after processing the claim is
|
* holds XRP, any XRP that remains after processing the claim is returned to
|
||||||
* returned to the source address.
|
* the source address.
|
||||||
*/
|
*/
|
||||||
tfClose = 0x00020000,
|
tfClose = 0x00020000,
|
||||||
}
|
}
|
||||||
@@ -84,21 +78,21 @@ export interface PaymentChannelClaimFlagsInterface extends GlobalFlags {
|
|||||||
/**
|
/**
|
||||||
* Request to close the channel. Only the channel source and destination
|
* Request to close the channel. Only the channel source and destination
|
||||||
* addresses can use this flag. This flag closes the channel immediately if it
|
* addresses can use this flag. This flag closes the channel immediately if it
|
||||||
* has no more funds allocated to it after processing the current claim, or if
|
* has no more XRP allocated to it after processing the current claim, or if
|
||||||
* the destination address uses it. If the source address uses this flag when
|
* the destination address uses it. If the source address uses this flag when
|
||||||
* the channel still holds an amount, this schedules the channel to close after
|
* the channel still holds XRP, this schedules the channel to close after
|
||||||
* SettleDelay seconds have passed. (Specifically, this sets the Expiration of
|
* SettleDelay seconds have passed. (Specifically, this sets the Expiration of
|
||||||
* the channel to the close time of the previous ledger plus the channel's
|
* the channel to the close time of the previous ledger plus the channel's
|
||||||
* SettleDelay time, unless the channel already has an earlier Expiration
|
* SettleDelay time, unless the channel already has an earlier Expiration
|
||||||
* time.) If the destination address uses this flag when the channel still
|
* time.) If the destination address uses this flag when the channel still
|
||||||
* holds an amount, any amount that remains after processing the claim is
|
* holds XRP, any XRP that remains after processing the claim is returned to
|
||||||
* returned to the source address.
|
* the source address.
|
||||||
*/
|
*/
|
||||||
tfClose?: boolean
|
tfClose?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Claim amount from a payment channel, adjust the payment channel's expiration,
|
* Claim XRP from a payment channel, adjust the payment channel's expiration,
|
||||||
* or both.
|
* or both.
|
||||||
*
|
*
|
||||||
* @category Transaction Models
|
* @category Transaction Models
|
||||||
@@ -109,18 +103,18 @@ export interface PaymentChannelClaim extends BaseTransaction {
|
|||||||
/** The unique ID of the channel as a 64-character hexadecimal string. */
|
/** The unique ID of the channel as a 64-character hexadecimal string. */
|
||||||
Channel: string
|
Channel: string
|
||||||
/**
|
/**
|
||||||
* Total amount delivered by this channel after processing this claim. Required
|
* Total amount of XRP, in drops, delivered by this channel after processing
|
||||||
* to deliver amount. Must be more than the total amount delivered by the channel
|
* this claim. Required to deliver XRP. Must be more than the total amount
|
||||||
* so far, but not greater than the Amount of the signed claim. Must be provided
|
* delivered by the channel so far, but not greater than the Amount of the
|
||||||
* except when closing the channel.
|
* signed claim. Must be provided except when closing the channel.
|
||||||
*/
|
*/
|
||||||
Balance?: Amount
|
Balance?: string
|
||||||
/**
|
/**
|
||||||
* The amount authorized by the Signature. This must match the amount in the
|
* The amount of XRP, in drops, authorized by the Signature. This must match
|
||||||
* signed message. This is the cumulative amount that can be dispensed by the
|
* the amount in the signed message. This is the cumulative amount of XRP that
|
||||||
* channel, including amounts previously redeemed. Required unless closing the channel.
|
* can be dispensed by the channel, including XRP previously redeemed.
|
||||||
*/
|
*/
|
||||||
Amount?: Amount
|
Amount?: string
|
||||||
/**
|
/**
|
||||||
* The signature of this claim, as hexadecimal. The signed message contains
|
* The signature of this claim, as hexadecimal. The signed message contains
|
||||||
* the channel ID and the amount of the claim. Required unless the sender of
|
* the channel ID and the amount of the claim. Required unless the sender of
|
||||||
@@ -153,12 +147,12 @@ export function validatePaymentChannelClaim(tx: Record<string, unknown>): void {
|
|||||||
throw new ValidationError('PaymentChannelClaim: Channel must be a string')
|
throw new ValidationError('PaymentChannelClaim: Channel must be a string')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx.Balance !== undefined && !isAmount(tx.Balance)) {
|
if (tx.Balance !== undefined && typeof tx.Balance !== 'string') {
|
||||||
throw new ValidationError('PaymentChannelClaim: Balance must be an Amount')
|
throw new ValidationError('PaymentChannelClaim: Balance must be a string')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx.Amount !== undefined && !isAmount(tx.Amount)) {
|
if (tx.Amount !== undefined && typeof tx.Amount !== 'string') {
|
||||||
throw new ValidationError('PaymentChannelClaim: Amount must be an Amount')
|
throw new ValidationError('PaymentChannelClaim: Amount must be a string')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx.Signature !== undefined && typeof tx.Signature !== 'string') {
|
if (tx.Signature !== undefined && typeof tx.Signature !== 'string') {
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
/* eslint-disable complexity -- Necessary for validatePaymentChannelCreate */
|
/* eslint-disable complexity -- Necessary for validatePaymentChannelCreate */
|
||||||
import { ValidationError } from '../../errors'
|
import { ValidationError } from '../../errors'
|
||||||
import { Amount } from '../common'
|
|
||||||
|
|
||||||
import { BaseTransaction, validateBaseTransaction, isAmount } from './common'
|
import { BaseTransaction, validateBaseTransaction } from './common'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a unidirectional channel and fund it. The address sending
|
* Create a unidirectional channel and fund it with XRP. The address sending
|
||||||
* this transaction becomes the "source address" of the payment channel.
|
* this transaction becomes the "source address" of the payment channel.
|
||||||
*
|
*
|
||||||
* @category Transaction Models
|
* @category Transaction Models
|
||||||
@@ -13,20 +12,20 @@ import { BaseTransaction, validateBaseTransaction, isAmount } from './common'
|
|||||||
export interface PaymentChannelCreate extends BaseTransaction {
|
export interface PaymentChannelCreate extends BaseTransaction {
|
||||||
TransactionType: 'PaymentChannelCreate'
|
TransactionType: 'PaymentChannelCreate'
|
||||||
/**
|
/**
|
||||||
* Amount to deduct from the sender's balance and set aside in this channel.
|
* Amount of XRP, in drops, to deduct from the sender's balance and set aside
|
||||||
* While the channel is open, the amount can only go to the Destination
|
* in this channel. While the channel is open, the XRP can only go to the
|
||||||
* address. When the channel closes, any unclaimed amount is returned to
|
* Destination address. When the channel closes, any unclaimed XRP is returned
|
||||||
* the source address's balance.
|
* to the source address's balance.
|
||||||
*/
|
*/
|
||||||
Amount: Amount
|
Amount: string
|
||||||
/**
|
/**
|
||||||
* Address to receive claims against this channel. This is also known as
|
* Address to receive XRP claims against this channel. This is also known as
|
||||||
* the "destination address" for the channel.
|
* the "destination address" for the channel.
|
||||||
*/
|
*/
|
||||||
Destination: string
|
Destination: string
|
||||||
/**
|
/**
|
||||||
* Amount of time the source address must wait before closing the channel if
|
* Amount of time the source address must wait before closing the channel if
|
||||||
* it has unclaimed amount.
|
* it has unclaimed XRP.
|
||||||
*/
|
*/
|
||||||
SettleDelay: number
|
SettleDelay: number
|
||||||
/**
|
/**
|
||||||
@@ -66,8 +65,8 @@ export function validatePaymentChannelCreate(
|
|||||||
throw new ValidationError('PaymentChannelCreate: missing Amount')
|
throw new ValidationError('PaymentChannelCreate: missing Amount')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof tx.Amount !== 'string' && !isAmount(tx.Amount)) {
|
if (typeof tx.Amount !== 'string') {
|
||||||
throw new ValidationError('PaymentChannelCreate: Amount must be an Amount')
|
throw new ValidationError('PaymentChannelCreate: Amount must be a string')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx.Destination === undefined) {
|
if (tx.Destination === undefined) {
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import { ValidationError } from '../../errors'
|
import { ValidationError } from '../../errors'
|
||||||
import { Amount } from '../common'
|
|
||||||
|
|
||||||
import { BaseTransaction, validateBaseTransaction, isAmount } from './common'
|
import { BaseTransaction, validateBaseTransaction } from './common'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add additional amount to an open payment channel, and optionally update the
|
* Add additional XRP to an open payment channel, and optionally update the
|
||||||
* expiration time of the channel. Only the source address of the channel can
|
* expiration time of the channel. Only the source address of the channel can
|
||||||
* use this transaction.
|
* use this transaction.
|
||||||
*
|
*
|
||||||
@@ -18,15 +17,16 @@ export interface PaymentChannelFund extends BaseTransaction {
|
|||||||
*/
|
*/
|
||||||
Channel: string
|
Channel: string
|
||||||
/**
|
/**
|
||||||
* Amount to add to the channel. Must be a positive amount
|
* Amount of XRP in drops to add to the channel. Must be a positive amount
|
||||||
|
* of XRP.
|
||||||
*/
|
*/
|
||||||
Amount: Amount
|
Amount: string
|
||||||
/**
|
/**
|
||||||
* New Expiration time to set for the channel in seconds since the Ripple
|
* New Expiration time to set for the channel in seconds since the Ripple
|
||||||
* Epoch. This must be later than either the current time plus the SettleDelay
|
* Epoch. This must be later than either the current time plus the SettleDelay
|
||||||
* of the channel, or the existing Expiration of the channel. After the
|
* of the channel, or the existing Expiration of the channel. After the
|
||||||
* Expiration time, any transaction that would access the channel closes the
|
* Expiration time, any transaction that would access the channel closes the
|
||||||
* channel without taking its normal action. Any unspent amount is returned to
|
* channel without taking its normal action. Any unspent XRP is returned to
|
||||||
* the source address when the channel closes. (Expiration is separate from
|
* the source address when the channel closes. (Expiration is separate from
|
||||||
* the channel's immutable CancelAfter time.) For more information, see the
|
* the channel's immutable CancelAfter time.) For more information, see the
|
||||||
* PayChannel ledger object type.
|
* PayChannel ledger object type.
|
||||||
@@ -55,8 +55,8 @@ export function validatePaymentChannelFund(tx: Record<string, unknown>): void {
|
|||||||
throw new ValidationError('PaymentChannelFund: missing Amount')
|
throw new ValidationError('PaymentChannelFund: missing Amount')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof tx.Amount !== 'string' && !isAmount(tx.Amount)) {
|
if (typeof tx.Amount !== 'string') {
|
||||||
throw new ValidationError('PaymentChannelFund: Amount must be an Amount')
|
throw new ValidationError('PaymentChannelFund: Amount must be a string')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx.Expiration !== undefined && typeof tx.Expiration !== 'number') {
|
if (tx.Expiration !== undefined && typeof tx.Expiration !== 'number') {
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ export enum SetHookFlags {
|
|||||||
hsfOverride = 0x00000001,
|
hsfOverride = 0x00000001,
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
hsfNSDelete = 0x0000002,
|
hsfNSDelete = 0x00000010,
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
hsfCollect = 0x00000004,
|
hsfCollect = 0x00000100,
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SetHookFlagsInterface extends GlobalFlags {
|
export interface SetHookFlagsInterface extends GlobalFlags {
|
||||||
@@ -41,7 +41,7 @@ export interface SetHook extends BaseTransaction {
|
|||||||
Flags?: number | SetHookFlagsInterface
|
Flags?: number | SetHookFlagsInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
const MAX_HOOKS = 10
|
const MAX_HOOKS = 4
|
||||||
const HEX_REGEX = /^[0-9A-Fa-f]{64}$/u
|
const HEX_REGEX = /^[0-9A-Fa-f]{64}$/u
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export interface SignerListSet extends BaseTransaction {
|
|||||||
* more than 32 members. No address may appear more than once in the list, nor
|
* more than 32 members. No address may appear more than once in the list, nor
|
||||||
* may the Account submitting the transaction appear in the list.
|
* may the Account submitting the transaction appear in the list.
|
||||||
*/
|
*/
|
||||||
SignerEntries?: SignerEntry[]
|
SignerEntries: SignerEntry[]
|
||||||
}
|
}
|
||||||
|
|
||||||
const MAX_SIGNERS = 32
|
const MAX_SIGNERS = 32
|
||||||
@@ -36,7 +36,6 @@ const HEX_WALLET_LOCATOR_REGEX = /^[0-9A-Fa-f]{64}$/u
|
|||||||
* @param tx - An SignerListSet Transaction.
|
* @param tx - An SignerListSet Transaction.
|
||||||
* @throws When the SignerListSet is Malformed.
|
* @throws When the SignerListSet is Malformed.
|
||||||
*/
|
*/
|
||||||
// eslint-disable-next-line complexity -- validation can be complex
|
|
||||||
export function validateSignerListSet(tx: Record<string, unknown>): void {
|
export function validateSignerListSet(tx: Record<string, unknown>): void {
|
||||||
validateBaseTransaction(tx)
|
validateBaseTransaction(tx)
|
||||||
|
|
||||||
@@ -48,10 +47,6 @@ export function validateSignerListSet(tx: Record<string, unknown>): void {
|
|||||||
throw new ValidationError('SignerListSet: invalid SignerQuorum')
|
throw new ValidationError('SignerListSet: invalid SignerQuorum')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx.SignerQuorum === 0) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tx.SignerEntries === undefined) {
|
if (tx.SignerEntries === undefined) {
|
||||||
throw new ValidationError('SignerListSet: missing field SignerEntries')
|
throw new ValidationError('SignerListSet: missing field SignerEntries')
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ export function hashSignedTx(tx: Transaction | string): string {
|
|||||||
txObject = tx
|
txObject = tx
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!txObject.EmitDetails && txObject.TxnSignature === undefined && txObject.Signers === undefined) {
|
if (txObject.TxnSignature === undefined && txObject.Signers === undefined) {
|
||||||
throw new ValidationError('The transaction must be signed to hash it.')
|
throw new ValidationError('The transaction must be signed to hash it.')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
import { decodeAccountID } from '@transia/ripple-address-codec'
|
import { decodeAccountID } from '@transia/ripple-address-codec'
|
||||||
import BigNumber from 'bignumber.js'
|
import BigNumber from 'bignumber.js'
|
||||||
|
|
||||||
import { convertStringToHex } from '../stringConversion'
|
|
||||||
|
|
||||||
import hashLedger, {
|
import hashLedger, {
|
||||||
hashLedgerHeader,
|
hashLedgerHeader,
|
||||||
hashSignedTx,
|
hashSignedTx,
|
||||||
@@ -186,18 +184,4 @@ export function hashPaymentChannel(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Compute the Hash of an URIToken LedgerEntry.
|
|
||||||
*
|
|
||||||
* @param issuer - Address of the issuer of the URIToken.
|
|
||||||
* @param uri - string uri of the URIToken (not the hex).
|
|
||||||
* @returns The hash of the URIToken LedgerEntry.
|
|
||||||
* @category Utilities
|
|
||||||
*/
|
|
||||||
export function hashURIToken(issuer: string, uri: string): string {
|
|
||||||
return sha512Half(
|
|
||||||
ledgerSpaceHex('uriToken') + addressToHex(issuer) + convertStringToHex(uri),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export { hashLedgerHeader, hashSignedTx, hashLedger, hashStateTree, hashTxTree }
|
export { hashLedgerHeader, hashSignedTx, hashLedger, hashStateTree, hashTxTree }
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ const ledgerSpaces = {
|
|||||||
signerList: 'S',
|
signerList: 'S',
|
||||||
paychan: 'x',
|
paychan: 'x',
|
||||||
check: 'C',
|
check: 'C',
|
||||||
uriToken: 'U',
|
|
||||||
depositPreauth: 'p',
|
depositPreauth: 'p',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ import {
|
|||||||
hashLedgerHeader,
|
hashLedgerHeader,
|
||||||
hashEscrow,
|
hashEscrow,
|
||||||
hashPaymentChannel,
|
hashPaymentChannel,
|
||||||
hashURIToken,
|
|
||||||
} from './hashes'
|
} from './hashes'
|
||||||
import { calculateHookOn, hexHookParameters, TTS } from './hooks'
|
import { calculateHookOn, hexHookParameters, TTS } from './hooks'
|
||||||
import parseNFTokenID from './parseNFTokenID'
|
import parseNFTokenID from './parseNFTokenID'
|
||||||
@@ -174,7 +173,6 @@ const hashes = {
|
|||||||
hashLedgerHeader,
|
hashLedgerHeader,
|
||||||
hashEscrow,
|
hashEscrow,
|
||||||
hashPaymentChannel,
|
hashPaymentChannel,
|
||||||
hashURIToken,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
|||||||
@@ -18,9 +18,8 @@ describe('SignerListSet', function () {
|
|||||||
})
|
})
|
||||||
afterEach(async () => teardownClient(testContext))
|
afterEach(async () => teardownClient(testContext))
|
||||||
|
|
||||||
// Add signerlist
|
|
||||||
it(
|
it(
|
||||||
'add',
|
'base',
|
||||||
async () => {
|
async () => {
|
||||||
const tx: SignerListSet = {
|
const tx: SignerListSet = {
|
||||||
TransactionType: 'SignerListSet',
|
TransactionType: 'SignerListSet',
|
||||||
@@ -45,18 +44,4 @@ describe('SignerListSet', function () {
|
|||||||
},
|
},
|
||||||
TIMEOUT,
|
TIMEOUT,
|
||||||
)
|
)
|
||||||
|
|
||||||
// Remove signerlist
|
|
||||||
it(
|
|
||||||
'remove',
|
|
||||||
async () => {
|
|
||||||
const tx: SignerListSet = {
|
|
||||||
TransactionType: 'SignerListSet',
|
|
||||||
Account: testContext.wallet.classicAddress,
|
|
||||||
SignerQuorum: 0,
|
|
||||||
}
|
|
||||||
await testTransaction(testContext.client, tx, testContext.wallet)
|
|
||||||
},
|
|
||||||
TIMEOUT,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -82,12 +82,12 @@ describe('EscrowCreate', function () {
|
|||||||
assert.throws(
|
assert.throws(
|
||||||
() => validateEscrowCreate(escrow),
|
() => validateEscrowCreate(escrow),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
'EscrowCreate: Amount must be an Amount',
|
'EscrowCreate: Amount must be a string',
|
||||||
)
|
)
|
||||||
assert.throws(
|
assert.throws(
|
||||||
() => validate(escrow),
|
() => validate(escrow),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
'EscrowCreate: Amount must be an Amount',
|
'EscrowCreate: Amount must be a string',
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -77,12 +77,12 @@ describe('PaymentChannelClaim', function () {
|
|||||||
assert.throws(
|
assert.throws(
|
||||||
() => validatePaymentChannelClaim(channel),
|
() => validatePaymentChannelClaim(channel),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
'PaymentChannelClaim: Balance must be an Amount',
|
'PaymentChannelClaim: Balance must be a string',
|
||||||
)
|
)
|
||||||
assert.throws(
|
assert.throws(
|
||||||
() => validate(channel),
|
() => validate(channel),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
'PaymentChannelClaim: Balance must be an Amount',
|
'PaymentChannelClaim: Balance must be a string',
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -92,12 +92,12 @@ describe('PaymentChannelClaim', function () {
|
|||||||
assert.throws(
|
assert.throws(
|
||||||
() => validatePaymentChannelClaim(channel),
|
() => validatePaymentChannelClaim(channel),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
'PaymentChannelClaim: Amount must be an Amount',
|
'PaymentChannelClaim: Amount must be a string',
|
||||||
)
|
)
|
||||||
assert.throws(
|
assert.throws(
|
||||||
() => validate(channel),
|
() => validate(channel),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
'PaymentChannelClaim: Amount must be an Amount',
|
'PaymentChannelClaim: Amount must be a string',
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -106,12 +106,12 @@ describe('PaymentChannelCreate', function () {
|
|||||||
assert.throws(
|
assert.throws(
|
||||||
() => validatePaymentChannelCreate(channel),
|
() => validatePaymentChannelCreate(channel),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
'PaymentChannelCreate: Amount must be an Amount',
|
'PaymentChannelCreate: Amount must be a string',
|
||||||
)
|
)
|
||||||
assert.throws(
|
assert.throws(
|
||||||
() => validate(channel),
|
() => validate(channel),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
'PaymentChannelCreate: Amount must be an Amount',
|
'PaymentChannelCreate: Amount must be a string',
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -70,12 +70,12 @@ describe('PaymentChannelFund', function () {
|
|||||||
assert.throws(
|
assert.throws(
|
||||||
() => validatePaymentChannelFund(channel),
|
() => validatePaymentChannelFund(channel),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
'PaymentChannelFund: Amount must be an Amount',
|
'PaymentChannelFund: Amount must be a string',
|
||||||
)
|
)
|
||||||
assert.throws(
|
assert.throws(
|
||||||
() => validate(channel),
|
() => validate(channel),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
'PaymentChannelFund: Amount must be an Amount',
|
'PaymentChannelFund: Amount must be a string',
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ describe('SetHook', function () {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it(`throws w/ maximum of 10 members allowed in Hooks`, function () {
|
it(`throws w/ maximum of 4 members allowed in Hooks`, function () {
|
||||||
setHookTx.Hooks = []
|
setHookTx.Hooks = []
|
||||||
const hook = {
|
const hook = {
|
||||||
Hook: {
|
Hook: {
|
||||||
@@ -88,14 +88,8 @@ describe('SetHook', function () {
|
|||||||
setHookTx.Hooks.push(hook)
|
setHookTx.Hooks.push(hook)
|
||||||
setHookTx.Hooks.push(hook)
|
setHookTx.Hooks.push(hook)
|
||||||
setHookTx.Hooks.push(hook)
|
setHookTx.Hooks.push(hook)
|
||||||
setHookTx.Hooks.push(hook)
|
|
||||||
setHookTx.Hooks.push(hook)
|
|
||||||
setHookTx.Hooks.push(hook)
|
|
||||||
setHookTx.Hooks.push(hook)
|
|
||||||
setHookTx.Hooks.push(hook)
|
|
||||||
setHookTx.Hooks.push(hook)
|
|
||||||
|
|
||||||
const errorMessage = 'SetHook: maximum of 10 hooks allowed in Hooks'
|
const errorMessage = 'SetHook: maximum of 4 hooks allowed in Hooks'
|
||||||
assert.throws(
|
assert.throws(
|
||||||
() => validateSetHook(setHookTx),
|
() => validateSetHook(setHookTx),
|
||||||
ValidationError,
|
ValidationError,
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import {
|
|||||||
hashAccountRoot,
|
hashAccountRoot,
|
||||||
hashOfferId,
|
hashOfferId,
|
||||||
hashSignerListId,
|
hashSignerListId,
|
||||||
hashURIToken,
|
|
||||||
} from '../../src/utils/hashes'
|
} from '../../src/utils/hashes'
|
||||||
import fixtures from '../fixtures/rippled'
|
import fixtures from '../fixtures/rippled'
|
||||||
import { assertResultMatch } from '../testUtils'
|
import { assertResultMatch } from '../testUtils'
|
||||||
@@ -144,16 +143,6 @@ describe('Hashes', function () {
|
|||||||
assert.equal(actualEntryHash, expectedEntryHash)
|
assert.equal(actualEntryHash, expectedEntryHash)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('calcURITokenEntryHash', function () {
|
|
||||||
const issuer = 'rDx69ebzbowuqztksVDmZXjizTd12BVr4x'
|
|
||||||
const uri = 'ipfs://cid'
|
|
||||||
const expectedEntryHash =
|
|
||||||
'AFC4233E5C4094952DEF5483DC41488C8744D1268F897C0CB25DE66399591399'
|
|
||||||
const actualEntryHash = hashURIToken(issuer, uri)
|
|
||||||
|
|
||||||
assert.equal(actualEntryHash, expectedEntryHash)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('Hash a signed transaction correctly', function () {
|
it('Hash a signed transaction correctly', function () {
|
||||||
const expected_hash =
|
const expected_hash =
|
||||||
'458101D51051230B1D56E9ACAFAA34451BF65FA000F95DF6F0FF5B3A62D83FC2'
|
'458101D51051230B1D56E9ACAFAA34451BF65FA000F95DF6F0FF5B3A62D83FC2'
|
||||||
|
|||||||
Reference in New Issue
Block a user