mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-12-01 01:25:48 +00:00
Fix preparePayment when using source.amount/destination.minAmount (#1295)
See: https://github.com/ripple/ripple-lib/issues/1237#issuecomment-631670946 Fix #1237 Thanks to @leobel
This commit is contained in:
@@ -2,6 +2,11 @@ import {assertResultMatch, TestSuite, assertRejects} from '../../utils'
|
||||
import responses from '../../fixtures/responses'
|
||||
import requests from '../../fixtures/requests'
|
||||
import {ValidationError} from 'ripple-api/common/errors'
|
||||
import binary from 'ripple-binary-codec'
|
||||
import assert from 'assert-diff'
|
||||
import {RippleAPI} from 'ripple-api'
|
||||
|
||||
const {schemaValidator} = RippleAPI._PRIVATE
|
||||
const instructionsWithMaxLedgerVersionOffset = {maxLedgerVersionOffset: 100}
|
||||
const {preparePayment: REQUEST_FIXTURES} = requests
|
||||
const {preparePayment: RESPONSE_FIXTURES} = responses
|
||||
@@ -288,6 +293,55 @@ export default <TestSuite>{
|
||||
assertResultMatch(response, RESPONSE_FIXTURES.noCounterparty, 'prepare')
|
||||
},
|
||||
|
||||
'preparePayment with source.amount/destination.minAmount can be signed': async (api, address) => {
|
||||
// See also: 'sign succeeds with source.amount/destination.minAmount'
|
||||
|
||||
const localInstructions = {
|
||||
...instructionsWithMaxLedgerVersionOffset,
|
||||
sequence: 23
|
||||
}
|
||||
const response = await api.preparePayment(
|
||||
address,
|
||||
{
|
||||
"source": {
|
||||
address,
|
||||
"amount": {
|
||||
"currency": "GBP",
|
||||
"value": "0.1",
|
||||
"counterparty": "rpat5TmYjDsnFSStmgTumFgXCM9eqsWPro"
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"address": "rEX4LtGJubaUcMWCJULcy4NVxGT9ZEMVRq",
|
||||
"minAmount": {
|
||||
"currency": "USD",
|
||||
"value": "0.1248548562296331",
|
||||
"counterparty": "rMaa8VLBTjwTJWA2kSme4Sqgphhr6Lr6FH"
|
||||
}
|
||||
}
|
||||
},
|
||||
localInstructions
|
||||
)
|
||||
|
||||
// Important: check that the prepared transaction can actually be signed
|
||||
// https://github.com/ripple/ripple-lib/issues/1237#issuecomment-631670946
|
||||
|
||||
const secret = 'shotKgaEotpcYsshSE39vmSnBDRim'
|
||||
const result = api.sign(response.txJSON, secret)
|
||||
const expectedResult = {
|
||||
signedTransaction:
|
||||
'12000022800200002400000017201B0086955361EC6386F26FC0FFFF0000000000000000000000005553440000000000DC596C88BCDE4E818D416FCDEEBF2C8656BADC9A68400000000000000C69D4438D7EA4C6800000000000000000000000000047425000000000000C155FFE99C8C91F67083CEFFDB69EBFE76348CA6AD4446F8C5D8A5E0B0000000000000000000000005553440000000000DC596C88BCDE4E818D416FCDEEBF2C8656BADC9A7321022B05847086686F9D0499B13136B94AD4323EE1B67D4C429ECC987AB35ACFA34574473045022100D9634523D8E232D4A7807A71856023D82AC928FA29848571B820867898413B5F022041AC00EC1F81A26A6504EBF844A38CC3204694EF2CC1A97A87632721631F93DA81145E7B112523F68D2F5E879DB4EAC51C6698A6930483149F500E50C2F016CA01945E5A1E5846B61EF2D376',
|
||||
id: '1C558AA9B926C24FB6BBD6950B2DB1350A83F9F12E4385208867907019761A2D'
|
||||
}
|
||||
const decoded = binary.decode(result.signedTransaction)
|
||||
assert(
|
||||
decoded.Flags === 2147614720,
|
||||
`Flags = ${decoded.Flags}, should be 2147614720`
|
||||
)
|
||||
assert.deepEqual(result, expectedResult)
|
||||
schemaValidator.schemaValidate('sign', result)
|
||||
},
|
||||
|
||||
'destination.minAmount': async (api, address) => {
|
||||
const response = await api.preparePayment(
|
||||
address,
|
||||
|
||||
Reference in New Issue
Block a user