xrpl 4.1.0 → 4.2.0-batch.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/xrpl-latest-min.js +3 -0
- package/build/xrpl-latest-min.js.map +1 -0
- package/build/xrpl-latest.js +528 -83
- package/build/xrpl-latest.js.map +1 -1
- package/dist/npm/Wallet/batchSigner.d.ts +8 -0
- package/dist/npm/Wallet/batchSigner.d.ts.map +1 -0
- package/dist/npm/Wallet/batchSigner.js +124 -0
- package/dist/npm/Wallet/batchSigner.js.map +1 -0
- package/dist/npm/Wallet/defaultFaucets.d.ts +2 -1
- package/dist/npm/Wallet/defaultFaucets.d.ts.map +1 -1
- package/dist/npm/Wallet/defaultFaucets.js +5 -0
- package/dist/npm/Wallet/defaultFaucets.js.map +1 -1
- package/dist/npm/Wallet/index.d.ts.map +1 -1
- package/dist/npm/Wallet/index.js +8 -2
- package/dist/npm/Wallet/index.js.map +1 -1
- package/dist/npm/client/RequestManager.d.ts.map +1 -1
- package/dist/npm/client/RequestManager.js +3 -3
- package/dist/npm/client/RequestManager.js.map +1 -1
- package/dist/npm/client/connection.d.ts.map +1 -1
- package/dist/npm/client/connection.js.map +1 -1
- package/dist/npm/client/index.d.ts +4 -0
- package/dist/npm/client/index.d.ts.map +1 -1
- package/dist/npm/client/index.js +16 -9
- package/dist/npm/client/index.js.map +1 -1
- package/dist/npm/models/index.d.ts +1 -1
- package/dist/npm/models/index.d.ts.map +1 -1
- package/dist/npm/models/index.js +3 -2
- package/dist/npm/models/index.js.map +1 -1
- package/dist/npm/models/ledger/Credential.d.ts +2 -2
- package/dist/npm/models/ledger/Credential.d.ts.map +1 -1
- package/dist/npm/models/ledger/LedgerEntry.d.ts +3 -2
- package/dist/npm/models/ledger/LedgerEntry.d.ts.map +1 -1
- package/dist/npm/models/ledger/PermissionedDomain.d.ts +11 -0
- package/dist/npm/models/ledger/PermissionedDomain.d.ts.map +1 -0
- package/dist/npm/models/ledger/PermissionedDomain.js +3 -0
- package/dist/npm/models/ledger/PermissionedDomain.js.map +1 -0
- package/dist/npm/models/ledger/RippleState.d.ts +3 -1
- package/dist/npm/models/ledger/RippleState.d.ts.map +1 -1
- package/dist/npm/models/ledger/RippleState.js +2 -0
- package/dist/npm/models/ledger/RippleState.js.map +1 -1
- package/dist/npm/models/methods/baseMethod.d.ts +1 -0
- package/dist/npm/models/methods/baseMethod.d.ts.map +1 -1
- package/dist/npm/models/methods/index.d.ts +5 -4
- package/dist/npm/models/methods/index.d.ts.map +1 -1
- package/dist/npm/models/methods/ledger.d.ts +2 -2
- package/dist/npm/models/methods/ledger.d.ts.map +1 -1
- package/dist/npm/models/methods/serverState.d.ts +1 -0
- package/dist/npm/models/methods/serverState.d.ts.map +1 -1
- package/dist/npm/models/methods/simulate.d.ts +42 -0
- package/dist/npm/models/methods/simulate.d.ts.map +1 -0
- package/dist/npm/models/methods/simulate.js +3 -0
- package/dist/npm/models/methods/simulate.js.map +1 -0
- package/dist/npm/models/transactions/AMMClawback.d.ts +17 -0
- package/dist/npm/models/transactions/AMMClawback.d.ts.map +1 -0
- package/dist/npm/models/transactions/AMMClawback.js +34 -0
- package/dist/npm/models/transactions/AMMClawback.js.map +1 -0
- package/dist/npm/models/transactions/AMMDeposit.d.ts +2 -2
- package/dist/npm/models/transactions/AMMDeposit.d.ts.map +1 -1
- package/dist/npm/models/transactions/AMMWithdraw.d.ts +2 -2
- package/dist/npm/models/transactions/AMMWithdraw.d.ts.map +1 -1
- package/dist/npm/models/transactions/MPTokenAuthorize.d.ts +2 -2
- package/dist/npm/models/transactions/MPTokenAuthorize.d.ts.map +1 -1
- package/dist/npm/models/transactions/MPTokenIssuanceCreate.d.ts +2 -2
- package/dist/npm/models/transactions/MPTokenIssuanceCreate.d.ts.map +1 -1
- package/dist/npm/models/transactions/MPTokenIssuanceCreate.js.map +1 -1
- package/dist/npm/models/transactions/MPTokenIssuanceSet.d.ts +2 -2
- package/dist/npm/models/transactions/MPTokenIssuanceSet.d.ts.map +1 -1
- package/dist/npm/models/transactions/NFTokenCreateOffer.d.ts +2 -2
- package/dist/npm/models/transactions/NFTokenCreateOffer.d.ts.map +1 -1
- package/dist/npm/models/transactions/NFTokenMint.d.ts +5 -3
- package/dist/npm/models/transactions/NFTokenMint.d.ts.map +1 -1
- package/dist/npm/models/transactions/NFTokenMint.js +1 -0
- package/dist/npm/models/transactions/NFTokenMint.js.map +1 -1
- package/dist/npm/models/transactions/NFTokenModify.d.ts +9 -0
- package/dist/npm/models/transactions/NFTokenModify.d.ts.map +1 -0
- package/dist/npm/models/transactions/NFTokenModify.js +22 -0
- package/dist/npm/models/transactions/NFTokenModify.js.map +1 -0
- package/dist/npm/models/transactions/XChainModifyBridge.d.ts +2 -2
- package/dist/npm/models/transactions/XChainModifyBridge.d.ts.map +1 -1
- package/dist/npm/models/transactions/accountDelete.d.ts.map +1 -1
- package/dist/npm/models/transactions/accountDelete.js +1 -1
- package/dist/npm/models/transactions/accountDelete.js.map +1 -1
- package/dist/npm/models/transactions/accountSet.d.ts +2 -2
- package/dist/npm/models/transactions/accountSet.d.ts.map +1 -1
- package/dist/npm/models/transactions/accountSet.js.map +1 -1
- package/dist/npm/models/transactions/batch.d.ts +39 -0
- package/dist/npm/models/transactions/batch.d.ts.map +1 -0
- package/dist/npm/models/transactions/batch.js +62 -0
- package/dist/npm/models/transactions/batch.js.map +1 -0
- package/dist/npm/models/transactions/common.d.ts +21 -6
- package/dist/npm/models/transactions/common.d.ts.map +1 -1
- package/dist/npm/models/transactions/common.js +52 -16
- package/dist/npm/models/transactions/common.js.map +1 -1
- package/dist/npm/models/transactions/depositPreauth.d.ts.map +1 -1
- package/dist/npm/models/transactions/depositPreauth.js +2 -2
- package/dist/npm/models/transactions/depositPreauth.js.map +1 -1
- package/dist/npm/models/transactions/escrowFinish.d.ts.map +1 -1
- package/dist/npm/models/transactions/escrowFinish.js +1 -1
- package/dist/npm/models/transactions/escrowFinish.js.map +1 -1
- package/dist/npm/models/transactions/index.d.ts +6 -1
- package/dist/npm/models/transactions/index.d.ts.map +1 -1
- package/dist/npm/models/transactions/index.js +5 -1
- package/dist/npm/models/transactions/index.js.map +1 -1
- package/dist/npm/models/transactions/metadata.d.ts +1 -0
- package/dist/npm/models/transactions/metadata.d.ts.map +1 -1
- package/dist/npm/models/transactions/offerCreate.d.ts +2 -2
- package/dist/npm/models/transactions/offerCreate.d.ts.map +1 -1
- package/dist/npm/models/transactions/payment.d.ts +2 -2
- package/dist/npm/models/transactions/payment.d.ts.map +1 -1
- package/dist/npm/models/transactions/payment.js +1 -1
- package/dist/npm/models/transactions/payment.js.map +1 -1
- package/dist/npm/models/transactions/paymentChannelClaim.d.ts +2 -2
- package/dist/npm/models/transactions/paymentChannelClaim.d.ts.map +1 -1
- package/dist/npm/models/transactions/paymentChannelClaim.js +1 -1
- package/dist/npm/models/transactions/paymentChannelClaim.js.map +1 -1
- package/dist/npm/models/transactions/permissionedDomainDelete.d.ts +7 -0
- package/dist/npm/models/transactions/permissionedDomainDelete.d.ts.map +1 -0
- package/dist/npm/models/transactions/permissionedDomainDelete.js +10 -0
- package/dist/npm/models/transactions/permissionedDomainDelete.js.map +1 -0
- package/dist/npm/models/transactions/permissionedDomainSet.d.ts +9 -0
- package/dist/npm/models/transactions/permissionedDomainSet.d.ts.map +1 -0
- package/dist/npm/models/transactions/permissionedDomainSet.js +13 -0
- package/dist/npm/models/transactions/permissionedDomainSet.js.map +1 -0
- package/dist/npm/models/transactions/transaction.d.ts +6 -1
- package/dist/npm/models/transactions/transaction.d.ts.map +1 -1
- package/dist/npm/models/transactions/transaction.js +24 -1
- package/dist/npm/models/transactions/transaction.js.map +1 -1
- package/dist/npm/models/transactions/trustSet.d.ts +7 -3
- package/dist/npm/models/transactions/trustSet.d.ts.map +1 -1
- package/dist/npm/models/transactions/trustSet.js +2 -0
- package/dist/npm/models/transactions/trustSet.js.map +1 -1
- package/dist/npm/models/utils/flags.d.ts +2 -0
- package/dist/npm/models/utils/flags.d.ts.map +1 -1
- package/dist/npm/models/utils/flags.js +59 -26
- package/dist/npm/models/utils/flags.js.map +1 -1
- package/dist/npm/snippets/tsconfig.tsbuildinfo +1 -1
- package/dist/npm/src/Wallet/batchSigner.d.ts +8 -0
- package/dist/npm/src/Wallet/batchSigner.d.ts.map +1 -0
- package/dist/npm/src/Wallet/batchSigner.js +124 -0
- package/dist/npm/src/Wallet/batchSigner.js.map +1 -0
- package/dist/npm/src/Wallet/defaultFaucets.d.ts +2 -1
- package/dist/npm/src/Wallet/defaultFaucets.d.ts.map +1 -1
- package/dist/npm/src/Wallet/defaultFaucets.js +5 -0
- package/dist/npm/src/Wallet/defaultFaucets.js.map +1 -1
- package/dist/npm/src/Wallet/index.d.ts.map +1 -1
- package/dist/npm/src/Wallet/index.js +8 -2
- package/dist/npm/src/Wallet/index.js.map +1 -1
- package/dist/npm/src/client/RequestManager.d.ts.map +1 -1
- package/dist/npm/src/client/RequestManager.js +3 -3
- package/dist/npm/src/client/RequestManager.js.map +1 -1
- package/dist/npm/src/client/connection.d.ts.map +1 -1
- package/dist/npm/src/client/connection.js.map +1 -1
- package/dist/npm/src/client/index.d.ts +4 -0
- package/dist/npm/src/client/index.d.ts.map +1 -1
- package/dist/npm/src/client/index.js +16 -9
- package/dist/npm/src/client/index.js.map +1 -1
- package/dist/npm/src/models/index.d.ts +1 -1
- package/dist/npm/src/models/index.d.ts.map +1 -1
- package/dist/npm/src/models/index.js +3 -2
- package/dist/npm/src/models/index.js.map +1 -1
- package/dist/npm/src/models/ledger/Credential.d.ts +2 -2
- package/dist/npm/src/models/ledger/Credential.d.ts.map +1 -1
- package/dist/npm/src/models/ledger/LedgerEntry.d.ts +3 -2
- package/dist/npm/src/models/ledger/LedgerEntry.d.ts.map +1 -1
- package/dist/npm/src/models/ledger/PermissionedDomain.d.ts +11 -0
- package/dist/npm/src/models/ledger/PermissionedDomain.d.ts.map +1 -0
- package/dist/npm/src/models/ledger/PermissionedDomain.js +3 -0
- package/dist/npm/src/models/ledger/PermissionedDomain.js.map +1 -0
- package/dist/npm/src/models/ledger/RippleState.d.ts +3 -1
- package/dist/npm/src/models/ledger/RippleState.d.ts.map +1 -1
- package/dist/npm/src/models/ledger/RippleState.js +2 -0
- package/dist/npm/src/models/ledger/RippleState.js.map +1 -1
- package/dist/npm/src/models/methods/baseMethod.d.ts +1 -0
- package/dist/npm/src/models/methods/baseMethod.d.ts.map +1 -1
- package/dist/npm/src/models/methods/index.d.ts +5 -4
- package/dist/npm/src/models/methods/index.d.ts.map +1 -1
- package/dist/npm/src/models/methods/ledger.d.ts +2 -2
- package/dist/npm/src/models/methods/ledger.d.ts.map +1 -1
- package/dist/npm/src/models/methods/serverState.d.ts +1 -0
- package/dist/npm/src/models/methods/serverState.d.ts.map +1 -1
- package/dist/npm/src/models/methods/simulate.d.ts +42 -0
- package/dist/npm/src/models/methods/simulate.d.ts.map +1 -0
- package/dist/npm/src/models/methods/simulate.js +3 -0
- package/dist/npm/src/models/methods/simulate.js.map +1 -0
- package/dist/npm/src/models/transactions/AMMClawback.d.ts +17 -0
- package/dist/npm/src/models/transactions/AMMClawback.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/AMMClawback.js +34 -0
- package/dist/npm/src/models/transactions/AMMClawback.js.map +1 -0
- package/dist/npm/src/models/transactions/AMMDeposit.d.ts +2 -2
- package/dist/npm/src/models/transactions/AMMDeposit.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/AMMWithdraw.d.ts +2 -2
- package/dist/npm/src/models/transactions/AMMWithdraw.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/MPTokenAuthorize.d.ts +2 -2
- package/dist/npm/src/models/transactions/MPTokenAuthorize.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/MPTokenIssuanceCreate.d.ts +2 -2
- package/dist/npm/src/models/transactions/MPTokenIssuanceCreate.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/MPTokenIssuanceCreate.js.map +1 -1
- package/dist/npm/src/models/transactions/MPTokenIssuanceSet.d.ts +2 -2
- package/dist/npm/src/models/transactions/MPTokenIssuanceSet.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/NFTokenCreateOffer.d.ts +2 -2
- package/dist/npm/src/models/transactions/NFTokenCreateOffer.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/NFTokenMint.d.ts +5 -3
- package/dist/npm/src/models/transactions/NFTokenMint.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/NFTokenMint.js +1 -0
- package/dist/npm/src/models/transactions/NFTokenMint.js.map +1 -1
- package/dist/npm/src/models/transactions/NFTokenModify.d.ts +9 -0
- package/dist/npm/src/models/transactions/NFTokenModify.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/NFTokenModify.js +22 -0
- package/dist/npm/src/models/transactions/NFTokenModify.js.map +1 -0
- package/dist/npm/src/models/transactions/XChainModifyBridge.d.ts +2 -2
- package/dist/npm/src/models/transactions/XChainModifyBridge.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/accountDelete.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/accountDelete.js +1 -1
- package/dist/npm/src/models/transactions/accountDelete.js.map +1 -1
- package/dist/npm/src/models/transactions/accountSet.d.ts +2 -2
- package/dist/npm/src/models/transactions/accountSet.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/accountSet.js.map +1 -1
- package/dist/npm/src/models/transactions/batch.d.ts +39 -0
- package/dist/npm/src/models/transactions/batch.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/batch.js +62 -0
- package/dist/npm/src/models/transactions/batch.js.map +1 -0
- package/dist/npm/src/models/transactions/common.d.ts +21 -6
- package/dist/npm/src/models/transactions/common.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/common.js +52 -16
- package/dist/npm/src/models/transactions/common.js.map +1 -1
- package/dist/npm/src/models/transactions/depositPreauth.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/depositPreauth.js +2 -2
- package/dist/npm/src/models/transactions/depositPreauth.js.map +1 -1
- package/dist/npm/src/models/transactions/escrowFinish.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/escrowFinish.js +1 -1
- package/dist/npm/src/models/transactions/escrowFinish.js.map +1 -1
- package/dist/npm/src/models/transactions/index.d.ts +6 -1
- package/dist/npm/src/models/transactions/index.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/index.js +5 -1
- package/dist/npm/src/models/transactions/index.js.map +1 -1
- package/dist/npm/src/models/transactions/metadata.d.ts +1 -0
- package/dist/npm/src/models/transactions/metadata.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/offerCreate.d.ts +2 -2
- package/dist/npm/src/models/transactions/offerCreate.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/payment.d.ts +2 -2
- package/dist/npm/src/models/transactions/payment.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/payment.js +1 -1
- package/dist/npm/src/models/transactions/payment.js.map +1 -1
- package/dist/npm/src/models/transactions/paymentChannelClaim.d.ts +2 -2
- package/dist/npm/src/models/transactions/paymentChannelClaim.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/paymentChannelClaim.js +1 -1
- package/dist/npm/src/models/transactions/paymentChannelClaim.js.map +1 -1
- package/dist/npm/src/models/transactions/permissionedDomainDelete.d.ts +7 -0
- package/dist/npm/src/models/transactions/permissionedDomainDelete.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/permissionedDomainDelete.js +10 -0
- package/dist/npm/src/models/transactions/permissionedDomainDelete.js.map +1 -0
- package/dist/npm/src/models/transactions/permissionedDomainSet.d.ts +9 -0
- package/dist/npm/src/models/transactions/permissionedDomainSet.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/permissionedDomainSet.js +13 -0
- package/dist/npm/src/models/transactions/permissionedDomainSet.js.map +1 -0
- package/dist/npm/src/models/transactions/transaction.d.ts +6 -1
- package/dist/npm/src/models/transactions/transaction.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/transaction.js +24 -1
- package/dist/npm/src/models/transactions/transaction.js.map +1 -1
- package/dist/npm/src/models/transactions/trustSet.d.ts +7 -3
- package/dist/npm/src/models/transactions/trustSet.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/trustSet.js +2 -0
- package/dist/npm/src/models/transactions/trustSet.js.map +1 -1
- package/dist/npm/src/models/utils/flags.d.ts +2 -0
- package/dist/npm/src/models/utils/flags.d.ts.map +1 -1
- package/dist/npm/src/models/utils/flags.js +59 -26
- package/dist/npm/src/models/utils/flags.js.map +1 -1
- package/dist/npm/src/sugar/autofill.d.ts +3 -1
- package/dist/npm/src/sugar/autofill.d.ts.map +1 -1
- package/dist/npm/src/sugar/autofill.js +100 -5
- package/dist/npm/src/sugar/autofill.js.map +1 -1
- package/dist/npm/src/sugar/submit.d.ts.map +1 -1
- package/dist/npm/src/sugar/submit.js +7 -7
- package/dist/npm/src/sugar/submit.js.map +1 -1
- package/dist/npm/src/utils/hashes/hashLedger.d.ts.map +1 -1
- package/dist/npm/src/utils/hashes/hashLedger.js +4 -1
- package/dist/npm/src/utils/hashes/hashLedger.js.map +1 -1
- package/dist/npm/sugar/autofill.d.ts +3 -1
- package/dist/npm/sugar/autofill.d.ts.map +1 -1
- package/dist/npm/sugar/autofill.js +100 -5
- package/dist/npm/sugar/autofill.js.map +1 -1
- package/dist/npm/sugar/submit.d.ts.map +1 -1
- package/dist/npm/sugar/submit.js +7 -7
- package/dist/npm/sugar/submit.js.map +1 -1
- package/dist/npm/utils/hashes/hashLedger.d.ts.map +1 -1
- package/dist/npm/utils/hashes/hashLedger.js +4 -1
- package/dist/npm/utils/hashes/hashLedger.js.map +1 -1
- package/package.json +5 -5
- package/src/Wallet/batchSigner.ts +222 -0
- package/src/Wallet/defaultFaucets.ts +6 -0
- package/src/Wallet/index.ts +9 -3
- package/src/client/RequestManager.ts +4 -1
- package/src/client/connection.ts +0 -1
- package/src/client/index.ts +49 -30
- package/src/models/index.ts +2 -1
- package/src/models/ledger/Credential.ts +2 -2
- package/src/models/ledger/LedgerEntry.ts +3 -0
- package/src/models/ledger/PermissionedDomain.ts +29 -0
- package/src/models/ledger/RippleState.ts +4 -0
- package/src/models/methods/baseMethod.ts +1 -0
- package/src/models/methods/index.ts +18 -0
- package/src/models/methods/ledger.ts +2 -2
- package/src/models/methods/serverState.ts +1 -0
- package/src/models/methods/simulate.ts +88 -0
- package/src/models/transactions/AMMClawback.ts +120 -0
- package/src/models/transactions/AMMDeposit.ts +2 -2
- package/src/models/transactions/AMMWithdraw.ts +2 -2
- package/src/models/transactions/MPTokenAuthorize.ts +2 -2
- package/src/models/transactions/MPTokenIssuanceCreate.ts +3 -2
- package/src/models/transactions/MPTokenIssuanceSet.ts +2 -2
- package/src/models/transactions/NFTokenCreateOffer.ts +2 -2
- package/src/models/transactions/NFTokenMint.ts +7 -2
- package/src/models/transactions/NFTokenModify.ts +67 -0
- package/src/models/transactions/XChainModifyBridge.ts +2 -2
- package/src/models/transactions/accountDelete.ts +2 -0
- package/src/models/transactions/accountSet.ts +2 -1
- package/src/models/transactions/batch.ts +147 -0
- package/src/models/transactions/common.ts +110 -30
- package/src/models/transactions/depositPreauth.ts +3 -0
- package/src/models/transactions/escrowFinish.ts +2 -0
- package/src/models/transactions/index.ts +10 -1
- package/src/models/transactions/metadata.ts +2 -0
- package/src/models/transactions/offerCreate.ts +2 -2
- package/src/models/transactions/payment.ts +4 -2
- package/src/models/transactions/paymentChannelClaim.ts +5 -2
- package/src/models/transactions/permissionedDomainDelete.ts +28 -0
- package/src/models/transactions/permissionedDomainSet.ts +54 -0
- package/src/models/transactions/transaction.ts +47 -2
- package/src/models/transactions/trustSet.ts +12 -2
- package/src/models/utils/flags.ts +85 -30
- package/src/sugar/autofill.ts +140 -11
- package/src/sugar/submit.ts +3 -5
- package/src/utils/hashes/hashLedger.ts +5 -2
@@ -31,6 +31,8 @@ const utils_1 = require("@xrplf/isomorphic/utils");
|
|
31
31
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
32
32
|
const ripple_binary_codec_1 = require("ripple-binary-codec");
|
33
33
|
const errors_1 = require("../../errors");
|
34
|
+
const common_1 = require("../../models/transactions/common");
|
35
|
+
const flags_1 = require("../../models/utils/flags");
|
34
36
|
const HashPrefix_1 = __importDefault(require("./HashPrefix"));
|
35
37
|
const sha512Half_1 = __importDefault(require("./sha512Half"));
|
36
38
|
const SHAMap_1 = __importStar(require("./SHAMap"));
|
@@ -77,7 +79,8 @@ function hashSignedTx(tx) {
|
|
77
79
|
}
|
78
80
|
if (txObject.TxnSignature === undefined &&
|
79
81
|
txObject.Signers === undefined &&
|
80
|
-
txObject.SigningPubKey === undefined
|
82
|
+
txObject.SigningPubKey === undefined &&
|
83
|
+
!(0, flags_1.hasFlag)(txObject, common_1.GlobalFlags.tfInnerBatchTxn)) {
|
81
84
|
throw new errors_1.ValidationError('The transaction must be signed to hash it.');
|
82
85
|
}
|
83
86
|
const prefix = HashPrefix_1.default.TRANSACTION_ID.toString(16).toUpperCase();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"hashLedger.js","sourceRoot":"","sources":["../../../../src/utils/hashes/hashLedger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,mDAAoD;AACpD,gEAAoC;AACpC,6DAAoD;AAEpD,yCAAyD;
|
1
|
+
{"version":3,"file":"hashLedger.js","sourceRoot":"","sources":["../../../../src/utils/hashes/hashLedger.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "xrpl",
|
3
|
-
"version": "4.
|
3
|
+
"version": "4.2.0-batch.0",
|
4
4
|
"license": "ISC",
|
5
5
|
"description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser",
|
6
6
|
"files": [
|
@@ -29,7 +29,7 @@
|
|
29
29
|
"bignumber.js": "^9.0.0",
|
30
30
|
"eventemitter3": "^5.0.1",
|
31
31
|
"ripple-address-codec": "^5.0.0",
|
32
|
-
"ripple-binary-codec": "^2.
|
32
|
+
"ripple-binary-codec": "^2.3.0-batch.0",
|
33
33
|
"ripple-keypairs": "^2.0.0"
|
34
34
|
},
|
35
35
|
"devDependencies": {
|
@@ -43,7 +43,7 @@
|
|
43
43
|
"lodash": "^4.17.4",
|
44
44
|
"react": "^19.0.0",
|
45
45
|
"run-s": "^0.0.0",
|
46
|
-
"typedoc": "0.
|
46
|
+
"typedoc": "0.27.6",
|
47
47
|
"ws": "^8.14.2"
|
48
48
|
},
|
49
49
|
"resolutions": {
|
@@ -64,7 +64,7 @@
|
|
64
64
|
"test": "jest --config=jest.config.unit.js --verbose false --silent=false",
|
65
65
|
"test:integration": "TS_NODE_PROJECT=tsconfig.build.json jest --config=jest.config.integration.js --verbose false --silent=false --runInBand",
|
66
66
|
"test:browser": "npm run build && npm run build:browserTests && karma start ./karma.config.js",
|
67
|
-
"test:watch": "jest --watch --verbose false --silent=false
|
67
|
+
"test:watch": "jest --watch --config=jest.config.unit.js --verbose false --silent=false",
|
68
68
|
"format": "prettier --write '{src,test}/**/*.ts'",
|
69
69
|
"lint": "eslint . --ext .ts --max-warnings 0",
|
70
70
|
"perf": "./scripts/perf_test.sh",
|
@@ -88,5 +88,5 @@
|
|
88
88
|
"engines": {
|
89
89
|
"node": ">=18.0.0"
|
90
90
|
},
|
91
|
-
"gitHead": "
|
91
|
+
"gitHead": "3c563434d49d4d656f8b62933f035082733af560"
|
92
92
|
}
|
@@ -0,0 +1,222 @@
|
|
1
|
+
import { bytesToHex } from '@xrplf/isomorphic/utils'
|
2
|
+
import BigNumber from 'bignumber.js'
|
3
|
+
import { decodeAccountID } from 'ripple-address-codec'
|
4
|
+
import { decode, encode, encodeForSigningBatch } from 'ripple-binary-codec'
|
5
|
+
import { sign } from 'ripple-keypairs'
|
6
|
+
|
7
|
+
import { ValidationError } from '../errors'
|
8
|
+
import { Batch, Transaction, validate } from '../models'
|
9
|
+
import { BatchSigner, validateBatch } from '../models/transactions/batch'
|
10
|
+
import { hashSignedTx } from '../utils/hashes'
|
11
|
+
|
12
|
+
import { Wallet } from '.'
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Sign a multi-account Batch transaction.
|
16
|
+
*
|
17
|
+
* @param wallet - Wallet instance.
|
18
|
+
* @param transaction - The Batch transaction to sign.
|
19
|
+
* @param opts - Additional options for regular key and multi-signing complexity.
|
20
|
+
* @param opts.batchAccount - The account submitting the inner Batch transaction, on behalf of which is this signature.
|
21
|
+
* @param opts.multisign - Specify true/false to use multisign or actual address (classic/x-address) to make multisign tx request.
|
22
|
+
* The actual address is only needed in the case of regular key usage.
|
23
|
+
* @throws ValidationError if the transaction is malformed.
|
24
|
+
*/
|
25
|
+
// eslint-disable-next-line max-lines-per-function -- TODO: refactor
|
26
|
+
export function signMultiBatch(
|
27
|
+
wallet: Wallet,
|
28
|
+
transaction: Batch,
|
29
|
+
opts: { batchAccount?: string; multisign?: boolean | string } = {},
|
30
|
+
): void {
|
31
|
+
const batchAccount = opts.batchAccount ?? wallet.classicAddress
|
32
|
+
let multisignAddress: boolean | string = false
|
33
|
+
if (typeof opts.multisign === 'string') {
|
34
|
+
multisignAddress = opts.multisign
|
35
|
+
} else if (opts.multisign) {
|
36
|
+
multisignAddress = wallet.classicAddress
|
37
|
+
}
|
38
|
+
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- needed for JS
|
40
|
+
if (transaction.TransactionType !== 'Batch') {
|
41
|
+
throw new ValidationError('Must be a Batch transaction.')
|
42
|
+
}
|
43
|
+
|
44
|
+
const involvedAccounts = transaction.RawTransactions.map(
|
45
|
+
(raw) => raw.RawTransaction.Account,
|
46
|
+
)
|
47
|
+
if (!involvedAccounts.includes(batchAccount)) {
|
48
|
+
throw new ValidationError(
|
49
|
+
'Must be signing for an address included in the Batch.',
|
50
|
+
)
|
51
|
+
}
|
52
|
+
/*
|
53
|
+
* This will throw a more clear error for JS users if the supplied transaction has incorrect formatting
|
54
|
+
*/
|
55
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validate does not accept Transaction type
|
56
|
+
validate(transaction as unknown as Record<string, unknown>)
|
57
|
+
const fieldsToSign = {
|
58
|
+
flags: transaction.Flags,
|
59
|
+
txIDs: transaction.RawTransactions.map((rawTx) =>
|
60
|
+
hashSignedTx(rawTx.RawTransaction),
|
61
|
+
),
|
62
|
+
}
|
63
|
+
let batchSigner: BatchSigner
|
64
|
+
if (multisignAddress) {
|
65
|
+
batchSigner = {
|
66
|
+
BatchSigner: {
|
67
|
+
Account: batchAccount,
|
68
|
+
Signers: [
|
69
|
+
{
|
70
|
+
Signer: {
|
71
|
+
Account: multisignAddress,
|
72
|
+
SigningPubKey: wallet.publicKey,
|
73
|
+
TxnSignature: sign(
|
74
|
+
encodeForSigningBatch(fieldsToSign),
|
75
|
+
wallet.privateKey,
|
76
|
+
),
|
77
|
+
},
|
78
|
+
},
|
79
|
+
],
|
80
|
+
},
|
81
|
+
}
|
82
|
+
} else {
|
83
|
+
batchSigner = {
|
84
|
+
BatchSigner: {
|
85
|
+
Account: batchAccount,
|
86
|
+
SigningPubKey: wallet.publicKey,
|
87
|
+
TxnSignature: sign(
|
88
|
+
encodeForSigningBatch(fieldsToSign),
|
89
|
+
wallet.privateKey,
|
90
|
+
),
|
91
|
+
},
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
// eslint-disable-next-line no-param-reassign -- okay for signing
|
96
|
+
transaction.BatchSigners = [batchSigner]
|
97
|
+
}
|
98
|
+
|
99
|
+
/**
|
100
|
+
* Takes several transactions with BatchSigners fields (in object or blob form) and creates a
|
101
|
+
* single transaction with all BatchSigners that then gets signed and returned.
|
102
|
+
*
|
103
|
+
* @param transactions The transactions to combine `BatchSigners` values on.
|
104
|
+
* @returns A single signed Transaction which has all BatchSigners from transactions within it.
|
105
|
+
* @throws ValidationError if:
|
106
|
+
* - There were no transactions given to sign
|
107
|
+
* @category Signing
|
108
|
+
*/
|
109
|
+
export function combineBatchSigners(
|
110
|
+
transactions: Array<Batch | string>,
|
111
|
+
): string {
|
112
|
+
if (transactions.length === 0) {
|
113
|
+
throw new ValidationError('There are 0 transactions to combine.')
|
114
|
+
}
|
115
|
+
|
116
|
+
const decodedTransactions: Transaction[] = transactions.map((txOrBlob) => {
|
117
|
+
return getDecodedTransaction(txOrBlob)
|
118
|
+
})
|
119
|
+
|
120
|
+
decodedTransactions.forEach((tx) => {
|
121
|
+
if (tx.TransactionType !== 'Batch') {
|
122
|
+
throw new ValidationError('TransactionType must be `Batch`.')
|
123
|
+
}
|
124
|
+
/*
|
125
|
+
* This will throw a more clear error for JS users if any of the supplied transactions has incorrect formatting
|
126
|
+
*/
|
127
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validate does not accept Transaction type
|
128
|
+
validateBatch(tx as unknown as Record<string, unknown>)
|
129
|
+
if (tx.BatchSigners == null || tx.BatchSigners.length === 0) {
|
130
|
+
throw new ValidationError(
|
131
|
+
'For combining Batch transaction signatures, all transactions must include a BatchSigners field containing an array of signatures.',
|
132
|
+
)
|
133
|
+
}
|
134
|
+
|
135
|
+
if (tx.TxnSignature != null || tx.Signers != null) {
|
136
|
+
throw new ValidationError('Batch transaction must be unsigned.')
|
137
|
+
}
|
138
|
+
})
|
139
|
+
|
140
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- checked above
|
141
|
+
const batchTransactions = decodedTransactions as Batch[]
|
142
|
+
|
143
|
+
validateBatchTransactionEquivalence(batchTransactions)
|
144
|
+
|
145
|
+
return encode(getTransactionWithAllBatchSigners(batchTransactions))
|
146
|
+
}
|
147
|
+
|
148
|
+
/**
|
149
|
+
* The transactions should all be equal except for the 'Signers' field.
|
150
|
+
*
|
151
|
+
* @param transactions - An array of Transactions which are expected to be equal other than 'Signers'.
|
152
|
+
* @throws ValidationError if the transactions are not equal in any field other than 'Signers'.
|
153
|
+
*/
|
154
|
+
function validateBatchTransactionEquivalence(transactions: Batch[]): void {
|
155
|
+
const exampleTransaction = JSON.stringify({
|
156
|
+
flags: transactions[0].Flags,
|
157
|
+
transactionIDs: transactions[0].RawTransactions.map((rawTx) =>
|
158
|
+
hashSignedTx(rawTx.RawTransaction),
|
159
|
+
),
|
160
|
+
})
|
161
|
+
if (
|
162
|
+
transactions.slice(1).some(
|
163
|
+
(tx) =>
|
164
|
+
JSON.stringify({
|
165
|
+
flags: tx.Flags,
|
166
|
+
transactionIDs: tx.RawTransactions.map((rawTx) =>
|
167
|
+
hashSignedTx(rawTx.RawTransaction),
|
168
|
+
),
|
169
|
+
}) !== exampleTransaction,
|
170
|
+
)
|
171
|
+
) {
|
172
|
+
throw new ValidationError(
|
173
|
+
'Flags and transaction hashes are not the same for all provided transactions.',
|
174
|
+
)
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
function getTransactionWithAllBatchSigners(transactions: Batch[]): Batch {
|
179
|
+
// Signers must be sorted in the combined transaction - See compareSigners' documentation for more details
|
180
|
+
const sortedSigners: BatchSigner[] = transactions
|
181
|
+
.flatMap((tx) => tx.BatchSigners ?? [])
|
182
|
+
.filter((signer) => signer.BatchSigner.Account !== transactions[0].Account)
|
183
|
+
.sort(compareBatchSigners)
|
184
|
+
|
185
|
+
return { ...transactions[0], BatchSigners: sortedSigners }
|
186
|
+
}
|
187
|
+
|
188
|
+
/**
|
189
|
+
* If presented in binary form, the BatchSigners array must be sorted based on
|
190
|
+
* the numeric value of the signer addresses, with the lowest value first.
|
191
|
+
* (If submitted as JSON, the submit_multisigned method handles this automatically.)
|
192
|
+
* https://xrpl.org/multi-signing.html.
|
193
|
+
*
|
194
|
+
* @param left - A BatchSigner to compare with.
|
195
|
+
* @param right - A second BatchSigner to compare with.
|
196
|
+
* @returns 1 if left \> right, 0 if left = right, -1 if left \< right, and null if left or right are NaN.
|
197
|
+
*/
|
198
|
+
function compareBatchSigners(left: BatchSigner, right: BatchSigner): number {
|
199
|
+
return addressToBigNumber(left.BatchSigner.Account).comparedTo(
|
200
|
+
addressToBigNumber(right.BatchSigner.Account),
|
201
|
+
)
|
202
|
+
}
|
203
|
+
|
204
|
+
// copied from signer.ts
|
205
|
+
// TODO: refactor
|
206
|
+
const NUM_BITS_IN_HEX = 16
|
207
|
+
|
208
|
+
function addressToBigNumber(address: string): BigNumber {
|
209
|
+
const hex = bytesToHex(decodeAccountID(address))
|
210
|
+
return new BigNumber(hex, NUM_BITS_IN_HEX)
|
211
|
+
}
|
212
|
+
|
213
|
+
function getDecodedTransaction(txOrBlob: Transaction | string): Transaction {
|
214
|
+
if (typeof txOrBlob === 'object') {
|
215
|
+
// We need this to handle X-addresses in multisigning
|
216
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- We are casting here to get strong typing
|
217
|
+
return decode(encode(txOrBlob)) as unknown as Transaction
|
218
|
+
}
|
219
|
+
|
220
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- We are casting here to get strong typing
|
221
|
+
return decode(txOrBlob) as unknown as Transaction
|
222
|
+
}
|
@@ -14,11 +14,13 @@ export interface FaucetWallet {
|
|
14
14
|
export enum FaucetNetwork {
|
15
15
|
Testnet = 'faucet.altnet.rippletest.net',
|
16
16
|
Devnet = 'faucet.devnet.rippletest.net',
|
17
|
+
Batchnet = 'batch.faucet.nerdnest.xyz',
|
17
18
|
}
|
18
19
|
|
19
20
|
export const FaucetNetworkPaths: Record<string, string> = {
|
20
21
|
[FaucetNetwork.Testnet]: '/accounts',
|
21
22
|
[FaucetNetwork.Devnet]: '/accounts',
|
23
|
+
[FaucetNetwork.Batchnet]: '/accounts',
|
22
24
|
}
|
23
25
|
|
24
26
|
/**
|
@@ -36,6 +38,10 @@ export function getFaucetHost(client: Client): FaucetNetwork | undefined {
|
|
36
38
|
return FaucetNetwork.Testnet
|
37
39
|
}
|
38
40
|
|
41
|
+
if (connectionUrl.includes('batchnet')) {
|
42
|
+
return FaucetNetwork.Batchnet
|
43
|
+
}
|
44
|
+
|
39
45
|
if (connectionUrl.includes('sidechain-net2')) {
|
40
46
|
throw new XRPLFaucetError(
|
41
47
|
'Cannot fund an account on an issuing chain. Accounts must be created via the bridge.',
|
package/src/Wallet/index.ts
CHANGED
@@ -24,6 +24,8 @@ import {
|
|
24
24
|
import ECDSA from '../ECDSA'
|
25
25
|
import { ValidationError } from '../errors'
|
26
26
|
import { Transaction, validate } from '../models/transactions'
|
27
|
+
import { GlobalFlags } from '../models/transactions/common'
|
28
|
+
import { hasFlag } from '../models/utils/flags'
|
27
29
|
import { ensureClassicAddress } from '../sugar/utils'
|
28
30
|
import { omitBy } from '../utils/collections'
|
29
31
|
import { hashSignedTx } from '../utils/hashes/hashLedger'
|
@@ -367,6 +369,7 @@ export class Wallet {
|
|
367
369
|
* @param this - Wallet instance.
|
368
370
|
* @param transaction - A transaction to be signed offline.
|
369
371
|
* @param multisign - Specify true/false to use multisign or actual address (classic/x-address) to make multisign tx request.
|
372
|
+
* The actual address is only needed in the case of regular key usage.
|
370
373
|
* @returns A signed transaction.
|
371
374
|
* @throws ValidationError if the transaction is already signed or does not encode/decode to same result.
|
372
375
|
* @throws XrplError if the issued currency being signed is XRP ignoring case.
|
@@ -381,7 +384,7 @@ export class Wallet {
|
|
381
384
|
hash: string
|
382
385
|
} {
|
383
386
|
let multisignAddress: boolean | string = false
|
384
|
-
if (typeof multisign === 'string'
|
387
|
+
if (typeof multisign === 'string') {
|
385
388
|
multisignAddress = multisign
|
386
389
|
} else if (multisign) {
|
387
390
|
multisignAddress = this.classicAddress
|
@@ -407,12 +410,14 @@ export class Wallet {
|
|
407
410
|
*/
|
408
411
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validate does not accept Transaction type
|
409
412
|
validate(tx as unknown as Record<string, unknown>)
|
413
|
+
if (hasFlag(tx, GlobalFlags.tfInnerBatchTxn)) {
|
414
|
+
throw new ValidationError('Cannot sign a Batch inner transaction.')
|
415
|
+
}
|
410
416
|
|
411
417
|
const txToSignAndEncode = { ...tx }
|
412
418
|
|
413
|
-
txToSignAndEncode.SigningPubKey = multisignAddress ? '' : this.publicKey
|
414
|
-
|
415
419
|
if (multisignAddress) {
|
420
|
+
txToSignAndEncode.SigningPubKey = ''
|
416
421
|
const signer = {
|
417
422
|
Account: multisignAddress,
|
418
423
|
SigningPubKey: this.publicKey,
|
@@ -424,6 +429,7 @@ export class Wallet {
|
|
424
429
|
}
|
425
430
|
txToSignAndEncode.Signers = [{ Signer: signer }]
|
426
431
|
} else {
|
432
|
+
txToSignAndEncode.SigningPubKey = this.publicKey
|
427
433
|
txToSignAndEncode.TxnSignature = computeSignature(
|
428
434
|
txToSignAndEncode,
|
429
435
|
this.privateKey,
|
@@ -175,6 +175,7 @@ export default class RequestManager {
|
|
175
175
|
* @param response - The response to handle.
|
176
176
|
* @throws ResponseFormatError if the response format is invalid, RippledError if rippled returns an error.
|
177
177
|
*/
|
178
|
+
// eslint-disable-next-line complexity -- handling a response is complex
|
178
179
|
public handleResponse(
|
179
180
|
response: Partial<Response<APIVersion> | ErrorResponse>,
|
180
181
|
): void {
|
@@ -195,7 +196,9 @@ export default class RequestManager {
|
|
195
196
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- We know this must be true
|
196
197
|
const errorResponse = response as Partial<ErrorResponse>
|
197
198
|
const error = new RippledError(
|
198
|
-
errorResponse.error_message ??
|
199
|
+
errorResponse.error_message ??
|
200
|
+
errorResponse.error_exception ??
|
201
|
+
errorResponse.error,
|
199
202
|
errorResponse,
|
200
203
|
)
|
201
204
|
this.reject(response.id, error)
|
package/src/client/connection.ts
CHANGED
@@ -349,7 +349,6 @@ export class Connection extends EventEmitter {
|
|
349
349
|
try {
|
350
350
|
this.requestManager.handleResponse(data)
|
351
351
|
} catch (error) {
|
352
|
-
// eslint-disable-next-line max-depth -- okay here
|
353
352
|
if (error instanceof Error) {
|
354
353
|
this.emit('error', 'badMessage', error.message, message)
|
355
354
|
} else {
|
package/src/client/index.ts
CHANGED
@@ -40,14 +40,19 @@ import type {
|
|
40
40
|
MarkerRequest,
|
41
41
|
MarkerResponse,
|
42
42
|
SubmitResponse,
|
43
|
+
SimulateRequest,
|
43
44
|
} from '../models/methods'
|
44
45
|
import type { BookOffer, BookOfferCurrency } from '../models/methods/bookOffers'
|
46
|
+
import {
|
47
|
+
SimulateBinaryResponse,
|
48
|
+
SimulateJsonResponse,
|
49
|
+
} from '../models/methods/simulate'
|
45
50
|
import type {
|
46
51
|
EventTypes,
|
47
52
|
OnEventToListenerMap,
|
48
53
|
} from '../models/methods/subscribe'
|
49
54
|
import type { SubmittableTransaction } from '../models/transactions'
|
50
|
-
import {
|
55
|
+
import { convertTxFlagsToNumber } from '../models/utils/flags'
|
51
56
|
import {
|
52
57
|
ensureClassicAddress,
|
53
58
|
submitRequest,
|
@@ -62,6 +67,8 @@ import {
|
|
62
67
|
setLatestValidatedLedgerSequence,
|
63
68
|
checkAccountDeleteBlockers,
|
64
69
|
txNeedsNetworkID,
|
70
|
+
autofillBatchTxn,
|
71
|
+
handleDeliverMax,
|
65
72
|
} from '../sugar/autofill'
|
66
73
|
import { formatBalances } from '../sugar/balances'
|
67
74
|
import {
|
@@ -657,7 +664,6 @@ class Client extends EventEmitter<EventTypes> {
|
|
657
664
|
* @throws ValidationError If Amount and DeliverMax fields are not identical in a Payment Transaction
|
658
665
|
*/
|
659
666
|
|
660
|
-
// eslint-disable-next-line complexity -- handling Payment transaction API v2 requires more logic
|
661
667
|
public async autofill<T extends SubmittableTransaction>(
|
662
668
|
transaction: T,
|
663
669
|
signersCount?: number,
|
@@ -665,7 +671,7 @@ class Client extends EventEmitter<EventTypes> {
|
|
665
671
|
const tx = { ...transaction }
|
666
672
|
|
667
673
|
setValidAddresses(tx)
|
668
|
-
|
674
|
+
tx.Flags = convertTxFlagsToNumber(tx)
|
669
675
|
|
670
676
|
const promises: Array<Promise<void>> = []
|
671
677
|
if (tx.NetworkID == null) {
|
@@ -683,33 +689,11 @@ class Client extends EventEmitter<EventTypes> {
|
|
683
689
|
if (tx.TransactionType === 'AccountDelete') {
|
684
690
|
promises.push(checkAccountDeleteBlockers(this, tx))
|
685
691
|
}
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
if (tx.TransactionType === 'Payment'
|
690
|
-
|
691
|
-
if (tx.Amount == null) {
|
692
|
-
// If only DeliverMax is provided, use it to populate the Amount field
|
693
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- ignore type-assertions on the DeliverMax property
|
694
|
-
// @ts-expect-error -- DeliverMax property exists only at the RPC level, not at the protocol level
|
695
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- DeliverMax is a known RPC-level property
|
696
|
-
tx.Amount = tx.DeliverMax
|
697
|
-
}
|
698
|
-
|
699
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- ignore type-assertions on the DeliverMax property
|
700
|
-
// @ts-expect-error -- DeliverMax property exists only at the RPC level, not at the protocol level
|
701
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- This is a valid null check for Amount
|
702
|
-
if (tx.Amount != null && tx.Amount !== tx.DeliverMax) {
|
703
|
-
return Promise.reject(
|
704
|
-
new ValidationError(
|
705
|
-
'PaymentTransaction: Amount and DeliverMax fields must be identical when both are provided',
|
706
|
-
),
|
707
|
-
)
|
708
|
-
}
|
709
|
-
|
710
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- ignore type-assertions on the DeliverMax property
|
711
|
-
// @ts-expect-error -- DeliverMax property exists only at the RPC level, not at the protocol level
|
712
|
-
delete tx.DeliverMax
|
692
|
+
if (tx.TransactionType === 'Batch') {
|
693
|
+
promises.push(autofillBatchTxn(this, tx))
|
694
|
+
}
|
695
|
+
if (tx.TransactionType === 'Payment') {
|
696
|
+
handleDeliverMax(tx)
|
713
697
|
}
|
714
698
|
|
715
699
|
return Promise.all(promises).then(() => tx)
|
@@ -764,6 +748,41 @@ class Client extends EventEmitter<EventTypes> {
|
|
764
748
|
return submitRequest(this, signedTx, opts?.failHard)
|
765
749
|
}
|
766
750
|
|
751
|
+
/**
|
752
|
+
* Simulates an unsigned transaction.
|
753
|
+
* Steps performed on a transaction:
|
754
|
+
* 1. Autofill.
|
755
|
+
* 2. Sign & Encode.
|
756
|
+
* 3. Submit.
|
757
|
+
*
|
758
|
+
* @category Core
|
759
|
+
*
|
760
|
+
* @param transaction - A transaction to autofill, sign & encode, and submit.
|
761
|
+
* @param opts - (Optional) Options used to sign and submit a transaction.
|
762
|
+
* @param opts.binary - If true, return the metadata in a binary encoding.
|
763
|
+
*
|
764
|
+
* @returns A promise that contains SimulateResponse.
|
765
|
+
* @throws RippledError if the simulate request fails.
|
766
|
+
*/
|
767
|
+
|
768
|
+
public async simulate<Binary extends boolean = false>(
|
769
|
+
transaction: SubmittableTransaction | string,
|
770
|
+
opts?: {
|
771
|
+
// If true, return the binary-encoded representation of the results.
|
772
|
+
binary?: Binary
|
773
|
+
},
|
774
|
+
): Promise<
|
775
|
+
Binary extends true ? SimulateBinaryResponse : SimulateJsonResponse
|
776
|
+
> {
|
777
|
+
// send request
|
778
|
+
const binary = opts?.binary ?? false
|
779
|
+
const request: SimulateRequest =
|
780
|
+
typeof transaction === 'string'
|
781
|
+
? { command: 'simulate', tx_blob: transaction, binary }
|
782
|
+
: { command: 'simulate', tx_json: transaction, binary }
|
783
|
+
return this.request(request)
|
784
|
+
}
|
785
|
+
|
767
786
|
/**
|
768
787
|
* Asynchronously submits a transaction and verifies that it has been included in a
|
769
788
|
* validated ledger (or has errored/will not be included for some reason).
|
package/src/models/index.ts
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
import {
|
1
|
+
import { GlobalFlagsInterface } from '../transactions/common'
|
2
2
|
|
3
3
|
import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry'
|
4
4
|
|
5
|
-
export interface CredentialFlags extends
|
5
|
+
export interface CredentialFlags extends GlobalFlagsInterface {
|
6
6
|
lsfAccepted?: boolean
|
7
7
|
}
|
8
8
|
|
@@ -13,6 +13,7 @@ import NegativeUNL from './NegativeUNL'
|
|
13
13
|
import Offer from './Offer'
|
14
14
|
import Oracle from './Oracle'
|
15
15
|
import PayChannel from './PayChannel'
|
16
|
+
import PermissionedDomain from './PermissionedDomain'
|
16
17
|
import RippleState from './RippleState'
|
17
18
|
import SignerList from './SignerList'
|
18
19
|
import Ticket from './Ticket'
|
@@ -35,6 +36,7 @@ type LedgerEntry =
|
|
35
36
|
| Offer
|
36
37
|
| Oracle
|
37
38
|
| PayChannel
|
39
|
+
| PermissionedDomain
|
38
40
|
| RippleState
|
39
41
|
| SignerList
|
40
42
|
| Ticket
|
@@ -61,6 +63,7 @@ type LedgerEntryFilter =
|
|
61
63
|
| 'offer'
|
62
64
|
| 'oracle'
|
63
65
|
| 'payment_channel'
|
66
|
+
| 'permissioned_domain'
|
64
67
|
| 'signer_list'
|
65
68
|
| 'state'
|
66
69
|
| 'ticket'
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { AuthorizeCredential } from '../common'
|
2
|
+
|
3
|
+
import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry'
|
4
|
+
|
5
|
+
export default interface PermissionedDomain
|
6
|
+
extends BaseLedgerEntry,
|
7
|
+
HasPreviousTxnID {
|
8
|
+
/* The ledger object's type (PermissionedDomain). */
|
9
|
+
LedgerEntryType: 'PermissionedDomain'
|
10
|
+
|
11
|
+
/* The account that controls the settings of the domain. */
|
12
|
+
Owner: string
|
13
|
+
|
14
|
+
/* The credentials that are accepted by the domain.
|
15
|
+
Ownership of one of these credentials automatically
|
16
|
+
makes you a member of the domain. */
|
17
|
+
AcceptedCredentials: AuthorizeCredential[]
|
18
|
+
|
19
|
+
/* Flag values associated with this object. */
|
20
|
+
Flags: 0
|
21
|
+
|
22
|
+
/* Owner account's directory page containing the PermissionedDomain object. */
|
23
|
+
OwnerNode: string
|
24
|
+
|
25
|
+
/* The Sequence value of the PermissionedDomainSet
|
26
|
+
transaction that created this domain. Used in combination
|
27
|
+
with the Account to identify this domain. */
|
28
|
+
Sequence: number
|
29
|
+
}
|
@@ -77,4 +77,8 @@ export enum RippleStateFlags {
|
|
77
77
|
lsfHighFreeze = 0x00800000,
|
78
78
|
// True, trust line to AMM. Used by client apps to identify payments via AMM.
|
79
79
|
lsfAMMNode = 0x01000000,
|
80
|
+
// True, low side has set deep freeze flag
|
81
|
+
lsfLowDeepFreeze = 0x02000000,
|
82
|
+
// True, high side has set deep freeze flag
|
83
|
+
lsfHighDeepFreeze = 0x04000000,
|
80
84
|
}
|