@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,470 @@
|
|
|
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
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const sinon = __importStar(require("sinon"));
|
|
38
|
+
const nock = require("nock");
|
|
39
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
40
|
+
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
41
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
42
|
+
const util_1 = require("../../util");
|
|
43
|
+
const keychains_1 = require("../../util/keychains");
|
|
44
|
+
// ZIP-316 testnet vectors (testnetWallet from the wasm-utxo unified_address fixtures).
|
|
45
|
+
const TESTNET_UNIFIED = 'utest1w5m0qcnp8egl8qa296n70n8nvj0tqnzk90p7f48v7mjhhdrdqs8vgqydslg5plmzefawefnpmgmlm6hcy38m972erwxs04s02cq2prhguz8kqly75m6zjy56m08d5jnycgtpqtjeprte576gkmrxyszepgx76yzuwhh7m4lfz9jaq7unjk0x5ant46juxz73hsc6q4v3dqtzww00vps';
|
|
46
|
+
const TESTNET_TRANSPARENT_ADDRESS = 'tmM4DvLVJKXZt5ydn1tqYTHvahpKSwgjuRk';
|
|
47
|
+
/**
|
|
48
|
+
* Exercises every client-side flow that runs BEFORE verifyTransaction/signTransaction on a
|
|
49
|
+
* shielded (v6 Ironwood) prebuild: prebuild post-processing, explanation, and recipient
|
|
50
|
+
* validation. Each of them must decode the v6 PSBT — via `Zec.decodeTransaction` ->
|
|
51
|
+
* `ZcashPsbt.fromBytes`, which auto-detects the transaction version — and handle the shielded
|
|
52
|
+
* recipient without error.
|
|
53
|
+
*/
|
|
54
|
+
const IRONWOOD_RECEIVER = Buffer.from('d632c28aa0831d671be17709a42c9627e2eb687a1b2a55768ea470c9bae7499cd0bd3d0eb0484e307236b5', 'hex');
|
|
55
|
+
let unifiedAddress;
|
|
56
|
+
let walletKeys;
|
|
57
|
+
before(function () {
|
|
58
|
+
unifiedAddress = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.encodeOrchardReceiver(new Uint8Array(IRONWOOD_RECEIVER), 'tzec');
|
|
59
|
+
walletKeys = (0, keychains_1.getDefaultWasmWalletKeys)().walletKeys;
|
|
60
|
+
});
|
|
61
|
+
function buildShieldedV6PrebuildHex() {
|
|
62
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.createEmpty('tzec', walletKeys, { blockHeight: 4200000 });
|
|
63
|
+
psbt.addWalletInput({ txid: '11'.repeat(32), vout: 0, value: 100000n }, walletKeys, {
|
|
64
|
+
scriptId: { chain: 0, index: 0 },
|
|
65
|
+
});
|
|
66
|
+
psbt.addWalletOutput(walletKeys, { chain: 1, index: 0, value: 90000n });
|
|
67
|
+
psbt.addShieldedOutputs([{ recipient: new Uint8Array(IRONWOOD_RECEIVER), amount: 5000n, unifiedAddress }], new Uint8Array(32));
|
|
68
|
+
return Buffer.from(psbt.serialize()).toString('hex');
|
|
69
|
+
}
|
|
70
|
+
function mutateSerializedUnifiedAddress(psbtHex, unifiedAddress) {
|
|
71
|
+
const bytes = Buffer.from(psbtHex, 'hex');
|
|
72
|
+
const metadata = Buffer.from(unifiedAddress, 'utf8');
|
|
73
|
+
const offset = bytes.indexOf(metadata);
|
|
74
|
+
assert.notStrictEqual(offset, -1, 'Unified Address metadata must be present in the serialized PSBT');
|
|
75
|
+
// Change only the metadata bytes. The resulting address is intentionally invalid, which
|
|
76
|
+
// verifies that deserialization does not expose attacker-controlled proprietary metadata.
|
|
77
|
+
bytes[offset] = bytes[offset] === 0x75 ? 0x76 : 0x75;
|
|
78
|
+
return bytes.toString('hex');
|
|
79
|
+
}
|
|
80
|
+
describe('Zec shielded pre-verify flows (v6 Ironwood PSBT)', function () {
|
|
81
|
+
const zec = (0, util_1.getUtxoCoin)('tzec');
|
|
82
|
+
const bgUrl = sdk_core_1.common.Environments[util_1.defaultBitGo.getEnv()].uri;
|
|
83
|
+
const keyDocumentObjects = util_1.keychainsBase58.map((keychain, keyIdx) => {
|
|
84
|
+
return {
|
|
85
|
+
id: (0, sdk_test_1.getSeed)(keychain.pub).toString('hex'),
|
|
86
|
+
pub: keychain.pub,
|
|
87
|
+
source: ['user', 'backup', 'bitgo'][keyIdx],
|
|
88
|
+
coinSpecific: {},
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
afterEach(function () {
|
|
92
|
+
nock.cleanAll();
|
|
93
|
+
});
|
|
94
|
+
it('sendMany recipient validation accepts the unified address', function () {
|
|
95
|
+
zec.checkRecipient({ address: unifiedAddress, amount: '5000' });
|
|
96
|
+
});
|
|
97
|
+
it('postProcessPrebuild decodes the v6 psbt and re-encodes it unchanged', async function () {
|
|
98
|
+
const prebuildHex = buildShieldedV6PrebuildHex();
|
|
99
|
+
nock(bgUrl).get('/api/v2/tzec/public/block/latest').reply(200, { height: 4200000 });
|
|
100
|
+
const prebuild = await zec.postProcessPrebuild({ txHex: prebuildHex, txInfo: {} });
|
|
101
|
+
assert.match(prebuild.txHex, /^70736274/); // PSBT magic preserved
|
|
102
|
+
const decoded = zec.decodeTransaction(prebuild.txHex);
|
|
103
|
+
assert.ok(decoded instanceof wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt);
|
|
104
|
+
});
|
|
105
|
+
it('explainTransaction decodes the v6 psbt and resolves the shielded recipient', async function () {
|
|
106
|
+
const explained = await zec.explainTransaction({
|
|
107
|
+
txHex: buildShieldedV6PrebuildHex(),
|
|
108
|
+
pubs: [keyDocumentObjects[0].pub, keyDocumentObjects[1].pub, keyDocumentObjects[2].pub],
|
|
109
|
+
});
|
|
110
|
+
assert.strictEqual(explained.outputs.length, 1);
|
|
111
|
+
assert.strictEqual(explained.outputs[0].address, unifiedAddress);
|
|
112
|
+
assert.strictEqual(explained.outputs[0].amount.toString(), '5000');
|
|
113
|
+
assert.strictEqual(explained.changeOutputs.length, 1);
|
|
114
|
+
});
|
|
115
|
+
it('rejects a v6 PSBT whose preserved UA metadata was mutated after serialization', async function () {
|
|
116
|
+
const mutatedHex = mutateSerializedUnifiedAddress(buildShieldedV6PrebuildHex(), unifiedAddress);
|
|
117
|
+
await assert.rejects(zec.explainTransaction({
|
|
118
|
+
txHex: mutatedHex,
|
|
119
|
+
pubs: [keyDocumentObjects[0].pub, keyDocumentObjects[1].pub, keyDocumentObjects[2].pub],
|
|
120
|
+
}), /does not match its raw script/);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
/**
|
|
124
|
+
* `parseTransaction` must take `unifiedRecipientPreference` into account when decoding a
|
|
125
|
+
* prebuild: a shielded recipient resolves to its 43-byte Orchard receiver, which only matches
|
|
126
|
+
* the PSBT's shielded output when the decode uses the 'shielded' preference. The preference is
|
|
127
|
+
* the caller's explicit `unifiedRecipientPreference`, or — when absent — inferred from the
|
|
128
|
+
* recipients themselves.
|
|
129
|
+
*/
|
|
130
|
+
describe('Zec parseTransaction unifiedRecipientPreference (v6 Ironwood PSBT)', function () {
|
|
131
|
+
const tzec = (0, util_1.getUtxoCoin)('tzec');
|
|
132
|
+
function getMockWallet() {
|
|
133
|
+
const mockWallet = sinon.createStubInstance(sdk_core_1.Wallet);
|
|
134
|
+
mockWallet.id.returns('test-wallet-id');
|
|
135
|
+
mockWallet.coin.returns('tzec');
|
|
136
|
+
mockWallet.coinSpecific.returns(undefined);
|
|
137
|
+
return mockWallet;
|
|
138
|
+
}
|
|
139
|
+
function getVerification() {
|
|
140
|
+
const pubs = util_1.keychainsBase58.map((k) => k.pub);
|
|
141
|
+
return {
|
|
142
|
+
disableNetworking: true,
|
|
143
|
+
keychains: {
|
|
144
|
+
user: { id: '0', pub: pubs[0], type: 'independent' },
|
|
145
|
+
backup: { id: '1', pub: pubs[1], type: 'independent' },
|
|
146
|
+
bitgo: { id: '2', pub: pubs[2], type: 'independent' },
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
async function parseShieldedV6Prebuild(txParams, txHex = buildShieldedV6PrebuildHex()) {
|
|
151
|
+
return tzec.parseTransaction({
|
|
152
|
+
wallet: getMockWallet(),
|
|
153
|
+
txParams,
|
|
154
|
+
txPrebuild: { txHex },
|
|
155
|
+
verification: getVerification(),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
it('infers the shielded preference from an Orchard-only Unified Address recipient', async function () {
|
|
159
|
+
const parsed = await parseShieldedV6Prebuild({
|
|
160
|
+
recipients: [{ address: unifiedAddress, amount: '5000' }],
|
|
161
|
+
});
|
|
162
|
+
const externalOutputs = parsed.outputs.filter((o) => o.external);
|
|
163
|
+
assert.strictEqual(externalOutputs.length, 1);
|
|
164
|
+
assert.strictEqual(externalOutputs[0].address, unifiedAddress);
|
|
165
|
+
});
|
|
166
|
+
it('rejects a v6 PSBT with mutated UA metadata during parseTransaction', async function () {
|
|
167
|
+
const mutatedHex = mutateSerializedUnifiedAddress(buildShieldedV6PrebuildHex(), unifiedAddress);
|
|
168
|
+
await assert.rejects(parseShieldedV6Prebuild({ recipients: [{ address: unifiedAddress, amount: '5000' }] }, mutatedHex), /does not match its raw script/);
|
|
169
|
+
});
|
|
170
|
+
it('honors an explicit shielded preference', async function () {
|
|
171
|
+
const parsed = await parseShieldedV6Prebuild({
|
|
172
|
+
recipients: [{ address: unifiedAddress, amount: '5000' }],
|
|
173
|
+
unifiedRecipientPreference: 'shielded',
|
|
174
|
+
});
|
|
175
|
+
const externalOutputs = parsed.outputs.filter((o) => o.external);
|
|
176
|
+
assert.strictEqual(externalOutputs.length, 1);
|
|
177
|
+
assert.strictEqual(externalOutputs[0].address, unifiedAddress);
|
|
178
|
+
});
|
|
179
|
+
it('rejects a transparent resolution of a shielded recipient (intent mismatch)', async function () {
|
|
180
|
+
// Forcing the 'transparent' preference resolves the recipient's script — but an
|
|
181
|
+
// Orchard-only UA has no transparent receiver, so the decode must fail rather than
|
|
182
|
+
// silently mismatch.
|
|
183
|
+
await assert.rejects(parseShieldedV6Prebuild({
|
|
184
|
+
recipients: [{ address: unifiedAddress, amount: '5000' }],
|
|
185
|
+
unifiedRecipientPreference: 'transparent',
|
|
186
|
+
}));
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe('Zec resolveRecipientsFromPsbt (decode + recipient resolution)', function () {
|
|
190
|
+
const tzec = (0, util_1.getUtxoCoin)('tzec');
|
|
191
|
+
const { walletKeys } = (0, keychains_1.getDefaultWasmWalletKeys)();
|
|
192
|
+
const IRONWOOD_HEIGHT = 4200000; // after the NU6.3 testnet activation (4134000)
|
|
193
|
+
function buildShieldedV6Psbt(unifiedAddress = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.encodeOrchardReceiver(new Uint8Array(IRONWOOD_RECEIVER), 'tzec')) {
|
|
194
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.createEmpty('tzec', walletKeys, {
|
|
195
|
+
blockHeight: IRONWOOD_HEIGHT,
|
|
196
|
+
});
|
|
197
|
+
psbt.addWalletInput({ txid: '11'.repeat(32), vout: 0, value: 100000n }, walletKeys, {
|
|
198
|
+
scriptId: { chain: 0, index: 0 },
|
|
199
|
+
});
|
|
200
|
+
psbt.addWalletOutput(walletKeys, { chain: 1, index: 0, value: 90000n });
|
|
201
|
+
psbt.addShieldedOutputs([{ recipient: new Uint8Array(IRONWOOD_RECEIVER), amount: 5000n, unifiedAddress }], new Uint8Array(32) // all-zero anchor, as in the utxo-core shielded build tests
|
|
202
|
+
);
|
|
203
|
+
return psbt;
|
|
204
|
+
}
|
|
205
|
+
function buildTransparentV4Psbt(unifiedAddress) {
|
|
206
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.ZcashBitGoPsbt.createEmpty('tzec', walletKeys, { blockHeight: 3146400 });
|
|
207
|
+
psbt.addWalletInput({ txid: '22'.repeat(32), vout: 0, value: 200000n }, walletKeys, {
|
|
208
|
+
scriptId: { chain: 0, index: 1 },
|
|
209
|
+
});
|
|
210
|
+
psbt.addWalletOutput(walletKeys, { chain: 1, index: 0, value: 100000n });
|
|
211
|
+
const externalScript = tzec.addressCodec.decode(TESTNET_TRANSPARENT_ADDRESS);
|
|
212
|
+
psbt.addTransparentOutput(externalScript, 12345n, unifiedAddress);
|
|
213
|
+
return psbt;
|
|
214
|
+
}
|
|
215
|
+
/** Decode a UA back to its receivers and assert they match the testnet fixture. */
|
|
216
|
+
function assertDecodesBackToFixtureRecipients(unifiedAddress) {
|
|
217
|
+
const parsed = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.parse(unifiedAddress, 'tzec');
|
|
218
|
+
assert.strictEqual(parsed.hasOrchardReceiver, true);
|
|
219
|
+
assert.ok(parsed.orchardReceiver);
|
|
220
|
+
assert.strictEqual(Buffer.from(parsed.orchardReceiver).toString('hex'), IRONWOOD_RECEIVER.toString('hex'));
|
|
221
|
+
assert.strictEqual(parsed.hasTransparentReceiver, true);
|
|
222
|
+
assert.ok(parsed.transparentScript);
|
|
223
|
+
assert.strictEqual(Buffer.from(parsed.transparentScript).toString('hex'), Buffer.from(tzec.addressCodec.decode(TESTNET_TRANSPARENT_ADDRESS)).toString('hex'));
|
|
224
|
+
}
|
|
225
|
+
it('rejects a v4 PSBT whose preserved UA metadata was mutated after serialization', function () {
|
|
226
|
+
const mutatedHex = mutateSerializedUnifiedAddress(Buffer.from(buildTransparentV4Psbt(TESTNET_UNIFIED).serialize()).toString('hex'), TESTNET_UNIFIED);
|
|
227
|
+
assert.throws(() => tzec.resolveRecipientsFromPsbt(mutatedHex, walletKeys), /does not match its raw recipient/);
|
|
228
|
+
});
|
|
229
|
+
it('explainTransaction rejects a v4 PSBT whose preserved UA metadata was mutated', async function () {
|
|
230
|
+
const mutatedHex = mutateSerializedUnifiedAddress(Buffer.from(buildTransparentV4Psbt(TESTNET_UNIFIED).serialize()).toString('hex'), TESTNET_UNIFIED);
|
|
231
|
+
await assert.rejects(tzec.explainTransaction({
|
|
232
|
+
txHex: mutatedHex,
|
|
233
|
+
pubs: util_1.keychainsBase58.map((keychain) => keychain.pub),
|
|
234
|
+
}), /does not match its raw script/);
|
|
235
|
+
});
|
|
236
|
+
it('resolves a shielded v6 (Ironwood) output to its Orchard Unified Address recipient', function () {
|
|
237
|
+
const recipients = tzec.resolveRecipientsFromPsbt(Buffer.from(buildShieldedV6Psbt().serialize()), walletKeys);
|
|
238
|
+
assert.strictEqual(recipients.length, 1);
|
|
239
|
+
const recipient = recipients[0];
|
|
240
|
+
assert.strictEqual(recipient.destination.kind, 'zcashShielded');
|
|
241
|
+
assert.strictEqual(recipient.amount, 5000n);
|
|
242
|
+
assert.ok(recipient.address.startsWith('utest1'));
|
|
243
|
+
assert.strictEqual(recipient.address, recipient.destination.unifiedAddress);
|
|
244
|
+
assert.strictEqual(Buffer.from(recipient.script).toString('hex'), IRONWOOD_RECEIVER.toString('hex'));
|
|
245
|
+
});
|
|
246
|
+
it('rejects a v6 PSBT whose preserved UA metadata was mutated after serialization', function () {
|
|
247
|
+
const mutatedHex = mutateSerializedUnifiedAddress(Buffer.from(buildShieldedV6Psbt(TESTNET_UNIFIED).serialize()).toString('hex'), TESTNET_UNIFIED);
|
|
248
|
+
assert.throws(() => tzec.resolveRecipientsFromPsbt(mutatedHex, walletKeys), /does not match its raw recipient/);
|
|
249
|
+
});
|
|
250
|
+
it('explainTransaction rejects a v6 PSBT whose preserved UA metadata was mutated', async function () {
|
|
251
|
+
const mutatedHex = mutateSerializedUnifiedAddress(Buffer.from(buildShieldedV6Psbt(TESTNET_UNIFIED).serialize()).toString('hex'), TESTNET_UNIFIED);
|
|
252
|
+
await assert.rejects(tzec.explainTransaction({
|
|
253
|
+
txHex: mutatedHex,
|
|
254
|
+
pubs: util_1.keychainsBase58.map((keychain) => keychain.pub),
|
|
255
|
+
}), /does not match its raw script/);
|
|
256
|
+
});
|
|
257
|
+
it('resolves transparent external outputs and excludes change', function () {
|
|
258
|
+
const recipients = tzec.resolveRecipientsFromPsbt(Buffer.from(buildTransparentV4Psbt().serialize()), walletKeys);
|
|
259
|
+
assert.strictEqual(recipients.length, 1);
|
|
260
|
+
const recipient = recipients[0];
|
|
261
|
+
assert.strictEqual(recipient.destination.kind, 'transparent');
|
|
262
|
+
assert.strictEqual(recipient.address, TESTNET_TRANSPARENT_ADDRESS);
|
|
263
|
+
assert.strictEqual(recipient.amount, 12345n);
|
|
264
|
+
});
|
|
265
|
+
it('reports the original multi-receiver UA for a shielded output and decodes it back', function () {
|
|
266
|
+
const recipients = tzec.resolveRecipientsFromPsbt(Buffer.from(buildShieldedV6Psbt(TESTNET_UNIFIED).serialize()), walletKeys);
|
|
267
|
+
assert.strictEqual(recipients.length, 1);
|
|
268
|
+
const recipient = recipients[0];
|
|
269
|
+
assert.strictEqual(recipient.destination.kind, 'zcashShielded');
|
|
270
|
+
assert.strictEqual(recipient.address, TESTNET_UNIFIED);
|
|
271
|
+
assert.strictEqual(recipient.unifiedAddress, TESTNET_UNIFIED);
|
|
272
|
+
assert.strictEqual(recipient.destination.unifiedAddress, TESTNET_UNIFIED);
|
|
273
|
+
assert.strictEqual(Buffer.from(recipient.script).toString('hex'), IRONWOOD_RECEIVER.toString('hex'));
|
|
274
|
+
assertDecodesBackToFixtureRecipients(recipient.unifiedAddress);
|
|
275
|
+
});
|
|
276
|
+
it('reports the original multi-receiver UA for a transparent v4 output and decodes it back', function () {
|
|
277
|
+
const recipients = tzec.resolveRecipientsFromPsbt(Buffer.from(buildTransparentV4Psbt(TESTNET_UNIFIED).serialize()), walletKeys);
|
|
278
|
+
assert.strictEqual(recipients.length, 1);
|
|
279
|
+
const recipient = recipients[0];
|
|
280
|
+
assert.strictEqual(recipient.destination.kind, 'zcashUnifiedTransparent');
|
|
281
|
+
assert.strictEqual(recipient.address, TESTNET_UNIFIED);
|
|
282
|
+
assert.strictEqual(recipient.unifiedAddress, TESTNET_UNIFIED);
|
|
283
|
+
assert.strictEqual(recipient.destination.unifiedAddress, TESTNET_UNIFIED);
|
|
284
|
+
assertDecodesBackToFixtureRecipients(recipient.unifiedAddress);
|
|
285
|
+
});
|
|
286
|
+
it('resolves recipients from a hex PSBT string', function () {
|
|
287
|
+
const hex = Buffer.from(buildShieldedV6Psbt().serialize()).toString('hex');
|
|
288
|
+
const recipients = tzec.resolveRecipientsFromPsbt(hex, walletKeys);
|
|
289
|
+
assert.strictEqual(recipients.length, 1);
|
|
290
|
+
assert.strictEqual(recipients[0].destination.kind, 'zcashShielded');
|
|
291
|
+
});
|
|
292
|
+
it('throws for a non-Zcash PSBT', function () {
|
|
293
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, {});
|
|
294
|
+
psbt.addWalletInput({ txid: '33'.repeat(32), vout: 0, value: 1000n }, walletKeys, {
|
|
295
|
+
scriptId: { chain: 0, index: 0 },
|
|
296
|
+
});
|
|
297
|
+
// Zec.decodeTransaction hands the btc PSBT to ZcashPsbt.fromBytes, which rejects it for
|
|
298
|
+
// its missing Zcash consensus branch ID before the Zcash-type guard is ever reached.
|
|
299
|
+
assert.throws(() => tzec.resolveRecipientsFromPsbt(Buffer.from(psbt.serialize()), walletKeys));
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
describe('Zec getExtraPrebuildParams (unifiedRecipientPreference forwarding)', function () {
|
|
303
|
+
const zec = (0, util_1.getUtxoCoin)('zec');
|
|
304
|
+
function mockWallet(coin = zec) {
|
|
305
|
+
return new sdk_core_1.Wallet(util_1.defaultBitGo, coin, { id: '5b34252f1bf349930e34020a', coin: coin.getChain(), type: 'hot' });
|
|
306
|
+
}
|
|
307
|
+
it('forwards unifiedRecipientPreference when present', async function () {
|
|
308
|
+
const wallet = mockWallet();
|
|
309
|
+
const result = await zec.getExtraPrebuildParams({
|
|
310
|
+
wallet,
|
|
311
|
+
unifiedRecipientPreference: 'shielded',
|
|
312
|
+
});
|
|
313
|
+
assert.strictEqual(result.unifiedRecipientPreference, 'shielded');
|
|
314
|
+
});
|
|
315
|
+
it('does not set unifiedRecipientPreference when absent', async function () {
|
|
316
|
+
const wallet = mockWallet();
|
|
317
|
+
const result = await zec.getExtraPrebuildParams({ wallet });
|
|
318
|
+
assert.strictEqual('unifiedRecipientPreference' in result, false);
|
|
319
|
+
});
|
|
320
|
+
it('still returns the standard extra prebuild params (txFormat) unchanged', async function () {
|
|
321
|
+
const wallet = mockWallet();
|
|
322
|
+
const result = await zec.getExtraPrebuildParams({
|
|
323
|
+
wallet,
|
|
324
|
+
unifiedRecipientPreference: 'shielded',
|
|
325
|
+
});
|
|
326
|
+
assert.strictEqual(result.txFormat, 'psbt-lite');
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
describe('Zec signTransaction (v6 Ironwood transparent-input signing)', function () {
|
|
330
|
+
const zec = (0, util_1.getUtxoCoin)('tzec');
|
|
331
|
+
const { xpubs } = (0, keychains_1.getDefaultWasmWalletKeys)();
|
|
332
|
+
const [userKeychain, backupKeychain, bitgoKeychain] = util_1.keychainsBase58;
|
|
333
|
+
const pubs = [userKeychain.pub, backupKeychain.pub, bitgoKeychain.pub];
|
|
334
|
+
it('signs the transparent inputs with the user key and finalizes the shielded out_ciphertext (ovk via ECDH)', async function () {
|
|
335
|
+
const signed = await zec.signTransaction({
|
|
336
|
+
txPrebuild: { txHex: buildShieldedV6PrebuildHex() },
|
|
337
|
+
prv: userKeychain.prv,
|
|
338
|
+
pubs,
|
|
339
|
+
});
|
|
340
|
+
assert.ok('txHex' in signed);
|
|
341
|
+
const { txHex } = signed;
|
|
342
|
+
// The half-signed result is the v6 PSBT with the user's ECDSA signatures over the
|
|
343
|
+
// ZIP-244 transparent sighash. Deriving the ovk (ECDH of the BitGo root pubkey and the
|
|
344
|
+
// user root key) and finalizing out_ciphertext happens inside sign(), before any
|
|
345
|
+
// sighash is computed — a failing ovk step aborts the whole round.
|
|
346
|
+
const psbt = zec.decodeTransaction(Buffer.from(txHex, 'hex'));
|
|
347
|
+
assert.ok(psbt instanceof wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt);
|
|
348
|
+
assert.strictEqual(psbt.verifySignature(0, xpubs[0]), true);
|
|
349
|
+
assert.strictEqual(psbt.verifySignature(0, xpubs[2]), false);
|
|
350
|
+
});
|
|
351
|
+
it('out_ciphertext survives the serialize round-trip: the BitGo countersigning round succeeds on it', async function () {
|
|
352
|
+
const userRound = await zec.signTransaction({
|
|
353
|
+
txPrebuild: { txHex: buildShieldedV6PrebuildHex() },
|
|
354
|
+
prv: userKeychain.prv,
|
|
355
|
+
pubs,
|
|
356
|
+
});
|
|
357
|
+
assert.ok('txHex' in userRound);
|
|
358
|
+
const bitgoRound = await zec.signTransaction({
|
|
359
|
+
txPrebuild: { txHex: userRound.txHex },
|
|
360
|
+
prv: bitgoKeychain.prv,
|
|
361
|
+
pubs,
|
|
362
|
+
});
|
|
363
|
+
assert.ok('txHex' in bitgoRound);
|
|
364
|
+
const psbt = zec.decodeTransaction(Buffer.from(bitgoRound.txHex, 'hex'));
|
|
365
|
+
assert.ok(psbt instanceof wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt);
|
|
366
|
+
// Fully signed transparent inputs: both the user and BitGo signatures verify against
|
|
367
|
+
// the v6 (ZIP-244) sighash — the proof service takes it from here via combineProof.
|
|
368
|
+
assert.strictEqual(psbt.verifySignature(0, xpubs[0]), true);
|
|
369
|
+
assert.strictEqual(psbt.verifySignature(0, xpubs[2]), true);
|
|
370
|
+
assert.strictEqual(psbt.verifySignature(0, xpubs[1]), false);
|
|
371
|
+
});
|
|
372
|
+
it('rejects a first signing round opened by a non-user key', async function () {
|
|
373
|
+
// The wasm derives the ovk from the first-round signer's key: a round opened by the
|
|
374
|
+
// backup or BitGo key would produce an out_ciphertext neither the user nor the server
|
|
375
|
+
// can re-derive, leaving the shielded output unrecoverable.
|
|
376
|
+
await assert.rejects(zec.signTransaction({
|
|
377
|
+
txPrebuild: { txHex: buildShieldedV6PrebuildHex() },
|
|
378
|
+
prv: bitgoKeychain.prv,
|
|
379
|
+
pubs,
|
|
380
|
+
}), /user/);
|
|
381
|
+
});
|
|
382
|
+
it('requires rootWalletKeys when signing an Ironwood PSBT', function () {
|
|
383
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(Buffer.from(buildShieldedV6PrebuildHex(), 'hex'), 'tzec');
|
|
384
|
+
const { xprivs } = (0, keychains_1.getDefaultWasmWalletKeys)();
|
|
385
|
+
// Without rootWalletKeys the ovk step cannot run, so sign() throws at runtime rather
|
|
386
|
+
// than silently skipping it — the signing dispatch must always pass rootWalletKeys.
|
|
387
|
+
assert.throws(() => psbt.sign(xprivs[0]));
|
|
388
|
+
});
|
|
389
|
+
it('signs a v4 (Sapling-shaped) psbt through the generic signing path', async function () {
|
|
390
|
+
// The signTransaction override routes only v6 (Ironwood) prebuilds; a v4 prebuild must
|
|
391
|
+
// keep flowing through the generic path unchanged.
|
|
392
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.ZcashBitGoPsbt.createEmpty('tzec', walletKeys, { blockHeight: 3146400 });
|
|
393
|
+
psbt.addWalletInput({ txid: '44'.repeat(32), vout: 0, value: 100000n }, walletKeys, {
|
|
394
|
+
scriptId: { chain: 0, index: 0 },
|
|
395
|
+
});
|
|
396
|
+
psbt.addWalletOutput(walletKeys, { chain: 1, index: 0, value: 90000n });
|
|
397
|
+
const signed = await zec.signTransaction({
|
|
398
|
+
txPrebuild: { txHex: Buffer.from(psbt.serialize()).toString('hex') },
|
|
399
|
+
prv: userKeychain.prv,
|
|
400
|
+
pubs,
|
|
401
|
+
});
|
|
402
|
+
assert.ok('txHex' in signed);
|
|
403
|
+
const decoded = zec.decodeTransaction(Buffer.from(signed.txHex, 'hex'));
|
|
404
|
+
assert.ok(decoded instanceof wasm_utxo_1.fixedScriptWallet.ZcashBitGoPsbt);
|
|
405
|
+
assert.ok(!(decoded instanceof wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt));
|
|
406
|
+
assert.strictEqual(decoded.verifySignature(0, xpubs[0]), true);
|
|
407
|
+
});
|
|
408
|
+
});
|
|
409
|
+
describe('Zec shielded out_ciphertext (ovk derivation)', function () {
|
|
410
|
+
const { xprivs } = (0, keychains_1.getDefaultWasmWalletKeys)();
|
|
411
|
+
function buildPsbt(buildOvk) {
|
|
412
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.createEmpty('tzec', walletKeys, { blockHeight: 4200000 });
|
|
413
|
+
psbt.addWalletInput({ txid: '11'.repeat(32), vout: 0, value: 100000n }, walletKeys, {
|
|
414
|
+
scriptId: { chain: 0, index: 0 },
|
|
415
|
+
});
|
|
416
|
+
psbt.addWalletOutput(walletKeys, { chain: 1, index: 0, value: 90000n });
|
|
417
|
+
psbt.addShieldedOutputs([
|
|
418
|
+
{
|
|
419
|
+
recipient: new Uint8Array(IRONWOOD_RECEIVER),
|
|
420
|
+
amount: 5000n,
|
|
421
|
+
unifiedAddress,
|
|
422
|
+
...(buildOvk ? { ovk: buildOvk } : {}),
|
|
423
|
+
},
|
|
424
|
+
], new Uint8Array(32));
|
|
425
|
+
return psbt;
|
|
426
|
+
}
|
|
427
|
+
function pcztOf(psbt) {
|
|
428
|
+
const pczt = psbt.getPczt();
|
|
429
|
+
assert.ok(pczt, 'expected the orchard PCZT to be present');
|
|
430
|
+
return Buffer.from(pczt);
|
|
431
|
+
}
|
|
432
|
+
it('sign() finalizes out_ciphertext to the same bytes as the explicit client-managed-ovk derivation', function () {
|
|
433
|
+
// out_ciphertext encryption is deterministic given the (identical) orchard action and the
|
|
434
|
+
// ovk, so byte-equality of the PCZT proves sign()'s implicit derivation is exactly the
|
|
435
|
+
// documented one: the ECDH agreement of rootWalletKeys.bitgoKey() and the user root key.
|
|
436
|
+
const bytes = buildPsbt().serialize();
|
|
437
|
+
const autoPsbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(bytes, 'tzec');
|
|
438
|
+
autoPsbt.sign(xprivs[0], walletKeys);
|
|
439
|
+
const manualPsbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(bytes, 'tzec');
|
|
440
|
+
manualPsbt.setShieldedOutCiphertext(0, xprivs[0], walletKeys);
|
|
441
|
+
assert.deepStrictEqual(pcztOf(autoPsbt), pcztOf(manualPsbt));
|
|
442
|
+
});
|
|
443
|
+
it('out_ciphertext differs when encrypted under different ovks', function () {
|
|
444
|
+
// The binding between out_ciphertext and the ovk is real: two builds identical except for
|
|
445
|
+
// the build-time ovk produce different PCZTs, so the equality assertions here are not
|
|
446
|
+
// vacuous (out_ciphertext cannot be a constant).
|
|
447
|
+
assert.notDeepStrictEqual(pcztOf(buildPsbt(new Uint8Array(32).fill(1))), pcztOf(buildPsbt(new Uint8Array(32).fill(2))));
|
|
448
|
+
});
|
|
449
|
+
it('sign() overrides a build-time ovk with the wallet ovk', function () {
|
|
450
|
+
const bytes = buildPsbt(new Uint8Array(32).fill(1)).serialize();
|
|
451
|
+
const builtPsbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(bytes, 'tzec');
|
|
452
|
+
const signedPsbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(bytes, 'tzec');
|
|
453
|
+
signedPsbt.sign(xprivs[0], walletKeys);
|
|
454
|
+
// The first signing round re-encrypts out_ciphertext under the wallet ovk, discarding the
|
|
455
|
+
// build-time one...
|
|
456
|
+
assert.notDeepStrictEqual(pcztOf(signedPsbt), pcztOf(builtPsbt));
|
|
457
|
+
// ...and the result is byte-identical to the explicit wallet-ovk derivation.
|
|
458
|
+
const manualPsbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(bytes, 'tzec');
|
|
459
|
+
manualPsbt.setShieldedOutCiphertext(0, xprivs[0], walletKeys);
|
|
460
|
+
assert.deepStrictEqual(pcztOf(signedPsbt), pcztOf(manualPsbt));
|
|
461
|
+
});
|
|
462
|
+
it('rejects an ovk derived from a non-user key', function () {
|
|
463
|
+
// An ovk from the backup or BitGo key is one neither the user nor the server can
|
|
464
|
+
// reproduce, which would leave the shielded output unrecoverable after broadcast.
|
|
465
|
+
const psbt = buildPsbt();
|
|
466
|
+
assert.throws(() => psbt.setShieldedOutCiphertext(0, xprivs[1], walletKeys));
|
|
467
|
+
assert.throws(() => psbt.setShieldedOutCiphertext(0, xprivs[2], walletKeys));
|
|
468
|
+
});
|
|
469
|
+
});
|
|
470
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpZWxkZWRQcmVidWlsZEFuZFNpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvaW1wbC96ZWMvc2hpZWxkZWRQcmVidWlsZEFuZFNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFFakMsNkNBQStCO0FBQy9CLDZCQUE4QjtBQUM5QixtREFBbUY7QUFDbkYsbURBQStDO0FBQy9DLGdEQUFxRDtBQUVyRCxxQ0FBd0U7QUFDeEUsb0RBQWdFO0FBSWhFLHVGQUF1RjtBQUN2RixNQUFNLGVBQWUsR0FDbkIsMk5BQTJOLENBQUM7QUFDOU4sTUFBTSwyQkFBMkIsR0FBRyxxQ0FBcUMsQ0FBQztBQUUxRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ25DLHdGQUF3RixFQUN4RixLQUFLLENBQ04sQ0FBQztBQUNGLElBQUksY0FBc0IsQ0FBQztBQUMzQixJQUFJLFVBQTRDLENBQUM7QUFFakQsTUFBTSxDQUFDO0lBQ0wsY0FBYyxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUMxRSxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUNqQyxNQUFNLENBQ1AsQ0FBQztJQUNGLFVBQVUsR0FBRyxJQUFBLG9DQUF3QixHQUFFLENBQUMsVUFBVSxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUywwQkFBMEI7SUFDakMsTUFBTSxJQUFJLEdBQUcsNkJBQWlCLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNoSCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVB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RUFBRSxDQUFDLDRDQUE0QyxFQUFFO1FBQy9DLGlGQUFpRjtRQUNqRixrRkFBa0Y7UUFDbEYsTUFBTSxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0IHsgY29tbW9uLCBUcmlwbGUsIFZlcmlmaWNhdGlvbk9wdGlvbnMsIFdhbGxldCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldFNlZWQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBkZWZhdWx0Qml0R28sIGdldFV0eG9Db2luLCBrZXljaGFpbnNCYXNlNTggfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cyB9IGZyb20gJy4uLy4uL3V0aWwva2V5Y2hhaW5zJztcbmltcG9ydCB0eXBlIHsgWmVjIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjJztcbmltcG9ydCB7IFV0eG9XYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvd2FsbGV0JztcblxuLy8gWklQLTMxNiB0ZXN0bmV0IHZlY3RvcnMgKHRlc3RuZXRXYWxsZXQgZnJvbSB0aGUgd2FzbS11dHhvIHVuaWZpZWRfYWRkcmVzcyBmaXh0dXJlcykuXG5jb25zdCBURVNUTkVUX1VOSUZJRUQgPVxuICAndXRlc3QxdzVtMHFjbnA4ZWdsOHFhMjk2bjcwbjhudmowdHFuems5MHA3ZjQ4djdtamhoZHJkcXM4dmdxeWRzbGc1cGxtemVmYXdlZm5wbWdtbG02aGN5MzhtOTcyZXJ3eHMwNHMwMmNxMnByaGd1ejhrcWx5NzVtNnpqeTU2bTA4ZDVqbnljZ3RwcXRqZXBydGU1NzZna21yeHlzemVwZ3g3Nnl6dXdoaDdtNGxmejlqYXE3dW5qazB4NWFudDQ2anV4ejczaHNjNnE0djNkcXR6d3cwMHZwcyc7XG5jb25zdCBURVNUTkVUX1RSQU5TUEFSRU5UX0FERFJFU1MgPSAndG1NNER2TFZKS1hadDV5ZG4xdHFZVEh2YWhwS1N3Z2p1UmsnO1xuXG4vKipcbiAqIEV4ZXJjaXNlcyBldmVyeSBjbGllbnQtc2lkZSBmbG93IHRoYXQgcnVucyBCRUZPUkUgdmVyaWZ5VHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uIG9uIGFcbiAqIHNoaWVsZGVkICh2NiBJcm9ud29vZCkgcHJlYnVpbGQ6IHByZWJ1aWxkIHBvc3QtcHJvY2Vzc2luZywgZXhwbGFuYXRpb24sIGFuZCByZWNpcGllbnRcbiAqIHZhbGlkYXRpb24uIEVhY2ggb2YgdGhlbSBtdXN0IGRlY29kZSB0aGUgdjYgUFNCVCDigJQgdmlhIGBaZWMuZGVjb2RlVHJhbnNhY3Rpb25gIC0+XG4gKiBgWmNhc2hQc2J0LmZyb21CeXRlc2AsIHdoaWNoIGF1dG8tZGV0ZWN0cyB0aGUgdHJhbnNhY3Rpb24gdmVyc2lvbiDigJQgYW5kIGhhbmRsZSB0aGUgc2hpZWxkZWRcbiAqIHJlY2lwaWVudCB3aXRob3V0IGVycm9yLlxuICovXG5jb25zdCBJUk9OV09PRF9SRUNFSVZFUiA9IEJ1ZmZlci5mcm9tKFxuICAnZDYzMmMyOGFhMDgzMWQ2NzFiZTE3NzA5YTQyYzk2MjdlMmViNjg3YTFiMmE1NTc2OGVhNDcwYzliYWU3NDk5Y2QwYmQzZDBlYjA0ODRlMzA3MjM2YjUnLFxuICAnaGV4J1xuKTtcbmxldCB1bmlmaWVkQWRkcmVzczogc3RyaW5nO1xubGV0IHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzO1xuXG5iZWZvcmUoZnVuY3Rpb24gKCkge1xuICB1bmlmaWVkQWRkcmVzcyA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MuZW5jb2RlT3JjaGFyZFJlY2VpdmVyKFxuICAgIG5ldyBVaW50OEFycmF5KElST05XT09EX1JFQ0VJVkVSKSxcbiAgICAndHplYydcbiAgKTtcbiAgd2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cygpLndhbGxldEtleXM7XG59KTtcblxuZnVuY3Rpb24gYnVpbGRTaGllbGRlZFY2UHJlYnVpbGRIZXgoKTogc3RyaW5nIHtcbiAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ3R6ZWMnLCB3YWxsZXRLZXlzLCB7IGJsb2NrSGVpZ2h0OiA0MjAwMDAwIH0pO1xuICBwc2J0LmFkZFdhbGxldElucHV0KHsgdHhpZDogJzExJy5yZXBlYXQoMzIpLCB2b3V0OiAwLCB2YWx1ZTogMTAwMDAwbiB9LCB3YWxsZXRLZXlzLCB7XG4gICAgc2NyaXB0SWQ6IHsgY2hhaW46IDAsIGluZGV4OiAwIH0sXG4gIH0pO1xuICBwc2J0LmFkZFdhbGxldE91dHB1dCh3YWxsZXRLZXlzLCB7IGNoYWluOiAxLCBpbmRleDogMCwgdmFsdWU6IDkwMDAwbiB9KTtcbiAgcHNidC5hZGRTaGllbGRlZE91dHB1dHMoXG4gICAgW3sgcmVjaXBpZW50OiBuZXcgVWludDhBcnJheShJUk9OV09PRF9SRUNFSVZFUiksIGFtb3VudDogNTAwMG4sIHVuaWZpZWRBZGRyZXNzIH1dLFxuICAgIG5ldyBVaW50OEFycmF5KDMyKVxuICApO1xuICByZXR1cm4gQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpO1xufVxuXG5mdW5jdGlvbiBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MocHNidEhleDogc3RyaW5nLCB1bmlmaWVkQWRkcmVzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbShwc2J0SGV4LCAnaGV4Jyk7XG4gIGNvbnN0IG1ldGFkYXRhID0gQnVmZmVyLmZyb20odW5pZmllZEFkZHJlc3MsICd1dGY4Jyk7XG4gIGNvbnN0IG9mZnNldCA9IGJ5dGVzLmluZGV4T2YobWV0YWRhdGEpO1xuICBhc3NlcnQubm90U3RyaWN0RXF1YWwob2Zmc2V0LCAtMSwgJ1VuaWZpZWQgQWRkcmVzcyBtZXRhZGF0YSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHNlcmlhbGl6ZWQgUFNCVCcpO1xuICAvLyBDaGFuZ2Ugb25seSB0aGUgbWV0YWRhdGEgYnl0ZXMuIFRoZSByZXN1bHRpbmcgYWRkcmVzcyBpcyBpbnRlbnRpb25hbGx5IGludmFsaWQsIHdoaWNoXG4gIC8vIHZlcmlmaWVzIHRoYXQgZGVzZXJpYWxpemF0aW9uIGRvZXMgbm90IGV4cG9zZSBhdHRhY2tlci1jb250cm9sbGVkIHByb3ByaWV0YXJ5IG1ldGFkYXRhLlxuICBieXRlc1tvZmZzZXRdID0gYnl0ZXNbb2Zmc2V0XSA9PT0gMHg3NSA/IDB4NzYgOiAweDc1O1xuICByZXR1cm4gYnl0ZXMudG9TdHJpbmcoJ2hleCcpO1xufVxuZGVzY3JpYmUoJ1plYyBzaGllbGRlZCBwcmUtdmVyaWZ5IGZsb3dzICh2NiBJcm9ud29vZCBQU0JUKScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgemVjID0gZ2V0VXR4b0NvaW4oJ3R6ZWMnKTtcbiAgY29uc3QgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2RlZmF1bHRCaXRHby5nZXRFbnYoKV0udXJpO1xuXG4gIGNvbnN0IGtleURvY3VtZW50T2JqZWN0cyA9IGtleWNoYWluc0Jhc2U1OC5tYXAoKGtleWNoYWluLCBrZXlJZHgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGdldFNlZWQoa2V5Y2hhaW4ucHViKS50b1N0cmluZygnaGV4JyksXG4gICAgICBwdWI6IGtleWNoYWluLnB1YixcbiAgICAgIHNvdXJjZTogWyd1c2VyJywgJ2JhY2t1cCcsICdiaXRnbyddW2tleUlkeF0sXG4gICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgIH07XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBpdCgnc2VuZE1hbnkgcmVjaXBpZW50IHZhbGlkYXRpb24gYWNjZXB0cyB0aGUgdW5pZmllZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIHplYy5jaGVja1JlY2lwaWVudCh7IGFkZHJlc3M6IHVuaWZpZWRBZGRyZXNzLCBhbW91bnQ6ICc1MDAwJyB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Bvc3RQcm9jZXNzUHJlYnVpbGQgZGVjb2RlcyB0aGUgdjYgcHNidCBhbmQgcmUtZW5jb2RlcyBpdCB1bmNoYW5nZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcHJlYnVpbGRIZXggPSBidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpO1xuICAgIG5vY2soYmdVcmwpLmdldCgnL2FwaS92Mi90emVjL3B1YmxpYy9ibG9jay9sYXRlc3QnKS5yZXBseSgyMDAsIHsgaGVpZ2h0OiA0MjAwMDAwIH0pO1xuICAgIGNvbnN0IHByZWJ1aWxkID0gYXdhaXQgemVjLnBvc3RQcm9jZXNzUHJlYnVpbGQoeyB0eEhleDogcHJlYnVpbGRIZXgsIHR4SW5mbzoge30gfSk7XG4gICAgYXNzZXJ0Lm1hdGNoKHByZWJ1aWxkLnR4SGV4IGFzIHN0cmluZywgL143MDczNjI3NC8pOyAvLyBQU0JUIG1hZ2ljIHByZXNlcnZlZFxuICAgIGNvbnN0IGRlY29kZWQgPSB6ZWMuZGVjb2RlVHJhbnNhY3Rpb24ocHJlYnVpbGQudHhIZXggYXMgc3RyaW5nKTtcbiAgICBhc3NlcnQub2soZGVjb2RlZCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQpO1xuICB9KTtcblxuICBpdCgnZXhwbGFpblRyYW5zYWN0aW9uIGRlY29kZXMgdGhlIHY2IHBzYnQgYW5kIHJlc29sdmVzIHRoZSBzaGllbGRlZCByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFpbmVkID0gYXdhaXQgemVjLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogYnVpbGRTaGllbGRlZFY2UHJlYnVpbGRIZXgoKSxcbiAgICAgIHB1YnM6IFtrZXlEb2N1bWVudE9iamVjdHNbMF0ucHViLCBrZXlEb2N1bWVudE9iamVjdHNbMV0ucHViLCBrZXlEb2N1bWVudE9iamVjdHNbMl0ucHViXSxcbiAgICB9KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFpbmVkLm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFpbmVkLm91dHB1dHNbMF0uYWRkcmVzcywgdW5pZmllZEFkZHJlc3MpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYWluZWQub3V0cHV0c1swXS5hbW91bnQudG9TdHJpbmcoKSwgJzUwMDAnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFpbmVkLmNoYW5nZU91dHB1dHMubGVuZ3RoLCAxKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSB2NiBQU0JUIHdob3NlIHByZXNlcnZlZCBVQSBtZXRhZGF0YSB3YXMgbXV0YXRlZCBhZnRlciBzZXJpYWxpemF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11dGF0ZWRIZXggPSBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MoYnVpbGRTaGllbGRlZFY2UHJlYnVpbGRIZXgoKSwgdW5pZmllZEFkZHJlc3MpO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgemVjLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBtdXRhdGVkSGV4LFxuICAgICAgICBwdWJzOiBba2V5RG9jdW1lbnRPYmplY3RzWzBdLnB1Yiwga2V5RG9jdW1lbnRPYmplY3RzWzFdLnB1Yiwga2V5RG9jdW1lbnRPYmplY3RzWzJdLnB1Yl0sXG4gICAgICB9KSxcbiAgICAgIC9kb2VzIG5vdCBtYXRjaCBpdHMgcmF3IHNjcmlwdC9cbiAgICApO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIGBwYXJzZVRyYW5zYWN0aW9uYCBtdXN0IHRha2UgYHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlYCBpbnRvIGFjY291bnQgd2hlbiBkZWNvZGluZyBhXG4gKiBwcmVidWlsZDogYSBzaGllbGRlZCByZWNpcGllbnQgcmVzb2x2ZXMgdG8gaXRzIDQzLWJ5dGUgT3JjaGFyZCByZWNlaXZlciwgd2hpY2ggb25seSBtYXRjaGVzXG4gKiB0aGUgUFNCVCdzIHNoaWVsZGVkIG91dHB1dCB3aGVuIHRoZSBkZWNvZGUgdXNlcyB0aGUgJ3NoaWVsZGVkJyBwcmVmZXJlbmNlLiBUaGUgcHJlZmVyZW5jZSBpc1xuICogdGhlIGNhbGxlcidzIGV4cGxpY2l0IGB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZWAsIG9yIOKAlCB3aGVuIGFic2VudCDigJQgaW5mZXJyZWQgZnJvbSB0aGVcbiAqIHJlY2lwaWVudHMgdGhlbXNlbHZlcy5cbiAqL1xuZGVzY3JpYmUoJ1plYyBwYXJzZVRyYW5zYWN0aW9uIHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlICh2NiBJcm9ud29vZCBQU0JUKScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgdHplYyA9IGdldFV0eG9Db2luKCd0emVjJyk7XG5cbiAgZnVuY3Rpb24gZ2V0TW9ja1dhbGxldCgpOiBVdHhvV2FsbGV0IHtcbiAgICBjb25zdCBtb2NrV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCk7XG4gICAgbW9ja1dhbGxldC5pZC5yZXR1cm5zKCd0ZXN0LXdhbGxldC1pZCcpO1xuICAgIG1vY2tXYWxsZXQuY29pbi5yZXR1cm5zKCd0emVjJyk7XG4gICAgbW9ja1dhbGxldC5jb2luU3BlY2lmaWMucmV0dXJucyh1bmRlZmluZWQpO1xuICAgIHJldHVybiBtb2NrV2FsbGV0IGFzIHVua25vd24gYXMgVXR4b1dhbGxldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFZlcmlmaWNhdGlvbigpOiBWZXJpZmljYXRpb25PcHRpb25zIHtcbiAgICBjb25zdCBwdWJzID0ga2V5Y2hhaW5zQmFzZTU4Lm1hcCgoaykgPT4gay5wdWIpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNhYmxlTmV0d29ya2luZzogdHJ1ZSxcbiAgICAgIGtleWNoYWluczoge1xuICAgICAgICB1c2VyOiB7IGlkOiAnMCcsIHB1YjogcHVic1swXSwgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgICBiYWNrdXA6IHsgaWQ6ICcxJywgcHViOiBwdWJzWzFdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICAgIGJpdGdvOiB7IGlkOiAnMicsIHB1YjogcHVic1syXSwgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcGFyc2VTaGllbGRlZFY2UHJlYnVpbGQoXG4gICAgdHhQYXJhbXM6IHtcbiAgICAgIHJlY2lwaWVudHM6IHsgYWRkcmVzczogc3RyaW5nOyBhbW91bnQ6IHN0cmluZyB9W107XG4gICAgICB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZT86ICdzaGllbGRlZCcgfCAndHJhbnNwYXJlbnQnO1xuICAgIH0sXG4gICAgdHhIZXggPSBidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpXG4gICkge1xuICAgIHJldHVybiB0emVjLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgd2FsbGV0OiBnZXRNb2NrV2FsbGV0KCksXG4gICAgICB0eFBhcmFtcyxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgIHZlcmlmaWNhdGlvbjogZ2V0VmVyaWZpY2F0aW9uKCksXG4gICAgfSk7XG4gIH1cblxuICBpdCgnaW5mZXJzIHRoZSBzaGllbGRlZCBwcmVmZXJlbmNlIGZyb20gYW4gT3JjaGFyZC1vbmx5IFVuaWZpZWQgQWRkcmVzcyByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VTaGllbGRlZFY2UHJlYnVpbGQoe1xuICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogdW5pZmllZEFkZHJlc3MsIGFtb3VudDogJzUwMDAnIH1dLFxuICAgIH0pO1xuICAgIGNvbnN0IGV4dGVybmFsT3V0cHV0cyA9IHBhcnNlZC5vdXRwdXRzLmZpbHRlcigobykgPT4gby5leHRlcm5hbCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4dGVybmFsT3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHRlcm5hbE91dHB1dHNbMF0uYWRkcmVzcywgdW5pZmllZEFkZHJlc3MpO1xuICB9KTtcbiAgaXQoJ3JlamVjdHMgYSB2NiBQU0JUIHdpdGggbXV0YXRlZCBVQSBtZXRhZGF0YSBkdXJpbmcgcGFyc2VUcmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtdXRhdGVkSGV4ID0gbXV0YXRlU2VyaWFsaXplZFVuaWZpZWRBZGRyZXNzKGJ1aWxkU2hpZWxkZWRWNlByZWJ1aWxkSGV4KCksIHVuaWZpZWRBZGRyZXNzKTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHBhcnNlU2hpZWxkZWRWNlByZWJ1aWxkKHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogdW5pZmllZEFkZHJlc3MsIGFtb3VudDogJzUwMDAnIH1dIH0sIG11dGF0ZWRIZXgpLFxuICAgICAgL2RvZXMgbm90IG1hdGNoIGl0cyByYXcgc2NyaXB0L1xuICAgICk7XG4gIH0pO1xuICBpdCgnaG9ub3JzIGFuIGV4cGxpY2l0IHNoaWVsZGVkIHByZWZlcmVuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VTaGllbGRlZFY2UHJlYnVpbGQoe1xuICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogdW5pZmllZEFkZHJlc3MsIGFtb3VudDogJzUwMDAnIH1dLFxuICAgICAgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U6ICdzaGllbGRlZCcsXG4gICAgfSk7XG4gICAgY29uc3QgZXh0ZXJuYWxPdXRwdXRzID0gcGFyc2VkLm91dHB1dHMuZmlsdGVyKChvKSA9PiBvLmV4dGVybmFsKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXh0ZXJuYWxPdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4dGVybmFsT3V0cHV0c1swXS5hZGRyZXNzLCB1bmlmaWVkQWRkcmVzcyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgdHJhbnNwYXJlbnQgcmVzb2x1dGlvbiBvZiBhIHNoaWVsZGVkIHJlY2lwaWVudCAoaW50ZW50IG1pc21hdGNoKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBGb3JjaW5nIHRoZSAndHJhbnNwYXJlbnQnIHByZWZlcmVuY2UgcmVzb2x2ZXMgdGhlIHJlY2lwaWVudCdzIHNjcmlwdCDigJQgYnV0IGFuXG4gICAgLy8gT3JjaGFyZC1vbmx5IFVBIGhhcyBubyB0cmFuc3BhcmVudCByZWNlaXZlciwgc28gdGhlIGRlY29kZSBtdXN0IGZhaWwgcmF0aGVyIHRoYW5cbiAgICAvLyBzaWxlbnRseSBtaXNtYXRjaC5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHBhcnNlU2hpZWxkZWRWNlByZWJ1aWxkKHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogdW5pZmllZEFkZHJlc3MsIGFtb3VudDogJzUwMDAnIH1dLFxuICAgICAgICB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogJ3RyYW5zcGFyZW50JyxcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1plYyByZXNvbHZlUmVjaXBpZW50c0Zyb21Qc2J0IChkZWNvZGUgKyByZWNpcGllbnQgcmVzb2x1dGlvbiknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHR6ZWMgPSBnZXRVdHhvQ29pbigndHplYycpIGFzIFplYztcbiAgY29uc3QgeyB3YWxsZXRLZXlzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcbiAgY29uc3QgSVJPTldPT0RfSEVJR0hUID0gNDIwMDAwMDsgLy8gYWZ0ZXIgdGhlIE5VNi4zIHRlc3RuZXQgYWN0aXZhdGlvbiAoNDEzNDAwMClcblxuICBmdW5jdGlvbiBidWlsZFNoaWVsZGVkVjZQc2J0KFxuICAgIHVuaWZpZWRBZGRyZXNzID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5lbmNvZGVPcmNoYXJkUmVjZWl2ZXIoXG4gICAgICBuZXcgVWludDhBcnJheShJUk9OV09PRF9SRUNFSVZFUiksXG4gICAgICAndHplYydcbiAgICApXG4gICk6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQge1xuICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCd0emVjJywgd2FsbGV0S2V5cywge1xuICAgICAgYmxvY2tIZWlnaHQ6IElST05XT09EX0hFSUdIVCxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldElucHV0KHsgdHhpZDogJzExJy5yZXBlYXQoMzIpLCB2b3V0OiAwLCB2YWx1ZTogMTAwMDAwbiB9LCB3YWxsZXRLZXlzLCB7XG4gICAgICBzY3JpcHRJZDogeyBjaGFpbjogMCwgaW5kZXg6IDAgfSxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldE91dHB1dCh3YWxsZXRLZXlzLCB7IGNoYWluOiAxLCBpbmRleDogMCwgdmFsdWU6IDkwMDAwbiB9KTtcbiAgICBwc2J0LmFkZFNoaWVsZGVkT3V0cHV0cyhcbiAgICAgIFt7IHJlY2lwaWVudDogbmV3IFVpbnQ4QXJyYXkoSVJPTldPT0RfUkVDRUlWRVIpLCBhbW91bnQ6IDUwMDBuLCB1bmlmaWVkQWRkcmVzcyB9XSxcbiAgICAgIG5ldyBVaW50OEFycmF5KDMyKSAvLyBhbGwtemVybyBhbmNob3IsIGFzIGluIHRoZSB1dHhvLWNvcmUgc2hpZWxkZWQgYnVpbGQgdGVzdHNcbiAgICApO1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRUcmFuc3BhcmVudFY0UHNidCh1bmlmaWVkQWRkcmVzcz86IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoQml0R29Qc2J0IHtcbiAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hCaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ3R6ZWMnLCB3YWxsZXRLZXlzLCB7IGJsb2NrSGVpZ2h0OiAzMTQ2NDAwIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0SW5wdXQoeyB0eGlkOiAnMjInLnJlcGVhdCgzMiksIHZvdXQ6IDAsIHZhbHVlOiAyMDAwMDBuIH0sIHdhbGxldEtleXMsIHtcbiAgICAgIHNjcmlwdElkOiB7IGNoYWluOiAwLCBpbmRleDogMSB9LFxuICAgIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0T3V0cHV0KHdhbGxldEtleXMsIHsgY2hhaW46IDEsIGluZGV4OiAwLCB2YWx1ZTogMTAwMDAwbiB9KTtcbiAgICBjb25zdCBleHRlcm5hbFNjcmlwdCA9IHR6ZWMuYWRkcmVzc0NvZGVjLmRlY29kZShURVNUTkVUX1RSQU5TUEFSRU5UX0FERFJFU1MpO1xuICAgIHBzYnQuYWRkVHJhbnNwYXJlbnRPdXRwdXQoZXh0ZXJuYWxTY3JpcHQsIDEyMzQ1biwgdW5pZmllZEFkZHJlc3MpO1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgLyoqIERlY29kZSBhIFVBIGJhY2sgdG8gaXRzIHJlY2VpdmVycyBhbmQgYXNzZXJ0IHRoZXkgbWF0Y2ggdGhlIHRlc3RuZXQgZml4dHVyZS4gKi9cbiAgZnVuY3Rpb24gYXNzZXJ0RGVjb2Rlc0JhY2tUb0ZpeHR1cmVSZWNpcGllbnRzKHVuaWZpZWRBZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJzZWQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLnBhcnNlKHVuaWZpZWRBZGRyZXNzLCAndHplYycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQuaGFzT3JjaGFyZFJlY2VpdmVyLCB0cnVlKTtcbiAgICBhc3NlcnQub2socGFyc2VkLm9yY2hhcmRSZWNlaXZlcik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKHBhcnNlZC5vcmNoYXJkUmVjZWl2ZXIpLnRvU3RyaW5nKCdoZXgnKSwgSVJPTldPT0RfUkVDRUlWRVIudG9TdHJpbmcoJ2hleCcpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLmhhc1RyYW5zcGFyZW50UmVjZWl2ZXIsIHRydWUpO1xuICAgIGFzc2VydC5vayhwYXJzZWQudHJhbnNwYXJlbnRTY3JpcHQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIEJ1ZmZlci5mcm9tKHBhcnNlZC50cmFuc3BhcmVudFNjcmlwdCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20odHplYy5hZGRyZXNzQ29kZWMuZGVjb2RlKFRFU1RORVRfVFJBTlNQQVJFTlRfQUREUkVTUykpLnRvU3RyaW5nKCdoZXgnKVxuICAgICk7XG4gIH1cbiAgaXQoJ3JlamVjdHMgYSB2NCBQU0JUIHdob3NlIHByZXNlcnZlZCBVQSBtZXRhZGF0YSB3YXMgbXV0YXRlZCBhZnRlciBzZXJpYWxpemF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11dGF0ZWRIZXggPSBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MoXG4gICAgICBCdWZmZXIuZnJvbShidWlsZFRyYW5zcGFyZW50VjRQc2J0KFRFU1RORVRfVU5JRklFRCkuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIFRFU1RORVRfVU5JRklFRFxuICAgICk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0emVjLnJlc29sdmVSZWNpcGllbnRzRnJvbVBzYnQobXV0YXRlZEhleCwgd2FsbGV0S2V5cyksIC9kb2VzIG5vdCBtYXRjaCBpdHMgcmF3IHJlY2lwaWVudC8pO1xuICB9KTtcblxuICBpdCgnZXhwbGFpblRyYW5zYWN0aW9uIHJlamVjdHMgYSB2NCBQU0JUIHdob3NlIHByZXNlcnZlZCBVQSBtZXRhZGF0YSB3YXMgbXV0YXRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtdXRhdGVkSGV4ID0gbXV0YXRlU2VyaWFsaXplZFVuaWZpZWRBZGRyZXNzKFxuICAgICAgQnVmZmVyLmZyb20oYnVpbGRUcmFuc3BhcmVudFY0UHNidChURVNUTkVUX1VOSUZJRUQpLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICBURVNUTkVUX1VOSUZJRURcbiAgICApO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgdHplYy5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogbXV0YXRlZEhleCxcbiAgICAgICAgcHViczoga2V5Y2hhaW5zQmFzZTU4Lm1hcCgoa2V5Y2hhaW4pID0+IGtleWNoYWluLnB1YikgYXMgW3N0cmluZywgc3RyaW5nLCBzdHJpbmddLFxuICAgICAgfSksXG4gICAgICAvZG9lcyBub3QgbWF0Y2ggaXRzIHJhdyBzY3JpcHQvXG4gICAgKTtcbiAgfSk7XG4gIGl0KCdyZXNvbHZlcyBhIHNoaWVsZGVkIHY2IChJcm9ud29vZCkgb3V0cHV0IHRvIGl0cyBPcmNoYXJkIFVuaWZpZWQgQWRkcmVzcyByZWNpcGllbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHR6ZWMucmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChCdWZmZXIuZnJvbShidWlsZFNoaWVsZGVkVjZQc2J0KCkuc2VyaWFsaXplKCkpLCB3YWxsZXRLZXlzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbi5raW5kLCAnemNhc2hTaGllbGRlZCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYW1vdW50LCA1MDAwbik7XG4gICAgYXNzZXJ0Lm9rKHJlY2lwaWVudC5hZGRyZXNzLnN0YXJ0c1dpdGgoJ3V0ZXN0MScpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFkZHJlc3MsIHJlY2lwaWVudC5kZXN0aW5hdGlvbi51bmlmaWVkQWRkcmVzcyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKHJlY2lwaWVudC5zY3JpcHQpLnRvU3RyaW5nKCdoZXgnKSwgSVJPTldPT0RfUkVDRUlWRVIudG9TdHJpbmcoJ2hleCcpKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSB2NiBQU0JUIHdob3NlIHByZXNlcnZlZCBVQSBtZXRhZGF0YSB3YXMgbXV0YXRlZCBhZnRlciBzZXJpYWxpemF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11dGF0ZWRIZXggPSBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MoXG4gICAgICBCdWZmZXIuZnJvbShidWlsZFNoaWVsZGVkVjZQc2J0KFRFU1RORVRfVU5JRklFRCkuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIFRFU1RORVRfVU5JRklFRFxuICAgICk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0emVjLnJlc29sdmVSZWNpcGllbnRzRnJvbVBzYnQobXV0YXRlZEhleCwgd2FsbGV0S2V5cyksIC9kb2VzIG5vdCBtYXRjaCBpdHMgcmF3IHJlY2lwaWVudC8pO1xuICB9KTtcblxuICBpdCgnZXhwbGFpblRyYW5zYWN0aW9uIHJlamVjdHMgYSB2NiBQU0JUIHdob3NlIHByZXNlcnZlZCBVQSBtZXRhZGF0YSB3YXMgbXV0YXRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtdXRhdGVkSGV4ID0gbXV0YXRlU2VyaWFsaXplZFVuaWZpZWRBZGRyZXNzKFxuICAgICAgQnVmZmVyLmZyb20oYnVpbGRTaGllbGRlZFY2UHNidChURVNUTkVUX1VOSUZJRUQpLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICBURVNUTkVUX1VOSUZJRURcbiAgICApO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgdHplYy5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogbXV0YXRlZEhleCxcbiAgICAgICAgcHViczoga2V5Y2hhaW5zQmFzZTU4Lm1hcCgoa2V5Y2hhaW4pID0+IGtleWNoYWluLnB1YikgYXMgW3N0cmluZywgc3RyaW5nLCBzdHJpbmddLFxuICAgICAgfSksXG4gICAgICAvZG9lcyBub3QgbWF0Y2ggaXRzIHJhdyBzY3JpcHQvXG4gICAgKTtcbiAgfSk7XG4gIGl0KCdyZXNvbHZlcyB0cmFuc3BhcmVudCBleHRlcm5hbCBvdXRwdXRzIGFuZCBleGNsdWRlcyBjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHR6ZWMucmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChCdWZmZXIuZnJvbShidWlsZFRyYW5zcGFyZW50VjRQc2J0KCkuc2VyaWFsaXplKCkpLCB3YWxsZXRLZXlzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbi5raW5kLCAndHJhbnNwYXJlbnQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFkZHJlc3MsIFRFU1RORVRfVFJBTlNQQVJFTlRfQUREUkVTUyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hbW91bnQsIDEyMzQ1bik7XG4gIH0pO1xuXG4gIGl0KCdyZXBvcnRzIHRoZSBvcmlnaW5hbCBtdWx0aS1yZWNlaXZlciBVQSBmb3IgYSBzaGllbGRlZCBvdXRwdXQgYW5kIGRlY29kZXMgaXQgYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gdHplYy5yZXNvbHZlUmVjaXBpZW50c0Zyb21Qc2J0KFxuICAgICAgQnVmZmVyLmZyb20oYnVpbGRTaGllbGRlZFY2UHNidChURVNUTkVUX1VOSUZJRUQpLnNlcmlhbGl6ZSgpKSxcbiAgICAgIHdhbGxldEtleXNcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1swXTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLmtpbmQsICd6Y2FzaFNoaWVsZGVkJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hZGRyZXNzLCBURVNUTkVUX1VOSUZJRUQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQudW5pZmllZEFkZHJlc3MsIFRFU1RORVRfVU5JRklFRCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbi51bmlmaWVkQWRkcmVzcywgVEVTVE5FVF9VTklGSUVEKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVjaXBpZW50LnNjcmlwdCkudG9TdHJpbmcoJ2hleCcpLCBJUk9OV09PRF9SRUNFSVZFUi50b1N0cmluZygnaGV4JykpO1xuICAgIGFzc2VydERlY29kZXNCYWNrVG9GaXh0dXJlUmVjaXBpZW50cyhyZWNpcGllbnQudW5pZmllZEFkZHJlc3MgYXMgc3RyaW5nKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcG9ydHMgdGhlIG9yaWdpbmFsIG11bHRpLXJlY2VpdmVyIFVBIGZvciBhIHRyYW5zcGFyZW50IHY0IG91dHB1dCBhbmQgZGVjb2RlcyBpdCBiYWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0emVjLnJlc29sdmVSZWNpcGllbnRzRnJvbVBzYnQoXG4gICAgICBCdWZmZXIuZnJvbShidWlsZFRyYW5zcGFyZW50VjRQc2J0KFRFU1RORVRfVU5JRklFRCkuc2VyaWFsaXplKCkpLFxuICAgICAgd2FsbGV0S2V5c1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudHMubGVuZ3RoLCAxKTtcbiAgICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRzWzBdO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuZGVzdGluYXRpb24ua2luZCwgJ3pjYXNoVW5pZmllZFRyYW5zcGFyZW50Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hZGRyZXNzLCBURVNUTkVUX1VOSUZJRUQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQudW5pZmllZEFkZHJlc3MsIFRFU1RORVRfVU5JRklFRCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbi51bmlmaWVkQWRkcmVzcywgVEVTVE5FVF9VTklGSUVEKTtcbiAgICBhc3NlcnREZWNvZGVzQmFja1RvRml4dHVyZVJlY2lwaWVudHMocmVjaXBpZW50LnVuaWZpZWRBZGRyZXNzIGFzIHN0cmluZyk7XG4gIH0pO1xuXG4gIGl0KCdyZXNvbHZlcyByZWNpcGllbnRzIGZyb20gYSBoZXggUFNCVCBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaGV4ID0gQnVmZmVyLmZyb20oYnVpbGRTaGllbGRlZFY2UHNidCgpLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHR6ZWMucmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChoZXgsIHdhbGxldEtleXMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudHNbMF0uZGVzdGluYXRpb24ua2luZCwgJ3pjYXNoU2hpZWxkZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyBmb3IgYSBub24tWmNhc2ggUFNCVCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7fSk7XG4gICAgcHNidC5hZGRXYWxsZXRJbnB1dCh7IHR4aWQ6ICczMycucmVwZWF0KDMyKSwgdm91dDogMCwgdmFsdWU6IDEwMDBuIH0sIHdhbGxldEtleXMsIHtcbiAgICAgIHNjcmlwdElkOiB7IGNoYWluOiAwLCBpbmRleDogMCB9LFxuICAgIH0pO1xuICAgIC8vIFplYy5kZWNvZGVUcmFuc2FjdGlvbiBoYW5kcyB0aGUgYnRjIFBTQlQgdG8gWmNhc2hQc2J0LmZyb21CeXRlcywgd2hpY2ggcmVqZWN0cyBpdCBmb3JcbiAgICAvLyBpdHMgbWlzc2luZyBaY2FzaCBjb25zZW5zdXMgYnJhbmNoIElEIGJlZm9yZSB0aGUgWmNhc2gtdHlwZSBndWFyZCBpcyBldmVyIHJlYWNoZWQuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0emVjLnJlc29sdmVSZWNpcGllbnRzRnJvbVBzYnQoQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSksIHdhbGxldEtleXMpKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1plYyBnZXRFeHRyYVByZWJ1aWxkUGFyYW1zICh1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSBmb3J3YXJkaW5nKScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgemVjID0gZ2V0VXR4b0NvaW4oJ3plYycpO1xuXG4gIGZ1bmN0aW9uIG1vY2tXYWxsZXQoY29pbiA9IHplYyk6IFdhbGxldCB7XG4gICAgcmV0dXJuIG5ldyBXYWxsZXQoZGVmYXVsdEJpdEdvLCBjb2luLCB7IGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJywgY29pbjogY29pbi5nZXRDaGFpbigpLCB0eXBlOiAnaG90JyB9KTtcbiAgfVxuXG4gIGl0KCdmb3J3YXJkcyB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB3aGVuIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbW9ja1dhbGxldCgpO1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBhd2FpdCB6ZWMuZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyh7XG4gICAgICB3YWxsZXQsXG4gICAgICB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogJ3NoaWVsZGVkJyxcbiAgICB9KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlLCAnc2hpZWxkZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ2RvZXMgbm90IHNldCB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB3aGVuIGFic2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXQgPSBtb2NrV2FsbGV0KCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgemVjLmdldEV4dHJhUHJlYnVpbGRQYXJhbXMoeyB3YWxsZXQgfSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKCd1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZScgaW4gcmVzdWx0LCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzdGlsbCByZXR1cm5zIHRoZSBzdGFuZGFyZCBleHRyYSBwcmVidWlsZCBwYXJhbXMgKHR4Rm9ybWF0KSB1bmNoYW5nZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbW9ja1dhbGxldCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHplYy5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKHtcbiAgICAgIHdhbGxldCxcbiAgICAgIHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlOiAnc2hpZWxkZWQnLFxuICAgIH0pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQudHhGb3JtYXQsICdwc2J0LWxpdGUnKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1plYyBzaWduVHJhbnNhY3Rpb24gKHY2IElyb253b29kIHRyYW5zcGFyZW50LWlucHV0IHNpZ25pbmcpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB6ZWMgPSBnZXRVdHhvQ29pbigndHplYycpIGFzIFplYztcbiAgY29uc3QgeyB4cHVicyB9ID0gZ2V0RGVmYXVsdFdhc21XYWxsZXRLZXlzKCk7XG4gIGNvbnN0IFt1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluXSA9IGtleWNoYWluc0Jhc2U1ODtcbiAgY29uc3QgcHViczogVHJpcGxlPHN0cmluZz4gPSBbdXNlcktleWNoYWluLnB1YiwgYmFja3VwS2V5Y2hhaW4ucHViLCBiaXRnb0tleWNoYWluLnB1Yl07XG5cbiAgaXQoJ3NpZ25zIHRoZSB0cmFuc3BhcmVudCBpbnB1dHMgd2l0aCB0aGUgdXNlciBrZXkgYW5kIGZpbmFsaXplcyB0aGUgc2hpZWxkZWQgb3V0X2NpcGhlcnRleHQgKG92ayB2aWEgRUNESCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgemVjLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiBidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpIH0sXG4gICAgICBwcnY6IHVzZXJLZXljaGFpbi5wcnYsXG4gICAgICBwdWJzLFxuICAgIH0pO1xuICAgIGFzc2VydC5vaygndHhIZXgnIGluIHNpZ25lZCk7XG4gICAgY29uc3QgeyB0eEhleCB9ID0gc2lnbmVkO1xuICAgIC8vIFRoZSBoYWxmLXNpZ25lZCByZXN1bHQgaXMgdGhlIHY2IFBTQlQgd2l0aCB0aGUgdXNlcidzIEVDRFNBIHNpZ25hdHVyZXMgb3ZlciB0aGVcbiAgICAvLyBaSVAtMjQ0IHRyYW5zcGFyZW50IHNpZ2hhc2guIERlcml2aW5nIHRoZSBvdmsgKEVDREggb2YgdGhlIEJpdEdvIHJvb3QgcHVia2V5IGFuZCB0aGVcbiAgICAvLyB1c2VyIHJvb3Qga2V5KSBhbmQgZmluYWxpemluZyBvdXRfY2lwaGVydGV4dCBoYXBwZW5zIGluc2lkZSBzaWduKCksIGJlZm9yZSBhbnlcbiAgICAvLyBzaWdoYXNoIGlzIGNvbXB1dGVkIOKAlCBhIGZhaWxpbmcgb3ZrIHN0ZXAgYWJvcnRzIHRoZSB3aG9sZSByb3VuZC5cbiAgICBjb25zdCBwc2J0ID0gemVjLmRlY29kZVRyYW5zYWN0aW9uKEJ1ZmZlci5mcm9tKHR4SGV4LCAnaGV4JykpO1xuICAgIGFzc2VydC5vayhwc2J0IGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBzYnQudmVyaWZ5U2lnbmF0dXJlKDAsIHhwdWJzWzBdKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBzYnQudmVyaWZ5U2lnbmF0dXJlKDAsIHhwdWJzWzJdKSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnb3V0X2NpcGhlcnRleHQgc3Vydml2ZXMgdGhlIHNlcmlhbGl6ZSByb3VuZC10cmlwOiB0aGUgQml0R28gY291bnRlcnNpZ25pbmcgcm91bmQgc3VjY2VlZHMgb24gaXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdXNlclJvdW5kID0gYXdhaXQgemVjLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiBidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpIH0sXG4gICAgICBwcnY6IHVzZXJLZXljaGFpbi5wcnYsXG4gICAgICBwdWJzLFxuICAgIH0pO1xuICAgIGFzc2VydC5vaygndHhIZXgnIGluIHVzZXJSb3VuZCk7XG4gICAgY29uc3QgYml0Z29Sb3VuZCA9IGF3YWl0IHplYy5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogdXNlclJvdW5kLnR4SGV4IH0sXG4gICAgICBwcnY6IGJpdGdvS2V5Y2hhaW4ucHJ2LFxuICAgICAgcHVicyxcbiAgICB9KTtcbiAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBiaXRnb1JvdW5kKTtcbiAgICBjb25zdCBwc2J0ID0gemVjLmRlY29kZVRyYW5zYWN0aW9uKEJ1ZmZlci5mcm9tKGJpdGdvUm91bmQudHhIZXgsICdoZXgnKSk7XG4gICAgYXNzZXJ0Lm9rKHBzYnQgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0KTtcbiAgICAvLyBGdWxseSBzaWduZWQgdHJhbnNwYXJlbnQgaW5wdXRzOiBib3RoIHRoZSB1c2VyIGFuZCBCaXRHbyBzaWduYXR1cmVzIHZlcmlmeSBhZ2FpbnN0XG4gICAgLy8gdGhlIHY2IChaSVAtMjQ0KSBzaWdoYXNoIOKAlCB0aGUgcHJvb2Ygc2VydmljZSB0YWtlcyBpdCBmcm9tIGhlcmUgdmlhIGNvbWJpbmVQcm9vZi5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHNidC52ZXJpZnlTaWduYXR1cmUoMCwgeHB1YnNbMF0pLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHNidC52ZXJpZnlTaWduYXR1cmUoMCwgeHB1YnNbMl0pLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHNidC52ZXJpZnlTaWduYXR1cmUoMCwgeHB1YnNbMV0pLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgZmlyc3Qgc2lnbmluZyByb3VuZCBvcGVuZWQgYnkgYSBub24tdXNlciBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhlIHdhc20gZGVyaXZlcyB0aGUgb3ZrIGZyb20gdGhlIGZpcnN0LXJvdW5kIHNpZ25lcidzIGtleTogYSByb3VuZCBvcGVuZWQgYnkgdGhlXG4gICAgLy8gYmFja3VwIG9yIEJpdEdvIGtleSB3b3VsZCBwcm9kdWNlIGFuIG91dF9jaXBoZXJ0ZXh0IG5laXRoZXIgdGhlIHVzZXIgbm9yIHRoZSBzZXJ2ZXJcbiAgICAvLyBjYW4gcmUtZGVyaXZlLCBsZWF2aW5nIHRoZSBzaGllbGRlZCBvdXRwdXQgdW5yZWNvdmVyYWJsZS5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHplYy5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiBidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpIH0sXG4gICAgICAgIHBydjogYml0Z29LZXljaGFpbi5wcnYsXG4gICAgICAgIHB1YnMsXG4gICAgICB9KSxcbiAgICAgIC91c2VyL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZXF1aXJlcyByb290V2FsbGV0S2V5cyB3aGVuIHNpZ25pbmcgYW4gSXJvbndvb2QgUFNCVCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidC5mcm9tQnl0ZXMoXG4gICAgICBCdWZmZXIuZnJvbShidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpLCAnaGV4JyksXG4gICAgICAndHplYydcbiAgICApO1xuICAgIGNvbnN0IHsgeHByaXZzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcbiAgICAvLyBXaXRob3V0IHJvb3RXYWxsZXRLZXlzIHRoZSBvdmsgc3RlcCBjYW5ub3QgcnVuLCBzbyBzaWduKCkgdGhyb3dzIGF0IHJ1bnRpbWUgcmF0aGVyXG4gICAgLy8gdGhhbiBzaWxlbnRseSBza2lwcGluZyBpdCDigJQgdGhlIHNpZ25pbmcgZGlzcGF0Y2ggbXVzdCBhbHdheXMgcGFzcyByb290V2FsbGV0S2V5cy5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHBzYnQuc2lnbih4cHJpdnNbMF0pKTtcbiAgfSk7XG5cbiAgaXQoJ3NpZ25zIGEgdjQgKFNhcGxpbmctc2hhcGVkKSBwc2J0IHRocm91Z2ggdGhlIGdlbmVyaWMgc2lnbmluZyBwYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoZSBzaWduVHJhbnNhY3Rpb24gb3ZlcnJpZGUgcm91dGVzIG9ubHkgdjYgKElyb253b29kKSBwcmVidWlsZHM7IGEgdjQgcHJlYnVpbGQgbXVzdFxuICAgIC8vIGtlZXAgZmxvd2luZyB0aHJvdWdoIHRoZSBnZW5lcmljIHBhdGggdW5jaGFuZ2VkLlxuICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaEJpdEdvUHNidC5jcmVhdGVFbXB0eSgndHplYycsIHdhbGxldEtleXMsIHsgYmxvY2tIZWlnaHQ6IDMxNDY0MDAgfSk7XG4gICAgcHNidC5hZGRXYWxsZXRJbnB1dCh7IHR4aWQ6ICc0NCcucmVwZWF0KDMyKSwgdm91dDogMCwgdmFsdWU6IDEwMDAwMG4gfSwgd2FsbGV0S2V5cywge1xuICAgICAgc2NyaXB0SWQ6IHsgY2hhaW46IDAsIGluZGV4OiAwIH0sXG4gICAgfSk7XG4gICAgcHNidC5hZGRXYWxsZXRPdXRwdXQod2FsbGV0S2V5cywgeyBjaGFpbjogMSwgaW5kZXg6IDAsIHZhbHVlOiA5MDAwMG4gfSk7XG4gICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgemVjLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JykgfSxcbiAgICAgIHBydjogdXNlcktleWNoYWluLnBydixcbiAgICAgIHB1YnMsXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gc2lnbmVkKTtcbiAgICBjb25zdCBkZWNvZGVkID0gemVjLmRlY29kZVRyYW5zYWN0aW9uKEJ1ZmZlci5mcm9tKHNpZ25lZC50eEhleCwgJ2hleCcpKTtcbiAgICBhc3NlcnQub2soZGVjb2RlZCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoQml0R29Qc2J0KTtcbiAgICBhc3NlcnQub2soIShkZWNvZGVkIGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidCkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNvZGVkLnZlcmlmeVNpZ25hdHVyZSgwLCB4cHVic1swXSksIHRydWUpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnWmVjIHNoaWVsZGVkIG91dF9jaXBoZXJ0ZXh0IChvdmsgZGVyaXZhdGlvbiknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHsgeHByaXZzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcblxuICBmdW5jdGlvbiBidWlsZFBzYnQoYnVpbGRPdms/OiBVaW50OEFycmF5KTogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidCB7XG4gICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ3R6ZWMnLCB3YWxsZXRLZXlzLCB7IGJsb2NrSGVpZ2h0OiA0MjAwMDAwIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0SW5wdXQoeyB0eGlkOiAnMTEnLnJlcGVhdCgzMiksIHZvdXQ6IDAsIHZhbHVlOiAxMDAwMDBuIH0sIHdhbGxldEtleXMsIHtcbiAgICAgIHNjcmlwdElkOiB7IGNoYWluOiAwLCBpbmRleDogMCB9LFxuICAgIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0T3V0cHV0KHdhbGxldEtleXMsIHsgY2hhaW46IDEsIGluZGV4OiAwLCB2YWx1ZTogOTAwMDBuIH0pO1xuICAgIHBzYnQuYWRkU2hpZWxkZWRPdXRwdXRzKFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgcmVjaXBpZW50OiBuZXcgVWludDhBcnJheShJUk9OV09PRF9SRUNFSVZFUiksXG4gICAgICAgICAgYW1vdW50OiA1MDAwbixcbiAgICAgICAgICB1bmlmaWVkQWRkcmVzcyxcbiAgICAgICAgICAuLi4oYnVpbGRPdmsgPyB7IG92azogYnVpbGRPdmsgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBuZXcgVWludDhBcnJheSgzMilcbiAgICApO1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgZnVuY3Rpb24gcGN6dE9mKHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQpOiBCdWZmZXIge1xuICAgIGNvbnN0IHBjenQgPSBwc2J0LmdldFBjenQoKTtcbiAgICBhc3NlcnQub2socGN6dCwgJ2V4cGVjdGVkIHRoZSBvcmNoYXJkIFBDWlQgdG8gYmUgcHJlc2VudCcpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShwY3p0KTtcbiAgfVxuXG4gIGl0KCdzaWduKCkgZmluYWxpemVzIG91dF9jaXBoZXJ0ZXh0IHRvIHRoZSBzYW1lIGJ5dGVzIGFzIHRoZSBleHBsaWNpdCBjbGllbnQtbWFuYWdlZC1vdmsgZGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBvdXRfY2lwaGVydGV4dCBlbmNyeXB0aW9uIGlzIGRldGVybWluaXN0aWMgZ2l2ZW4gdGhlIChpZGVudGljYWwpIG9yY2hhcmQgYWN0aW9uIGFuZCB0aGVcbiAgICAvLyBvdmssIHNvIGJ5dGUtZXF1YWxpdHkgb2YgdGhlIFBDWlQgcHJvdmVzIHNpZ24oKSdzIGltcGxpY2l0IGRlcml2YXRpb24gaXMgZXhhY3RseSB0aGVcbiAgICAvLyBkb2N1bWVudGVkIG9uZTogdGhlIEVDREggYWdyZWVtZW50IG9mIHJvb3RXYWxsZXRLZXlzLmJpdGdvS2V5KCkgYW5kIHRoZSB1c2VyIHJvb3Qga2V5LlxuICAgIGNvbnN0IGJ5dGVzID0gYnVpbGRQc2J0KCkuc2VyaWFsaXplKCk7XG4gICAgY29uc3QgYXV0b1BzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0LmZyb21CeXRlcyhieXRlcywgJ3R6ZWMnKTtcbiAgICBhdXRvUHNidC5zaWduKHhwcml2c1swXSwgd2FsbGV0S2V5cyk7XG4gICAgY29uc3QgbWFudWFsUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQuZnJvbUJ5dGVzKGJ5dGVzLCAndHplYycpO1xuICAgIG1hbnVhbFBzYnQuc2V0U2hpZWxkZWRPdXRDaXBoZXJ0ZXh0KDAsIHhwcml2c1swXSwgd2FsbGV0S2V5cyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwY3p0T2YoYXV0b1BzYnQpLCBwY3p0T2YobWFudWFsUHNidCkpO1xuICB9KTtcblxuICBpdCgnb3V0X2NpcGhlcnRleHQgZGlmZmVycyB3aGVuIGVuY3J5cHRlZCB1bmRlciBkaWZmZXJlbnQgb3ZrcycsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGUgYmluZGluZyBiZXR3ZWVuIG91dF9jaXBoZXJ0ZXh0IGFuZCB0aGUgb3ZrIGlzIHJlYWw6IHR3byBidWlsZHMgaWRlbnRpY2FsIGV4Y2VwdCBmb3JcbiAgICAvLyB0aGUgYnVpbGQtdGltZSBvdmsgcHJvZHVjZSBkaWZmZXJlbnQgUENaVHMsIHNvIHRoZSBlcXVhbGl0eSBhc3NlcnRpb25zIGhlcmUgYXJlIG5vdFxuICAgIC8vIHZhY3VvdXMgKG91dF9jaXBoZXJ0ZXh0IGNhbm5vdCBiZSBhIGNvbnN0YW50KS5cbiAgICBhc3NlcnQubm90RGVlcFN0cmljdEVxdWFsKFxuICAgICAgcGN6dE9mKGJ1aWxkUHNidChuZXcgVWludDhBcnJheSgzMikuZmlsbCgxKSkpLFxuICAgICAgcGN6dE9mKGJ1aWxkUHNidChuZXcgVWludDhBcnJheSgzMikuZmlsbCgyKSkpXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3NpZ24oKSBvdmVycmlkZXMgYSBidWlsZC10aW1lIG92ayB3aXRoIHRoZSB3YWxsZXQgb3ZrJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJ5dGVzID0gYnVpbGRQc2J0KG5ldyBVaW50OEFycmF5KDMyKS5maWxsKDEpKS5zZXJpYWxpemUoKTtcbiAgICBjb25zdCBidWlsdFBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0LmZyb21CeXRlcyhieXRlcywgJ3R6ZWMnKTtcbiAgICBjb25zdCBzaWduZWRQc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidC5mcm9tQnl0ZXMoYnl0ZXMsICd0emVjJyk7XG4gICAgc2lnbmVkUHNidC5zaWduKHhwcml2c1swXSwgd2FsbGV0S2V5cyk7XG4gICAgLy8gVGhlIGZpcnN0IHNpZ25pbmcgcm91bmQgcmUtZW5jcnlwdHMgb3V0X2NpcGhlcnRleHQgdW5kZXIgdGhlIHdhbGxldCBvdmssIGRpc2NhcmRpbmcgdGhlXG4gICAgLy8gYnVpbGQtdGltZSBvbmUuLi5cbiAgICBhc3NlcnQubm90RGVlcFN0cmljdEVxdWFsKHBjenRPZihzaWduZWRQc2J0KSwgcGN6dE9mKGJ1aWx0UHNidCkpO1xuICAgIC8vIC4uLmFuZCB0aGUgcmVzdWx0IGlzIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBleHBsaWNpdCB3YWxsZXQtb3ZrIGRlcml2YXRpb24uXG4gICAgY29uc3QgbWFudWFsUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQuZnJvbUJ5dGVzKGJ5dGVzLCAndHplYycpO1xuICAgIG1hbnVhbFBzYnQuc2V0U2hpZWxkZWRPdXRDaXBoZXJ0ZXh0KDAsIHhwcml2c1swXSwgd2FsbGV0S2V5cyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwY3p0T2Yoc2lnbmVkUHNidCksIHBjenRPZihtYW51YWxQc2J0KSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGFuIG92ayBkZXJpdmVkIGZyb20gYSBub24tdXNlciBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gQW4gb3ZrIGZyb20gdGhlIGJhY2t1cCBvciBCaXRHbyBrZXkgaXMgb25lIG5laXRoZXIgdGhlIHVzZXIgbm9yIHRoZSBzZXJ2ZXIgY2FuXG4gICAgLy8gcmVwcm9kdWNlLCB3aGljaCB3b3VsZCBsZWF2ZSB0aGUgc2hpZWxkZWQgb3V0cHV0IHVucmVjb3ZlcmFibGUgYWZ0ZXIgYnJvYWRjYXN0LlxuICAgIGNvbnN0IHBzYnQgPSBidWlsZFBzYnQoKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHBzYnQuc2V0U2hpZWxkZWRPdXRDaXBoZXJ0ZXh0KDAsIHhwcml2c1sxXSwgd2FsbGV0S2V5cykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcHNidC5zZXRTaGllbGRlZE91dENpcGhlcnRleHQoMCwgeHByaXZzWzJdLCB3YWxsZXRLZXlzKSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/impl/zec/unit/address.ts"],"names":[],"mappings":""}
|