@bitgo-beta/abstract-utxo 1.1.1-beta.222 → 1.1.1-beta.2221
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/README.md +76 -0
- package/dist/cjs/src/abstractUtxoCoin.d.ts +458 -0
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -0
- package/dist/cjs/src/abstractUtxoCoin.js +652 -0
- package/dist/cjs/src/address/fixedScript.d.ts +44 -0
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -0
- package/dist/cjs/src/address/fixedScript.js +108 -0
- package/dist/cjs/src/address/index.d.ts +2 -0
- package/dist/cjs/src/address/index.d.ts.map +1 -0
- package/dist/cjs/src/address/index.js +8 -0
- package/dist/cjs/src/config.d.ts.map +1 -0
- package/dist/cjs/src/config.js +14 -0
- package/dist/cjs/src/deriveKeyWithSeed.d.ts +12 -0
- package/dist/cjs/src/deriveKeyWithSeed.d.ts.map +1 -0
- package/dist/cjs/src/deriveKeyWithSeed.js +17 -0
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts +19 -0
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/NamedDescriptor.js +77 -0
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +33 -0
- package/dist/cjs/src/descriptor/builder/builder.d.ts +17 -0
- package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/builder/builder.js +54 -0
- package/dist/cjs/src/descriptor/builder/index.d.ts +3 -0
- package/dist/cjs/src/descriptor/builder/index.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/builder/index.js +8 -0
- package/dist/cjs/src/descriptor/builder/parse.d.ts +5 -0
- package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/builder/parse.js +148 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.js +41 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts +12 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +33 -0
- package/dist/cjs/src/descriptor/createWallet/index.d.ts +3 -0
- package/dist/cjs/src/descriptor/createWallet/index.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/createWallet/index.js +19 -0
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts +19 -0
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/descriptorWallet.js +54 -0
- package/dist/cjs/src/descriptor/index.d.ts +9 -0
- package/dist/cjs/src/descriptor/index.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/index.js +53 -0
- package/dist/cjs/src/descriptor/validatePolicy.d.ts +22 -0
- package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/validatePolicy.js +94 -0
- package/dist/cjs/src/impl/bch/bch.d.ts +22 -0
- package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -0
- package/dist/cjs/src/impl/bch/bch.js +43 -0
- package/dist/cjs/src/impl/bch/index.d.ts +3 -0
- package/dist/cjs/src/impl/bch/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/bch/index.js +19 -0
- package/dist/cjs/src/impl/bch/tbch.d.ts +12 -0
- package/dist/cjs/src/impl/bch/tbch.d.ts.map +1 -0
- package/dist/cjs/src/impl/bch/tbch.js +15 -0
- package/dist/cjs/src/impl/bcha/bcha.d.ts +9 -0
- package/dist/cjs/src/impl/bcha/bcha.d.ts.map +1 -0
- package/dist/cjs/src/impl/bcha/bcha.js +15 -0
- package/dist/cjs/src/impl/bcha/index.d.ts +3 -0
- package/dist/cjs/src/impl/bcha/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/bcha/index.js +19 -0
- package/dist/cjs/src/impl/bcha/tbcha.d.ts +12 -0
- package/dist/cjs/src/impl/bcha/tbcha.d.ts.map +1 -0
- package/dist/cjs/src/impl/bcha/tbcha.js +15 -0
- package/dist/cjs/src/impl/bsv/bsv.d.ts +9 -0
- package/dist/cjs/src/impl/bsv/bsv.d.ts.map +1 -0
- package/dist/cjs/src/impl/bsv/bsv.js +15 -0
- package/dist/cjs/src/impl/bsv/index.d.ts +3 -0
- package/dist/cjs/src/impl/bsv/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/bsv/index.js +19 -0
- package/dist/cjs/src/impl/bsv/tbsv.d.ts +12 -0
- package/dist/cjs/src/impl/bsv/tbsv.d.ts.map +1 -0
- package/dist/cjs/src/impl/bsv/tbsv.js +15 -0
- package/dist/cjs/src/impl/btc/btc.d.ts +15 -0
- package/dist/cjs/src/impl/btc/btc.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/btc.js +22 -0
- package/dist/cjs/src/impl/btc/index.d.ts +7 -0
- package/dist/cjs/src/impl/btc/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/index.js +23 -0
- package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts +61 -0
- package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/inscriptionBuilder.js +170 -0
- package/dist/cjs/src/impl/btc/tbtc.d.ts +12 -0
- package/dist/cjs/src/impl/btc/tbtc.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtc.js +15 -0
- package/dist/cjs/src/impl/btc/tbtc4.d.ts +12 -0
- package/dist/cjs/src/impl/btc/tbtc4.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtc4.js +15 -0
- package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts +12 -0
- package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcbgsig.js +15 -0
- package/dist/cjs/src/impl/btc/tbtcsig.d.ts +12 -0
- package/dist/cjs/src/impl/btc/tbtcsig.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcsig.js +15 -0
- package/dist/cjs/src/impl/btg/btg.d.ts +9 -0
- package/dist/cjs/src/impl/btg/btg.d.ts.map +1 -0
- package/dist/cjs/src/impl/btg/btg.js +15 -0
- package/dist/cjs/src/impl/btg/index.d.ts +2 -0
- package/dist/cjs/src/impl/btg/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/btg/index.js +18 -0
- package/dist/cjs/src/impl/dash/dash.d.ts +9 -0
- package/dist/cjs/src/impl/dash/dash.d.ts.map +1 -0
- package/dist/cjs/src/impl/dash/dash.js +15 -0
- package/dist/cjs/src/impl/dash/index.d.ts +3 -0
- package/dist/cjs/src/impl/dash/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/dash/index.js +19 -0
- package/dist/cjs/src/impl/dash/tdash.d.ts +12 -0
- package/dist/cjs/src/impl/dash/tdash.d.ts.map +1 -0
- package/dist/cjs/src/impl/dash/tdash.js +15 -0
- package/dist/cjs/src/impl/doge/doge.d.ts +33 -0
- package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -0
- package/dist/cjs/src/impl/doge/doge.js +76 -0
- package/dist/cjs/src/impl/doge/index.d.ts +3 -0
- package/dist/cjs/src/impl/doge/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/doge/index.js +19 -0
- package/dist/cjs/src/impl/doge/tdoge.d.ts +12 -0
- package/dist/cjs/src/impl/doge/tdoge.d.ts.map +1 -0
- package/dist/cjs/src/impl/doge/tdoge.js +15 -0
- package/dist/cjs/src/impl/index.d.ts +11 -0
- package/dist/cjs/src/impl/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/index.js +47 -0
- package/dist/cjs/src/impl/ltc/index.d.ts +3 -0
- package/dist/cjs/src/impl/ltc/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/ltc/index.js +19 -0
- package/dist/cjs/src/impl/ltc/ltc.d.ts +8 -0
- package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -0
- package/dist/cjs/src/impl/ltc/ltc.js +15 -0
- package/dist/cjs/src/impl/ltc/tltc.d.ts +8 -0
- package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -0
- package/dist/cjs/src/impl/ltc/tltc.js +15 -0
- package/dist/cjs/src/impl/pearl/index.d.ts +3 -0
- package/dist/cjs/src/impl/pearl/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/pearl/index.js +19 -0
- package/dist/cjs/src/impl/pearl/pearl.d.ts +17 -0
- package/dist/cjs/src/impl/pearl/pearl.d.ts.map +1 -0
- package/dist/cjs/src/impl/pearl/pearl.js +24 -0
- package/dist/cjs/src/impl/pearl/tpearl.d.ts +8 -0
- package/dist/cjs/src/impl/pearl/tpearl.d.ts.map +1 -0
- package/dist/cjs/src/impl/pearl/tpearl.js +15 -0
- package/dist/cjs/src/impl/zec/index.d.ts +3 -0
- package/dist/cjs/src/impl/zec/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/index.js +19 -0
- package/dist/cjs/src/impl/zec/tzec.d.ts +9 -0
- package/dist/cjs/src/impl/zec/tzec.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/tzec.js +15 -0
- package/dist/cjs/src/impl/zec/zec.d.ts +12 -0
- package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/zec.js +15 -0
- package/dist/cjs/src/index.d.ts +23 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +62 -0
- package/dist/cjs/src/keychains.d.ts +55 -0
- package/dist/cjs/src/keychains.d.ts.map +1 -0
- package/dist/cjs/src/keychains.js +143 -0
- package/dist/cjs/src/names.d.ts +13 -0
- package/dist/cjs/src/names.d.ts.map +1 -0
- package/dist/cjs/src/names.js +96 -0
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts +9 -0
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +22 -0
- package/dist/cjs/src/offlineVault/OfflineVaultSignable.d.ts +46 -0
- package/dist/cjs/src/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/OfflineVaultSignable.js +55 -0
- package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts +16 -0
- package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/TransactionExplanation.js +15 -0
- package/dist/cjs/src/offlineVault/descriptor/index.d.ts +2 -0
- package/dist/cjs/src/offlineVault/descriptor/index.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/descriptor/index.js +18 -0
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +39 -0
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/descriptor/transaction.js +80 -0
- package/dist/cjs/src/offlineVault/index.d.ts +6 -0
- package/dist/cjs/src/offlineVault/index.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/index.js +44 -0
- package/dist/{src → cjs/src}/recovery/RecoveryProvider.d.ts +1 -3
- package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -0
- package/dist/cjs/src/recovery/RecoveryProvider.js +22 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +172 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.js +415 -0
- package/dist/{src → cjs/src}/recovery/baseApi.d.ts +3 -6
- package/dist/cjs/src/recovery/baseApi.d.ts.map +1 -0
- package/dist/cjs/src/recovery/baseApi.js +73 -0
- package/dist/{src → cjs/src}/recovery/coingeckoApi.d.ts +0 -3
- package/dist/cjs/src/recovery/coingeckoApi.d.ts.map +1 -0
- package/dist/cjs/src/recovery/coingeckoApi.js +44 -0
- package/dist/{src → cjs/src}/recovery/crossChainRecovery.d.ts +21 -9
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -0
- package/dist/cjs/src/recovery/crossChainRecovery.js +302 -0
- package/dist/{src → cjs/src}/recovery/index.d.ts +0 -1
- package/dist/cjs/src/recovery/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/recovery/index.js +6 -3
- package/dist/cjs/src/recovery/mempoolApi.d.ts.map +1 -0
- package/dist/cjs/src/recovery/mempoolApi.js +36 -0
- package/dist/cjs/src/recovery/psbt.d.ts +68 -0
- package/dist/cjs/src/recovery/psbt.d.ts.map +1 -0
- package/dist/cjs/src/recovery/psbt.js +160 -0
- package/dist/cjs/src/tnumber.d.ts +4 -0
- package/dist/cjs/src/tnumber.d.ts.map +1 -0
- package/dist/cjs/src/tnumber.js +12 -0
- package/dist/cjs/src/transaction/bip322.d.ts +27 -0
- package/dist/cjs/src/transaction/bip322.d.ts.map +1 -0
- package/dist/cjs/src/transaction/bip322.js +139 -0
- package/dist/cjs/src/transaction/common/verifyPayGoAmount.d.ts +2 -0
- package/dist/cjs/src/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
- package/dist/cjs/src/transaction/common/verifyPayGoAmount.js +3 -0
- package/dist/cjs/src/transaction/decode.d.ts +21 -0
- package/dist/cjs/src/transaction/decode.d.ts.map +1 -0
- package/dist/cjs/src/transaction/decode.js +45 -0
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +5 -0
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/explainPsbt.js +47 -0
- package/dist/cjs/src/transaction/descriptor/index.d.ts +7 -0
- package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/index.js +14 -0
- package/dist/cjs/src/transaction/descriptor/parse.d.ts +18 -0
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/parse.js +86 -0
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts +14 -0
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +60 -0
- package/dist/cjs/src/transaction/descriptor/recipient.d.ts +5 -0
- package/dist/cjs/src/transaction/descriptor/recipient.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/recipient.js +3 -0
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +25 -0
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/signPsbt.js +44 -0
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +36 -0
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +90 -0
- package/dist/cjs/src/transaction/explainTransaction.d.ts +18 -0
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/explainTransaction.js +84 -0
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +24 -0
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/SigningError.js +32 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +45 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +149 -0
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +47 -0
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +3 -0
- package/dist/cjs/src/transaction/fixedScript/index.d.ts +8 -0
- package/dist/cjs/src/transaction/fixedScript/index.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/index.js +30 -0
- package/dist/cjs/src/transaction/fixedScript/musig2.d.ts +4 -0
- package/dist/cjs/src/transaction/fixedScript/musig2.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/musig2.js +3 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts +28 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.js +216 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +8 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +227 -0
- package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +10 -0
- package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/replayProtection.js +44 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +20 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +118 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +22 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +46 -0
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts +21 -0
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +182 -0
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts +9 -0
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.js +20 -0
- package/dist/cjs/src/transaction/index.d.ts +9 -0
- package/dist/cjs/src/transaction/index.d.ts.map +1 -0
- package/dist/cjs/src/transaction/index.js +52 -0
- package/dist/cjs/src/transaction/outputDifference.d.ts +44 -0
- package/dist/cjs/src/transaction/outputDifference.d.ts.map +1 -0
- package/dist/cjs/src/transaction/outputDifference.js +51 -0
- package/dist/cjs/src/transaction/parseTransaction.d.ts +4 -0
- package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/parseTransaction.js +48 -0
- package/dist/cjs/src/transaction/recipient.d.ts +34 -0
- package/dist/cjs/src/transaction/recipient.d.ts.map +1 -0
- package/dist/cjs/src/transaction/recipient.js +69 -0
- package/dist/cjs/src/transaction/signTransaction.d.ts +6 -0
- package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/signTransaction.js +105 -0
- package/dist/cjs/src/transaction/types.d.ts +47 -0
- package/dist/cjs/src/transaction/types.d.ts.map +1 -0
- package/dist/cjs/src/transaction/types.js +3 -0
- package/dist/cjs/src/transaction/verifyTransaction.d.ts +4 -0
- package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/verifyTransaction.js +50 -0
- package/dist/cjs/src/unspent.d.ts +59 -0
- package/dist/cjs/src/unspent.d.ts.map +1 -0
- package/dist/cjs/src/unspent.js +20 -0
- package/dist/cjs/src/verifyKey.d.ts +22 -0
- package/dist/cjs/src/verifyKey.d.ts.map +1 -0
- package/dist/cjs/src/verifyKey.js +110 -0
- package/dist/cjs/src/wallet.d.ts +15 -0
- package/dist/cjs/src/wallet.d.ts.map +1 -0
- package/dist/cjs/src/wallet.js +8 -0
- package/dist/cjs/test/integration/impl/bch/bch.d.ts +2 -0
- package/dist/cjs/test/integration/impl/bch/bch.d.ts.map +1 -0
- package/dist/cjs/test/integration/impl/bch/bch.js +76 -0
- package/dist/cjs/test/unit/address.d.ts +2 -0
- package/dist/cjs/test/unit/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/address.js +201 -0
- package/dist/cjs/test/unit/bip322.d.ts +2 -0
- package/dist/cjs/test/unit/bip322.d.ts.map +1 -0
- package/dist/cjs/test/unit/bip322.js +481 -0
- package/dist/cjs/test/unit/buildSignSendLegacyFormat.d.ts +2 -0
- package/dist/cjs/test/unit/buildSignSendLegacyFormat.d.ts.map +1 -0
- package/dist/cjs/test/unit/buildSignSendLegacyFormat.js +102 -0
- package/dist/cjs/test/unit/coins.d.ts +2 -0
- package/dist/cjs/test/unit/coins.d.ts.map +1 -0
- package/dist/cjs/test/unit/coins.js +161 -0
- package/dist/cjs/test/unit/customChangeWallet.d.ts +2 -0
- package/dist/cjs/test/unit/customChangeWallet.d.ts.map +1 -0
- package/dist/cjs/test/unit/customChangeWallet.js +204 -0
- package/dist/cjs/test/unit/customChangeWalletFixtures.d.ts +2 -0
- package/dist/cjs/test/unit/customChangeWalletFixtures.d.ts.map +1 -0
- package/dist/cjs/test/unit/customChangeWalletFixtures.js +53 -0
- package/dist/cjs/test/unit/customSigner.d.ts +2 -0
- package/dist/cjs/test/unit/customSigner.d.ts.map +1 -0
- package/dist/cjs/test/unit/customSigner.js +99 -0
- package/dist/cjs/test/unit/deriveKeyWithSeed.d.ts +2 -0
- package/dist/cjs/test/unit/deriveKeyWithSeed.d.ts.map +1 -0
- package/dist/cjs/test/unit/deriveKeyWithSeed.js +56 -0
- package/dist/cjs/test/unit/descriptor/NamedDescriptor.d.ts +2 -0
- package/dist/cjs/test/unit/descriptor/NamedDescriptor.d.ts.map +1 -0
- package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +51 -0
- package/dist/cjs/test/unit/descriptor/builder.d.ts +2 -0
- package/dist/cjs/test/unit/descriptor/builder.d.ts.map +1 -0
- package/dist/cjs/test/unit/descriptor/builder.js +92 -0
- package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.d.ts +2 -0
- package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
- package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +53 -0
- package/dist/cjs/test/unit/descriptor/descriptorWallet.d.ts +2 -0
- package/dist/cjs/test/unit/descriptor/descriptorWallet.d.ts.map +1 -0
- package/dist/cjs/test/unit/descriptor/descriptorWallet.js +62 -0
- package/dist/cjs/test/unit/descriptorAddress.d.ts +3 -0
- package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -0
- package/dist/cjs/test/unit/descriptorAddress.js +103 -0
- package/dist/cjs/test/unit/explainTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/explainTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/explainTransaction.js +37 -0
- package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts +4 -0
- package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts.map +1 -0
- package/dist/cjs/test/unit/fixtures/psbtHexProof.js +9 -0
- package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts +2 -0
- package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/bch/unit/bch.js +71 -0
- package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/bcha/unit/index.js +41 -0
- package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/bsv/unit/index.js +34 -0
- package/dist/cjs/test/unit/impl/btg/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/btg/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/btg/unit/index.js +33 -0
- package/dist/cjs/test/unit/impl/dash/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/dash/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/dash/unit/index.js +34 -0
- package/dist/cjs/test/unit/impl/doge/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/doge/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/doge/unit/index.js +34 -0
- package/dist/cjs/test/unit/impl/pearl/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/pearl/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/pearl/unit/index.js +111 -0
- package/dist/cjs/test/unit/impl/zec/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/unit/index.js +30 -0
- package/dist/cjs/test/unit/keySignatures.d.ts +2 -0
- package/dist/cjs/test/unit/keySignatures.d.ts.map +1 -0
- package/dist/cjs/test/unit/keySignatures.js +54 -0
- package/dist/cjs/test/unit/keychains.d.ts +2 -0
- package/dist/cjs/test/unit/keychains.d.ts.map +1 -0
- package/dist/cjs/test/unit/keychains.js +87 -0
- package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts +2 -0
- package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts.map +1 -0
- package/dist/cjs/test/unit/offlineVault/halfSigned.js +124 -0
- package/dist/cjs/test/unit/parseTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/parseTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/parseTransaction.js +155 -0
- package/dist/cjs/test/unit/pendingApprovalTxHexPsbt.d.ts +2 -0
- package/dist/cjs/test/unit/pendingApprovalTxHexPsbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/pendingApprovalTxHexPsbt.js +99 -0
- package/dist/cjs/test/unit/postProcessPrebuild.d.ts +2 -0
- package/dist/cjs/test/unit/postProcessPrebuild.d.ts.map +1 -0
- package/dist/cjs/test/unit/postProcessPrebuild.js +65 -0
- package/dist/cjs/test/unit/prebuildAndSign.d.ts +2 -0
- package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -0
- package/dist/cjs/test/unit/prebuildAndSign.js +218 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +136 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.js +147 -0
- package/dist/cjs/test/unit/recovery/crossChainRecovery.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/crossChainRecovery.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/crossChainRecovery.js +352 -0
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +189 -0
- package/dist/cjs/test/unit/recovery/mock.d.ts +37 -0
- package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/mock.js +111 -0
- package/dist/cjs/test/unit/signTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/signTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/signTransaction.js +223 -0
- package/dist/cjs/test/unit/testSpoofTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/testSpoofTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/testSpoofTransaction.js +114 -0
- package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +64 -0
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts +6 -0
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +51 -0
- package/dist/cjs/test/unit/transaction/descriptor/parse.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/parse.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/parse.js +138 -0
- package/dist/cjs/test/unit/transaction/descriptor/sign.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/sign.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/sign.js +76 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.js +100 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.js +84 -0
- package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +81 -0
- package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.js +102 -0
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +171 -0
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +222 -0
- package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +60 -0
- package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +98 -0
- package/dist/cjs/test/unit/transaction/outputDifference.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/outputDifference.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/outputDifference.js +117 -0
- package/dist/cjs/test/unit/transaction/recipient.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/recipient.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/recipient.js +52 -0
- package/dist/cjs/test/unit/transaction.d.ts +2 -0
- package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction.js +301 -0
- package/dist/cjs/test/unit/txFormat.d.ts +30 -0
- package/dist/cjs/test/unit/txFormat.d.ts.map +1 -0
- package/dist/cjs/test/unit/txFormat.js +161 -0
- package/dist/cjs/test/unit/util/address.d.ts +13 -0
- package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/address.js +15 -0
- package/dist/cjs/test/unit/util/assert.d.ts +3 -0
- package/dist/cjs/test/unit/util/assert.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/assert.js +24 -0
- package/dist/cjs/test/unit/util/fixtures.d.ts +13 -0
- package/dist/cjs/test/unit/util/fixtures.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/fixtures.js +105 -0
- package/dist/cjs/test/unit/util/index.d.ts +11 -0
- package/dist/cjs/test/unit/util/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/index.js +27 -0
- package/dist/cjs/test/unit/util/keychains.d.ts +55 -0
- package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/keychains.js +122 -0
- package/dist/cjs/test/unit/util/nockBitGo.d.ts +10 -0
- package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/nockBitGo.js +27 -0
- package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts +8 -0
- package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/nockIndexerAPI.js +23 -0
- package/dist/cjs/test/unit/util/psbt.d.ts +19 -0
- package/dist/cjs/test/unit/util/psbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/psbt.js +21 -0
- package/dist/cjs/test/unit/util/transaction.d.ts +28 -0
- package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/transaction.js +131 -0
- package/dist/cjs/test/unit/util/unspents.d.ts +71 -0
- package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/unspents.js +224 -0
- package/dist/cjs/test/unit/util/utxoCoins.d.ts +30 -0
- package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/utxoCoins.js +175 -0
- package/dist/cjs/test/unit/util/wallet.d.ts +4 -0
- package/dist/cjs/test/unit/util/wallet.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/wallet.js +9 -0
- package/dist/cjs/test/unit/verifyTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/verifyTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/verifyTransaction.js +539 -0
- package/dist/cjs/test/unit/wallet.d.ts +2 -0
- package/dist/cjs/test/unit/wallet.d.ts.map +1 -0
- package/dist/cjs/test/unit/wallet.js +251 -0
- package/dist/cjs/test/unit/webauthn.d.ts +2 -0
- package/dist/cjs/test/unit/webauthn.d.ts.map +1 -0
- package/dist/cjs/test/unit/webauthn.js +77 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/abstractUtxoCoin.d.ts +458 -0
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -0
- package/dist/esm/abstractUtxoCoin.js +644 -0
- package/dist/esm/address/fixedScript.d.ts +44 -0
- package/dist/esm/address/fixedScript.d.ts.map +1 -0
- package/dist/esm/address/fixedScript.js +100 -0
- package/dist/esm/address/index.d.ts +2 -0
- package/dist/esm/address/index.d.ts.map +1 -0
- package/dist/esm/address/index.js +2 -0
- package/dist/esm/config.d.ts +9 -0
- package/dist/esm/config.js +11 -0
- package/dist/esm/deriveKeyWithSeed.d.ts +12 -0
- package/dist/esm/deriveKeyWithSeed.d.ts.map +1 -0
- package/dist/esm/deriveKeyWithSeed.js +14 -0
- package/dist/esm/descriptor/NamedDescriptor.d.ts +19 -0
- package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -0
- package/dist/esm/descriptor/NamedDescriptor.js +37 -0
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
- package/dist/esm/descriptor/assertDescriptorWalletAddress.js +27 -0
- package/dist/esm/descriptor/builder/builder.d.ts +17 -0
- package/dist/esm/descriptor/builder/builder.d.ts.map +1 -0
- package/dist/esm/descriptor/builder/builder.js +51 -0
- package/dist/esm/descriptor/builder/index.d.ts +3 -0
- package/dist/esm/descriptor/builder/index.d.ts.map +1 -0
- package/dist/esm/descriptor/builder/index.js +3 -0
- package/dist/esm/descriptor/builder/parse.d.ts +5 -0
- package/dist/esm/descriptor/builder/parse.d.ts.map +1 -0
- package/dist/esm/descriptor/builder/parse.js +144 -0
- package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
- package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
- package/dist/esm/descriptor/createWallet/createDescriptorWallet.js +37 -0
- package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +12 -0
- package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
- package/dist/esm/descriptor/createWallet/createDescriptors.js +29 -0
- package/dist/esm/descriptor/createWallet/index.d.ts +3 -0
- package/dist/esm/descriptor/createWallet/index.d.ts.map +1 -0
- package/dist/esm/descriptor/createWallet/index.js +3 -0
- package/dist/esm/descriptor/descriptorWallet.d.ts +19 -0
- package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -0
- package/dist/esm/descriptor/descriptorWallet.js +16 -0
- package/dist/esm/descriptor/index.d.ts +9 -0
- package/dist/esm/descriptor/index.d.ts.map +1 -0
- package/dist/esm/descriptor/index.js +7 -0
- package/dist/esm/descriptor/validatePolicy.d.ts +22 -0
- package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -0
- package/dist/esm/descriptor/validatePolicy.js +82 -0
- package/dist/esm/impl/bch/bch.d.ts +22 -0
- package/dist/esm/impl/bch/bch.d.ts.map +1 -0
- package/dist/esm/impl/bch/bch.js +39 -0
- package/dist/esm/impl/bch/index.d.ts +3 -0
- package/dist/esm/impl/bch/index.d.ts.map +1 -0
- package/dist/esm/impl/bch/index.js +3 -0
- package/dist/esm/impl/bch/tbch.d.ts +12 -0
- package/dist/esm/impl/bch/tbch.d.ts.map +1 -0
- package/dist/esm/impl/bch/tbch.js +11 -0
- package/dist/esm/impl/bcha/bcha.d.ts +9 -0
- package/dist/esm/impl/bcha/bcha.d.ts.map +1 -0
- package/dist/esm/impl/bcha/bcha.js +11 -0
- package/dist/esm/impl/bcha/index.d.ts +3 -0
- package/dist/esm/impl/bcha/index.d.ts.map +1 -0
- package/dist/esm/impl/bcha/index.js +3 -0
- package/dist/esm/impl/bcha/tbcha.d.ts +12 -0
- package/dist/esm/impl/bcha/tbcha.d.ts.map +1 -0
- package/dist/esm/impl/bcha/tbcha.js +11 -0
- package/dist/esm/impl/bsv/bsv.d.ts +9 -0
- package/dist/esm/impl/bsv/bsv.d.ts.map +1 -0
- package/dist/esm/impl/bsv/bsv.js +11 -0
- package/dist/esm/impl/bsv/index.d.ts +3 -0
- package/dist/esm/impl/bsv/index.d.ts.map +1 -0
- package/dist/esm/impl/bsv/index.js +3 -0
- package/dist/esm/impl/bsv/tbsv.d.ts +12 -0
- package/dist/esm/impl/bsv/tbsv.d.ts.map +1 -0
- package/dist/esm/impl/bsv/tbsv.js +11 -0
- package/dist/esm/impl/btc/btc.d.ts +15 -0
- package/dist/esm/impl/btc/btc.d.ts.map +1 -0
- package/dist/esm/impl/btc/btc.js +18 -0
- package/dist/esm/impl/btc/index.d.ts +7 -0
- package/dist/esm/impl/btc/index.d.ts.map +1 -0
- package/dist/esm/impl/btc/index.js +7 -0
- package/dist/esm/impl/btc/inscriptionBuilder.d.ts +61 -0
- package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -0
- package/dist/esm/impl/btc/inscriptionBuilder.js +163 -0
- package/dist/esm/impl/btc/tbtc.d.ts +12 -0
- package/dist/esm/impl/btc/tbtc.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtc.js +11 -0
- package/dist/esm/impl/btc/tbtc4.d.ts +12 -0
- package/dist/esm/impl/btc/tbtc4.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtc4.js +11 -0
- package/dist/esm/impl/btc/tbtcbgsig.d.ts +12 -0
- package/dist/esm/impl/btc/tbtcbgsig.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtcbgsig.js +11 -0
- package/dist/esm/impl/btc/tbtcsig.d.ts +12 -0
- package/dist/esm/impl/btc/tbtcsig.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtcsig.js +11 -0
- package/dist/esm/impl/btg/btg.d.ts +9 -0
- package/dist/esm/impl/btg/btg.d.ts.map +1 -0
- package/dist/esm/impl/btg/btg.js +11 -0
- package/dist/esm/impl/btg/index.d.ts +2 -0
- package/dist/esm/impl/btg/index.d.ts.map +1 -0
- package/dist/esm/impl/btg/index.js +2 -0
- package/dist/esm/impl/dash/dash.d.ts +9 -0
- package/dist/esm/impl/dash/dash.d.ts.map +1 -0
- package/dist/esm/impl/dash/dash.js +11 -0
- package/dist/esm/impl/dash/index.d.ts +3 -0
- package/dist/esm/impl/dash/index.d.ts.map +1 -0
- package/dist/esm/impl/dash/index.js +3 -0
- package/dist/esm/impl/dash/tdash.d.ts +12 -0
- package/dist/esm/impl/dash/tdash.d.ts.map +1 -0
- package/dist/esm/impl/dash/tdash.js +11 -0
- package/dist/esm/impl/doge/doge.d.ts +33 -0
- package/dist/esm/impl/doge/doge.d.ts.map +1 -0
- package/dist/esm/impl/doge/doge.js +72 -0
- package/dist/esm/impl/doge/index.d.ts +3 -0
- package/dist/esm/impl/doge/index.d.ts.map +1 -0
- package/dist/esm/impl/doge/index.js +3 -0
- package/dist/esm/impl/doge/tdoge.d.ts +12 -0
- package/dist/esm/impl/doge/tdoge.d.ts.map +1 -0
- package/dist/esm/impl/doge/tdoge.js +11 -0
- package/dist/esm/impl/index.d.ts +11 -0
- package/dist/esm/impl/index.d.ts.map +1 -0
- package/dist/esm/impl/index.js +11 -0
- package/dist/esm/impl/ltc/index.d.ts +3 -0
- package/dist/esm/impl/ltc/index.d.ts.map +1 -0
- package/dist/esm/impl/ltc/index.js +3 -0
- package/dist/esm/impl/ltc/ltc.d.ts +8 -0
- package/dist/esm/impl/ltc/ltc.d.ts.map +1 -0
- package/dist/esm/impl/ltc/ltc.js +11 -0
- package/dist/esm/impl/ltc/tltc.d.ts +8 -0
- package/dist/esm/impl/ltc/tltc.d.ts.map +1 -0
- package/dist/esm/impl/ltc/tltc.js +11 -0
- package/dist/esm/impl/pearl/index.d.ts +3 -0
- package/dist/esm/impl/pearl/index.d.ts.map +1 -0
- package/dist/esm/impl/pearl/index.js +3 -0
- package/dist/esm/impl/pearl/pearl.d.ts +17 -0
- package/dist/esm/impl/pearl/pearl.d.ts.map +1 -0
- package/dist/esm/impl/pearl/pearl.js +20 -0
- package/dist/esm/impl/pearl/tpearl.d.ts +8 -0
- package/dist/esm/impl/pearl/tpearl.d.ts.map +1 -0
- package/dist/esm/impl/pearl/tpearl.js +11 -0
- package/dist/esm/impl/zec/index.d.ts +3 -0
- package/dist/esm/impl/zec/index.d.ts.map +1 -0
- package/dist/esm/impl/zec/index.js +3 -0
- package/dist/esm/impl/zec/tzec.d.ts +9 -0
- package/dist/esm/impl/zec/tzec.d.ts.map +1 -0
- package/dist/esm/impl/zec/tzec.js +11 -0
- package/dist/esm/impl/zec/zec.d.ts +12 -0
- package/dist/esm/impl/zec/zec.d.ts.map +1 -0
- package/dist/esm/impl/zec/zec.js +11 -0
- package/dist/esm/index.d.ts +23 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +23 -0
- package/dist/esm/keychains.d.ts +55 -0
- package/dist/esm/keychains.d.ts.map +1 -0
- package/dist/esm/keychains.js +98 -0
- package/dist/esm/names.d.ts +13 -0
- package/dist/esm/names.d.ts.map +1 -0
- package/dist/esm/names.js +86 -0
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +9 -0
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +19 -0
- package/dist/esm/offlineVault/OfflineVaultSignable.d.ts +46 -0
- package/dist/esm/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
- package/dist/esm/offlineVault/OfflineVaultSignable.js +18 -0
- package/dist/esm/offlineVault/TransactionExplanation.d.ts +16 -0
- package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -0
- package/dist/esm/offlineVault/TransactionExplanation.js +12 -0
- package/dist/esm/offlineVault/descriptor/index.d.ts +2 -0
- package/dist/esm/offlineVault/descriptor/index.d.ts.map +1 -0
- package/dist/esm/offlineVault/descriptor/index.js +2 -0
- package/dist/esm/offlineVault/descriptor/transaction.d.ts +39 -0
- package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -0
- package/dist/esm/offlineVault/descriptor/transaction.js +41 -0
- package/dist/esm/offlineVault/index.d.ts +6 -0
- package/dist/esm/offlineVault/index.d.ts.map +1 -0
- package/dist/esm/offlineVault/index.js +4 -0
- package/dist/esm/recovery/RecoveryProvider.d.ts +20 -0
- package/dist/esm/recovery/RecoveryProvider.d.ts.map +1 -0
- package/dist/esm/recovery/RecoveryProvider.js +19 -0
- package/dist/esm/recovery/backupKeyRecovery.d.ts +172 -0
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -0
- package/dist/esm/recovery/backupKeyRecovery.js +404 -0
- package/dist/esm/recovery/baseApi.d.ts +24 -0
- package/dist/esm/recovery/baseApi.d.ts.map +1 -0
- package/dist/esm/recovery/baseApi.js +64 -0
- package/dist/esm/recovery/coingeckoApi.d.ts +6 -0
- package/dist/esm/recovery/coingeckoApi.d.ts.map +1 -0
- package/dist/esm/recovery/coingeckoApi.js +40 -0
- package/dist/esm/recovery/crossChainRecovery.d.ts +97 -0
- package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -0
- package/dist/esm/recovery/crossChainRecovery.js +295 -0
- package/dist/esm/recovery/index.d.ts +7 -0
- package/dist/{src → esm}/recovery/index.d.ts.map +1 -1
- package/dist/esm/recovery/index.js +7 -0
- package/dist/esm/recovery/mempoolApi.d.ts +7 -0
- package/dist/{src → esm}/recovery/mempoolApi.d.ts.map +1 -1
- package/dist/esm/recovery/mempoolApi.js +29 -0
- package/dist/esm/recovery/psbt.d.ts +68 -0
- package/dist/esm/recovery/psbt.d.ts.map +1 -0
- package/dist/esm/recovery/psbt.js +152 -0
- package/dist/esm/tnumber.d.ts +4 -0
- package/dist/esm/tnumber.d.ts.map +1 -0
- package/dist/esm/tnumber.js +9 -0
- package/dist/esm/transaction/bip322.d.ts +27 -0
- package/dist/esm/transaction/bip322.d.ts.map +1 -0
- package/dist/esm/transaction/bip322.js +100 -0
- package/dist/esm/transaction/common/verifyPayGoAmount.d.ts +1 -0
- package/dist/esm/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
- package/dist/esm/transaction/common/verifyPayGoAmount.js +1 -0
- package/dist/esm/transaction/decode.d.ts +21 -0
- package/dist/esm/transaction/decode.d.ts.map +1 -0
- package/dist/esm/transaction/decode.js +39 -0
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts +5 -0
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/explainPsbt.js +44 -0
- package/dist/esm/transaction/descriptor/index.d.ts +7 -0
- package/dist/esm/transaction/descriptor/index.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/index.js +6 -0
- package/dist/esm/transaction/descriptor/parse.d.ts +18 -0
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/parse.js +82 -0
- package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +14 -0
- package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/parseToAmountType.js +55 -0
- package/dist/esm/transaction/descriptor/recipient.d.ts +5 -0
- package/dist/esm/transaction/descriptor/recipient.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/recipient.js +2 -0
- package/dist/esm/transaction/descriptor/signPsbt.d.ts +25 -0
- package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/signPsbt.js +39 -0
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +36 -0
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/verifyTransaction.js +80 -0
- package/dist/esm/transaction/explainTransaction.d.ts +18 -0
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/explainTransaction.js +48 -0
- package/dist/esm/transaction/fixedScript/SigningError.d.ts +24 -0
- package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/SigningError.js +26 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +45 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +144 -0
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +47 -0
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/explainTransaction.js +2 -0
- package/dist/esm/transaction/fixedScript/index.d.ts +8 -0
- package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/index.js +7 -0
- package/dist/esm/transaction/fixedScript/musig2.d.ts +4 -0
- package/dist/esm/transaction/fixedScript/musig2.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/musig2.js +2 -0
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts +28 -0
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/parseOutput.js +209 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +8 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.js +221 -0
- package/dist/esm/transaction/fixedScript/replayProtection.d.ts +10 -0
- package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/replayProtection.js +38 -0
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +20 -0
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/signPsbtWasm.js +111 -0
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +22 -0
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/signTransaction.js +39 -0
- package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts +21 -0
- package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/verifyTransaction.js +176 -0
- package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +9 -0
- package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
- package/dist/esm/transaction/getPayGoVerificationPubkey.js +17 -0
- package/dist/esm/transaction/index.d.ts +9 -0
- package/dist/esm/transaction/index.d.ts.map +1 -0
- package/dist/esm/transaction/index.js +9 -0
- package/dist/esm/transaction/outputDifference.d.ts +44 -0
- package/dist/esm/transaction/outputDifference.d.ts.map +1 -0
- package/dist/esm/transaction/outputDifference.js +45 -0
- package/dist/esm/transaction/parseTransaction.d.ts +4 -0
- package/dist/esm/transaction/parseTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/parseTransaction.js +12 -0
- package/dist/esm/transaction/recipient.d.ts +34 -0
- package/dist/esm/transaction/recipient.d.ts.map +1 -0
- package/dist/esm/transaction/recipient.js +61 -0
- package/dist/esm/transaction/signTransaction.d.ts +6 -0
- package/dist/esm/transaction/signTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/signTransaction.js +66 -0
- package/dist/esm/transaction/types.d.ts +47 -0
- package/dist/esm/transaction/types.d.ts.map +1 -0
- package/dist/esm/transaction/types.js +2 -0
- package/dist/esm/transaction/verifyTransaction.d.ts +4 -0
- package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/verifyTransaction.js +14 -0
- package/dist/esm/unspent.d.ts +59 -0
- package/dist/esm/unspent.d.ts.map +1 -0
- package/dist/esm/unspent.js +15 -0
- package/dist/esm/verifyKey.d.ts +22 -0
- package/dist/esm/verifyKey.d.ts.map +1 -0
- package/dist/esm/verifyKey.js +102 -0
- package/dist/esm/wallet.d.ts +15 -0
- package/dist/esm/wallet.d.ts.map +1 -0
- package/dist/esm/wallet.js +5 -0
- package/package.json +48 -20
- package/.eslintignore +0 -5
- package/CHANGELOG.md +0 -253
- package/dist/src/abstractUtxoCoin.d.ts +0 -392
- package/dist/src/abstractUtxoCoin.d.ts.map +0 -1
- package/dist/src/abstractUtxoCoin.js +0 -931
- package/dist/src/config.js +0 -14
- package/dist/src/index.d.ts +0 -6
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -18
- package/dist/src/parseOutput.d.ts +0 -22
- package/dist/src/parseOutput.d.ts.map +0 -1
- package/dist/src/parseOutput.js +0 -181
- package/dist/src/recovery/RecoveryProvider.d.ts.map +0 -1
- package/dist/src/recovery/RecoveryProvider.js +0 -24
- package/dist/src/recovery/backupKeyRecovery.d.ts +0 -62
- package/dist/src/recovery/backupKeyRecovery.d.ts.map +0 -1
- package/dist/src/recovery/backupKeyRecovery.js +0 -293
- package/dist/src/recovery/baseApi.d.ts.map +0 -1
- package/dist/src/recovery/baseApi.js +0 -73
- package/dist/src/recovery/coingeckoApi.d.ts.map +0 -1
- package/dist/src/recovery/coingeckoApi.js +0 -47
- package/dist/src/recovery/crossChainRecovery.d.ts.map +0 -1
- package/dist/src/recovery/crossChainRecovery.js +0 -294
- package/dist/src/recovery/mempoolApi.js +0 -33
- package/dist/src/recovery/smartbitApi.d.ts +0 -11
- package/dist/src/recovery/smartbitApi.d.ts.map +0 -1
- package/dist/src/recovery/smartbitApi.js +0 -36
- package/dist/src/replayProtection.d.ts +0 -4
- package/dist/src/replayProtection.d.ts.map +0 -1
- package/dist/src/replayProtection.js +0 -21
- package/dist/src/sign.d.ts +0 -31
- package/dist/src/sign.d.ts.map +0 -1
- package/dist/src/sign.js +0 -104
- package/dist/tsconfig.tsbuildinfo +0 -8179
- /package/dist/{src → cjs/src}/config.d.ts +0 -0
- /package/dist/{src → cjs/src}/recovery/mempoolApi.d.ts +0 -0
- /package/dist/{src → esm}/config.d.ts.map +0 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
require("mocha");
|
|
37
|
+
const assert = __importStar(require("assert"));
|
|
38
|
+
const _ = __importStar(require("lodash"));
|
|
39
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
40
|
+
const nock = require("nock");
|
|
41
|
+
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
42
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
43
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
44
|
+
const src_1 = require("../../src");
|
|
45
|
+
const util_1 = require("./util");
|
|
46
|
+
function run(coin, inputScripts, txFormat) {
|
|
47
|
+
const amountType = coin.amountType;
|
|
48
|
+
const title = [inputScripts.join(','), `txFormat=${txFormat}`, `amountType=${amountType}`];
|
|
49
|
+
describe(`${title.join(' ')}`, function () {
|
|
50
|
+
const bgUrl = sdk_core_1.common.Environments[util_1.defaultBitGo.getEnv()].uri;
|
|
51
|
+
const isTransactionWithKeyPathSpend = inputScripts.some((s) => s === 'taprootKeyPathSpend');
|
|
52
|
+
const isTransactionWithReplayProtection = inputScripts.some((s) => s === 'p2shP2pk');
|
|
53
|
+
const isTransactionWithP2tr = inputScripts.some((s) => s === 'p2tr');
|
|
54
|
+
const isTransactionWithP2trMusig2 = inputScripts.some((s) => s === 'p2trMusig2');
|
|
55
|
+
const value = (amountType === 'bigint' ? BigInt('10999999800000001') : 1e8);
|
|
56
|
+
const wallet = (0, util_1.getUtxoWallet)(coin, { id: '5b34252f1bf349930e34020a00000000', coin: coin.getChain() });
|
|
57
|
+
const walletKeys = (0, util_1.getDefaultWalletKeys)();
|
|
58
|
+
const fullSign = !(isTransactionWithReplayProtection || isTransactionWithKeyPathSpend);
|
|
59
|
+
function getUnspentsForPsbt() {
|
|
60
|
+
return inputScripts.map((t, index) => {
|
|
61
|
+
return utxo_lib_1.testutil.toUnspent({ scriptType: t, value: t === 'p2shP2pk' ? BigInt(1000) : BigInt(value) }, index, (0, util_1.getNetworkForCoinName)(coin.name), walletKeys);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function toTxnInputScriptType(type) {
|
|
65
|
+
return type === 'p2shP2pk' ? 'replayProtection' : type === 'taprootKeyPathSpend' ? 'p2trMusig2' : type;
|
|
66
|
+
}
|
|
67
|
+
function getUnspents() {
|
|
68
|
+
return inputScripts.map((type, i) => (0, util_1.mockUnspent)((0, util_1.getNetworkForCoinName)(coin.name), walletKeys, toTxnInputScriptType(type), i, value));
|
|
69
|
+
}
|
|
70
|
+
function getOutputAddress(rootWalletKeys) {
|
|
71
|
+
return (0, src_1.generateAddress)(coin.name, {
|
|
72
|
+
keychains: rootWalletKeys.triple.map((k) => ({ pub: k.neutered().toBase58() })),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function getSignParams(prebuildHex, signer, cosigner) {
|
|
76
|
+
const txInfo = {
|
|
77
|
+
unspents: txFormat === 'psbt' ? undefined : getUnspents(),
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
txPrebuild: {
|
|
81
|
+
walletId: isTransactionWithKeyPathSpend ? wallet.id() : undefined,
|
|
82
|
+
txHex: prebuildHex,
|
|
83
|
+
txInfo,
|
|
84
|
+
},
|
|
85
|
+
prv: signer.toBase58(),
|
|
86
|
+
pubs: walletKeys.triple.map((k) => k.neutered().toBase58()),
|
|
87
|
+
cosignerPub: cosigner.neutered().toBase58(),
|
|
88
|
+
extractTransaction: false,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
async function createHalfSignedTransaction(prebuild, signer, cosigner) {
|
|
92
|
+
let scope;
|
|
93
|
+
if (isTransactionWithKeyPathSpend) {
|
|
94
|
+
scope = nock(bgUrl)
|
|
95
|
+
.post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/signpsbt`, (body) => body.psbt)
|
|
96
|
+
.reply(200, (_uri, requestBody) => {
|
|
97
|
+
const networkName = utxolib.getNetworkName((0, util_1.getNetworkForCoinName)(coin.name));
|
|
98
|
+
const reqBytes = Buffer.from(requestBody.psbt, 'hex');
|
|
99
|
+
const reqPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(reqBytes, networkName);
|
|
100
|
+
const cosignerWasm = wasm_utxo_1.BIP32.fromBase58(cosigner.toBase58());
|
|
101
|
+
reqPsbt.generateMusig2Nonces(cosignerWasm);
|
|
102
|
+
return { psbt: Buffer.from(reqPsbt.serialize()).toString('hex') };
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// half-sign with the user key
|
|
106
|
+
const result = (await wallet.signTransaction(getSignParams(prebuild.toBuffer().toString('hex'), signer, cosigner)));
|
|
107
|
+
if (scope) {
|
|
108
|
+
assert.strictEqual(scope.isDone(), true);
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
async function createFullSignedTransaction(halfSigned, signer, cosigner) {
|
|
113
|
+
return (await wallet.signTransaction({
|
|
114
|
+
...getSignParams(halfSigned.txHex, signer, cosigner),
|
|
115
|
+
isLastSignature: true,
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
function createPrebuildPsbt() {
|
|
119
|
+
const inputs = inputScripts.map((t) => ({
|
|
120
|
+
scriptType: t,
|
|
121
|
+
value: t === 'p2shP2pk' ? BigInt(1000) : BigInt(value),
|
|
122
|
+
}));
|
|
123
|
+
const unspentSum = inputs.reduce((prev, curr) => prev + curr.value, BigInt(0));
|
|
124
|
+
const outputs = [
|
|
125
|
+
{ address: getOutputAddress((0, util_1.getWalletKeys)('test')), value: unspentSum - BigInt(1000) },
|
|
126
|
+
];
|
|
127
|
+
const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, (0, util_1.getNetworkForCoinName)(coin.name), walletKeys, 'unsigned', {
|
|
128
|
+
p2shP2pkKey: (0, src_1.getReplayProtectionPubkeys)(coin.name)[0],
|
|
129
|
+
});
|
|
130
|
+
utxolib.bitgo.addXpubsToPsbt(psbt, walletKeys);
|
|
131
|
+
return psbt;
|
|
132
|
+
}
|
|
133
|
+
async function getTransactionStages() {
|
|
134
|
+
const prebuild = txFormat === 'psbt'
|
|
135
|
+
? createPrebuildPsbt()
|
|
136
|
+
: (0, util_1.createPrebuildTransaction)((0, util_1.getNetworkForCoinName)(coin.name), getUnspents(), getOutputAddress(walletKeys));
|
|
137
|
+
const halfSignedUserBitGo = await createHalfSignedTransaction(prebuild, walletKeys.user, walletKeys.bitgo);
|
|
138
|
+
const fullSignedUserBitGo = fullSign && !isTransactionWithP2trMusig2
|
|
139
|
+
? await createFullSignedTransaction(halfSignedUserBitGo, walletKeys.bitgo, walletKeys.user)
|
|
140
|
+
: undefined;
|
|
141
|
+
const halfSignedUserBackup = !isTransactionWithKeyPathSpend && !(txFormat === 'psbt' && isTransactionWithP2tr)
|
|
142
|
+
? await createHalfSignedTransaction(prebuild, walletKeys.user, walletKeys.backup)
|
|
143
|
+
: undefined;
|
|
144
|
+
const fullSignedUserBackup = fullSign && halfSignedUserBackup
|
|
145
|
+
? await createFullSignedTransaction(halfSignedUserBackup, walletKeys.backup, walletKeys.user)
|
|
146
|
+
: undefined;
|
|
147
|
+
return {
|
|
148
|
+
prebuild,
|
|
149
|
+
halfSignedUserBackup,
|
|
150
|
+
halfSignedUserBitGo,
|
|
151
|
+
fullSignedUserBackup,
|
|
152
|
+
fullSignedUserBitGo,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
let transactionStages;
|
|
156
|
+
before('prepare', async function () {
|
|
157
|
+
transactionStages = await getTransactionStages();
|
|
158
|
+
});
|
|
159
|
+
afterEach(nock.cleanAll);
|
|
160
|
+
it('match fixtures', async function () {
|
|
161
|
+
if (txFormat === 'psbt') {
|
|
162
|
+
// TODO (maybe) - once full PSBT support is added to abstract-utxo module, custom JSON representation of PSBT can be created and tested here.
|
|
163
|
+
// signatures of taprootKeyPathSpends are random since random nature of MuSig2 nonce, so psbt hex comparison also wont work.
|
|
164
|
+
return this.skip();
|
|
165
|
+
}
|
|
166
|
+
function toTransactionStagesObj(stages) {
|
|
167
|
+
return _.mapValues(stages, (v) => v === undefined || v instanceof utxolib.bitgo.UtxoPsbt || v instanceof wasm_utxo_1.fixedScriptWallet.BitGoPsbt
|
|
168
|
+
? undefined
|
|
169
|
+
: v instanceof utxolib.bitgo.UtxoTransaction
|
|
170
|
+
? (0, util_1.transactionToObj)(v)
|
|
171
|
+
: (0, util_1.transactionHexToObj)(v.txHex, (0, util_1.getNetworkForCoinName)(coin.name), amountType));
|
|
172
|
+
}
|
|
173
|
+
(0, util_1.assertEqualJSON)(toTransactionStagesObj(transactionStages), await (0, util_1.getFixture)(coin, `transactions-${inputScripts.map((t) => toTxnInputScriptType(t)).join('-')}`, toTransactionStagesObj(transactionStages)));
|
|
174
|
+
});
|
|
175
|
+
function testPsbtValidSignatures(tx, signedBy) {
|
|
176
|
+
const psbt = utxolib.bitgo.createPsbtFromHex(tx.txHex, (0, util_1.getNetworkForCoinName)(coin.name));
|
|
177
|
+
const unspents = getUnspentsForPsbt();
|
|
178
|
+
psbt.data.inputs.forEach((input, index) => {
|
|
179
|
+
const unspent = unspents[index];
|
|
180
|
+
if (!utxolib.bitgo.isWalletUnspent(unspent)) {
|
|
181
|
+
assert.ok(utxolib.bitgo.getPsbtInputScriptType(input), 'p2shP2pk');
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const walletUnspent = unspent;
|
|
185
|
+
const pubkeys = walletKeys.deriveForChainAndIndex(walletUnspent.chain, walletUnspent.index).publicKeys;
|
|
186
|
+
pubkeys.forEach((pk, pkIndex) => {
|
|
187
|
+
assert.strictEqual(psbt.validateSignaturesOfInputCommon(index, pk), signedBy.includes(walletKeys.triple[pkIndex]));
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
function testValidSignatures(tx, signedBy, sign) {
|
|
192
|
+
if (txFormat === 'psbt') {
|
|
193
|
+
testPsbtValidSignatures(tx, signedBy);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const unspents = getUnspents();
|
|
197
|
+
const prevOutputs = unspents.map((u) => ({
|
|
198
|
+
script: Buffer.from(wasm_utxo_1.address.toOutputScriptWithCoin(u.address, coin.name)),
|
|
199
|
+
value: u.value,
|
|
200
|
+
}));
|
|
201
|
+
const transaction = utxolib.bitgo.createTransactionFromBuffer(Buffer.from(tx.txHex, 'hex'), (0, util_1.getNetworkForCoinName)(coin.name), { amountType });
|
|
202
|
+
transaction.ins.forEach((input, index) => {
|
|
203
|
+
if (inputScripts[index] === 'p2shP2pk') {
|
|
204
|
+
assert.ok(coin.isBitGoTaintedUnspent(unspents[index]));
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const unspent = unspents[index];
|
|
208
|
+
const pubkeys = walletKeys.deriveForChainAndIndex(unspent.chain, unspent.index).publicKeys;
|
|
209
|
+
pubkeys.forEach((pk, pkIndex) => {
|
|
210
|
+
assert.strictEqual(utxolib.bitgo.verifySignature(transaction, index, prevOutputs[index].value, {
|
|
211
|
+
publicKey: pk,
|
|
212
|
+
}, prevOutputs), signedBy.includes(walletKeys.triple[pkIndex]));
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
async function testExplainTx(stageName, txHex, unspents, pubs) {
|
|
217
|
+
const explanation = await coin.explainTransaction({
|
|
218
|
+
txHex,
|
|
219
|
+
txInfo: {
|
|
220
|
+
unspents,
|
|
221
|
+
},
|
|
222
|
+
pubs,
|
|
223
|
+
});
|
|
224
|
+
const expectedProperties = ['id', 'outputs', 'changeOutputs', 'changeAmount', 'outputAmount'];
|
|
225
|
+
for (const prop of expectedProperties) {
|
|
226
|
+
assert.ok(prop in explanation, `expected explanation to have property '${prop}'`);
|
|
227
|
+
}
|
|
228
|
+
const expectedSignatureCount = stageName === 'prebuild' || pubs === undefined
|
|
229
|
+
? 0
|
|
230
|
+
: stageName.startsWith('halfSigned')
|
|
231
|
+
? 1
|
|
232
|
+
: stageName.startsWith('fullSigned')
|
|
233
|
+
? 2
|
|
234
|
+
: undefined;
|
|
235
|
+
if ('inputSignatures' in explanation) {
|
|
236
|
+
assert.deepStrictEqual(explanation.inputSignatures,
|
|
237
|
+
// FIXME(BG-35154): implement signature verification for replay protection inputs
|
|
238
|
+
inputScripts.map((type) => (type === 'p2shP2pk' ? 0 : expectedSignatureCount)));
|
|
239
|
+
}
|
|
240
|
+
if ('signatures' in explanation) {
|
|
241
|
+
assert.deepStrictEqual(explanation.signatures, expectedSignatureCount);
|
|
242
|
+
assert.deepStrictEqual(explanation.changeAmount, '0'); // no change addresses given
|
|
243
|
+
}
|
|
244
|
+
let expectedOutputAmount = BigInt((txFormat === 'psbt' ? getUnspentsForPsbt() : getUnspents()).length) * BigInt(value);
|
|
245
|
+
inputScripts.forEach((type) => {
|
|
246
|
+
if (type === 'p2shP2pk') {
|
|
247
|
+
// replayProtection unspents have value 1000
|
|
248
|
+
expectedOutputAmount -= BigInt(value);
|
|
249
|
+
expectedOutputAmount += BigInt(1000);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
expectedOutputAmount -= BigInt(1000); // fee of 1000
|
|
253
|
+
assert.deepStrictEqual(explanation.outputAmount, expectedOutputAmount.toString());
|
|
254
|
+
}
|
|
255
|
+
it('have valid signature for half-signed transaction', function () {
|
|
256
|
+
if (transactionStages.halfSignedUserBackup) {
|
|
257
|
+
testValidSignatures(transactionStages.halfSignedUserBackup, [walletKeys.user], 'halfsigned');
|
|
258
|
+
}
|
|
259
|
+
testValidSignatures(transactionStages.halfSignedUserBitGo, [walletKeys.user], 'halfsigned');
|
|
260
|
+
});
|
|
261
|
+
it('have valid signatures for full-signed transaction', function () {
|
|
262
|
+
if (!fullSign) {
|
|
263
|
+
return this.skip();
|
|
264
|
+
}
|
|
265
|
+
if (transactionStages.fullSignedUserBackup) {
|
|
266
|
+
testValidSignatures(transactionStages.fullSignedUserBackup, [walletKeys.user, walletKeys.backup], 'fullsigned');
|
|
267
|
+
}
|
|
268
|
+
if (transactionStages.fullSignedUserBitGo) {
|
|
269
|
+
testValidSignatures(transactionStages.fullSignedUserBitGo, [walletKeys.user, walletKeys.bitgo], 'fullsigned');
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
it('have correct results for explainTransaction', async function () {
|
|
273
|
+
for (const [stageName, stageTx] of Object.entries(transactionStages)) {
|
|
274
|
+
if (!stageTx) {
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
const txHex = stageTx instanceof utxolib.bitgo.UtxoPsbt || stageTx instanceof utxolib.bitgo.UtxoTransaction
|
|
278
|
+
? stageTx.toBuffer().toString('hex')
|
|
279
|
+
: stageTx instanceof wasm_utxo_1.fixedScriptWallet.BitGoPsbt
|
|
280
|
+
? Buffer.from(stageTx.serialize()).toString('hex')
|
|
281
|
+
: stageTx.txHex;
|
|
282
|
+
const pubs = walletKeys.triple.map((k) => k.neutered().toBase58());
|
|
283
|
+
const unspents = txFormat === 'psbt'
|
|
284
|
+
? getUnspentsForPsbt().map((u) => ({ ...u, value: utxo_lib_1.bitgo.toTNumber(u.value, amountType) }))
|
|
285
|
+
: getUnspents();
|
|
286
|
+
await testExplainTx(stageName, txHex, unspents, pubs);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
function runTestForCoin(coin) {
|
|
292
|
+
run(coin, (0, util_1.getScriptTypes)(coin, 'psbt'), 'psbt');
|
|
293
|
+
}
|
|
294
|
+
describe('Transaction Suite', function () {
|
|
295
|
+
(0, util_1.getMinUtxoCoins)().forEach((coin) => {
|
|
296
|
+
describe(`${coin.getChain()}`, function () {
|
|
297
|
+
runTestForCoin(coin);
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpQkFBZTtBQUNmLCtDQUFpQztBQUVqQywwQ0FBNEI7QUFDNUIsOERBQWdEO0FBQ2hELDZCQUE4QjtBQUM5QixtREFBdUU7QUFDdkUsZ0RBQW9GO0FBQ3BGLG1EQU04QjtBQUU5QixtQ0FBMEY7QUFHMUYsaUNBZ0JnQjtBQUVoQixTQUFTLEdBQUcsQ0FDVixJQUFzQixFQUN0QixZQUF3QyxFQUN4QyxRQUEyQjtJQUUzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLFFBQVEsRUFBRSxFQUFFLGNBQWMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMzRixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxLQUFLLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsbUJBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUU3RCxNQUFNLDZCQUE2QixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzVGLE1BQU0saUNBQWlDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1B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USxFQUFFLEVBQUUsRUFBRTtZQUM3QixjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCB7IEJJUDMySW50ZXJmYWNlLCBiaXRnbywgdGVzdHV0aWwgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBhZGRyZXNzIGFzIHdhc21BZGRyZXNzLCBmaXhlZFNjcmlwdFdhbGxldCwgQklQMzIgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7XG4gIGNvbW1vbixcbiAgRnVsbHlTaWduZWRUcmFuc2FjdGlvbixcbiAgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgVHJpcGxlLFxuICBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIGdlbmVyYXRlQWRkcmVzcywgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50LCBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vLi4vc3JjL3Vuc3BlbnQnO1xuXG5pbXBvcnQge1xuICBhc3NlcnRFcXVhbEpTT04sXG4gIGdldEZpeHR1cmUsXG4gIGdldFV0eG9XYWxsZXQsXG4gIG1vY2tVbnNwZW50LFxuICBJbnB1dFNjcmlwdFR5cGUsXG4gIFRyYW5zYWN0aW9uT2JqLFxuICB0cmFuc2FjdGlvblRvT2JqLFxuICB0cmFuc2FjdGlvbkhleFRvT2JqLFxuICBjcmVhdGVQcmVidWlsZFRyYW5zYWN0aW9uLFxuICBnZXREZWZhdWx0V2FsbGV0S2V5cyxcbiAgZ2V0V2FsbGV0S2V5cyxcbiAgZGVmYXVsdEJpdEdvLFxuICBnZXRNaW5VdHhvQ29pbnMsXG4gIGdldE5ldHdvcmtGb3JDb2luTmFtZSxcbiAgZ2V0U2NyaXB0VHlwZXMsXG59IGZyb20gJy4vdXRpbCc7XG5cbmZ1bmN0aW9uIHJ1bjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgaW5wdXRTY3JpcHRzOiB0ZXN0dXRpbC5JbnB1dFNjcmlwdFR5cGVbXSxcbiAgdHhGb3JtYXQ6ICdsZWdhY3knIHwgJ3BzYnQnXG4pIHtcbiAgY29uc3QgYW1vdW50VHlwZSA9IGNvaW4uYW1vdW50VHlwZTtcbiAgY29uc3QgdGl0bGUgPSBbaW5wdXRTY3JpcHRzLmpvaW4oJywnKSwgYHR4Rm9ybWF0PSR7dHhGb3JtYXR9YCwgYGFtb3VudFR5cGU9JHthbW91bnRUeXBlfWBdO1xuICBkZXNjcmliZShgJHt0aXRsZS5qb2luKCcgJyl9YCwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcblxuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyk7XG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhSZXBsYXlQcm90ZWN0aW9uID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICdwMnNoUDJwaycpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUDJ0ciA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJ0cicpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUDJ0ck11c2lnMiA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJ0ck11c2lnMicpO1xuXG4gICAgY29uc3QgdmFsdWUgPSAoYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcgPyBCaWdJbnQoJzEwOTk5OTk5ODAwMDAwMDAxJykgOiAxZTgpIGFzIFROdW1iZXI7XG4gICAgY29uc3Qgd2FsbGV0ID0gZ2V0VXR4b1dhbGxldChjb2luLCB7IGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLCBjb2luOiBjb2luLmdldENoYWluKCkgfSk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG5cbiAgICBjb25zdCBmdWxsU2lnbiA9ICEoaXNUcmFuc2FjdGlvbldpdGhSZXBsYXlQcm90ZWN0aW9uIHx8IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kKTtcblxuICAgIGZ1bmN0aW9uIGdldFVuc3BlbnRzRm9yUHNidCgpOiBVbnNwZW50PGJpZ2ludD5bXSB7XG4gICAgICByZXR1cm4gaW5wdXRTY3JpcHRzLm1hcCgodCwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRlc3R1dGlsLnRvVW5zcGVudChcbiAgICAgICAgICB7IHNjcmlwdFR5cGU6IHQsIHZhbHVlOiB0ID09PSAncDJzaFAycGsnID8gQmlnSW50KDEwMDApIDogQmlnSW50KHZhbHVlKSB9LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLFxuICAgICAgICAgIHdhbGxldEtleXNcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvVHhuSW5wdXRTY3JpcHRUeXBlKHR5cGU6IHRlc3R1dGlsLklucHV0U2NyaXB0VHlwZSk6IElucHV0U2NyaXB0VHlwZSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3Ayc2hQMnBrJyA/ICdyZXBsYXlQcm90ZWN0aW9uJyA6IHR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyA/ICdwMnRyTXVzaWcyJyA6IHR5cGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0VW5zcGVudHMoKTogVW5zcGVudDxUTnVtYmVyPltdIHtcbiAgICAgIHJldHVybiBpbnB1dFNjcmlwdHMubWFwKCh0eXBlLCBpKSA9PlxuICAgICAgICBtb2NrVW5zcGVudDxUTnVtYmVyPihnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSwgd2FsbGV0S2V5cywgdG9UeG5JbnB1dFNjcmlwdFR5cGUodHlwZSksIGksIHZhbHVlKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRPdXRwdXRBZGRyZXNzKHJvb3RXYWxsZXRLZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUFkZHJlc3MoY29pbi5uYW1lLCB7XG4gICAgICAgIGtleWNoYWluczogcm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gKHsgcHViOiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9KSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTaWduUGFyYW1zKFxuICAgICAgcHJlYnVpbGRIZXg6IHN0cmluZyxcbiAgICAgIHNpZ25lcjogQklQMzJJbnRlcmZhY2UsXG4gICAgICBjb3NpZ25lcjogQklQMzJJbnRlcmZhY2VcbiAgICApOiBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgICAgIGNvbnN0IHR4SW5mbyA9IHtcbiAgICAgICAgdW5zcGVudHM6IHR4Rm9ybWF0ID09PSAncHNidCcgPyB1bmRlZmluZWQgOiBnZXRVbnNwZW50cygpLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB3YWxsZXRJZDogaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgPyB3YWxsZXQuaWQoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0eEhleDogcHJlYnVpbGRIZXgsXG4gICAgICAgICAgdHhJbmZvLFxuICAgICAgICB9LFxuICAgICAgICBwcnY6IHNpZ25lci50b0Jhc2U1OCgpLFxuICAgICAgICBwdWJzOiB3YWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSxcbiAgICAgICAgY29zaWduZXJQdWI6IGNvc2lnbmVyLm5ldXRlcmVkKCkudG9CYXNlNTgoKSxcbiAgICAgICAgZXh0cmFjdFRyYW5zYWN0aW9uOiBmYWxzZSxcbiAgICAgIH0gYXMgV2FsbGV0U2lnblRyYW5zYWN0aW9uT3B0aW9ucztcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24oXG4gICAgICBwcmVidWlsZDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICAgICAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZVxuICAgICk6IFByb21pc2U8SGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgICAgbGV0IHNjb3BlOiBub2NrLlNjb3BlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kKSB7XG4gICAgICAgIHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zaWducHNidGAsIChib2R5KSA9PiBib2R5LnBzYnQpXG4gICAgICAgICAgLnJlcGx5KDIwMCwgKF91cmk6IHN0cmluZywgcmVxdWVzdEJvZHk6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ldHdvcmtOYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShcbiAgICAgICAgICAgICAgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSlcbiAgICAgICAgICAgICkgYXMgZml4ZWRTY3JpcHRXYWxsZXQuTmV0d29ya05hbWU7XG4gICAgICAgICAgICBjb25zdCByZXFCeXRlcyA9IEJ1ZmZlci5mcm9tKChyZXF1ZXN0Qm9keSBhcyB7IHBzYnQ6IHN0cmluZyB9KS5wc2J0LCAnaGV4Jyk7XG4gICAgICAgICAgICBjb25zdCByZXFQc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhyZXFCeXRlcywgbmV0d29ya05hbWUpO1xuICAgICAgICAgICAgY29uc3QgY29zaWduZXJXYXNtID0gQklQMzIuZnJvbUJhc2U1OChjb3NpZ25lci50b0Jhc2U1OCgpKTtcbiAgICAgICAgICAgIHJlcVBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXMoY29zaWduZXJXYXNtKTtcbiAgICAgICAgICAgIHJldHVybiB7IHBzYnQ6IEJ1ZmZlci5mcm9tKHJlcVBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBoYWxmLXNpZ24gd2l0aCB0aGUgdXNlciBrZXlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB3YWxsZXQuc2lnblRyYW5zYWN0aW9uKFxuICAgICAgICBnZXRTaWduUGFyYW1zKHByZWJ1aWxkLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLCBzaWduZXIsIGNvc2lnbmVyKVxuICAgICAgKSkgYXMgUHJvbWlzZTxIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPjtcblxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY29wZS5pc0RvbmUoKSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uKFxuICAgICAgaGFsZlNpZ25lZDogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgICAgIHNpZ25lcjogQklQMzJJbnRlcmZhY2UsXG4gICAgICBjb3NpZ25lcjogQklQMzJJbnRlcmZhY2VcbiAgICApOiBQcm9taXNlPEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICAgIHJldHVybiAoYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIC4uLmdldFNpZ25QYXJhbXMoaGFsZlNpZ25lZC50eEhleCwgc2lnbmVyLCBjb3NpZ25lciksXG4gICAgICAgIGlzTGFzdFNpZ25hdHVyZTogdHJ1ZSxcbiAgICAgIH0pKSBhcyBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIHR5cGUgVHJhbnNhY3Rpb25TdGFnZXMgPSB7XG4gICAgICBwcmVidWlsZDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgICAgaGFsZlNpZ25lZFVzZXJCYWNrdXA/OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uO1xuICAgICAgaGFsZlNpZ25lZFVzZXJCaXRHbzogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbjtcbiAgICAgIGZ1bGxTaWduZWRVc2VyQmFja3VwPzogRnVsbHlTaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIGZ1bGxTaWduZWRVc2VyQml0R28/OiBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH07XG5cbiAgICB0eXBlIFRyYW5zYWN0aW9uT2JqU3RhZ2VzID0gUmVjb3JkPGtleW9mIFRyYW5zYWN0aW9uU3RhZ2VzLCBUcmFuc2FjdGlvbk9iaj47XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQcmVidWlsZFBzYnQoKSB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBpbnB1dFNjcmlwdHMubWFwKFxuICAgICAgICAodCk6IHRlc3R1dGlsLklucHV0ID0+ICh7XG4gICAgICAgICAgc2NyaXB0VHlwZTogdCxcbiAgICAgICAgICB2YWx1ZTogdCA9PT0gJ3Ayc2hQMnBrJyA/IEJpZ0ludCgxMDAwKSA6IEJpZ0ludCh2YWx1ZSksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VycikgPT4gcHJldiArIGN1cnIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFtcbiAgICAgICAgeyBhZGRyZXNzOiBnZXRPdXRwdXRBZGRyZXNzKGdldFdhbGxldEtleXMoJ3Rlc3QnKSksIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSwgd2FsbGV0S2V5cywgJ3Vuc2lnbmVkJywge1xuICAgICAgICBwMnNoUDJwa0tleTogZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMoY29pbi5uYW1lKVswXSxcbiAgICAgIH0pO1xuICAgICAgdXR4b2xpYi5iaXRnby5hZGRYcHVic1RvUHNidChwc2J0LCB3YWxsZXRLZXlzKTtcbiAgICAgIHJldHVybiBwc2J0O1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uU3RhZ2VzKCk6IFByb21pc2U8VHJhbnNhY3Rpb25TdGFnZXM+IHtcbiAgICAgIGNvbnN0IHByZWJ1aWxkID1cbiAgICAgICAgdHhGb3JtYXQgPT09ICdwc2J0J1xuICAgICAgICAgID8gY3JlYXRlUHJlYnVpbGRQc2J0KClcbiAgICAgICAgICA6IGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb248VE51bWJlcj4oXG4gICAgICAgICAgICAgIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLFxuICAgICAgICAgICAgICBnZXRVbnNwZW50cygpLFxuICAgICAgICAgICAgICBnZXRPdXRwdXRBZGRyZXNzKHdhbGxldEtleXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICBjb25zdCBoYWxmU2lnbmVkVXNlckJpdEdvID0gYXdhaXQgY3JlYXRlSGFsZlNpZ25lZFRyYW5zYWN0aW9uKHByZWJ1aWxkLCB3YWxsZXRLZXlzLnVzZXIsIHdhbGxldEtleXMuYml0Z28pO1xuICAgICAgY29uc3QgZnVsbFNpZ25lZFVzZXJCaXRHbyA9XG4gICAgICAgIGZ1bGxTaWduICYmICFpc1RyYW5zYWN0aW9uV2l0aFAydHJNdXNpZzJcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbihoYWxmU2lnbmVkVXNlckJpdEdvLCB3YWxsZXRLZXlzLmJpdGdvLCB3YWxsZXRLZXlzLnVzZXIpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRVc2VyQmFja3VwID1cbiAgICAgICAgIWlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kICYmICEodHhGb3JtYXQgPT09ICdwc2J0JyAmJiBpc1RyYW5zYWN0aW9uV2l0aFAydHIpXG4gICAgICAgICAgPyBhd2FpdCBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24ocHJlYnVpbGQsIHdhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iYWNrdXApXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVXNlckJhY2t1cCA9XG4gICAgICAgIGZ1bGxTaWduICYmIGhhbGZTaWduZWRVc2VyQmFja3VwXG4gICAgICAgICAgPyBhd2FpdCBjcmVhdGVGdWxsU2lnbmVkVHJhbnNhY3Rpb24oaGFsZlNpZ25lZFVzZXJCYWNrdXAsIHdhbGxldEtleXMuYmFja3VwLCB3YWxsZXRLZXlzLnVzZXIpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWJ1aWxkLFxuICAgICAgICBoYWxmU2lnbmVkVXNlckJhY2t1cCxcbiAgICAgICAgaGFsZlNpZ25lZFVzZXJCaXRHbyxcbiAgICAgICAgZnVsbFNpZ25lZFVzZXJCYWNrdXAsXG4gICAgICAgIGZ1bGxTaWduZWRVc2VyQml0R28sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCB0cmFuc2FjdGlvblN0YWdlczogVHJhbnNhY3Rpb25TdGFnZXM7XG5cbiAgICBiZWZvcmUoJ3ByZXBhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0cmFuc2FjdGlvblN0YWdlcyA9IGF3YWl0IGdldFRyYW5zYWN0aW9uU3RhZ2VzKCk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2gobm9jay5jbGVhbkFsbCk7XG5cbiAgICBpdCgnbWF0Y2ggZml4dHVyZXMnLCBhc3luYyBmdW5jdGlvbiAodGhpczogTW9jaGEuQ29udGV4dCkge1xuICAgICAgaWYgKHR4Rm9ybWF0ID09PSAncHNidCcpIHtcbiAgICAgICAgLy8gVE9ETyAobWF5YmUpIC0gb25jZSBmdWxsIFBTQlQgc3VwcG9ydCBpcyBhZGRlZCB0byBhYnN0cmFjdC11dHhvIG1vZHVsZSwgY3VzdG9tIEpTT04gcmVwcmVzZW50YXRpb24gb2YgUFNCVCBjYW4gYmUgY3JlYXRlZCBhbmQgdGVzdGVkIGhlcmUuXG4gICAgICAgIC8vIHNpZ25hdHVyZXMgb2YgdGFwcm9vdEtleVBhdGhTcGVuZHMgYXJlIHJhbmRvbSBzaW5jZSByYW5kb20gbmF0dXJlIG9mIE11U2lnMiBub25jZSwgc28gcHNidCBoZXggY29tcGFyaXNvbiBhbHNvIHdvbnQgd29yay5cblxuICAgICAgICByZXR1cm4gdGhpcy5za2lwKCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRvVHJhbnNhY3Rpb25TdGFnZXNPYmooc3RhZ2VzOiBUcmFuc2FjdGlvblN0YWdlcyk6IFRyYW5zYWN0aW9uT2JqU3RhZ2VzIHtcbiAgICAgICAgcmV0dXJuIF8ubWFwVmFsdWVzKHN0YWdlcywgKHYpID0+XG4gICAgICAgICAgdiA9PT0gdW5kZWZpbmVkIHx8IHYgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHx8IHYgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHYgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvblxuICAgICAgICAgICAgPyB0cmFuc2FjdGlvblRvT2JqPFROdW1iZXI+KHYpXG4gICAgICAgICAgICA6IHRyYW5zYWN0aW9uSGV4VG9PYmoodi50eEhleCwgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSksIGFtb3VudFR5cGUpXG4gICAgICAgICkgYXMgVHJhbnNhY3Rpb25PYmpTdGFnZXM7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydEVxdWFsSlNPTihcbiAgICAgICAgdG9UcmFuc2FjdGlvblN0YWdlc09iaih0cmFuc2FjdGlvblN0YWdlcyksXG4gICAgICAgIGF3YWl0IGdldEZpeHR1cmUoXG4gICAgICAgICAgY29pbixcbiAgICAgICAgICBgdHJhbnNhY3Rpb25zLSR7aW5wdXRTY3JpcHRzLm1hcCgodCkgPT4gdG9UeG5JbnB1dFNjcmlwdFR5cGUodCkpLmpvaW4oJy0nKX1gLFxuICAgICAgICAgIHRvVHJhbnNhY3Rpb25TdGFnZXNPYmoodHJhbnNhY3Rpb25TdGFnZXMpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiB0ZXN0UHNidFZhbGlkU2lnbmF0dXJlcyh0eDogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbiwgc2lnbmVkQnk6IEJJUDMySW50ZXJmYWNlW10pIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4LnR4SGV4LCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSk7XG4gICAgICBjb25zdCB1bnNwZW50cyA9IGdldFVuc3BlbnRzRm9yUHNidCgpO1xuICAgICAgcHNidC5kYXRhLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2luZGV4XTtcbiAgICAgICAgaWYgKCF1dHhvbGliLmJpdGdvLmlzV2FsbGV0VW5zcGVudCh1bnNwZW50KSkge1xuICAgICAgICAgIGFzc2VydC5vayh1dHhvbGliLmJpdGdvLmdldFBzYnRJbnB1dFNjcmlwdFR5cGUoaW5wdXQpLCAncDJzaFAycGsnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2FsbGV0VW5zcGVudCA9IHVuc3BlbnQgYXMgV2FsbGV0VW5zcGVudDxiaWdpbnQ+O1xuICAgICAgICBjb25zdCBwdWJrZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHdhbGxldFVuc3BlbnQuY2hhaW4sIHdhbGxldFVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXM7XG4gICAgICAgIHB1YmtleXMuZm9yRWFjaCgocGssIHBrSW5kZXgpID0+IHtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgICAgICBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRDb21tb24oaW5kZXgsIHBrKSxcbiAgICAgICAgICAgIHNpZ25lZEJ5LmluY2x1ZGVzKHdhbGxldEtleXMudHJpcGxlW3BrSW5kZXhdKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGVzdFZhbGlkU2lnbmF0dXJlcyhcbiAgICAgIHR4OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uIHwgRnVsbHlTaWduZWRUcmFuc2FjdGlvbixcbiAgICAgIHNpZ25lZEJ5OiBCSVAzMkludGVyZmFjZVtdLFxuICAgICAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4gICAgKSB7XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICB0ZXN0UHNidFZhbGlkU2lnbmF0dXJlcyh0eCwgc2lnbmVkQnkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB1bnNwZW50cyA9IGdldFVuc3BlbnRzKCk7XG4gICAgICBjb25zdCBwcmV2T3V0cHV0cyA9IHVuc3BlbnRzLm1hcChcbiAgICAgICAgKHUpOiB1dHhvbGliLlR4T3V0cHV0PFROdW1iZXI+ID0+ICh7XG4gICAgICAgICAgc2NyaXB0OiBCdWZmZXIuZnJvbSh3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKHUuYWRkcmVzcywgY29pbi5uYW1lKSksXG4gICAgICAgICAgdmFsdWU6IHUudmFsdWUsXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyPFROdW1iZXI+KFxuICAgICAgICBCdWZmZXIuZnJvbSh0eC50eEhleCwgJ2hleCcpLFxuICAgICAgICBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSxcbiAgICAgICAgeyBhbW91bnRUeXBlIH1cbiAgICAgICk7XG4gICAgICB0cmFuc2FjdGlvbi5pbnMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbnB1dFNjcmlwdHNbaW5kZXhdID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgICAgYXNzZXJ0Lm9rKGNvaW4uaXNCaXRHb1RhaW50ZWRVbnNwZW50KHVuc3BlbnRzW2luZGV4XSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuc3BlbnQgPSB1bnNwZW50c1tpbmRleF0gYXMgV2FsbGV0VW5zcGVudDxUTnVtYmVyPjtcbiAgICAgICAgY29uc3QgcHVia2V5cyA9IHdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCh1bnNwZW50LmNoYWluLCB1bnNwZW50LmluZGV4KS5wdWJsaWNLZXlzO1xuXG4gICAgICAgIHB1YmtleXMuZm9yRWFjaCgocGssIHBrSW5kZXgpID0+IHtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgICAgICB1dHhvbGliLmJpdGdvLnZlcmlmeVNpZ25hdHVyZTxUTnVtYmVyPihcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICBwcmV2T3V0cHV0c1tpbmRleF0udmFsdWUsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHBrLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwcmV2T3V0cHV0c1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHNpZ25lZEJ5LmluY2x1ZGVzKHdhbGxldEtleXMudHJpcGxlW3BrSW5kZXhdKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gdGVzdEV4cGxhaW5UeChcbiAgICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgICAgdHhIZXg6IHN0cmluZyxcbiAgICAgIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gICAgICBwdWJzOiBUcmlwbGU8c3RyaW5nPiB8IHVuZGVmaW5lZFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSBhd2FpdCBjb2luLmV4cGxhaW5UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAgIHR4SGV4LFxuICAgICAgICB0eEluZm86IHtcbiAgICAgICAgICB1bnNwZW50cyxcbiAgICAgICAgfSxcbiAgICAgICAgcHVicyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFByb3BlcnRpZXMgPSBbJ2lkJywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0QW1vdW50J107XG5cbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBleHBlY3RlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgYXNzZXJ0Lm9rKHByb3AgaW4gZXhwbGFuYXRpb24sIGBleHBlY3RlZCBleHBsYW5hdGlvbiB0byBoYXZlIHByb3BlcnR5ICcke3Byb3B9J2ApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZFNpZ25hdHVyZUNvdW50ID1cbiAgICAgICAgc3RhZ2VOYW1lID09PSAncHJlYnVpbGQnIHx8IHB1YnMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogc3RhZ2VOYW1lLnN0YXJ0c1dpdGgoJ2hhbGZTaWduZWQnKVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogc3RhZ2VOYW1lLnN0YXJ0c1dpdGgoJ2Z1bGxTaWduZWQnKVxuICAgICAgICAgID8gMlxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoJ2lucHV0U2lnbmF0dXJlcycgaW4gZXhwbGFuYXRpb24pIHtcbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgICAgICBleHBsYW5hdGlvbi5pbnB1dFNpZ25hdHVyZXMsXG4gICAgICAgICAgLy8gRklYTUUoQkctMzUxNTQpOiBpbXBsZW1lbnQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmb3IgcmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzXG4gICAgICAgICAgaW5wdXRTY3JpcHRzLm1hcCgodHlwZSkgPT4gKHR5cGUgPT09ICdwMnNoUDJwaycgPyAwIDogZXhwZWN0ZWRTaWduYXR1cmVDb3VudCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoJ3NpZ25hdHVyZXMnIGluIGV4cGxhbmF0aW9uKSB7XG4gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uc2lnbmF0dXJlcywgZXhwZWN0ZWRTaWduYXR1cmVDb3VudCk7XG4gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uY2hhbmdlQW1vdW50LCAnMCcpOyAvLyBubyBjaGFuZ2UgYWRkcmVzc2VzIGdpdmVuXG4gICAgICB9XG4gICAgICBsZXQgZXhwZWN0ZWRPdXRwdXRBbW91bnQgPVxuICAgICAgICBCaWdJbnQoKHR4Rm9ybWF0ID09PSAncHNidCcgPyBnZXRVbnNwZW50c0ZvclBzYnQoKSA6IGdldFVuc3BlbnRzKCkpLmxlbmd0aCkgKiBCaWdJbnQodmFsdWUpO1xuICAgICAgaW5wdXRTY3JpcHRzLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgICAgICAvLyByZXBsYXlQcm90ZWN0aW9uIHVuc3BlbnRzIGhhdmUgdmFsdWUgMTAwMFxuICAgICAgICAgIGV4cGVjdGVkT3V0cHV0QW1vdW50IC09IEJpZ0ludCh2YWx1ZSk7XG4gICAgICAgICAgZXhwZWN0ZWRPdXRwdXRBbW91bnQgKz0gQmlnSW50KDEwMDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGV4cGVjdGVkT3V0cHV0QW1vdW50IC09IEJpZ0ludCgxMDAwKTsgLy8gZmVlIG9mIDEwMDBcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0QW1vdW50LCBleHBlY3RlZE91dHB1dEFtb3VudC50b1N0cmluZygpKTtcbiAgICB9XG5cbiAgICBpdCgnaGF2ZSB2YWxpZCBzaWduYXR1cmUgZm9yIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhZ2VzLmhhbGZTaWduZWRVc2VyQmFja3VwKSB7XG4gICAgICAgIHRlc3RWYWxpZFNpZ25hdHVyZXModHJhbnNhY3Rpb25TdGFnZXMuaGFsZlNpZ25lZFVzZXJCYWNrdXAsIFt3YWxsZXRLZXlzLnVzZXJdLCAnaGFsZnNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5oYWxmU2lnbmVkVXNlckJpdEdvLCBbd2FsbGV0S2V5cy51c2VyXSwgJ2hhbGZzaWduZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXZlIHZhbGlkIHNpZ25hdHVyZXMgZm9yIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFmdWxsU2lnbikge1xuICAgICAgICByZXR1cm4gdGhpcy5za2lwKCk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuZnVsbFNpZ25lZFVzZXJCYWNrdXApIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJhY2t1cCwgW3dhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iYWNrdXBdLCAnZnVsbHNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQml0R28pIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJpdEdvLCBbd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJpdGdvXSwgJ2Z1bGxzaWduZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdoYXZlIGNvcnJlY3QgcmVzdWx0cyBmb3IgZXhwbGFpblRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBbc3RhZ2VOYW1lLCBzdGFnZVR4XSBvZiBPYmplY3QuZW50cmllcyh0cmFuc2FjdGlvblN0YWdlcykpIHtcbiAgICAgICAgaWYgKCFzdGFnZVR4KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eEhleCA9XG4gICAgICAgICAgc3RhZ2VUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfHwgc3RhZ2VUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4gICAgICAgICAgICA/IHN0YWdlVHgudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgIDogc3RhZ2VUeCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidFxuICAgICAgICAgICAgPyBCdWZmZXIuZnJvbShzdGFnZVR4LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgIDogc3RhZ2VUeC50eEhleDtcblxuICAgICAgICBjb25zdCBwdWJzID0gd2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz47XG4gICAgICAgIGNvbnN0IHVuc3BlbnRzID1cbiAgICAgICAgICB0eEZvcm1hdCA9PT0gJ3BzYnQnXG4gICAgICAgICAgICA/IGdldFVuc3BlbnRzRm9yUHNidCgpLm1hcCgodSkgPT4gKHsgLi4udSwgdmFsdWU6IGJpdGdvLnRvVE51bWJlcih1LnZhbHVlLCBhbW91bnRUeXBlKSBhcyBUTnVtYmVyIH0pKVxuICAgICAgICAgICAgOiBnZXRVbnNwZW50cygpO1xuICAgICAgICBhd2FpdCB0ZXN0RXhwbGFpblR4KHN0YWdlTmFtZSwgdHhIZXgsIHVuc3BlbnRzLCBwdWJzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJ1blRlc3RGb3JDb2luKGNvaW46IEFic3RyYWN0VXR4b0NvaW4pIHtcbiAgcnVuKGNvaW4sIGdldFNjcmlwdFR5cGVzKGNvaW4sICdwc2J0JyksICdwc2J0Jyk7XG59XG5cbmRlc2NyaWJlKCdUcmFuc2FjdGlvbiBTdWl0ZScsIGZ1bmN0aW9uICgpIHtcbiAgZ2V0TWluVXR4b0NvaW5zKCkuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgIGRlc2NyaWJlKGAke2NvaW4uZ2V0Q2hhaW4oKX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICBydW5UZXN0Rm9yQ29pbihjb2luKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Wallet } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { AbstractUtxoCoin, TxFormat } from '../../src';
|
|
3
|
+
type WalletType = 'hot' | 'cold' | 'custodial' | 'custodialPaired' | 'trading';
|
|
4
|
+
type WalletSubType = 'distributedCustody';
|
|
5
|
+
type WalletFlag = {
|
|
6
|
+
name: string;
|
|
7
|
+
value: string;
|
|
8
|
+
};
|
|
9
|
+
type WalletOptions = {
|
|
10
|
+
type?: WalletType;
|
|
11
|
+
subType?: WalletSubType;
|
|
12
|
+
walletFlags?: WalletFlag[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Enumerates common wallet configurations for testing
|
|
16
|
+
*/
|
|
17
|
+
export declare function getWalletConfigurations(): Array<{
|
|
18
|
+
name: string;
|
|
19
|
+
options: WalletOptions;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Helper function to create a mock wallet for testing
|
|
23
|
+
*/
|
|
24
|
+
export declare function createMockWallet(coin: AbstractUtxoCoin, options?: WalletOptions): Wallet;
|
|
25
|
+
/**
|
|
26
|
+
* Helper function to get the txFormat from a coin's getDefaultTxFormat method
|
|
27
|
+
*/
|
|
28
|
+
export declare function getTxFormat(coin: AbstractUtxoCoin, wallet: Wallet, requestedFormat?: TxFormat): TxFormat | undefined;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=txFormat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txFormat.d.ts","sourceRoot":"","sources":["../../../../test/unit/txFormat.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAKvD,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAC/E,KAAK,aAAa,GAAG,oBAAoB,CAAC;AAC1C,KAAK,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,KAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC,CASzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAS5F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAEpH"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getWalletConfigurations = getWalletConfigurations;
|
|
37
|
+
exports.createMockWallet = createMockWallet;
|
|
38
|
+
exports.getTxFormat = getTxFormat;
|
|
39
|
+
const assert = __importStar(require("assert"));
|
|
40
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
41
|
+
const names_1 = require("../../src/names");
|
|
42
|
+
const util_1 = require("./util");
|
|
43
|
+
/**
|
|
44
|
+
* Enumerates common wallet configurations for testing
|
|
45
|
+
*/
|
|
46
|
+
function getWalletConfigurations() {
|
|
47
|
+
return [
|
|
48
|
+
{ name: 'hot wallet', options: { type: 'hot' } },
|
|
49
|
+
{ name: 'cold wallet', options: { type: 'cold' } },
|
|
50
|
+
{ name: 'custodial wallet', options: { type: 'custodial' } },
|
|
51
|
+
{ name: 'distributedCustody wallet', options: { type: 'cold', subType: 'distributedCustody' } },
|
|
52
|
+
{ name: 'musigKp wallet', options: { type: 'cold', walletFlags: [{ name: 'musigKp', value: 'true' }] } },
|
|
53
|
+
{ name: 'hot musigKp wallet', options: { type: 'hot', walletFlags: [{ name: 'musigKp', value: 'true' }] } },
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Helper function to create a mock wallet for testing
|
|
58
|
+
*/
|
|
59
|
+
function createMockWallet(coin, options = {}) {
|
|
60
|
+
const walletData = {
|
|
61
|
+
id: '5b34252f1bf349930e34020a',
|
|
62
|
+
coin: coin.getChain(),
|
|
63
|
+
type: options.type || 'hot',
|
|
64
|
+
...(options.subType && { subType: options.subType }),
|
|
65
|
+
...(options.walletFlags && { walletFlags: options.walletFlags }),
|
|
66
|
+
};
|
|
67
|
+
return new sdk_core_1.Wallet(util_1.defaultBitGo, coin, walletData);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Helper function to get the txFormat from a coin's getDefaultTxFormat method
|
|
71
|
+
*/
|
|
72
|
+
function getTxFormat(coin, wallet, requestedFormat) {
|
|
73
|
+
return coin.getDefaultTxFormat(wallet, requestedFormat);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Helper function to run a txFormat test with named arguments.
|
|
77
|
+
* By default, iterates over all wallet configurations and all coins.
|
|
78
|
+
*/
|
|
79
|
+
function runTest(params) {
|
|
80
|
+
it(params.description, function () {
|
|
81
|
+
const walletConfigs = getWalletConfigurations();
|
|
82
|
+
for (const walletConfig of walletConfigs) {
|
|
83
|
+
// Skip wallet configurations that don't match the filter
|
|
84
|
+
if (params.walletFilter && !params.walletFilter(walletConfig)) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
for (const coin of util_1.utxoCoins) {
|
|
88
|
+
// Skip coins that don't match the filter
|
|
89
|
+
if (params.coinFilter && !params.coinFilter(coin)) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const wallet = createMockWallet(coin, walletConfig.options);
|
|
93
|
+
const txFormat = getTxFormat(coin, wallet, params.requestedTxFormat);
|
|
94
|
+
const expectedTxFormat = typeof params.expectedTxFormat === 'function'
|
|
95
|
+
? params.expectedTxFormat(coin, walletConfig.options)
|
|
96
|
+
: params.expectedTxFormat;
|
|
97
|
+
assert.strictEqual(txFormat, expectedTxFormat, `${params.description} - ${walletConfig.name} - ${coin.getChain()}: expected ${expectedTxFormat}, got ${txFormat}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
describe('txFormat', function () {
|
|
103
|
+
describe('getDefaultTxFormat', function () {
|
|
104
|
+
// All testnet wallets default to PSBT-lite
|
|
105
|
+
runTest({
|
|
106
|
+
description: 'should always return psbt-lite for testnet',
|
|
107
|
+
coinFilter: (coin) => (0, names_1.isTestnetCoin)(coin.name),
|
|
108
|
+
expectedTxFormat: 'psbt-lite',
|
|
109
|
+
});
|
|
110
|
+
// All mainnet wallets default to psbt-lite
|
|
111
|
+
runTest({
|
|
112
|
+
description: 'should return psbt-lite for all mainnet wallets',
|
|
113
|
+
coinFilter: (coin) => (0, names_1.isMainnetCoin)(coin.name),
|
|
114
|
+
expectedTxFormat: 'psbt-lite',
|
|
115
|
+
});
|
|
116
|
+
// Test explicitly requested formats
|
|
117
|
+
runTest({
|
|
118
|
+
description: 'should map explicitly requested legacy format to psbt-lite',
|
|
119
|
+
expectedTxFormat: 'psbt-lite',
|
|
120
|
+
requestedTxFormat: 'legacy',
|
|
121
|
+
});
|
|
122
|
+
runTest({
|
|
123
|
+
description: 'should respect explicitly requested psbt format',
|
|
124
|
+
expectedTxFormat: 'psbt',
|
|
125
|
+
requestedTxFormat: 'psbt',
|
|
126
|
+
});
|
|
127
|
+
runTest({
|
|
128
|
+
description: 'should respect explicitly requested psbt-lite format',
|
|
129
|
+
expectedTxFormat: 'psbt-lite',
|
|
130
|
+
requestedTxFormat: 'psbt-lite',
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
describe('getExtraPrebuildParams with legacy format', function () {
|
|
134
|
+
const legacyCompatibleTypes = ['p2sh', 'p2shP2wsh', 'p2wsh'];
|
|
135
|
+
it('should filter changeAddressType to legacy-compatible types for hot wallets', async function () {
|
|
136
|
+
for (const coin of util_1.utxoCoins) {
|
|
137
|
+
const wallet = createMockWallet(coin, { type: 'hot' });
|
|
138
|
+
const result = await coin.getExtraPrebuildParams({ txFormat: 'legacy', wallet });
|
|
139
|
+
assert.ok(Array.isArray(result.changeAddressType), `${coin.getChain()}: changeAddressType should be an array`);
|
|
140
|
+
for (const t of result.changeAddressType) {
|
|
141
|
+
assert.ok(legacyCompatibleTypes.includes(t), `${coin.getChain()}: changeAddressType contains ${t} which is not legacy-compatible`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
it('should set allowedInputScriptTypes to legacy-compatible types', async function () {
|
|
146
|
+
for (const coin of util_1.utxoCoins) {
|
|
147
|
+
const wallet = createMockWallet(coin, { type: 'hot' });
|
|
148
|
+
const result = await coin.getExtraPrebuildParams({ txFormat: 'legacy', wallet });
|
|
149
|
+
assert.deepStrictEqual(result.allowedInputScriptTypes, legacyCompatibleTypes, `${coin.getChain()}: allowedInputScriptTypes should be legacy-compatible`);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
it('should not set allowedInputScriptTypes when txFormat is not legacy', async function () {
|
|
153
|
+
for (const coin of util_1.utxoCoins) {
|
|
154
|
+
const wallet = createMockWallet(coin, { type: 'hot' });
|
|
155
|
+
const result = await coin.getExtraPrebuildParams({ wallet });
|
|
156
|
+
assert.strictEqual(result.allowedInputScriptTypes, undefined, `${coin.getChain()}: allowedInputScriptTypes should be undefined for default format`);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhGb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHhGb3JtYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQkEsMERBU0M7QUFLRCw0Q0FTQztBQUtELGtDQUVDO0FBcERELCtDQUFpQztBQUVqQyxtREFBOEM7QUFHOUMsMkNBQStEO0FBRS9ELGlDQUFpRDtBQVlqRDs7R0FFRztBQUNILFNBQWdCLHVCQUF1QjtJQUNyQyxPQUFPO1FBQ0wsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNoRCxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2xELEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRTtRQUM1RCxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxFQUFFO1FBQy9GLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEcsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtLQUM1RyxDQUFDO0FBQ0osQ0FBQztB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Q0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgV2FsbGV0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBUeEZvcm1hdCB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBpc01haW5uZXRDb2luLCBpc1Rlc3RuZXRDb2luIH0gZnJvbSAnLi4vLi4vc3JjL25hbWVzJztcblxuaW1wb3J0IHsgdXR4b0NvaW5zLCBkZWZhdWx0Qml0R28gfSBmcm9tICcuL3V0aWwnO1xuXG50eXBlIFdhbGxldFR5cGUgPSAnaG90JyB8ICdjb2xkJyB8ICdjdXN0b2RpYWwnIHwgJ2N1c3RvZGlhbFBhaXJlZCcgfCAndHJhZGluZyc7XG50eXBlIFdhbGxldFN1YlR5cGUgPSAnZGlzdHJpYnV0ZWRDdXN0b2R5JztcbnR5cGUgV2FsbGV0RmxhZyA9IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH07XG5cbnR5cGUgV2FsbGV0T3B0aW9ucyA9IHtcbiAgdHlwZT86IFdhbGxldFR5cGU7XG4gIHN1YlR5cGU/OiBXYWxsZXRTdWJUeXBlO1xuICB3YWxsZXRGbGFncz86IFdhbGxldEZsYWdbXTtcbn07XG5cbi8qKlxuICogRW51bWVyYXRlcyBjb21tb24gd2FsbGV0IGNvbmZpZ3VyYXRpb25zIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXYWxsZXRDb25maWd1cmF0aW9ucygpOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgb3B0aW9uczogV2FsbGV0T3B0aW9ucyB9PiB7XG4gIHJldHVybiBbXG4gICAgeyBuYW1lOiAnaG90IHdhbGxldCcsIG9wdGlvbnM6IHsgdHlwZTogJ2hvdCcgfSB9LFxuICAgIHsgbmFtZTogJ2NvbGQgd2FsbGV0Jywgb3B0aW9uczogeyB0eXBlOiAnY29sZCcgfSB9LFxuICAgIHsgbmFtZTogJ2N1c3RvZGlhbCB3YWxsZXQnLCBvcHRpb25zOiB7IHR5cGU6ICdjdXN0b2RpYWwnIH0gfSxcbiAgICB7IG5hbWU6ICdkaXN0cmlidXRlZEN1c3RvZHkgd2FsbGV0Jywgb3B0aW9uczogeyB0eXBlOiAnY29sZCcsIHN1YlR5cGU6ICdkaXN0cmlidXRlZEN1c3RvZHknIH0gfSxcbiAgICB7IG5hbWU6ICdtdXNpZ0twIHdhbGxldCcsIG9wdGlvbnM6IHsgdHlwZTogJ2NvbGQnLCB3YWxsZXRGbGFnczogW3sgbmFtZTogJ211c2lnS3AnLCB2YWx1ZTogJ3RydWUnIH1dIH0gfSxcbiAgICB7IG5hbWU6ICdob3QgbXVzaWdLcCB3YWxsZXQnLCBvcHRpb25zOiB7IHR5cGU6ICdob3QnLCB3YWxsZXRGbGFnczogW3sgbmFtZTogJ211c2lnS3AnLCB2YWx1ZTogJ3RydWUnIH1dIH0gfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbW9jayB3YWxsZXQgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tXYWxsZXQoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgb3B0aW9uczogV2FsbGV0T3B0aW9ucyA9IHt9KTogV2FsbGV0IHtcbiAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYScsXG4gICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgIHR5cGU6IG9wdGlvbnMudHlwZSB8fCAnaG90JyxcbiAgICAuLi4ob3B0aW9ucy5zdWJUeXBlICYmIHsgc3ViVHlwZTogb3B0aW9ucy5zdWJUeXBlIH0pLFxuICAgIC4uLihvcHRpb25zLndhbGxldEZsYWdzICYmIHsgd2FsbGV0RmxhZ3M6IG9wdGlvbnMud2FsbGV0RmxhZ3MgfSksXG4gIH07XG4gIHJldHVybiBuZXcgV2FsbGV0KGRlZmF1bHRCaXRHbywgY29pbiwgd2FsbGV0RGF0YSk7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgdHhGb3JtYXQgZnJvbSBhIGNvaW4ncyBnZXREZWZhdWx0VHhGb3JtYXQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeEZvcm1hdChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXQ6IFdhbGxldCwgcmVxdWVzdGVkRm9ybWF0PzogVHhGb3JtYXQpOiBUeEZvcm1hdCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb2luLmdldERlZmF1bHRUeEZvcm1hdCh3YWxsZXQsIHJlcXVlc3RlZEZvcm1hdCk7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHJ1biBhIHR4Rm9ybWF0IHRlc3Qgd2l0aCBuYW1lZCBhcmd1bWVudHMuXG4gKiBCeSBkZWZhdWx0LCBpdGVyYXRlcyBvdmVyIGFsbCB3YWxsZXQgY29uZmlndXJhdGlvbnMgYW5kIGFsbCBjb2lucy5cbiAqL1xuZnVuY3Rpb24gcnVuVGVzdChwYXJhbXM6IHtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZXhwZWN0ZWRUeEZvcm1hdDpcbiAgICB8IFR4Rm9ybWF0XG4gICAgfCB1bmRlZmluZWRcbiAgICB8ICgoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgd2FsbGV0Q29uZmlnOiBXYWxsZXRPcHRpb25zKSA9PiBUeEZvcm1hdCB8IHVuZGVmaW5lZCk7XG4gIGNvaW5GaWx0ZXI/OiAoY29pbjogQWJzdHJhY3RVdHhvQ29pbikgPT4gYm9vbGVhbjtcbiAgd2FsbGV0RmlsdGVyPzogKHdhbGxldENvbmZpZzogeyBuYW1lOiBzdHJpbmc7IG9wdGlvbnM6IFdhbGxldE9wdGlvbnMgfSkgPT4gYm9vbGVhbjtcbiAgcmVxdWVzdGVkVHhGb3JtYXQ/OiBUeEZvcm1hdDtcbn0pOiB2b2lkIHtcbiAgaXQocGFyYW1zLmRlc2NyaXB0aW9uLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0Q29uZmlncyA9IGdldFdhbGxldENvbmZpZ3VyYXRpb25zKCk7XG5cbiAgICBmb3IgKGNvbnN0IHdhbGxldENvbmZpZyBvZiB3YWxsZXRDb25maWdzKSB7XG4gICAgICAvLyBTa2lwIHdhbGxldCBjb25maWd1cmF0aW9ucyB0aGF0IGRvbid0IG1hdGNoIHRoZSBmaWx0ZXJcbiAgICAgIGlmIChwYXJhbXMud2FsbGV0RmlsdGVyICYmICFwYXJhbXMud2FsbGV0RmlsdGVyKHdhbGxldENvbmZpZykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgY29pbiBvZiB1dHhvQ29pbnMpIHtcbiAgICAgICAgLy8gU2tpcCBjb2lucyB0aGF0IGRvbid0IG1hdGNoIHRoZSBmaWx0ZXJcbiAgICAgICAgaWYgKHBhcmFtcy5jb2luRmlsdGVyICYmICFwYXJhbXMuY29pbkZpbHRlcihjb2luKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gY3JlYXRlTW9ja1dhbGxldChjb2luLCB3YWxsZXRDb25maWcub3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHR4Rm9ybWF0ID0gZ2V0VHhGb3JtYXQoY29pbiwgd2FsbGV0LCBwYXJhbXMucmVxdWVzdGVkVHhGb3JtYXQpO1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkVHhGb3JtYXQgPVxuICAgICAgICAgIHR5cGVvZiBwYXJhbXMuZXhwZWN0ZWRUeEZvcm1hdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBwYXJhbXMuZXhwZWN0ZWRUeEZvcm1hdChjb2luLCB3YWxsZXRDb25maWcub3B0aW9ucylcbiAgICAgICAgICAgIDogcGFyYW1zLmV4cGVjdGVkVHhGb3JtYXQ7XG5cbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgIHR4Rm9ybWF0LFxuICAgICAgICAgIGV4cGVjdGVkVHhGb3JtYXQsXG4gICAgICAgICAgYCR7cGFyYW1zLmRlc2NyaXB0aW9ufSAtICR7XG4gICAgICAgICAgICB3YWxsZXRDb25maWcubmFtZVxuICAgICAgICAgIH0gLSAke2NvaW4uZ2V0Q2hhaW4oKX06IGV4cGVjdGVkICR7ZXhwZWN0ZWRUeEZvcm1hdH0sIGdvdCAke3R4Rm9ybWF0fWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5kZXNjcmliZSgndHhGb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdnZXREZWZhdWx0VHhGb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gQWxsIHRlc3RuZXQgd2FsbGV0cyBkZWZhdWx0IHRvIFBTQlQtbGl0ZVxuICAgIHJ1blRlc3Qoe1xuICAgICAgZGVzY3JpcHRpb246ICdzaG91bGQgYWx3YXlzIHJldHVybiBwc2J0LWxpdGUgZm9yIHRlc3RuZXQnLFxuICAgICAgY29pbkZpbHRlcjogKGNvaW4pID0+IGlzVGVzdG5ldENvaW4oY29pbi5uYW1lKSxcbiAgICAgIGV4cGVjdGVkVHhGb3JtYXQ6ICdwc2J0LWxpdGUnLFxuICAgIH0pO1xuXG4gICAgLy8gQWxsIG1haW5uZXQgd2FsbGV0cyBkZWZhdWx0IHRvIHBzYnQtbGl0ZVxuICAgIHJ1blRlc3Qoe1xuICAgICAgZGVzY3JpcHRpb246ICdzaG91bGQgcmV0dXJuIHBzYnQtbGl0ZSBmb3IgYWxsIG1haW5uZXQgd2FsbGV0cycsXG4gICAgICBjb2luRmlsdGVyOiAoY29pbikgPT4gaXNNYWlubmV0Q29pbihjb2luLm5hbWUpLFxuICAgICAgZXhwZWN0ZWRUeEZvcm1hdDogJ3BzYnQtbGl0ZScsXG4gICAgfSk7XG5cbiAgICAvLyBUZXN0IGV4cGxpY2l0bHkgcmVxdWVzdGVkIGZvcm1hdHNcbiAgICBydW5UZXN0KHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnc2hvdWxkIG1hcCBleHBsaWNpdGx5IHJlcXVlc3RlZCBsZWdhY3kgZm9ybWF0IHRvIHBzYnQtbGl0ZScsXG4gICAgICBleHBlY3RlZFR4Rm9ybWF0OiAncHNidC1saXRlJyxcbiAgICAgIHJlcXVlc3RlZFR4Rm9ybWF0OiAnbGVnYWN5JyxcbiAgICB9KTtcblxuICAgIHJ1blRlc3Qoe1xuICAgICAgZGVzY3JpcHRpb246ICdzaG91bGQgcmVzcGVjdCBleHBsaWNpdGx5IHJlcXVlc3RlZCBwc2J0IGZvcm1hdCcsXG4gICAgICBleHBlY3RlZFR4Rm9ybWF0OiAncHNidCcsXG4gICAgICByZXF1ZXN0ZWRUeEZvcm1hdDogJ3BzYnQnLFxuICAgIH0pO1xuXG4gICAgcnVuVGVzdCh7XG4gICAgICBkZXNjcmlwdGlvbjogJ3Nob3VsZCByZXNwZWN0IGV4cGxpY2l0bHkgcmVxdWVzdGVkIHBzYnQtbGl0ZSBmb3JtYXQnLFxuICAgICAgZXhwZWN0ZWRUeEZvcm1hdDogJ3BzYnQtbGl0ZScsXG4gICAgICByZXF1ZXN0ZWRUeEZvcm1hdDogJ3BzYnQtbGl0ZScsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRFeHRyYVByZWJ1aWxkUGFyYW1zIHdpdGggbGVnYWN5IGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBsZWdhY3lDb21wYXRpYmxlVHlwZXMgPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJ107XG5cbiAgICBpdCgnc2hvdWxkIGZpbHRlciBjaGFuZ2VBZGRyZXNzVHlwZSB0byBsZWdhY3ktY29tcGF0aWJsZSB0eXBlcyBmb3IgaG90IHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvaW4gb2YgdXR4b0NvaW5zKSB7XG4gICAgICAgIGNvbnN0IHdhbGxldCA9IGNyZWF0ZU1vY2tXYWxsZXQoY29pbiwgeyB0eXBlOiAnaG90JyB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKHsgdHhGb3JtYXQ6ICdsZWdhY3knLCB3YWxsZXQgfSBhcyBhbnkpO1xuICAgICAgICBhc3NlcnQub2soQXJyYXkuaXNBcnJheShyZXN1bHQuY2hhbmdlQWRkcmVzc1R5cGUpLCBgJHtjb2luLmdldENoYWluKCl9OiBjaGFuZ2VBZGRyZXNzVHlwZSBzaG91bGQgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHJlc3VsdC5jaGFuZ2VBZGRyZXNzVHlwZSBhcyBzdHJpbmdbXSkge1xuICAgICAgICAgIGFzc2VydC5vayhcbiAgICAgICAgICAgIGxlZ2FjeUNvbXBhdGlibGVUeXBlcy5pbmNsdWRlcyh0KSxcbiAgICAgICAgICAgIGAke2NvaW4uZ2V0Q2hhaW4oKX06IGNoYW5nZUFkZHJlc3NUeXBlIGNvbnRhaW5zICR7dH0gd2hpY2ggaXMgbm90IGxlZ2FjeS1jb21wYXRpYmxlYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2V0IGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzIHRvIGxlZ2FjeS1jb21wYXRpYmxlIHR5cGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBjb2luIG9mIHV0eG9Db2lucykge1xuICAgICAgICBjb25zdCB3YWxsZXQgPSBjcmVhdGVNb2NrV2FsbGV0KGNvaW4sIHsgdHlwZTogJ2hvdCcgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4uZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyh7IHR4Rm9ybWF0OiAnbGVnYWN5Jywgd2FsbGV0IH0gYXMgYW55KTtcbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgICAgICByZXN1bHQuYWxsb3dlZElucHV0U2NyaXB0VHlwZXMsXG4gICAgICAgICAgbGVnYWN5Q29tcGF0aWJsZVR5cGVzLFxuICAgICAgICAgIGAke2NvaW4uZ2V0Q2hhaW4oKX06IGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzIHNob3VsZCBiZSBsZWdhY3ktY29tcGF0aWJsZWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHNldCBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlcyB3aGVuIHR4Rm9ybWF0IGlzIG5vdCBsZWdhY3knLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvaW4gb2YgdXR4b0NvaW5zKSB7XG4gICAgICAgIGNvbnN0IHdhbGxldCA9IGNyZWF0ZU1vY2tXYWxsZXQoY29pbiwgeyB0eXBlOiAnaG90JyB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKHsgd2FsbGV0IH0gYXMgYW55KTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgIHJlc3VsdC5hbGxvd2VkSW5wdXRTY3JpcHRUeXBlcyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgYCR7Y29pbi5nZXRDaGFpbigpfTogYWxsb3dlZElucHV0U2NyaXB0VHlwZXMgc2hvdWxkIGJlIHVuZGVmaW5lZCBmb3IgZGVmYXVsdCBmb3JtYXRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import { fixedScriptWallet, type CoinName } from '@bitgo/wasm-utxo';
|
|
3
|
+
type UtxolibRootWalletKeys = utxolib.bitgo.RootWalletKeys;
|
|
4
|
+
type WasmRootWalletKeys = fixedScriptWallet.RootWalletKeys;
|
|
5
|
+
type RootWalletKeys = UtxolibRootWalletKeys | WasmRootWalletKeys;
|
|
6
|
+
/**
|
|
7
|
+
* Generate a wallet address from RootWalletKeys.
|
|
8
|
+
* Supports both utxolib and wasm-utxo RootWalletKeys.
|
|
9
|
+
* Utxolib keys are converted to wasm-utxo keys for address generation.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getWalletAddress(coinName: CoinName, walletKeys: RootWalletKeys, chain?: 0 | 1 | 10 | 11 | 20 | 21 | 30 | 31 | 40 | 41 | 360 | 361, index?: number): string;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/address.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIpE,KAAK,qBAAqB,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;AAC1D,KAAK,kBAAkB,GAAG,iBAAiB,CAAC,cAAc,CAAC;AAC3D,KAAK,cAAc,GAAG,qBAAqB,GAAG,kBAAkB,CAAC;AAIjE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,cAAc,EAC1B,KAAK,4DAAe,EACpB,KAAK,SAAI,GACR,MAAM,CAER"}
|