@bitgo-beta/abstract-utxo 1.1.1-beta.232 → 1.1.1-beta.2321
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 +466 -0
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -0
- package/dist/cjs/src/abstractUtxoCoin.js +644 -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 +109 -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 +32 -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 +36 -0
- package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -0
- package/dist/cjs/src/impl/bch/bch.js +67 -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 +10 -0
- package/dist/cjs/src/impl/btc/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/index.js +26 -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/btc/tbtcstx.d.ts +10 -0
- package/dist/cjs/src/impl/btc/tbtcstx.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcstx.js +18 -0
- package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts +9 -0
- package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcstxprivate1.js +15 -0
- package/dist/cjs/src/impl/btc/tbtcstxsignet.d.ts +10 -0
- package/dist/cjs/src/impl/btc/tbtcstxsignet.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcstxsignet.js +18 -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/address.d.ts +79 -0
- package/dist/cjs/src/impl/zec/address.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/address.js +157 -0
- package/dist/cjs/src/impl/zec/index.d.ts +7 -0
- package/dist/cjs/src/impl/zec/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/index.js +23 -0
- package/dist/cjs/src/impl/zec/recipients.d.ts +86 -0
- package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/recipients.js +98 -0
- package/dist/cjs/src/impl/zec/shieldedAddress.d.ts +36 -0
- package/dist/cjs/src/impl/zec/shieldedAddress.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/shieldedAddress.js +51 -0
- package/dist/cjs/src/impl/zec/signIronwoodTransaction.d.ts +29 -0
- package/dist/cjs/src/impl/zec/signIronwoodTransaction.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/signIronwoodTransaction.js +57 -0
- package/dist/cjs/src/impl/zec/types.d.ts +8 -0
- package/dist/cjs/src/impl/zec/types.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/types.js +3 -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 +58 -0
- package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/zec.js +124 -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 +16 -0
- package/dist/cjs/src/names.d.ts.map +1 -0
- package/dist/cjs/src/names.js +119 -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 +176 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.js +417 -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 +46 -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 +48 -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 +85 -0
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts +15 -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 +19 -0
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/explainTransaction.js +85 -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 +47 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +152 -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 +30 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.js +217 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +9 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +234 -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 +27 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +130 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +31 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +55 -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 +5 -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 +76 -0
- package/dist/cjs/src/transaction/recipient.d.ts.map +1 -0
- package/dist/cjs/src/transaction/recipient.js +130 -0
- package/dist/cjs/src/transaction/signTransaction.d.ts +18 -0
- package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/signTransaction.js +114 -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 +5 -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 +491 -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 +206 -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 +123 -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 +79 -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/psbtDecode.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/psbtDecode.js +69 -0
- package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.js +470 -0
- package/dist/cjs/test/unit/impl/zec/unit/address.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/unit/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/unit/address.js +227 -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/impl/zec/unit/resolvePsbtRecipients.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.js +91 -0
- package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.js +57 -0
- package/dist/cjs/test/unit/impl/zec/unit/unifiedRecipientPreference.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/unit/unifiedRecipientPreference.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/unit/unifiedRecipientPreference.js +57 -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 +149 -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 +113 -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/tbtcstx.d.ts +2 -0
- package/dist/cjs/test/unit/tbtcstx.d.ts.map +1 -0
- package/dist/cjs/test/unit/tbtcstx.js +60 -0
- package/dist/cjs/test/unit/tbtcstxprivate1.d.ts +2 -0
- package/dist/cjs/test/unit/tbtcstxprivate1.d.ts.map +1 -0
- package/dist/cjs/test/unit/tbtcstxprivate1.js +61 -0
- package/dist/cjs/test/unit/tbtcstxsignet.d.ts +2 -0
- package/dist/cjs/test/unit/tbtcstxsignet.d.ts.map +1 -0
- package/dist/cjs/test/unit/tbtcstxsignet.js +61 -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/addressCodec.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/addressCodec.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/addressCodec.js +30 -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 +140 -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 +103 -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 +179 -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 +223 -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 +14 -0
- package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/address.js +16 -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 +22 -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 +132 -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 +159 -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 +466 -0
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -0
- package/dist/esm/abstractUtxoCoin.js +636 -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 +101 -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 +26 -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 +36 -0
- package/dist/esm/impl/bch/bch.d.ts.map +1 -0
- package/dist/esm/impl/bch/bch.js +63 -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 +10 -0
- package/dist/esm/impl/btc/index.d.ts.map +1 -0
- package/dist/esm/impl/btc/index.js +10 -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/btc/tbtcstx.d.ts +10 -0
- package/dist/esm/impl/btc/tbtcstx.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtcstx.js +14 -0
- package/dist/esm/impl/btc/tbtcstxprivate1.d.ts +9 -0
- package/dist/esm/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtcstxprivate1.js +11 -0
- package/dist/esm/impl/btc/tbtcstxsignet.d.ts +10 -0
- package/dist/esm/impl/btc/tbtcstxsignet.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtcstxsignet.js +14 -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/address.d.ts +79 -0
- package/dist/esm/impl/zec/address.d.ts.map +1 -0
- package/dist/esm/impl/zec/address.js +150 -0
- package/dist/esm/impl/zec/index.d.ts +7 -0
- package/dist/esm/impl/zec/index.d.ts.map +1 -0
- package/dist/esm/impl/zec/index.js +7 -0
- package/dist/esm/impl/zec/recipients.d.ts +86 -0
- package/dist/esm/impl/zec/recipients.d.ts.map +1 -0
- package/dist/esm/impl/zec/recipients.js +94 -0
- package/dist/esm/impl/zec/shieldedAddress.d.ts +36 -0
- package/dist/esm/impl/zec/shieldedAddress.d.ts.map +1 -0
- package/dist/esm/impl/zec/shieldedAddress.js +48 -0
- package/dist/esm/impl/zec/signIronwoodTransaction.d.ts +29 -0
- package/dist/esm/impl/zec/signIronwoodTransaction.d.ts.map +1 -0
- package/dist/esm/impl/zec/signIronwoodTransaction.js +50 -0
- package/dist/esm/impl/zec/types.d.ts +8 -0
- package/dist/esm/impl/zec/types.d.ts.map +1 -0
- package/dist/esm/impl/zec/types.js +2 -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 +58 -0
- package/dist/esm/impl/zec/zec.d.ts.map +1 -0
- package/dist/esm/impl/zec/zec.js +117 -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 +16 -0
- package/dist/esm/names.d.ts.map +1 -0
- package/dist/esm/names.js +108 -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 +176 -0
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -0
- package/dist/esm/recovery/backupKeyRecovery.js +406 -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 +40 -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 +45 -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 +81 -0
- package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +15 -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 +19 -0
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/explainTransaction.js +49 -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 +47 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +147 -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 +30 -0
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/parseOutput.js +210 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +9 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.js +228 -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 +27 -0
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/signPsbtWasm.js +121 -0
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +31 -0
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/signTransaction.js +47 -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 +5 -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 +76 -0
- package/dist/esm/transaction/recipient.d.ts.map +1 -0
- package/dist/esm/transaction/recipient.js +120 -0
- package/dist/esm/transaction/signTransaction.d.ts +18 -0
- package/dist/esm/transaction/signTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/signTransaction.js +73 -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 +5 -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 +49 -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 -8213
- /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(coin.addressCodec.decode(u.address)),
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpQkFBZTtBQUNmLCtDQUFpQztBQUVqQywwQ0FBNEI7QUFDNUIsOERBQWdEO0FBQ2hELDZCQUE4QjtBQUM5QixtREFBdUU7QUFDdkUsZ0RBQTREO0FBQzVELG1EQU04QjtBQUU5QixtQ0FBMEY7QUFHMUYsaUNBZ0JnQjtBQUVoQixTQUFTLEdBQUcsQ0FDVixJQUFzQixFQUN0QixZQUF3QyxFQUN4QyxRQUEyQjtJQUUzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLFFBQVEsRUFBRSxFQUFFLGNBQWMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMzRixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxLQUFLLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsbUJBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUU3RCxNQUFNLDZCQUE2QixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzVGLE1BQU0saUNBQWlDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1B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QUFFO1lBQzdCLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ21vY2hhJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UsIGJpdGdvLCB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0LCBCSVAzMiB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHtcbiAgY29tbW9uLFxuICBGdWxseVNpZ25lZFRyYW5zYWN0aW9uLFxuICBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLFxuICBUcmlwbGUsXG4gIFdhbGxldFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgZ2VuZXJhdGVBZGRyZXNzLCBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQsIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi9zcmMvdW5zcGVudCc7XG5cbmltcG9ydCB7XG4gIGFzc2VydEVxdWFsSlNPTixcbiAgZ2V0Rml4dHVyZSxcbiAgZ2V0VXR4b1dhbGxldCxcbiAgbW9ja1Vuc3BlbnQsXG4gIElucHV0U2NyaXB0VHlwZSxcbiAgVHJhbnNhY3Rpb25PYmosXG4gIHRyYW5zYWN0aW9uVG9PYmosXG4gIHRyYW5zYWN0aW9uSGV4VG9PYmosXG4gIGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb24sXG4gIGdldERlZmF1bHRXYWxsZXRLZXlzLFxuICBnZXRXYWxsZXRLZXlzLFxuICBkZWZhdWx0Qml0R28sXG4gIGdldE1pblV0eG9Db2lucyxcbiAgZ2V0TmV0d29ya0ZvckNvaW5OYW1lLFxuICBnZXRTY3JpcHRUeXBlcyxcbn0gZnJvbSAnLi91dGlsJztcblxuZnVuY3Rpb24gcnVuPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBpbnB1dFNjcmlwdHM6IHRlc3R1dGlsLklucHV0U2NyaXB0VHlwZVtdLFxuICB0eEZvcm1hdDogJ2xlZ2FjeScgfCAncHNidCdcbikge1xuICBjb25zdCBhbW91bnRUeXBlID0gY29pbi5hbW91bnRUeXBlO1xuICBjb25zdCB0aXRsZSA9IFtpbnB1dFNjcmlwdHMuam9pbignLCcpLCBgdHhGb3JtYXQ9JHt0eEZvcm1hdH1gLCBgYW1vdW50VHlwZT0ke2Ftb3VudFR5cGV9YF07XG4gIGRlc2NyaWJlKGAke3RpdGxlLmpvaW4oJyAnKX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2RlZmF1bHRCaXRHby5nZXRFbnYoKV0udXJpO1xuXG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgPSBpbnB1dFNjcmlwdHMuc29tZSgocykgPT4gcyA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKTtcbiAgICBjb25zdCBpc1RyYW5zYWN0aW9uV2l0aFJlcGxheVByb3RlY3Rpb24gPSBpbnB1dFNjcmlwdHMuc29tZSgocykgPT4gcyA9PT0gJ3Ayc2hQMnBrJyk7XG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhQMnRyID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICdwMnRyJyk7XG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhQMnRyTXVzaWcyID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICdwMnRyTXVzaWcyJyk7XG5cbiAgICBjb25zdCB2YWx1ZSA9IChhbW91bnRUeXBlID09PSAnYmlnaW50JyA/IEJpZ0ludCgnMTA5OTk5OTk4MDAwMDAwMDEnKSA6IDFlOCkgYXMgVE51bWJlcjtcbiAgICBjb25zdCB3YWxsZXQgPSBnZXRVdHhvV2FsbGV0KGNvaW4sIHsgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSB9KTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcblxuICAgIGNvbnN0IGZ1bGxTaWduID0gIShpc1RyYW5zYWN0aW9uV2l0aFJlcGxheVByb3RlY3Rpb24gfHwgaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQpO1xuXG4gICAgZnVuY3Rpb24gZ2V0VW5zcGVudHNGb3JQc2J0KCk6IFVuc3BlbnQ8YmlnaW50PltdIHtcbiAgICAgIHJldHVybiBpbnB1dFNjcmlwdHMubWFwKCh0LCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gdGVzdHV0aWwudG9VbnNwZW50KFxuICAgICAgICAgIHsgc2NyaXB0VHlwZTogdCwgdmFsdWU6IHQgPT09ICdwMnNoUDJwaycgPyBCaWdJbnQoMTAwMCkgOiBCaWdJbnQodmFsdWUpIH0sXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSksXG4gICAgICAgICAgd2FsbGV0S2V5c1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9UeG5JbnB1dFNjcmlwdFR5cGUodHlwZTogdGVzdHV0aWwuSW5wdXRTY3JpcHRUeXBlKTogSW5wdXRTY3JpcHRUeXBlIHtcbiAgICAgIHJldHVybiB0eXBlID09PSAncDJzaFAycGsnID8gJ3JlcGxheVByb3RlY3Rpb24nIDogdHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogdHlwZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRVbnNwZW50cygpOiBVbnNwZW50PFROdW1iZXI+W10ge1xuICAgICAgcmV0dXJuIGlucHV0U2NyaXB0cy5tYXAoKHR5cGUsIGkpID0+XG4gICAgICAgIG1vY2tVbnNwZW50PFROdW1iZXI+KGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLCB3YWxsZXRLZXlzLCB0b1R4bklucHV0U2NyaXB0VHlwZSh0eXBlKSwgaSwgdmFsdWUpXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE91dHB1dEFkZHJlc3Mocm9vdFdhbGxldEtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQWRkcmVzcyhjb2luLm5hbWUsIHtcbiAgICAgICAga2V5Y2hhaW5zOiByb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiAoeyBwdWI6IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpIH0pKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNpZ25QYXJhbXMoXG4gICAgICBwcmVidWlsZEhleDogc3RyaW5nLFxuICAgICAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZVxuICAgICk6IFdhbGxldFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICAgICAgY29uc3QgdHhJbmZvID0ge1xuICAgICAgICB1bnNwZW50czogdHhGb3JtYXQgPT09ICdwc2J0JyA/IHVuZGVmaW5lZCA6IGdldFVuc3BlbnRzKCksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHdhbGxldElkOiBpc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZCA/IHdhbGxldC5pZCgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHR4SGV4OiBwcmVidWlsZEhleCxcbiAgICAgICAgICB0eEluZm8sXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogc2lnbmVyLnRvQmFzZTU4KCksXG4gICAgICAgIHB1YnM6IHdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpLFxuICAgICAgICBjb3NpZ25lclB1YjogY29zaWduZXIubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgICAgICBleHRyYWN0VHJhbnNhY3Rpb246IGZhbHNlLFxuICAgICAgfSBhcyBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbihcbiAgICAgIHByZWJ1aWxkOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gICAgICBzaWduZXI6IEJJUDMySW50ZXJmYWNlLFxuICAgICAgY29zaWduZXI6IEJJUDMySW50ZXJmYWNlXG4gICAgKTogUHJvbWlzZTxIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPiB7XG4gICAgICBsZXQgc2NvcGU6IG5vY2suU2NvcGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQpIHtcbiAgICAgICAgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NpZ25wc2J0YCwgKGJvZHkpID0+IGJvZHkucHNidClcbiAgICAgICAgICAucmVwbHkoMjAwLCAoX3VyaTogc3RyaW5nLCByZXF1ZXN0Qm9keTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKFxuICAgICAgICAgICAgICBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKVxuICAgICAgICAgICAgKSBhcyBmaXhlZFNjcmlwdFdhbGxldC5OZXR3b3JrTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHJlcUJ5dGVzID0gQnVmZmVyLmZyb20oKHJlcXVlc3RCb2R5IGFzIHsgcHNidDogc3RyaW5nIH0pLnBzYnQsICdoZXgnKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHJlcUJ5dGVzLCBuZXR3b3JrTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjb3NpZ25lcldhc20gPSBCSVAzMi5mcm9tQmFzZTU4KGNvc2lnbmVyLnRvQmFzZTU4KCkpO1xuICAgICAgICAgICAgcmVxUHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyhjb3NpZ25lcldhc20pO1xuICAgICAgICAgICAgcmV0dXJuIHsgcHNidDogQnVmZmVyLmZyb20ocmVxUHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpIH07XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGhhbGYtc2lnbiB3aXRoIHRoZSB1c2VyIGtleVxuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHdhbGxldC5zaWduVHJhbnNhY3Rpb24oXG4gICAgICAgIGdldFNpZ25QYXJhbXMocHJlYnVpbGQudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JyksIHNpZ25lciwgY29zaWduZXIpXG4gICAgICApKSBhcyBQcm9taXNlPEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+O1xuXG4gICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjb3BlLmlzRG9uZSgpLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVGdWxsU2lnbmVkVHJhbnNhY3Rpb24oXG4gICAgICBoYWxmU2lnbmVkOiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLFxuICAgICAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZVxuICAgICk6IFByb21pc2U8RnVsbHlTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgICAgcmV0dXJuIChhd2FpdCB3YWxsZXQuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgLi4uZ2V0U2lnblBhcmFtcyhoYWxmU2lnbmVkLnR4SGV4LCBzaWduZXIsIGNvc2lnbmVyKSxcbiAgICAgICAgaXNMYXN0U2lnbmF0dXJlOiB0cnVlLFxuICAgICAgfSkpIGFzIEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgdHlwZSBUcmFuc2FjdGlvblN0YWdlcyA9IHtcbiAgICAgIHByZWJ1aWxkOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG4gICAgICBoYWxmU2lnbmVkVXNlckJhY2t1cD86IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb247XG4gICAgICBoYWxmU2lnbmVkVXNlckJpdEdvOiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uO1xuICAgICAgZnVsbFNpZ25lZFVzZXJCYWNrdXA/OiBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgZnVsbFNpZ25lZFVzZXJCaXRHbz86IEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfTtcblxuICAgIHR5cGUgVHJhbnNhY3Rpb25PYmpTdGFnZXMgPSBSZWNvcmQ8a2V5b2YgVHJhbnNhY3Rpb25TdGFnZXMsIFRyYW5zYWN0aW9uT2JqPjtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVByZWJ1aWxkUHNidCgpIHtcbiAgICAgIGNvbnN0IGlucHV0cyA9IGlucHV0U2NyaXB0cy5tYXAoXG4gICAgICAgICh0KTogdGVzdHV0aWwuSW5wdXQgPT4gKHtcbiAgICAgICAgICBzY3JpcHRUeXBlOiB0LFxuICAgICAgICAgIHZhbHVlOiB0ID09PSAncDJzaFAycGsnID8gQmlnSW50KDEwMDApIDogQmlnSW50KHZhbHVlKSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLk91dHB1dFtdID0gW1xuICAgICAgICB7IGFkZHJlc3M6IGdldE91dHB1dEFkZHJlc3MoZ2V0V2FsbGV0S2V5cygndGVzdCcpKSwgdmFsdWU6IHVuc3BlbnRTdW0gLSBCaWdJbnQoMTAwMCkgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLCB3YWxsZXRLZXlzLCAndW5zaWduZWQnLCB7XG4gICAgICAgIHAyc2hQMnBrS2V5OiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luLm5hbWUpWzBdLFxuICAgICAgfSk7XG4gICAgICB1dHhvbGliLmJpdGdvLmFkZFhwdWJzVG9Qc2J0KHBzYnQsIHdhbGxldEtleXMpO1xuICAgICAgcmV0dXJuIHBzYnQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25TdGFnZXMoKTogUHJvbWlzZTxUcmFuc2FjdGlvblN0YWdlcz4ge1xuICAgICAgY29uc3QgcHJlYnVpbGQgPVxuICAgICAgICB0eEZvcm1hdCA9PT0gJ3BzYnQnXG4gICAgICAgICAgPyBjcmVhdGVQcmVidWlsZFBzYnQoKVxuICAgICAgICAgIDogY3JlYXRlUHJlYnVpbGRUcmFuc2FjdGlvbjxUTnVtYmVyPihcbiAgICAgICAgICAgICAgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSksXG4gICAgICAgICAgICAgIGdldFVuc3BlbnRzKCksXG4gICAgICAgICAgICAgIGdldE91dHB1dEFkZHJlc3Mod2FsbGV0S2V5cylcbiAgICAgICAgICAgICk7XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRVc2VyQml0R28gPSBhd2FpdCBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24ocHJlYnVpbGQsIHdhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iaXRnbyk7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVXNlckJpdEdvID1cbiAgICAgICAgZnVsbFNpZ24gJiYgIWlzVHJhbnNhY3Rpb25XaXRoUDJ0ck11c2lnMlxuICAgICAgICAgID8gYXdhaXQgY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uKGhhbGZTaWduZWRVc2VyQml0R28sIHdhbGxldEtleXMuYml0Z28sIHdhbGxldEtleXMudXNlcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgaGFsZlNpZ25lZFVzZXJCYWNrdXAgPVxuICAgICAgICAhaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgJiYgISh0eEZvcm1hdCA9PT0gJ3BzYnQnICYmIGlzVHJhbnNhY3Rpb25XaXRoUDJ0cilcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbihwcmVidWlsZCwgd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJhY2t1cClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRVc2VyQmFja3VwID1cbiAgICAgICAgZnVsbFNpZ24gJiYgaGFsZlNpZ25lZFVzZXJCYWNrdXBcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbihoYWxmU2lnbmVkVXNlckJhY2t1cCwgd2FsbGV0S2V5cy5iYWNrdXAsIHdhbGxldEtleXMudXNlcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlYnVpbGQsXG4gICAgICAgIGhhbGZTaWduZWRVc2VyQmFja3VwLFxuICAgICAgICBoYWxmU2lnbmVkVXNlckJpdEdvLFxuICAgICAgICBmdWxsU2lnbmVkVXNlckJhY2t1cCxcbiAgICAgICAgZnVsbFNpZ25lZFVzZXJCaXRHbyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHRyYW5zYWN0aW9uU3RhZ2VzOiBUcmFuc2FjdGlvblN0YWdlcztcblxuICAgIGJlZm9yZSgncHJlcGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyYW5zYWN0aW9uU3RhZ2VzID0gYXdhaXQgZ2V0VHJhbnNhY3Rpb25TdGFnZXMoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChub2NrLmNsZWFuQWxsKTtcblxuICAgIGl0KCdtYXRjaCBmaXh0dXJlcycsIGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBNb2NoYS5Db250ZXh0KSB7XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICAvLyBUT0RPIChtYXliZSkgLSBvbmNlIGZ1bGwgUFNCVCBzdXBwb3J0IGlzIGFkZGVkIHRvIGFic3RyYWN0LXV0eG8gbW9kdWxlLCBjdXN0b20gSlNPTiByZXByZXNlbnRhdGlvbiBvZiBQU0JUIGNhbiBiZSBjcmVhdGVkIGFuZCB0ZXN0ZWQgaGVyZS5cbiAgICAgICAgLy8gc2lnbmF0dXJlcyBvZiB0YXByb290S2V5UGF0aFNwZW5kcyBhcmUgcmFuZG9tIHNpbmNlIHJhbmRvbSBuYXR1cmUgb2YgTXVTaWcyIG5vbmNlLCBzbyBwc2J0IGhleCBjb21wYXJpc29uIGFsc28gd29udCB3b3JrLlxuXG4gICAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdG9UcmFuc2FjdGlvblN0YWdlc09iaihzdGFnZXM6IFRyYW5zYWN0aW9uU3RhZ2VzKTogVHJhbnNhY3Rpb25PYmpTdGFnZXMge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMoc3RhZ2VzLCAodikgPT5cbiAgICAgICAgICB2ID09PSB1bmRlZmluZWQgfHwgdiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfHwgdiBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogdiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4gICAgICAgICAgICA/IHRyYW5zYWN0aW9uVG9PYmo8VE51bWJlcj4odilcbiAgICAgICAgICAgIDogdHJhbnNhY3Rpb25IZXhUb09iaih2LnR4SGV4LCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSwgYW1vdW50VHlwZSlcbiAgICAgICAgKSBhcyBUcmFuc2FjdGlvbk9ialN0YWdlcztcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0RXF1YWxKU09OKFxuICAgICAgICB0b1RyYW5zYWN0aW9uU3RhZ2VzT2JqKHRyYW5zYWN0aW9uU3RhZ2VzKSxcbiAgICAgICAgYXdhaXQgZ2V0Rml4dHVyZShcbiAgICAgICAgICBjb2luLFxuICAgICAgICAgIGB0cmFuc2FjdGlvbnMtJHtpbnB1dFNjcmlwdHMubWFwKCh0KSA9PiB0b1R4bklucHV0U2NyaXB0VHlwZSh0KSkuam9pbignLScpfWAsXG4gICAgICAgICAgdG9UcmFuc2FjdGlvblN0YWdlc09iaih0cmFuc2FjdGlvblN0YWdlcylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHRlc3RQc2J0VmFsaWRTaWduYXR1cmVzKHR4OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLCBzaWduZWRCeTogQklQMzJJbnRlcmZhY2VbXSkge1xuICAgICAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21IZXgodHgudHhIZXgsIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpKTtcbiAgICAgIGNvbnN0IHVuc3BlbnRzID0gZ2V0VW5zcGVudHNGb3JQc2J0KCk7XG4gICAgICBwc2J0LmRhdGEuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB1bnNwZW50ID0gdW5zcGVudHNbaW5kZXhdO1xuICAgICAgICBpZiAoIXV0eG9saWIuYml0Z28uaXNXYWxsZXRVbnNwZW50KHVuc3BlbnQpKSB7XG4gICAgICAgICAgYXNzZXJ0Lm9rKHV0eG9saWIuYml0Z28uZ2V0UHNidElucHV0U2NyaXB0VHlwZShpbnB1dCksICdwMnNoUDJwaycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3YWxsZXRVbnNwZW50ID0gdW5zcGVudCBhcyBXYWxsZXRVbnNwZW50PGJpZ2ludD47XG4gICAgICAgIGNvbnN0IHB1YmtleXMgPSB3YWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgod2FsbGV0VW5zcGVudC5jaGFpbiwgd2FsbGV0VW5zcGVudC5pbmRleCkucHVibGljS2V5cztcbiAgICAgICAgcHVia2V5cy5mb3JFYWNoKChwaywgcGtJbmRleCkgPT4ge1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgICAgIHBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dENvbW1vbihpbmRleCwgcGspLFxuICAgICAgICAgICAgc2lnbmVkQnkuaW5jbHVkZXMod2FsbGV0S2V5cy50cmlwbGVbcGtJbmRleF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0ZXN0VmFsaWRTaWduYXR1cmVzKFxuICAgICAgdHg6IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24gfCBGdWxseVNpZ25lZFRyYW5zYWN0aW9uLFxuICAgICAgc2lnbmVkQnk6IEJJUDMySW50ZXJmYWNlW10sXG4gICAgICBzaWduOiAnaGFsZnNpZ25lZCcgfCAnZnVsbHNpZ25lZCdcbiAgICApIHtcbiAgICAgIGlmICh0eEZvcm1hdCA9PT0gJ3BzYnQnKSB7XG4gICAgICAgIHRlc3RQc2J0VmFsaWRTaWduYXR1cmVzKHR4LCBzaWduZWRCeSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVuc3BlbnRzID0gZ2V0VW5zcGVudHMoKTtcbiAgICAgIGNvbnN0IHByZXZPdXRwdXRzID0gdW5zcGVudHMubWFwKFxuICAgICAgICAodSk6IHV0eG9saWIuVHhPdXRwdXQ8VE51bWJlcj4gPT4gKHtcbiAgICAgICAgICBzY3JpcHQ6IEJ1ZmZlci5mcm9tKGNvaW4uYWRkcmVzc0NvZGVjLmRlY29kZSh1LmFkZHJlc3MpKSxcbiAgICAgICAgICB2YWx1ZTogdS52YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXI8VE51bWJlcj4oXG4gICAgICAgIEJ1ZmZlci5mcm9tKHR4LnR4SGV4LCAnaGV4JyksXG4gICAgICAgIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLFxuICAgICAgICB7IGFtb3VudFR5cGUgfVxuICAgICAgKTtcbiAgICAgIHRyYW5zYWN0aW9uLmlucy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGlucHV0U2NyaXB0c1tpbmRleF0gPT09ICdwMnNoUDJwaycpIHtcbiAgICAgICAgICBhc3NlcnQub2soY29pbi5pc0JpdEdvVGFpbnRlZFVuc3BlbnQodW5zcGVudHNbaW5kZXhdKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2luZGV4XSBhcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+O1xuICAgICAgICBjb25zdCBwdWJrZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXM7XG5cbiAgICAgICAgcHVia2V5cy5mb3JFYWNoKChwaywgcGtJbmRleCkgPT4ge1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgICAgIHV0eG9saWIuYml0Z28udmVyaWZ5U2lnbmF0dXJlPFROdW1iZXI+KFxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHByZXZPdXRwdXRzW2luZGV4XS52YWx1ZSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmxpY0tleTogcGssXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHByZXZPdXRwdXRzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc2lnbmVkQnkuaW5jbHVkZXMod2FsbGV0S2V5cy50cmlwbGVbcGtJbmRleF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB0ZXN0RXhwbGFpblR4KFxuICAgICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgICB0eEhleDogc3RyaW5nLFxuICAgICAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgICAgIHB1YnM6IFRyaXBsZTxzdHJpbmc+IHwgdW5kZWZpbmVkXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICAgICAgdHhIZXgsXG4gICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgIHVuc3BlbnRzLFxuICAgICAgICB9LFxuICAgICAgICBwdWJzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUHJvcGVydGllcyA9IFsnaWQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRBbW91bnQnXTtcblxuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGV4cGVjdGVkUHJvcGVydGllcykge1xuICAgICAgICBhc3NlcnQub2socHJvcCBpbiBleHBsYW5hdGlvbiwgYGV4cGVjdGVkIGV4cGxhbmF0aW9uIHRvIGhhdmUgcHJvcGVydHkgJyR7cHJvcH0nYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkU2lnbmF0dXJlQ291bnQgPVxuICAgICAgICBzdGFnZU5hbWUgPT09ICdwcmVidWlsZCcgfHwgcHVicyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBzdGFnZU5hbWUuc3RhcnRzV2l0aCgnaGFsZlNpZ25lZCcpXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiBzdGFnZU5hbWUuc3RhcnRzV2l0aCgnZnVsbFNpZ25lZCcpXG4gICAgICAgICAgPyAyXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICgnaW5wdXRTaWduYXR1cmVzJyBpbiBleHBsYW5hdGlvbikge1xuICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgICAgIGV4cGxhbmF0aW9uLmlucHV0U2lnbmF0dXJlcyxcbiAgICAgICAgICAvLyBGSVhNRShCRy0zNTE1NCk6IGltcGxlbWVudCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZvciByZXBsYXkgcHJvdGVjdGlvbiBpbnB1dHNcbiAgICAgICAgICBpbnB1dFNjcmlwdHMubWFwKCh0eXBlKSA9PiAodHlwZSA9PT0gJ3Ayc2hQMnBrJyA/IDAgOiBleHBlY3RlZFNpZ25hdHVyZUNvdW50KSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICgnc2lnbmF0dXJlcycgaW4gZXhwbGFuYXRpb24pIHtcbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChleHBsYW5hdGlvbi5zaWduYXR1cmVzLCBleHBlY3RlZFNpZ25hdHVyZUNvdW50KTtcbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VBbW91bnQsICcwJyk7IC8vIG5vIGNoYW5nZSBhZGRyZXNzZXMgZ2l2ZW5cbiAgICAgIH1cbiAgICAgIGxldCBleHBlY3RlZE91dHB1dEFtb3VudCA9XG4gICAgICAgIEJpZ0ludCgodHhGb3JtYXQgPT09ICdwc2J0JyA/IGdldFVuc3BlbnRzRm9yUHNidCgpIDogZ2V0VW5zcGVudHMoKSkubGVuZ3RoKSAqIEJpZ0ludCh2YWx1ZSk7XG4gICAgICBpbnB1dFNjcmlwdHMuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICAgIC8vIHJlcGxheVByb3RlY3Rpb24gdW5zcGVudHMgaGF2ZSB2YWx1ZSAxMDAwXG4gICAgICAgICAgZXhwZWN0ZWRPdXRwdXRBbW91bnQgLT0gQmlnSW50KHZhbHVlKTtcbiAgICAgICAgICBleHBlY3RlZE91dHB1dEFtb3VudCArPSBCaWdJbnQoMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZXhwZWN0ZWRPdXRwdXRBbW91bnQgLT0gQmlnSW50KDEwMDApOyAvLyBmZWUgb2YgMTAwMFxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsIGV4cGVjdGVkT3V0cHV0QW1vdW50LnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGl0KCdoYXZlIHZhbGlkIHNpZ25hdHVyZSBmb3IgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuaGFsZlNpZ25lZFVzZXJCYWNrdXApIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5oYWxmU2lnbmVkVXNlckJhY2t1cCwgW3dhbGxldEtleXMudXNlcl0sICdoYWxmc2lnbmVkJyk7XG4gICAgICB9XG4gICAgICB0ZXN0VmFsaWRTaWduYXR1cmVzKHRyYW5zYWN0aW9uU3RhZ2VzLmhhbGZTaWduZWRVc2VyQml0R28sIFt3YWxsZXRLZXlzLnVzZXJdLCAnaGFsZnNpZ25lZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhdmUgdmFsaWQgc2lnbmF0dXJlcyBmb3IgZnVsbC1zaWduZWQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWZ1bGxTaWduKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJhY2t1cCkge1xuICAgICAgICB0ZXN0VmFsaWRTaWduYXR1cmVzKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQmFja3VwLCBbd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJhY2t1cF0sICdmdWxsc2lnbmVkJyk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuZnVsbFNpZ25lZFVzZXJCaXRHbykge1xuICAgICAgICB0ZXN0VmFsaWRTaWduYXR1cmVzKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQml0R28sIFt3YWxsZXRLZXlzLnVzZXIsIHdhbGxldEtleXMuYml0Z29dLCAnZnVsbHNpZ25lZCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ2hhdmUgY29ycmVjdCByZXN1bHRzIGZvciBleHBsYWluVHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtzdGFnZU5hbWUsIHN0YWdlVHhdIG9mIE9iamVjdC5lbnRyaWVzKHRyYW5zYWN0aW9uU3RhZ2VzKSkge1xuICAgICAgICBpZiAoIXN0YWdlVHgpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR4SGV4ID1cbiAgICAgICAgICBzdGFnZVR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8fCBzdGFnZVR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25cbiAgICAgICAgICAgID8gc3RhZ2VUeC50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgICAgOiBzdGFnZVR4IGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0XG4gICAgICAgICAgICA/IEJ1ZmZlci5mcm9tKHN0YWdlVHguc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgICAgOiBzdGFnZVR4LnR4SGV4O1xuXG4gICAgICAgIGNvbnN0IHB1YnMgPSB3YWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgICAgY29uc3QgdW5zcGVudHMgPVxuICAgICAgICAgIHR4Rm9ybWF0ID09PSAncHNidCdcbiAgICAgICAgICAgID8gZ2V0VW5zcGVudHNGb3JQc2J0KCkubWFwKCh1KSA9PiAoeyAuLi51LCB2YWx1ZTogYml0Z28udG9UTnVtYmVyKHUudmFsdWUsIGFtb3VudFR5cGUpIGFzIFROdW1iZXIgfSkpXG4gICAgICAgICAgICA6IGdldFVuc3BlbnRzKCk7XG4gICAgICAgIGF3YWl0IHRlc3RFeHBsYWluVHgoc3RhZ2VOYW1lLCB0eEhleCwgdW5zcGVudHMsIHB1YnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVuVGVzdEZvckNvaW4oY29pbjogQWJzdHJhY3RVdHhvQ29pbikge1xuICBydW4oY29pbiwgZ2V0U2NyaXB0VHlwZXMoY29pbiwgJ3BzYnQnKSwgJ3BzYnQnKTtcbn1cblxuZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIFN1aXRlJywgZnVuY3Rpb24gKCkge1xuICBnZXRNaW5VdHhvQ29pbnMoKS5mb3JFYWNoKChjb2luKSA9PiB7XG4gICAgZGVzY3JpYmUoYCR7Y29pbi5nZXRDaGFpbigpfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJ1blRlc3RGb3JDb2luKGNvaW4pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -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,14 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import { fixedScriptWallet, type CoinName } from '@bitgo/wasm-utxo';
|
|
3
|
+
import { type UtxoCoinName } from '../../../src/names';
|
|
4
|
+
type UtxolibRootWalletKeys = utxolib.bitgo.RootWalletKeys;
|
|
5
|
+
type WasmRootWalletKeys = fixedScriptWallet.RootWalletKeys;
|
|
6
|
+
type RootWalletKeys = UtxolibRootWalletKeys | WasmRootWalletKeys;
|
|
7
|
+
/**
|
|
8
|
+
* Generate a wallet address from RootWalletKeys.
|
|
9
|
+
* Supports both utxolib and wasm-utxo RootWalletKeys.
|
|
10
|
+
* Utxolib keys are converted to wasm-utxo keys for address generation.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getWalletAddress(coinName: CoinName | UtxoCoinName, walletKeys: RootWalletKeys, chain?: 0 | 1 | 10 | 11 | 20 | 21 | 30 | 31 | 40 | 41 | 360 | 361, index?: number): string;
|
|
13
|
+
export {};
|
|
14
|
+
//# 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;AAEpE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG3E,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,GAAG,YAAY,EACjC,UAAU,EAAE,cAAc,EAC1B,KAAK,4DAAe,EACpB,KAAK,SAAI,GACR,MAAM,CAER"}
|