@bitgo-beta/abstract-utxo 1.6.1-alpha.42 → 1.6.1-alpha.420
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 +464 -0
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -0
- package/dist/cjs/src/abstractUtxoCoin.js +639 -0
- package/dist/cjs/src/address/fixedScript.d.ts +51 -0
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -0
- package/dist/cjs/src/address/fixedScript.js +150 -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/descriptor/NamedDescriptor.d.ts +20 -0
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/NamedDescriptor.js +79 -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 +66 -0
- package/dist/cjs/src/descriptor/builder/builder.d.ts +13 -0
- package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/builder/builder.js +37 -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 +116 -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 +8 -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 +92 -0
- package/dist/cjs/src/impl/bch/bch.d.ts +20 -0
- package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -0
- package/dist/cjs/src/impl/bch/bch.js +70 -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 +10 -0
- package/dist/cjs/src/impl/bch/tbch.d.ts.map +1 -0
- package/dist/cjs/src/impl/bch/tbch.js +48 -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 +58 -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 +10 -0
- package/dist/cjs/src/impl/bcha/tbcha.d.ts.map +1 -0
- package/dist/cjs/src/impl/bcha/tbcha.js +48 -0
- package/dist/cjs/src/impl/bsv/bsv.d.ts +8 -0
- package/dist/cjs/src/impl/bsv/bsv.d.ts.map +1 -0
- package/dist/cjs/src/impl/bsv/bsv.js +48 -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 +10 -0
- package/dist/cjs/src/impl/bsv/tbsv.d.ts.map +1 -0
- package/dist/cjs/src/impl/bsv/tbsv.js +48 -0
- package/dist/cjs/src/impl/btc/btc.d.ts +13 -0
- package/dist/cjs/src/impl/btc/btc.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/btc.js +55 -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 +51 -0
- package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/inscriptionBuilder.js +183 -0
- package/dist/cjs/src/impl/btc/tbtc.d.ts +10 -0
- package/dist/cjs/src/impl/btc/tbtc.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtc.js +48 -0
- package/dist/cjs/src/impl/btc/tbtc4.d.ts +10 -0
- package/dist/cjs/src/impl/btc/tbtc4.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtc4.js +48 -0
- package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts +10 -0
- package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcbgsig.js +48 -0
- package/dist/cjs/src/impl/btc/tbtcsig.d.ts +10 -0
- package/dist/cjs/src/impl/btc/tbtcsig.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcsig.js +48 -0
- package/dist/cjs/src/impl/btg/btg.d.ts +7 -0
- package/dist/cjs/src/impl/btg/btg.d.ts.map +1 -0
- package/dist/cjs/src/impl/btg/btg.js +48 -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 +7 -0
- package/dist/cjs/src/impl/dash/dash.d.ts.map +1 -0
- package/dist/cjs/src/impl/dash/dash.js +48 -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 +10 -0
- package/dist/cjs/src/impl/dash/tdash.d.ts.map +1 -0
- package/dist/cjs/src/impl/dash/tdash.js +48 -0
- package/dist/cjs/src/impl/doge/doge.d.ts +31 -0
- package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -0
- package/dist/cjs/src/impl/doge/doge.js +79 -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 +10 -0
- package/dist/cjs/src/impl/doge/tdoge.d.ts.map +1 -0
- package/dist/cjs/src/impl/doge/tdoge.js +48 -0
- package/dist/cjs/src/impl/index.d.ts +10 -0
- package/dist/cjs/src/impl/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/index.js +46 -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 +7 -0
- package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -0
- package/dist/cjs/src/impl/ltc/ltc.js +52 -0
- package/dist/cjs/src/impl/ltc/tltc.d.ts +7 -0
- package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -0
- package/dist/cjs/src/impl/ltc/tltc.js +51 -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 +7 -0
- package/dist/cjs/src/impl/zec/tzec.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/tzec.js +48 -0
- package/dist/cjs/src/impl/zec/zec.d.ts +10 -0
- package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/zec.js +48 -0
- package/dist/cjs/src/index.d.ts +21 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +60 -0
- package/dist/cjs/src/keychains.d.ts +48 -0
- package/dist/cjs/src/keychains.d.ts.map +1 -0
- package/dist/cjs/src/keychains.js +104 -0
- package/dist/cjs/src/names.d.ts +26 -0
- package/dist/cjs/src/names.d.ts.map +1 -0
- package/dist/cjs/src/names.js +214 -0
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts +8 -0
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +26 -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 +15 -0
- package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/TransactionExplanation.js +16 -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 +38 -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 -1
- 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 +88 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.js +370 -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 +5 -4
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -0
- package/dist/cjs/src/recovery/crossChainRecovery.js +364 -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/{src → cjs/src}/replayProtection.d.ts +1 -0
- package/dist/cjs/src/replayProtection.d.ts.map +1 -0
- package/dist/cjs/src/replayProtection.js +58 -0
- package/dist/{src → cjs/src}/sign.d.ts +31 -8
- package/dist/cjs/src/sign.d.ts.map +1 -0
- package/dist/cjs/src/sign.js +205 -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 +125 -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/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 +80 -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 +15 -0
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/parse.js +116 -0
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts +13 -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 +43 -0
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +35 -0
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +108 -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 +88 -0
- package/dist/cjs/src/transaction/fetchInputs.d.ts +26 -0
- package/dist/cjs/src/transaction/fetchInputs.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fetchInputs.js +109 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +10 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +43 -0
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +63 -0
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +321 -0
- package/dist/cjs/src/transaction/fixedScript/index.d.ts +7 -0
- package/dist/cjs/src/transaction/fixedScript/index.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/index.js +15 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts +26 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.js +213 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +7 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +203 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +18 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +101 -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 +198 -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 +53 -0
- package/dist/cjs/src/transaction/index.d.ts +7 -0
- package/dist/cjs/src/transaction/index.d.ts.map +1 -0
- package/dist/cjs/src/transaction/index.js +49 -0
- package/dist/cjs/src/transaction/outputDifference.d.ts +40 -0
- package/dist/cjs/src/transaction/outputDifference.d.ts.map +1 -0
- package/dist/cjs/src/transaction/outputDifference.js +47 -0
- package/dist/cjs/src/transaction/parseTransaction.d.ts +3 -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 +29 -0
- package/dist/cjs/src/transaction/recipient.d.ts.map +1 -0
- package/dist/cjs/src/transaction/recipient.js +88 -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 +102 -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/verifyKey.d.ts +28 -0
- package/dist/cjs/src/verifyKey.d.ts.map +1 -0
- package/dist/cjs/src/verifyKey.js +164 -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 +74 -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 +182 -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 +45 -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 +97 -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 +154 -0
- package/dist/cjs/test/unit/customSigner.d.ts +3 -0
- package/dist/cjs/test/unit/customSigner.d.ts.map +1 -0
- package/dist/cjs/test/unit/customSigner.js +108 -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 +18 -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 +72 -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 +20 -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 +28 -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 +102 -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 +74 -0
- package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts +15 -0
- package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts.map +1 -0
- package/dist/cjs/test/unit/fixtures/bip322/fixtures.js +51 -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 +138 -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 +47 -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 +32 -0
- package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts +2 -0
- package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/btc/unit/btc.js +220 -0
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts +4 -0
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.js +10 -0
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.js +18 -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 +29 -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 +32 -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 +32 -0
- package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/ltc/unit/index.js +39 -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 +29 -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 +49 -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 +125 -0
- package/dist/cjs/test/unit/prebuildAndSign.d.ts +6 -0
- package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -0
- package/dist/cjs/test/unit/prebuildAndSign.js +270 -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 +285 -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 +283 -0
- package/dist/cjs/test/unit/recovery/mock.d.ts +30 -0
- package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/mock.js +138 -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 +30 -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 +17 -0
- package/dist/cjs/test/unit/transaction/descriptor/outputDifference.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/outputDifference.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/outputDifference.js +76 -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 +135 -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 +32 -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 +48 -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 +108 -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 +501 -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 +162 -0
- package/dist/cjs/test/unit/util/fixtures.d.ts +14 -0
- package/dist/cjs/test/unit/util/fixtures.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/fixtures.js +102 -0
- package/dist/cjs/test/unit/util/index.d.ts +7 -0
- package/dist/cjs/test/unit/util/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/index.js +23 -0
- package/dist/cjs/test/unit/util/keychains.d.ts +26 -0
- package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/keychains.js +72 -0
- package/dist/cjs/test/unit/util/nockBitGo.d.ts +3 -0
- package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/nockBitGo.js +11 -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 +56 -0
- package/dist/cjs/test/unit/util/transaction.d.ts +24 -0
- package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/transaction.js +107 -0
- package/dist/cjs/test/unit/util/unspents.d.ts +13 -0
- package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/unspents.js +106 -0
- package/dist/cjs/test/unit/util/utxoCoins.d.ts +8 -0
- package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/utxoCoins.js +95 -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 +327 -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 +248 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/abstractUtxoCoin.d.ts +464 -0
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -0
- package/dist/esm/abstractUtxoCoin.js +598 -0
- package/dist/esm/address/fixedScript.d.ts +51 -0
- package/dist/esm/address/fixedScript.d.ts.map +1 -0
- package/dist/esm/address/fixedScript.js +109 -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/descriptor/NamedDescriptor.d.ts +20 -0
- package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -0
- package/dist/esm/descriptor/NamedDescriptor.js +39 -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 +13 -0
- package/dist/esm/descriptor/builder/builder.d.ts.map +1 -0
- package/dist/esm/descriptor/builder/builder.js +34 -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 +112 -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 +8 -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 +80 -0
- package/dist/esm/impl/bch/bch.d.ts +20 -0
- package/dist/esm/impl/bch/bch.d.ts.map +1 -0
- package/dist/esm/impl/bch/bch.js +33 -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 +10 -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 +21 -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 +10 -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 +8 -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 +10 -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 +13 -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 +51 -0
- package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -0
- package/dist/esm/impl/btc/inscriptionBuilder.js +143 -0
- package/dist/esm/impl/btc/tbtc.d.ts +10 -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 +10 -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 +10 -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 +10 -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 +7 -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 +7 -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 +10 -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 +31 -0
- package/dist/esm/impl/doge/doge.d.ts.map +1 -0
- package/dist/esm/impl/doge/doge.js +75 -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 +10 -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 +10 -0
- package/dist/esm/impl/index.d.ts.map +1 -0
- package/dist/esm/impl/index.js +10 -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 +7 -0
- package/dist/esm/impl/ltc/ltc.d.ts.map +1 -0
- package/dist/esm/impl/ltc/ltc.js +15 -0
- package/dist/esm/impl/ltc/tltc.d.ts +7 -0
- package/dist/esm/impl/ltc/tltc.d.ts.map +1 -0
- package/dist/esm/impl/ltc/tltc.js +14 -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 +7 -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 +10 -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 +21 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +21 -0
- package/dist/esm/keychains.d.ts +48 -0
- package/dist/esm/keychains.d.ts.map +1 -0
- package/dist/esm/keychains.js +61 -0
- package/dist/esm/names.d.ts +26 -0
- package/dist/esm/names.d.ts.map +1 -0
- package/dist/esm/names.js +171 -0
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +8 -0
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +23 -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 +15 -0
- package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -0
- package/dist/esm/offlineVault/TransactionExplanation.js +13 -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 +38 -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 +22 -0
- package/dist/{src → esm}/recovery/RecoveryProvider.d.ts.map +1 -1
- package/dist/esm/recovery/RecoveryProvider.js +19 -0
- package/dist/esm/recovery/backupKeyRecovery.d.ts +88 -0
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -0
- package/dist/esm/recovery/backupKeyRecovery.js +329 -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 +86 -0
- package/dist/{src → esm}/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/crossChainRecovery.js +325 -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/replayProtection.d.ts +5 -0
- package/dist/esm/replayProtection.d.ts.map +1 -0
- package/dist/esm/replayProtection.js +20 -0
- package/dist/esm/sign.d.ts +54 -0
- package/dist/esm/sign.d.ts.map +1 -0
- package/dist/esm/sign.js +162 -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 +86 -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/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 +15 -0
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/parse.js +79 -0
- package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +13 -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 +38 -0
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +35 -0
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/verifyTransaction.js +65 -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 +52 -0
- package/dist/esm/transaction/fetchInputs.d.ts +26 -0
- package/dist/esm/transaction/fetchInputs.d.ts.map +1 -0
- package/dist/esm/transaction/fetchInputs.js +72 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +10 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +40 -0
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +63 -0
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/explainTransaction.js +284 -0
- package/dist/esm/transaction/fixedScript/index.d.ts +7 -0
- package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/index.js +6 -0
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts +26 -0
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/parseOutput.js +207 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +7 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.js +164 -0
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +18 -0
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/signTransaction.js +95 -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 +159 -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 +7 -0
- package/dist/esm/transaction/index.d.ts.map +1 -0
- package/dist/esm/transaction/index.js +7 -0
- package/dist/esm/transaction/outputDifference.d.ts +40 -0
- package/dist/esm/transaction/outputDifference.d.ts.map +1 -0
- package/dist/esm/transaction/outputDifference.js +42 -0
- package/dist/esm/transaction/parseTransaction.d.ts +3 -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 +29 -0
- package/dist/esm/transaction/recipient.d.ts.map +1 -0
- package/dist/esm/transaction/recipient.js +48 -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 +63 -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/verifyKey.d.ts +28 -0
- package/dist/esm/verifyKey.d.ts.map +1 -0
- package/dist/esm/verifyKey.js +123 -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 -18
- package/.eslintignore +0 -5
- package/CHANGELOG.md +0 -235
- 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.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.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.map +0 -1
- package/dist/src/replayProtection.js +0 -21
- package/dist/src/sign.d.ts.map +0 -1
- package/dist/src/sign.js +0 -104
- package/dist/tsconfig.tsbuildinfo +0 -8041
- /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,63 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import { bitgo } from '@bitgo-beta/utxo-lib';
|
|
3
|
+
import { ITransactionExplanation as BaseTransactionExplanation } from '@bitgo-beta/sdk-core';
|
|
4
|
+
import type { Output, Bip322Message } from '../../abstractUtxoCoin';
|
|
5
|
+
export interface AbstractUtxoTransactionExplanation<TFee = string> extends BaseTransactionExplanation<TFee, string> {
|
|
6
|
+
/** NOTE: this actually only captures external outputs */
|
|
7
|
+
outputs: Output[];
|
|
8
|
+
changeOutputs: Output[];
|
|
9
|
+
/**
|
|
10
|
+
* BIP322 messages extracted from the transaction inputs.
|
|
11
|
+
* These messages are used for verifying the transaction against the BIP322 standard.
|
|
12
|
+
*/
|
|
13
|
+
messages?: Bip322Message[];
|
|
14
|
+
}
|
|
15
|
+
/** @deprecated - the signature fields are not very useful */
|
|
16
|
+
interface TransactionExplanationWithSignatures<TFee = string> extends AbstractUtxoTransactionExplanation<TFee> {
|
|
17
|
+
/** @deprecated - unused outside of tests */
|
|
18
|
+
locktime?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Number of input signatures per input.
|
|
21
|
+
* @deprecated - this is not very useful without knowing who signed each input.
|
|
22
|
+
*/
|
|
23
|
+
inputSignatures: number[];
|
|
24
|
+
/**
|
|
25
|
+
* Highest input signature count for the transaction
|
|
26
|
+
* @deprecated - this is not very useful without knowing who signed each input.
|
|
27
|
+
*/
|
|
28
|
+
signatures: number;
|
|
29
|
+
}
|
|
30
|
+
/** For our wasm backend, we do not return the deprecated fields. We set TFee to string for backwards compatibility. */
|
|
31
|
+
export type TransactionExplanationWasm = AbstractUtxoTransactionExplanation<string>;
|
|
32
|
+
/** When parsing the legacy transaction format, we cannot always infer the fee so we set it to string | undefined */
|
|
33
|
+
export type TransactionExplanationUtxolibLegacy = TransactionExplanationWithSignatures<string | undefined>;
|
|
34
|
+
/** When parsing a PSBT, we can infer the fee so we set TFee to string. */
|
|
35
|
+
export type TransactionExplanationUtxolibPsbt = TransactionExplanationWithSignatures<string>;
|
|
36
|
+
export type TransactionExplanation = TransactionExplanationUtxolibLegacy | TransactionExplanationUtxolibPsbt | TransactionExplanationWasm;
|
|
37
|
+
export type ChangeAddressInfo = {
|
|
38
|
+
address: string;
|
|
39
|
+
chain: number;
|
|
40
|
+
index: number;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Decompose a raw psbt into useful information, such as the total amounts,
|
|
44
|
+
* change amounts, and transaction outputs.
|
|
45
|
+
*/
|
|
46
|
+
export declare function explainPsbt(psbt: bitgo.UtxoPsbt, params: {
|
|
47
|
+
pubs?: bitgo.RootWalletKeys | string[];
|
|
48
|
+
}, network: utxolib.Network, { strict }?: {
|
|
49
|
+
strict?: boolean;
|
|
50
|
+
}): TransactionExplanationUtxolibPsbt;
|
|
51
|
+
export declare function explainLegacyTx<TNumber extends number | bigint>(tx: bitgo.UtxoTransaction<TNumber>, params: {
|
|
52
|
+
pubs?: string[];
|
|
53
|
+
txInfo?: {
|
|
54
|
+
unspents?: bitgo.Unspent<TNumber>[];
|
|
55
|
+
};
|
|
56
|
+
changeInfo?: {
|
|
57
|
+
address: string;
|
|
58
|
+
chain: number;
|
|
59
|
+
index: number;
|
|
60
|
+
}[];
|
|
61
|
+
}, network: utxolib.Network): TransactionExplanationUtxolibLegacy;
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=explainTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/explainTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,IAAI,0BAA0B,EAAU,MAAM,sBAAsB,CAAC;AAGrG,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAA2B,MAAM,wBAAwB,CAAC;AAM7F,MAAM,WAAW,kCAAkC,CAAC,IAAI,GAAG,MAAM,CAAE,SAAQ,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC;IACjH,yDAAyD;IACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,6DAA6D;AAC7D,UAAU,oCAAoC,CAAC,IAAI,GAAG,MAAM,CAAE,SAAQ,kCAAkC,CAAC,IAAI,CAAC;IAC5G,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,uHAAuH;AACvH,MAAM,MAAM,0BAA0B,GAAG,kCAAkC,CAAC,MAAM,CAAC,CAAC;AAEpF,oHAAoH;AACpH,MAAM,MAAM,mCAAmC,GAAG,oCAAoC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAE3G,0EAA0E;AAC1E,MAAM,MAAM,iCAAiC,GAAG,oCAAoC,CAAC,MAAM,CAAC,CAAC;AAE7F,MAAM,MAAM,sBAAsB,GAC9B,mCAAmC,GACnC,iCAAiC,GACjC,0BAA0B,CAAC;AAE/B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAsRF;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,KAAK,CAAC,QAAQ,EACpB,MAAM,EAAE;IACN,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,EAAE,CAAC;CACxC,EACD,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,EAAE,MAAc,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5C,iCAAiC,CA4CnC;AAED,wBAAgB,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC7D,EAAE,EAAE,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAClC,MAAM,EAAE;IACN,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC;IACjD,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE,EACD,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,mCAAmC,CAQrC"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import { bip322 } from '@bitgo-beta/utxo-core';
|
|
3
|
+
import { bip32 } from '@bitgo-beta/secp256k1';
|
|
4
|
+
import { bitgo } from '@bitgo-beta/utxo-lib';
|
|
5
|
+
import * as utxocore from '@bitgo-beta/utxo-core';
|
|
6
|
+
import { toExtendedAddressFormat } from '../recipient';
|
|
7
|
+
import { getPayGoVerificationPubkey } from '../getPayGoVerificationPubkey';
|
|
8
|
+
function explainCommon(tx, params, network) {
|
|
9
|
+
const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs'];
|
|
10
|
+
let spendAmount = BigInt(0);
|
|
11
|
+
let changeAmount = BigInt(0);
|
|
12
|
+
const changeOutputs = [];
|
|
13
|
+
const outputs = [];
|
|
14
|
+
const { changeInfo } = params;
|
|
15
|
+
const changeAddresses = changeInfo?.map((info) => info.address) ?? [];
|
|
16
|
+
tx.outs.forEach((currentOutput) => {
|
|
17
|
+
// Try to encode the script pubkey with an address. If it fails, try to parse it as an OP_RETURN output with the prefix.
|
|
18
|
+
// If that fails, then it is an unrecognized scriptPubkey and should fail
|
|
19
|
+
const currentAddress = toExtendedAddressFormat(currentOutput.script, network);
|
|
20
|
+
const currentAmount = BigInt(currentOutput.value);
|
|
21
|
+
if (changeAddresses.includes(currentAddress)) {
|
|
22
|
+
// this is change
|
|
23
|
+
changeAmount += currentAmount;
|
|
24
|
+
const change = changeInfo?.find((change) => change.address === currentAddress);
|
|
25
|
+
if (!change) {
|
|
26
|
+
throw new Error('changeInfo must have change information for all change outputs');
|
|
27
|
+
}
|
|
28
|
+
changeOutputs.push({
|
|
29
|
+
address: currentAddress,
|
|
30
|
+
amount: currentAmount.toString(),
|
|
31
|
+
chain: change.chain,
|
|
32
|
+
index: change.index,
|
|
33
|
+
external: false,
|
|
34
|
+
});
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
spendAmount += currentAmount;
|
|
38
|
+
outputs.push({
|
|
39
|
+
address: currentAddress,
|
|
40
|
+
amount: currentAmount.toString(),
|
|
41
|
+
// If changeInfo has a length greater than or equal to zero, it means that the change information
|
|
42
|
+
// was provided to the function but the output was not identified as change. In this case,
|
|
43
|
+
// the output is external, and we can set it as so. If changeInfo is undefined, it means we were
|
|
44
|
+
// given no information about change outputs, so we can't determine anything about the output,
|
|
45
|
+
// so we leave it undefined.
|
|
46
|
+
external: changeInfo ? true : undefined,
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
const outputDetails = {
|
|
50
|
+
outputAmount: spendAmount.toString(),
|
|
51
|
+
changeAmount: changeAmount.toString(),
|
|
52
|
+
outputs,
|
|
53
|
+
changeOutputs,
|
|
54
|
+
};
|
|
55
|
+
let fee;
|
|
56
|
+
let locktime;
|
|
57
|
+
if (params.feeInfo) {
|
|
58
|
+
displayOrder.push('fee');
|
|
59
|
+
fee = params.feeInfo;
|
|
60
|
+
}
|
|
61
|
+
if (Number.isInteger(tx.locktime) && tx.locktime > 0) {
|
|
62
|
+
displayOrder.push('locktime');
|
|
63
|
+
locktime = tx.locktime;
|
|
64
|
+
}
|
|
65
|
+
return { displayOrder, id: tx.getId(), ...outputDetails, fee, locktime };
|
|
66
|
+
}
|
|
67
|
+
function getRootWalletKeys(params) {
|
|
68
|
+
if (params.pubs instanceof bitgo.RootWalletKeys) {
|
|
69
|
+
return params.pubs;
|
|
70
|
+
}
|
|
71
|
+
const keys = params.pubs?.map((xpub) => bip32.fromBase58(xpub));
|
|
72
|
+
return keys && keys.length === 3 ? new bitgo.RootWalletKeys(keys) : undefined;
|
|
73
|
+
}
|
|
74
|
+
function getPsbtInputSignaturesCount(psbt, params) {
|
|
75
|
+
const rootWalletKeys = getRootWalletKeys(params);
|
|
76
|
+
return rootWalletKeys
|
|
77
|
+
? bitgo.getSignatureValidationArrayPsbt(psbt, rootWalletKeys).map((sv) => sv[1].filter((v) => v).length)
|
|
78
|
+
: Array(psbt.data.inputs.length).fill(0);
|
|
79
|
+
}
|
|
80
|
+
function getTxInputSignaturesCount(tx, params, network) {
|
|
81
|
+
const prevOutputs = params.txInfo?.unspents?.map((u) => bitgo.toOutput(u, network));
|
|
82
|
+
const rootWalletKeys = getRootWalletKeys(params);
|
|
83
|
+
const { unspents = [] } = params.txInfo ?? {};
|
|
84
|
+
// get the number of signatures per input
|
|
85
|
+
return tx.ins.map((input, idx) => {
|
|
86
|
+
if (unspents.length !== tx.ins.length) {
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
if (!prevOutputs) {
|
|
90
|
+
throw new Error(`invalid state`);
|
|
91
|
+
}
|
|
92
|
+
if (!rootWalletKeys) {
|
|
93
|
+
// no pub keys or incorrect number of pub keys
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
return bitgo.verifySignatureWithUnspent(tx, idx, unspents, rootWalletKeys).filter((v) => v).length;
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
// some other error occurred and we can't validate the signatures
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
function getChainAndIndexFromBip32Derivations(output) {
|
|
106
|
+
const derivations = output.bip32Derivation ?? output.tapBip32Derivation ?? undefined;
|
|
107
|
+
if (!derivations) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
const paths = derivations.map((d) => d.path);
|
|
111
|
+
if (!paths || paths.length !== 3) {
|
|
112
|
+
throw new Error('expected 3 paths in bip32Derivation or tapBip32Derivation');
|
|
113
|
+
}
|
|
114
|
+
if (!paths.every((p) => paths[0] === p)) {
|
|
115
|
+
throw new Error('expected all paths to be the same');
|
|
116
|
+
}
|
|
117
|
+
paths.forEach((path) => {
|
|
118
|
+
if (paths[0] !== path) {
|
|
119
|
+
throw new Error('Unable to get a single chain and index on the output because there are different paths for different keys');
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
return utxolib.bitgo.getChainAndIndexFromPath(paths[0]);
|
|
123
|
+
}
|
|
124
|
+
function getChangeInfo(psbt) {
|
|
125
|
+
try {
|
|
126
|
+
return utxolib.bitgo.findInternalOutputIndices(psbt).map((i) => {
|
|
127
|
+
const derivationInformation = getChainAndIndexFromBip32Derivations(psbt.data.outputs[i]);
|
|
128
|
+
if (!derivationInformation) {
|
|
129
|
+
throw new Error('could not find derivation information on bip32Derivation or tapBip32Derivation');
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
address: utxolib.address.fromOutputScript(psbt.txOutputs[i].script, psbt.network),
|
|
133
|
+
external: false,
|
|
134
|
+
...derivationInformation,
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
if (e instanceof utxolib.bitgo.ErrorNoMultiSigInputFound) {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
throw e;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Extract PayGo address proof information from the PSBT if present
|
|
147
|
+
* @returns Information about the PayGo proof, including the output index and address
|
|
148
|
+
*/
|
|
149
|
+
function getPayGoVerificationInfo(psbt, network) {
|
|
150
|
+
let outputIndex = undefined;
|
|
151
|
+
let address = undefined;
|
|
152
|
+
// Check if this PSBT has any PayGo address proofs
|
|
153
|
+
if (!utxocore.paygo.psbtOutputIncludesPaygoAddressProof(psbt)) {
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
// This pulls the pubkey depending on given network
|
|
157
|
+
const verificationPubkey = getPayGoVerificationPubkey(network);
|
|
158
|
+
// find which output index that contains the PayGo proof
|
|
159
|
+
outputIndex = utxocore.paygo.getPayGoAddressProofOutputIndex(psbt);
|
|
160
|
+
if (outputIndex === undefined || !verificationPubkey) {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
const output = psbt.txOutputs[outputIndex];
|
|
164
|
+
address = utxolib.address.fromOutputScript(output.script, network);
|
|
165
|
+
if (!address) {
|
|
166
|
+
throw new Error(`Can not derive address ${address} Pay Go Attestation.`);
|
|
167
|
+
}
|
|
168
|
+
return { outputIndex, verificationPubkey };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Extract the BIP322 messages and addresses from the PSBT inputs and perform
|
|
172
|
+
* verification on the transaction to ensure that it meets the BIP322 requirements.
|
|
173
|
+
* @returns An array of objects containing the message and address for each input,
|
|
174
|
+
* or undefined if no BIP322 messages are found.
|
|
175
|
+
*/
|
|
176
|
+
function getBip322MessageInfoAndVerify(psbt, network) {
|
|
177
|
+
const bip322Messages = [];
|
|
178
|
+
for (let i = 0; i < psbt.data.inputs.length; i++) {
|
|
179
|
+
const message = bip322.getBip322ProofMessageAtIndex(psbt, i);
|
|
180
|
+
if (message) {
|
|
181
|
+
const input = psbt.data.inputs[i];
|
|
182
|
+
if (!input.witnessUtxo) {
|
|
183
|
+
throw new Error(`Missing witnessUtxo for input index ${i}`);
|
|
184
|
+
}
|
|
185
|
+
if (!input.nonWitnessUtxo) {
|
|
186
|
+
throw new Error(`Missing nonWitnessUtxo for input index ${i}`);
|
|
187
|
+
}
|
|
188
|
+
const scriptPubKey = input.witnessUtxo.script;
|
|
189
|
+
// Verify that the toSpend transaction can be recreated in the PSBT and is encoded correctly in the nonWitnessUtxo
|
|
190
|
+
const toSpend = bip322.buildToSpendTransaction(scriptPubKey, message);
|
|
191
|
+
const toSpendB64 = toSpend.toBuffer().toString('base64');
|
|
192
|
+
if (input.nonWitnessUtxo.toString('base64') !== toSpendB64) {
|
|
193
|
+
throw new Error(`Non-witness UTXO does not match the expected toSpend transaction at input index ${i}`);
|
|
194
|
+
}
|
|
195
|
+
// Verify that the toSpend transaction ID matches the input's referenced transaction ID
|
|
196
|
+
if (toSpend.getId() !== utxolib.bitgo.getOutputIdForInput(psbt.txInputs[i]).txid) {
|
|
197
|
+
throw new Error(`ToSpend transaction ID does not match the input at index ${i}`);
|
|
198
|
+
}
|
|
199
|
+
// Verify the input specifics
|
|
200
|
+
if (psbt.txInputs[i].sequence !== 0) {
|
|
201
|
+
throw new Error(`Unexpected sequence number at input index ${i}: ${psbt.txInputs[i].sequence}. Expected 0.`);
|
|
202
|
+
}
|
|
203
|
+
if (psbt.txInputs[i].index !== 0) {
|
|
204
|
+
throw new Error(`Unexpected input index at position ${i}: ${psbt.txInputs[i].index}. Expected 0.`);
|
|
205
|
+
}
|
|
206
|
+
bip322Messages.push({
|
|
207
|
+
message: message.toString('utf8'),
|
|
208
|
+
address: utxolib.address.fromOutputScript(scriptPubKey, network),
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (bip322Messages.length > 0) {
|
|
213
|
+
// If there is a BIP322 message in any input, all inputs must have one.
|
|
214
|
+
if (bip322Messages.length !== psbt.data.inputs.length) {
|
|
215
|
+
throw new Error('Inconsistent BIP322 messages across inputs.');
|
|
216
|
+
}
|
|
217
|
+
// Verify the transaction specifics for BIP322
|
|
218
|
+
if (psbt.version !== 0 && psbt.version !== 2) {
|
|
219
|
+
throw new Error(`Unsupported PSBT version for BIP322: ${psbt.version}. Expected 0 `);
|
|
220
|
+
}
|
|
221
|
+
if (psbt.data.outputs.length !== 1 ||
|
|
222
|
+
psbt.txOutputs[0].script.toString('hex') !== '6a' ||
|
|
223
|
+
psbt.txOutputs[0].value !== 0n) {
|
|
224
|
+
throw new Error(`Invalid PSBT outputs for BIP322. Expected exactly one OP_RETURN output with zero value.`);
|
|
225
|
+
}
|
|
226
|
+
return bip322Messages;
|
|
227
|
+
}
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Decompose a raw psbt into useful information, such as the total amounts,
|
|
232
|
+
* change amounts, and transaction outputs.
|
|
233
|
+
*/
|
|
234
|
+
export function explainPsbt(psbt, params, network, { strict = false } = {}) {
|
|
235
|
+
const payGoVerificationInfo = getPayGoVerificationInfo(psbt, network);
|
|
236
|
+
if (payGoVerificationInfo) {
|
|
237
|
+
try {
|
|
238
|
+
utxocore.paygo.verifyPayGoAddressProof(psbt, payGoVerificationInfo.outputIndex, bip32.fromBase58(payGoVerificationInfo.verificationPubkey, utxolib.networks.bitcoin).publicKey);
|
|
239
|
+
}
|
|
240
|
+
catch (e) {
|
|
241
|
+
if (strict) {
|
|
242
|
+
throw e;
|
|
243
|
+
}
|
|
244
|
+
console.error(e);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const messages = getBip322MessageInfoAndVerify(psbt, network);
|
|
248
|
+
const changeInfo = getChangeInfo(psbt);
|
|
249
|
+
const tx = psbt.getUnsignedTx();
|
|
250
|
+
const common = explainCommon(tx, { ...params, changeInfo }, network);
|
|
251
|
+
const inputSignaturesCount = getPsbtInputSignaturesCount(psbt, params);
|
|
252
|
+
// Set fee from subtracting inputs from outputs
|
|
253
|
+
const outputAmount = psbt.txOutputs.reduce((cumulative, curr) => cumulative + BigInt(curr.value), BigInt(0));
|
|
254
|
+
const inputAmount = psbt.txInputs.reduce((cumulative, txInput, i) => {
|
|
255
|
+
const data = psbt.data.inputs[i];
|
|
256
|
+
if (data.witnessUtxo) {
|
|
257
|
+
return cumulative + BigInt(data.witnessUtxo.value);
|
|
258
|
+
}
|
|
259
|
+
else if (data.nonWitnessUtxo) {
|
|
260
|
+
const tx = bitgo.createTransactionFromBuffer(data.nonWitnessUtxo, network, { amountType: 'bigint' });
|
|
261
|
+
return cumulative + BigInt(tx.outs[txInput.index].value);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
throw new Error('could not find value on input');
|
|
265
|
+
}
|
|
266
|
+
}, BigInt(0));
|
|
267
|
+
return {
|
|
268
|
+
...common,
|
|
269
|
+
fee: (inputAmount - outputAmount).toString(),
|
|
270
|
+
inputSignatures: inputSignaturesCount,
|
|
271
|
+
signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
|
|
272
|
+
messages,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
export function explainLegacyTx(tx, params, network) {
|
|
276
|
+
const common = explainCommon(tx, params, network);
|
|
277
|
+
const inputSignaturesCount = getTxInputSignaturesCount(tx, params, network);
|
|
278
|
+
return {
|
|
279
|
+
...common,
|
|
280
|
+
inputSignatures: inputSignaturesCount,
|
|
281
|
+
signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQWtCLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3QyxPQUFPLEtBQUssUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBR2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQXNEM0UsU0FBUyxhQUFhLENBQ3BCLEVBQWtDLEVBQ2xDLE1BR0MsRUFDRCxPQUF3QjtJQUV4QixNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN4RixJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sYUFBYSxHQUE4QixFQUFFLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDOUIsTUFBTSxlQUFlLEdBQUcsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUV0RSxFQUFFLENBQUMsSUFB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LENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN4RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIyIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1jb3JlJztcbmltcG9ydCB7IEJJUDMySW50ZXJmYWNlLCBiaXAzMiB9IGZyb20gJ0BiaXRnby1iZXRhL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBiaXRnbyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IElUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUcmlwbGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB1dHhvY29yZSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWNvcmUnO1xuXG5pbXBvcnQgdHlwZSB7IE91dHB1dCwgQmlwMzIyTWVzc2FnZSwgRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXQgfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0IH0gZnJvbSAnLi4vcmVjaXBpZW50JztcbmltcG9ydCB7IGdldFBheUdvVmVyaWZpY2F0aW9uUHVia2V5IH0gZnJvbSAnLi4vZ2V0UGF5R29WZXJpZmljYXRpb25QdWJrZXknO1xuXG4vLyA9PT09PSBUcmFuc2FjdGlvbiBFeHBsYW5hdGlvbiBUeXBlIERlZmluaXRpb25zID09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RVdHhvVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjxURmVlID0gc3RyaW5nPiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPFRGZWUsIHN0cmluZz4ge1xuICAvKiogTk9URTogdGhpcyBhY3R1YWxseSBvbmx5IGNhcHR1cmVzIGV4dGVybmFsIG91dHB1dHMgKi9cbiAgb3V0cHV0czogT3V0cHV0W107XG4gIGNoYW5nZU91dHB1dHM6IE91dHB1dFtdO1xuXG4gIC8qKlxuICAgKiBCSVAzMjIgbWVzc2FnZXMgZXh0cmFjdGVkIGZyb20gdGhlIHRyYW5zYWN0aW9uIGlucHV0cy5cbiAgICogVGhlc2UgbWVzc2FnZXMgYXJlIHVzZWQgZm9yIHZlcmlmeWluZyB0aGUgdHJhbnNhY3Rpb24gYWdhaW5zdCB0aGUgQklQMzIyIHN0YW5kYXJkLlxuICAgKi9cbiAgbWVzc2FnZXM/OiBCaXAzMjJNZXNzYWdlW107XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAtIHRoZSBzaWduYXR1cmUgZmllbGRzIGFyZSBub3QgdmVyeSB1c2VmdWwgKi9cbmludGVyZmFjZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uV2l0aFNpZ25hdHVyZXM8VEZlZSA9IHN0cmluZz4gZXh0ZW5kcyBBYnN0cmFjdFV0eG9UcmFuc2FjdGlvbkV4cGxhbmF0aW9uPFRGZWU+IHtcbiAgLyoqIEBkZXByZWNhdGVkIC0gdW51c2VkIG91dHNpZGUgb2YgdGVzdHMgKi9cbiAgbG9ja3RpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBpbnB1dCBzaWduYXR1cmVzIHBlciBpbnB1dC5cbiAgICogQGRlcHJlY2F0ZWQgLSB0aGlzIGlzIG5vdCB2ZXJ5IHVzZWZ1bCB3aXRob3V0IGtub3dpbmcgd2hvIHNpZ25lZCBlYWNoIGlucHV0LlxuICAgKi9cbiAgaW5wdXRTaWduYXR1cmVzOiBudW1iZXJbXTtcblxuICAvKipcbiAgICogSGlnaGVzdCBpbnB1dCBzaWduYXR1cmUgY291bnQgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAZGVwcmVjYXRlZCAtIHRoaXMgaXMgbm90IHZlcnkgdXNlZnVsIHdpdGhvdXQga25vd2luZyB3aG8gc2lnbmVkIGVhY2ggaW5wdXQuXG4gICAqL1xuICBzaWduYXR1cmVzOiBudW1iZXI7XG59XG5cbi8qKiBGb3Igb3VyIHdhc20gYmFja2VuZCwgd2UgZG8gbm90IHJldHVybiB0aGUgZGVwcmVjYXRlZCBmaWVsZHMuIFdlIHNldCBURmVlIHRvIHN0cmluZyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovXG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uV2FzbSA9IEFic3RyYWN0VXR4b1RyYW5zYWN0aW9uRXhwbGFuYXRpb248c3RyaW5nPjtcblxuLyoqIFdoZW4gcGFyc2luZyB0aGUgbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdCwgd2UgY2Fubm90IGFsd2F5cyBpbmZlciB0aGUgZmVlIHNvIHdlIHNldCBpdCB0byBzdHJpbmcgfCB1bmRlZmluZWQgKi9cbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliTGVnYWN5ID0gVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldpdGhTaWduYXR1cmVzPHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbi8qKiBXaGVuIHBhcnNpbmcgYSBQU0JULCB3ZSBjYW4gaW5mZXIgdGhlIGZlZSBzbyB3ZSBzZXQgVEZlZSB0byBzdHJpbmcuICovXG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uVXR4b2xpYlBzYnQgPSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uV2l0aFNpZ25hdHVyZXM8c3RyaW5nPjtcblxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9XG4gIHwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvblV0eG9saWJMZWdhY3lcbiAgfCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uVXR4b2xpYlBzYnRcbiAgfCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uV2FzbTtcblxuZXhwb3J0IHR5cGUgQ2hhbmdlQWRkcmVzc0luZm8gPSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY2hhaW46IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIGV4cGxhaW5Db21tb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBiaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHBhcmFtczoge1xuICAgIGNoYW5nZUluZm8/OiBDaGFuZ2VBZGRyZXNzSW5mb1tdO1xuICAgIGZlZUluZm8/OiBzdHJpbmc7XG4gIH0sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKSB7XG4gIGNvbnN0IGRpc3BsYXlPcmRlciA9IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnXTtcbiAgbGV0IHNwZW5kQW1vdW50ID0gQmlnSW50KDApO1xuICBsZXQgY2hhbmdlQW1vdW50ID0gQmlnSW50KDApO1xuICBjb25zdCBjaGFuZ2VPdXRwdXRzOiBGaXhlZFNjcmlwdFdhbGxldE91dHB1dFtdID0gW107XG4gIGNvbnN0IG91dHB1dHM6IE91dHB1dFtdID0gW107XG5cbiAgY29uc3QgeyBjaGFuZ2VJbmZvIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNoYW5nZUFkZHJlc3NlcyA9IGNoYW5nZUluZm8/Lm1hcCgoaW5mbykgPT4gaW5mby5hZGRyZXNzKSA/PyBbXTtcblxuICB0eC5vdXRzLmZvckVhY2goKGN1cnJlbnRPdXRwdXQpID0+IHtcbiAgICAvLyBUcnkgdG8gZW5jb2RlIHRoZSBzY3JpcHQgcHVia2V5IHdpdGggYW4gYWRkcmVzcy4gSWYgaXQgZmFpbHMsIHRyeSB0byBwYXJzZSBpdCBhcyBhbiBPUF9SRVRVUk4gb3V0cHV0IHdpdGggdGhlIHByZWZpeC5cbiAgICAvLyBJZiB0aGF0IGZhaWxzLCB0aGVuIGl0IGlzIGFuIHVucmVjb2duaXplZCBzY3JpcHRQdWJrZXkgYW5kIHNob3VsZCBmYWlsXG4gICAgY29uc3QgY3VycmVudEFkZHJlc3MgPSB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChjdXJyZW50T3V0cHV0LnNjcmlwdCwgbmV0d29yayk7XG4gICAgY29uc3QgY3VycmVudEFtb3VudCA9IEJpZ0ludChjdXJyZW50T3V0cHV0LnZhbHVlKTtcblxuICAgIGlmIChjaGFuZ2VBZGRyZXNzZXMuaW5jbHVkZXMoY3VycmVudEFkZHJlc3MpKSB7XG4gICAgICAvLyB0aGlzIGlzIGNoYW5nZVxuICAgICAgY2hhbmdlQW1vdW50ICs9IGN1cnJlbnRBbW91bnQ7XG4gICAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VJbmZvPy5maW5kKChjaGFuZ2UpID0+IGNoYW5nZS5hZGRyZXNzID09PSBjdXJyZW50QWRkcmVzcyk7XG5cbiAgICAgIGlmICghY2hhbmdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2hhbmdlSW5mbyBtdXN0IGhhdmUgY2hhbmdlIGluZm9ybWF0aW9uIGZvciBhbGwgY2hhbmdlIG91dHB1dHMnKTtcbiAgICAgIH1cbiAgICAgIGNoYW5nZU91dHB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IGN1cnJlbnRBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IGN1cnJlbnRBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhaW46IGNoYW5nZS5jaGFpbixcbiAgICAgICAgaW5kZXg6IGNoYW5nZS5pbmRleCxcbiAgICAgICAgZXh0ZXJuYWw6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3BlbmRBbW91bnQgKz0gY3VycmVudEFtb3VudDtcbiAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogY3VycmVudEFkZHJlc3MsXG4gICAgICBhbW91bnQ6IGN1cnJlbnRBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgIC8vIElmIGNoYW5nZUluZm8gaGFzIGEgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCBpdCBtZWFucyB0aGF0IHRoZSBjaGFuZ2UgaW5mb3JtYXRpb25cbiAgICAgIC8vIHdhcyBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24gYnV0IHRoZSBvdXRwdXQgd2FzIG5vdCBpZGVudGlmaWVkIGFzIGNoYW5nZS4gSW4gdGhpcyBjYXNlLFxuICAgICAgLy8gdGhlIG91dHB1dCBpcyBleHRlcm5hbCwgYW5kIHdlIGNhbiBzZXQgaXQgYXMgc28uIElmIGNoYW5nZUluZm8gaXMgdW5kZWZpbmVkLCBpdCBtZWFucyB3ZSB3ZXJlXG4gICAgICAvLyBnaXZlbiBubyBpbmZvcm1hdGlvbiBhYm91dCBjaGFuZ2Ugb3V0cHV0cywgc28gd2UgY2FuJ3QgZGV0ZXJtaW5lIGFueXRoaW5nIGFib3V0IHRoZSBvdXRwdXQsXG4gICAgICAvLyBzbyB3ZSBsZWF2ZSBpdCB1bmRlZmluZWQuXG4gICAgICBleHRlcm5hbDogY2hhbmdlSW5mbyA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dERldGFpbHMgPSB7XG4gICAgb3V0cHV0QW1vdW50OiBzcGVuZEFtb3VudC50b1N0cmluZygpLFxuICAgIGNoYW5nZUFtb3VudDogY2hhbmdlQW1vdW50LnRvU3RyaW5nKCksXG4gICAgb3V0cHV0cyxcbiAgICBjaGFuZ2VPdXRwdXRzLFxuICB9O1xuXG4gIGxldCBmZWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGxvY2t0aW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKHBhcmFtcy5mZWVJbmZvKSB7XG4gICAgZGlzcGxheU9yZGVyLnB1c2goJ2ZlZScpO1xuICAgIGZlZSA9IHBhcmFtcy5mZWVJbmZvO1xuICB9XG5cbiAgaWYgKE51bWJlci5pc0ludGVnZXIodHgubG9ja3RpbWUpICYmIHR4LmxvY2t0aW1lID4gMCkge1xuICAgIGRpc3BsYXlPcmRlci5wdXNoKCdsb2NrdGltZScpO1xuICAgIGxvY2t0aW1lID0gdHgubG9ja3RpbWU7XG4gIH1cblxuICByZXR1cm4geyBkaXNwbGF5T3JkZXIsIGlkOiB0eC5nZXRJZCgpLCAuLi5vdXRwdXREZXRhaWxzLCBmZWUsIGxvY2t0aW1lIH07XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RXYWxsZXRLZXlzKHBhcmFtczogeyBwdWJzPzogYml0Z28uUm9vdFdhbGxldEtleXMgfCBzdHJpbmdbXSB9KTogYml0Z28uUm9vdFdhbGxldEtleXMgfCB1bmRlZmluZWQge1xuICBpZiAocGFyYW1zLnB1YnMgaW5zdGFuY2VvZiBiaXRnby5Sb290V2FsbGV0S2V5cykge1xuICAgIHJldHVybiBwYXJhbXMucHVicztcbiAgfVxuICBjb25zdCBrZXlzID0gcGFyYW1zLnB1YnM/Lm1hcCgoeHB1YikgPT4gYmlwMzIuZnJvbUJhc2U1OCh4cHViKSk7XG4gIHJldHVybiBrZXlzICYmIGtleXMubGVuZ3RoID09PSAzID8gbmV3IGJpdGdvLlJvb3RXYWxsZXRLZXlzKGtleXMgYXMgVHJpcGxlPEJJUDMySW50ZXJmYWNlPikgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFBzYnRJbnB1dFNpZ25hdHVyZXNDb3VudChcbiAgcHNidDogYml0Z28uVXR4b1BzYnQsXG4gIHBhcmFtczoge1xuICAgIHB1YnM/OiBiaXRnby5Sb290V2FsbGV0S2V5cyB8IHN0cmluZ1tdO1xuICB9XG4pIHtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXMpO1xuICByZXR1cm4gcm9vdFdhbGxldEtleXNcbiAgICA/IGJpdGdvLmdldFNpZ25hdHVyZVZhbGlkYXRpb25BcnJheVBzYnQocHNidCwgcm9vdFdhbGxldEtleXMpLm1hcCgoc3YpID0+IHN2WzFdLmZpbHRlcigodikgPT4gdikubGVuZ3RoKVxuICAgIDogKEFycmF5KHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoKSBhcyBudW1iZXJbXSkuZmlsbCgwKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHhJbnB1dFNpZ25hdHVyZXNDb3VudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IGJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcGFyYW1zOiB7XG4gICAgdHhJbmZvPzogeyB1bnNwZW50cz86IGJpdGdvLlVuc3BlbnQ8VE51bWJlcj5bXSB9O1xuICAgIHB1YnM/OiBiaXRnby5Sb290V2FsbGV0S2V5cyB8IHN0cmluZ1tdO1xuICB9LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbikge1xuICBjb25zdCBwcmV2T3V0cHV0cyA9IHBhcmFtcy50eEluZm8/LnVuc3BlbnRzPy5tYXAoKHUpID0+IGJpdGdvLnRvT3V0cHV0PFROdW1iZXI+KHUsIG5ldHdvcmspKTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXMpO1xuICBjb25zdCB7IHVuc3BlbnRzID0gW10gfSA9IHBhcmFtcy50eEluZm8gPz8ge307XG5cbiAgLy8gZ2V0IHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBwZXIgaW5wdXRcbiAgcmV0dXJuIHR4Lmlucy5tYXAoKGlucHV0LCBpZHgpOiBudW1iZXIgPT4ge1xuICAgIGlmICh1bnNwZW50cy5sZW5ndGggIT09IHR4Lmlucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoIXByZXZPdXRwdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3RhdGVgKTtcbiAgICB9XG4gICAgaWYgKCFyb290V2FsbGV0S2V5cykge1xuICAgICAgLy8gbm8gcHViIGtleXMgb3IgaW5jb3JyZWN0IG51bWJlciBvZiBwdWIga2V5c1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYml0Z28udmVyaWZ5U2lnbmF0dXJlV2l0aFVuc3BlbnQ8VE51bWJlcj4odHgsIGlkeCwgdW5zcGVudHMsIHJvb3RXYWxsZXRLZXlzKS5maWx0ZXIoKHYpID0+IHYpLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBzb21lIG90aGVyIGVycm9yIG9jY3VycmVkIGFuZCB3ZSBjYW4ndCB2YWxpZGF0ZSB0aGUgc2lnbmF0dXJlc1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhaW5BbmRJbmRleEZyb21CaXAzMkRlcml2YXRpb25zKG91dHB1dDogYml0Z28uUHNidE91dHB1dCkge1xuICBjb25zdCBkZXJpdmF0aW9ucyA9IG91dHB1dC5iaXAzMkRlcml2YXRpb24gPz8gb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbiA/PyB1bmRlZmluZWQ7XG4gIGlmICghZGVyaXZhdGlvbnMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHBhdGhzID0gZGVyaXZhdGlvbnMubWFwKChkKSA9PiBkLnBhdGgpO1xuICBpZiAoIXBhdGhzIHx8IHBhdGhzLmxlbmd0aCAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgMyBwYXRocyBpbiBiaXAzMkRlcml2YXRpb24gb3IgdGFwQmlwMzJEZXJpdmF0aW9uJyk7XG4gIH1cbiAgaWYgKCFwYXRocy5ldmVyeSgocCkgPT4gcGF0aHNbMF0gPT09IHApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBhbGwgcGF0aHMgdG8gYmUgdGhlIHNhbWUnKTtcbiAgfVxuXG4gIHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICBpZiAocGF0aHNbMF0gIT09IHBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1VuYWJsZSB0byBnZXQgYSBzaW5nbGUgY2hhaW4gYW5kIGluZGV4IG9uIHRoZSBvdXRwdXQgYmVjYXVzZSB0aGVyZSBhcmUgZGlmZmVyZW50IHBhdGhzIGZvciBkaWZmZXJlbnQga2V5cydcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHV0eG9saWIuYml0Z28uZ2V0Q2hhaW5BbmRJbmRleEZyb21QYXRoKHBhdGhzWzBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhbmdlSW5mbyhwc2J0OiBiaXRnby5VdHhvUHNidCk6IENoYW5nZUFkZHJlc3NJbmZvW10gfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmZpbmRJbnRlcm5hbE91dHB1dEluZGljZXMocHNidCkubWFwKChpKSA9PiB7XG4gICAgICBjb25zdCBkZXJpdmF0aW9uSW5mb3JtYXRpb24gPSBnZXRDaGFpbkFuZEluZGV4RnJvbUJpcDMyRGVyaXZhdGlvbnMocHNidC5kYXRhLm91dHB1dHNbaV0pO1xuICAgICAgaWYgKCFkZXJpdmF0aW9uSW5mb3JtYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCBkZXJpdmF0aW9uIGluZm9ybWF0aW9uIG9uIGJpcDMyRGVyaXZhdGlvbiBvciB0YXBCaXAzMkRlcml2YXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KHBzYnQudHhPdXRwdXRzW2ldLnNjcmlwdCwgcHNidC5uZXR3b3JrKSxcbiAgICAgICAgZXh0ZXJuYWw6IGZhbHNlLFxuICAgICAgICAuLi5kZXJpdmF0aW9uSW5mb3JtYXRpb24sXG4gICAgICB9O1xuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLkVycm9yTm9NdWx0aVNpZ0lucHV0Rm91bmQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0IFBheUdvIGFkZHJlc3MgcHJvb2YgaW5mb3JtYXRpb24gZnJvbSB0aGUgUFNCVCBpZiBwcmVzZW50XG4gKiBAcmV0dXJucyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgUGF5R28gcHJvb2YsIGluY2x1ZGluZyB0aGUgb3V0cHV0IGluZGV4IGFuZCBhZGRyZXNzXG4gKi9cbmZ1bmN0aW9uIGdldFBheUdvVmVyaWZpY2F0aW9uSW5mbyhcbiAgcHNidDogYml0Z28uVXR4b1BzYnQsXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogeyBvdXRwdXRJbmRleDogbnVtYmVyOyB2ZXJpZmljYXRpb25QdWJrZXk6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgbGV0IG91dHB1dEluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIC8vIENoZWNrIGlmIHRoaXMgUFNCVCBoYXMgYW55IFBheUdvIGFkZHJlc3MgcHJvb2ZzXG4gIGlmICghdXR4b2NvcmUucGF5Z28ucHNidE91dHB1dEluY2x1ZGVzUGF5Z29BZGRyZXNzUHJvb2YocHNidCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gVGhpcyBwdWxscyB0aGUgcHVia2V5IGRlcGVuZGluZyBvbiBnaXZlbiBuZXR3b3JrXG4gIGNvbnN0IHZlcmlmaWNhdGlvblB1YmtleSA9IGdldFBheUdvVmVyaWZpY2F0aW9uUHVia2V5KG5ldHdvcmspO1xuICAvLyBmaW5kIHdoaWNoIG91dHB1dCBpbmRleCB0aGF0IGNvbnRhaW5zIHRoZSBQYXlHbyBwcm9vZlxuICBvdXRwdXRJbmRleCA9IHV0eG9jb3JlLnBheWdvLmdldFBheUdvQWRkcmVzc1Byb29mT3V0cHV0SW5kZXgocHNidCk7XG4gIGlmIChvdXRwdXRJbmRleCA9PT0gdW5kZWZpbmVkIHx8ICF2ZXJpZmljYXRpb25QdWJrZXkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IHBzYnQudHhPdXRwdXRzW291dHB1dEluZGV4XTtcbiAgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dHB1dC5zY3JpcHQsIG5ldHdvcmspO1xuICBpZiAoIWFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZGVyaXZlIGFkZHJlc3MgJHthZGRyZXNzfSBQYXkgR28gQXR0ZXN0YXRpb24uYCk7XG4gIH1cblxuICByZXR1cm4geyBvdXRwdXRJbmRleCwgdmVyaWZpY2F0aW9uUHVia2V5IH07XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgQklQMzIyIG1lc3NhZ2VzIGFuZCBhZGRyZXNzZXMgZnJvbSB0aGUgUFNCVCBpbnB1dHMgYW5kIHBlcmZvcm1cbiAqIHZlcmlmaWNhdGlvbiBvbiB0aGUgdHJhbnNhY3Rpb24gdG8gZW5zdXJlIHRoYXQgaXQgbWVldHMgdGhlIEJJUDMyMiByZXF1aXJlbWVudHMuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UgYW5kIGFkZHJlc3MgZm9yIGVhY2ggaW5wdXQsXG4gKiAgICAgICAgICBvciB1bmRlZmluZWQgaWYgbm8gQklQMzIyIG1lc3NhZ2VzIGFyZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gZ2V0QmlwMzIyTWVzc2FnZUluZm9BbmRWZXJpZnkocHNidDogYml0Z28uVXR4b1BzYnQsIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IEJpcDMyMk1lc3NhZ2VbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJpcDMyMk1lc3NhZ2VzOiB7IG1lc3NhZ2U6IHN0cmluZzsgYWRkcmVzczogc3RyaW5nIH1bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYmlwMzIyLmdldEJpcDMyMlByb29mTWVzc2FnZUF0SW5kZXgocHNidCwgaSk7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gcHNidC5kYXRhLmlucHV0c1tpXTtcbiAgICAgIGlmICghaW5wdXQud2l0bmVzc1V0eG8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHdpdG5lc3NVdHhvIGZvciBpbnB1dCBpbmRleCAke2l9YCk7XG4gICAgICB9XG4gICAgICBpZiAoIWlucHV0Lm5vbldpdG5lc3NVdHhvKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBub25XaXRuZXNzVXR4byBmb3IgaW5wdXQgaW5kZXggJHtpfWApO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2NyaXB0UHViS2V5ID0gaW5wdXQud2l0bmVzc1V0eG8uc2NyaXB0O1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdG9TcGVuZCB0cmFuc2FjdGlvbiBjYW4gYmUgcmVjcmVhdGVkIGluIHRoZSBQU0JUIGFuZCBpcyBlbmNvZGVkIGNvcnJlY3RseSBpbiB0aGUgbm9uV2l0bmVzc1V0eG9cbiAgICAgIGNvbnN0IHRvU3BlbmQgPSBiaXAzMjIuYnVpbGRUb1NwZW5kVHJhbnNhY3Rpb24oc2NyaXB0UHViS2V5LCBtZXNzYWdlKTtcbiAgICAgIGNvbnN0IHRvU3BlbmRCNjQgPSB0b1NwZW5kLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgaWYgKGlucHV0Lm5vbldpdG5lc3NVdHhvLnRvU3RyaW5nKCdiYXNlNjQnKSAhPT0gdG9TcGVuZEI2NCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vbi13aXRuZXNzIFVUWE8gZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHRvU3BlbmQgdHJhbnNhY3Rpb24gYXQgaW5wdXQgaW5kZXggJHtpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdG9TcGVuZCB0cmFuc2FjdGlvbiBJRCBtYXRjaGVzIHRoZSBpbnB1dCdzIHJlZmVyZW5jZWQgdHJhbnNhY3Rpb24gSURcbiAgICAgIGlmICh0b1NwZW5kLmdldElkKCkgIT09IHV0eG9saWIuYml0Z28uZ2V0T3V0cHV0SWRGb3JJbnB1dChwc2J0LnR4SW5wdXRzW2ldKS50eGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVG9TcGVuZCB0cmFuc2FjdGlvbiBJRCBkb2VzIG5vdCBtYXRjaCB0aGUgaW5wdXQgYXQgaW5kZXggJHtpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZnkgdGhlIGlucHV0IHNwZWNpZmljc1xuICAgICAgaWYgKHBzYnQudHhJbnB1dHNbaV0uc2VxdWVuY2UgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHNlcXVlbmNlIG51bWJlciBhdCBpbnB1dCBpbmRleCAke2l9OiAke3BzYnQudHhJbnB1dHNbaV0uc2VxdWVuY2V9LiBFeHBlY3RlZCAwLmApO1xuICAgICAgfVxuICAgICAgaWYgKHBzYnQudHhJbnB1dHNbaV0uaW5kZXggIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGlucHV0IGluZGV4IGF0IHBvc2l0aW9uICR7aX06ICR7cHNidC50eElucHV0c1tpXS5pbmRleH0uIEV4cGVjdGVkIDAuYCk7XG4gICAgICB9XG5cbiAgICAgIGJpcDMyMk1lc3NhZ2VzLnB1c2goe1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLnRvU3RyaW5nKCd1dGY4JyksXG4gICAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KHNjcmlwdFB1YktleSwgbmV0d29yayksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAoYmlwMzIyTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIElmIHRoZXJlIGlzIGEgQklQMzIyIG1lc3NhZ2UgaW4gYW55IGlucHV0LCBhbGwgaW5wdXRzIG11c3QgaGF2ZSBvbmUuXG4gICAgaWYgKGJpcDMyMk1lc3NhZ2VzLmxlbmd0aCAhPT0gcHNidC5kYXRhLmlucHV0cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb25zaXN0ZW50IEJJUDMyMiBtZXNzYWdlcyBhY3Jvc3MgaW5wdXRzLicpO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gc3BlY2lmaWNzIGZvciBCSVAzMjJcbiAgICBpZiAocHNidC52ZXJzaW9uICE9PSAwICYmIHBzYnQudmVyc2lvbiAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBQU0JUIHZlcnNpb24gZm9yIEJJUDMyMjogJHtwc2J0LnZlcnNpb259LiBFeHBlY3RlZCAwIGApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwc2J0LmRhdGEub3V0cHV0cy5sZW5ndGggIT09IDEgfHxcbiAgICAgIHBzYnQudHhPdXRwdXRzWzBdLnNjcmlwdC50b1N0cmluZygnaGV4JykgIT09ICc2YScgfHxcbiAgICAgIHBzYnQudHhPdXRwdXRzWzBdLnZhbHVlICE9PSAwblxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFBTQlQgb3V0cHV0cyBmb3IgQklQMzIyLiBFeHBlY3RlZCBleGFjdGx5IG9uZSBPUF9SRVRVUk4gb3V0cHV0IHdpdGggemVybyB2YWx1ZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmlwMzIyTWVzc2FnZXM7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERlY29tcG9zZSBhIHJhdyBwc2J0IGludG8gdXNlZnVsIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSB0b3RhbCBhbW91bnRzLFxuICogY2hhbmdlIGFtb3VudHMsIGFuZCB0cmFuc2FjdGlvbiBvdXRwdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpblBzYnQoXG4gIHBzYnQ6IGJpdGdvLlV0eG9Qc2J0LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogYml0Z28uUm9vdFdhbGxldEtleXMgfCBzdHJpbmdbXTtcbiAgfSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICB7IHN0cmljdCA9IGZhbHNlIH06IHsgc3RyaWN0PzogYm9vbGVhbiB9ID0ge31cbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliUHNidCB7XG4gIGNvbnN0IHBheUdvVmVyaWZpY2F0aW9uSW5mbyA9IGdldFBheUdvVmVyaWZpY2F0aW9uSW5mbyhwc2J0LCBuZXR3b3JrKTtcbiAgaWYgKHBheUdvVmVyaWZpY2F0aW9uSW5mbykge1xuICAgIHRyeSB7XG4gICAgICB1dHhvY29yZS5wYXlnby52ZXJpZnlQYXlHb0FkZHJlc3NQcm9vZihcbiAgICAgICAgcHNidCxcbiAgICAgICAgcGF5R29WZXJpZmljYXRpb25JbmZvLm91dHB1dEluZGV4LFxuICAgICAgICBiaXAzMi5mcm9tQmFzZTU4KHBheUdvVmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25QdWJrZXksIHV0eG9saWIubmV0d29ya3MuYml0Y29pbikucHVibGljS2V5XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSBnZXRCaXAzMjJNZXNzYWdlSW5mb0FuZFZlcmlmeShwc2J0LCBuZXR3b3JrKTtcbiAgY29uc3QgY2hhbmdlSW5mbyA9IGdldENoYW5nZUluZm8ocHNidCk7XG4gIGNvbnN0IHR4ID0gcHNidC5nZXRVbnNpZ25lZFR4KCk7XG4gIGNvbnN0IGNvbW1vbiA9IGV4cGxhaW5Db21tb24odHgsIHsgLi4ucGFyYW1zLCBjaGFuZ2VJbmZvIH0sIG5ldHdvcmspO1xuICBjb25zdCBpbnB1dFNpZ25hdHVyZXNDb3VudCA9IGdldFBzYnRJbnB1dFNpZ25hdHVyZXNDb3VudChwc2J0LCBwYXJhbXMpO1xuXG4gIC8vIFNldCBmZWUgZnJvbSBzdWJ0cmFjdGluZyBpbnB1dHMgZnJvbSBvdXRwdXRzXG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IHBzYnQudHhPdXRwdXRzLnJlZHVjZSgoY3VtdWxhdGl2ZSwgY3VycikgPT4gY3VtdWxhdGl2ZSArIEJpZ0ludChjdXJyLnZhbHVlKSwgQmlnSW50KDApKTtcbiAgY29uc3QgaW5wdXRBbW91bnQgPSBwc2J0LnR4SW5wdXRzLnJlZHVjZSgoY3VtdWxhdGl2ZSwgdHhJbnB1dCwgaSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBwc2J0LmRhdGEuaW5wdXRzW2ldO1xuICAgIGlmIChkYXRhLndpdG5lc3NVdHhvKSB7XG4gICAgICByZXR1cm4gY3VtdWxhdGl2ZSArIEJpZ0ludChkYXRhLndpdG5lc3NVdHhvLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEubm9uV2l0bmVzc1V0eG8pIHtcbiAgICAgIGNvbnN0IHR4ID0gYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyPGJpZ2ludD4oZGF0YS5ub25XaXRuZXNzVXR4bywgbmV0d29yaywgeyBhbW91bnRUeXBlOiAnYmlnaW50JyB9KTtcbiAgICAgIHJldHVybiBjdW11bGF0aXZlICsgQmlnSW50KHR4Lm91dHNbdHhJbnB1dC5pbmRleF0udmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIHZhbHVlIG9uIGlucHV0Jyk7XG4gICAgfVxuICB9LCBCaWdJbnQoMCkpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uY29tbW9uLFxuICAgIGZlZTogKGlucHV0QW1vdW50IC0gb3V0cHV0QW1vdW50KS50b1N0cmluZygpLFxuICAgIGlucHV0U2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoY3VyciA+IHByZXYgPyBjdXJyIDogcHJldiksIDApLFxuICAgIG1lc3NhZ2VzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpbkxlZ2FjeVR4PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gICAgdHhJbmZvPzogeyB1bnNwZW50cz86IGJpdGdvLlVuc3BlbnQ8VE51bWJlcj5bXSB9O1xuICAgIGNoYW5nZUluZm8/OiB7IGFkZHJlc3M6IHN0cmluZzsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG4gIH0sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvblV0eG9saWJMZWdhY3kge1xuICBjb25zdCBjb21tb24gPSBleHBsYWluQ29tbW9uKHR4LCBwYXJhbXMsIG5ldHdvcmspO1xuICBjb25zdCBpbnB1dFNpZ25hdHVyZXNDb3VudCA9IGdldFR4SW5wdXRTaWduYXR1cmVzQ291bnQodHgsIHBhcmFtcywgbmV0d29yayk7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbW9uLFxuICAgIGlucHV0U2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoY3VyciA+IHByZXYgPyBjdXJyIDogcHJldiksIDApLFxuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { explainPsbt, explainLegacyTx, ChangeAddressInfo } from './explainTransaction';
|
|
2
|
+
export { explainPsbtWasm } from './explainPsbtWasm';
|
|
3
|
+
export { parseTransaction } from './parseTransaction';
|
|
4
|
+
export { CustomChangeOptions } from './parseOutput';
|
|
5
|
+
export { verifyTransaction } from './verifyTransaction';
|
|
6
|
+
export { signTransaction } from './signTransaction';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { explainPsbt, explainLegacyTx } from './explainTransaction';
|
|
2
|
+
export { explainPsbtWasm } from './explainPsbtWasm';
|
|
3
|
+
export { parseTransaction } from './parseTransaction';
|
|
4
|
+
export { verifyTransaction } from './verifyTransaction';
|
|
5
|
+
export { signTransaction } from './signTransaction';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGV4cGxhaW5Qc2J0LCBleHBsYWluTGVnYWN5VHgsIENoYW5nZUFkZHJlc3NJbmZvIH0gZnJvbSAnLi9leHBsYWluVHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgZXhwbGFpblBzYnRXYXNtIH0gZnJvbSAnLi9leHBsYWluUHNidFdhc20nO1xuZXhwb3J0IHsgcGFyc2VUcmFuc2FjdGlvbiB9IGZyb20gJy4vcGFyc2VUcmFuc2FjdGlvbic7XG5leHBvcnQgeyBDdXN0b21DaGFuZ2VPcHRpb25zIH0gZnJvbSAnLi9wYXJzZU91dHB1dCc7XG5leHBvcnQgeyB2ZXJpZnlUcmFuc2FjdGlvbiB9IGZyb20gJy4vdmVyaWZ5VHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgc2lnblRyYW5zYWN0aW9uIH0gZnJvbSAnLi9zaWduVHJhbnNhY3Rpb24nO1xuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { IRequestTracer, IWallet, TransactionPrebuild, VerificationOptions, ITransactionRecipient, Triple } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { AbstractUtxoCoin, Output } from '../../abstractUtxoCoin';
|
|
3
|
+
export interface CustomChangeOptions {
|
|
4
|
+
keys: Triple<{
|
|
5
|
+
pub: string;
|
|
6
|
+
}>;
|
|
7
|
+
signatures: Triple<string>;
|
|
8
|
+
}
|
|
9
|
+
export interface ParseOutputOptions {
|
|
10
|
+
currentOutput: Output;
|
|
11
|
+
coin: AbstractUtxoCoin;
|
|
12
|
+
txPrebuild: TransactionPrebuild;
|
|
13
|
+
verification: VerificationOptions;
|
|
14
|
+
keychainArray: Triple<{
|
|
15
|
+
pub: string;
|
|
16
|
+
}>;
|
|
17
|
+
wallet: IWallet;
|
|
18
|
+
txParams: {
|
|
19
|
+
recipients: ITransactionRecipient[];
|
|
20
|
+
changeAddress?: string;
|
|
21
|
+
};
|
|
22
|
+
customChange?: CustomChangeOptions;
|
|
23
|
+
reqId?: IRequestTracer;
|
|
24
|
+
}
|
|
25
|
+
export declare function parseOutput({ currentOutput, coin, txPrebuild, verification, keychainArray, wallet, txParams, customChange, reqId, }: ParseOutputOptions): Promise<Output>;
|
|
26
|
+
//# sourceMappingURL=parseOutput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseOutput.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/parseOutput.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,cAAc,EAEd,OAAO,EACP,mBAAmB,EAEnB,mBAAmB,EACnB,qBAAqB,EACrB,MAAM,EACP,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAkB,MAAM,wBAAwB,CAAC;AA0KlF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,mBAAmB,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE;QACR,UAAU,EAAE,qBAAqB,EAAE,CAAC;QACpC,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,wBAAsB,WAAW,CAAC,EAChC,aAAa,EACb,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,KAAK,GACN,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+GtC"}
|