@bitgo/abstract-utxo 10.16.0 → 10.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/abstractUtxoCoin.d.ts +9 -13
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +28 -14
- package/dist/cjs/src/address/fixedScript.d.ts +4 -9
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
- package/dist/cjs/src/address/fixedScript.js +18 -50
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts +4 -5
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/NamedDescriptor.js +4 -6
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +3 -38
- package/dist/cjs/src/descriptor/builder/builder.d.ts +2 -3
- package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/builder/builder.js +1 -1
- package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/builder/parse.js +3 -3
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts +2 -2
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.js +1 -1
- package/dist/cjs/src/descriptor/index.d.ts +1 -1
- package/dist/cjs/src/descriptor/index.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/index.js +1 -1
- package/dist/cjs/src/descriptor/validatePolicy.d.ts +3 -3
- package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/validatePolicy.js +3 -3
- package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
- package/dist/cjs/src/impl/bch/bch.js +6 -38
- package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts +15 -5
- package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -1
- package/dist/cjs/src/impl/btc/inscriptionBuilder.js +43 -55
- package/dist/cjs/src/impl/doge/doge.d.ts +2 -1
- package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
- package/dist/cjs/src/impl/doge/doge.js +1 -1
- package/dist/cjs/src/impl/ltc/ltc.d.ts +0 -1
- package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -1
- package/dist/cjs/src/impl/ltc/ltc.js +3 -41
- package/dist/cjs/src/impl/ltc/tltc.d.ts +0 -1
- package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -1
- package/dist/cjs/src/impl/ltc/tltc.js +3 -40
- package/dist/cjs/src/index.d.ts +2 -0
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +3 -1
- package/dist/cjs/src/keychains.d.ts +5 -0
- package/dist/cjs/src/keychains.d.ts.map +1 -1
- package/dist/cjs/src/keychains.js +10 -1
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +2 -2
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/descriptor/transaction.js +5 -8
- package/dist/cjs/src/recovery/RecoveryProvider.d.ts +1 -3
- package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -1
- package/dist/cjs/src/recovery/RecoveryProvider.js +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +73 -4
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.js +163 -129
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts +5 -5
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/crossChainRecovery.js +22 -121
- package/dist/cjs/src/recovery/psbt.d.ts +8 -31
- package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
- package/dist/cjs/src/recovery/psbt.js +14 -126
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +3 -3
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/explainPsbt.js +17 -54
- package/dist/cjs/src/transaction/descriptor/index.d.ts +1 -1
- package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/index.js +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.d.ts +6 -4
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.js +24 -50
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +6 -7
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/signPsbt.js +19 -18
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +4 -4
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +10 -38
- package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/explainTransaction.js +3 -2
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +5 -3
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/SigningError.js +10 -2
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -8
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/parseOutput.js +8 -12
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +2 -2
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +36 -11
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +4 -2
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +3 -2
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +15 -25
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +6 -5
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +42 -7
- package/dist/cjs/src/transaction/outputDifference.d.ts +5 -1
- package/dist/cjs/src/transaction/outputDifference.d.ts.map +1 -1
- package/dist/cjs/src/transaction/outputDifference.js +6 -2
- package/dist/cjs/src/transaction/recipient.d.ts +5 -0
- package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
- package/dist/cjs/src/transaction/recipient.js +14 -1
- package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/signTransaction.js +10 -10
- package/dist/cjs/src/unspent.d.ts +55 -0
- package/dist/cjs/src/unspent.d.ts.map +1 -0
- package/dist/cjs/src/unspent.js +12 -0
- package/dist/cjs/src/wasmUtil.d.ts +29 -0
- package/dist/cjs/src/wasmUtil.d.ts.map +1 -0
- package/dist/cjs/src/wasmUtil.js +87 -0
- package/dist/cjs/test/unit/address.d.ts +1 -1
- package/dist/cjs/test/unit/address.d.ts.map +1 -1
- package/dist/cjs/test/unit/address.js +107 -137
- package/dist/cjs/test/unit/bip322.js +50 -1
- package/dist/cjs/test/unit/coins.js +7 -2
- package/dist/cjs/test/unit/customSigner.js +5 -4
- package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +37 -4
- package/dist/cjs/test/unit/descriptor/builder.js +10 -4
- package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +37 -4
- package/dist/cjs/test/unit/descriptor/descriptorWallet.js +40 -6
- package/dist/cjs/test/unit/descriptorAddress.d.ts +2 -2
- package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
- package/dist/cjs/test/unit/descriptorAddress.js +10 -9
- package/dist/cjs/test/unit/explainTransaction.js +26 -3
- package/dist/cjs/test/unit/keychains.js +40 -1
- 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 +62 -0
- package/dist/cjs/test/unit/prebuildAndSign.d.ts +0 -4
- package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -1
- package/dist/cjs/test/unit/prebuildAndSign.js +12 -31
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +82 -258
- 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 +144 -0
- package/dist/cjs/test/unit/recovery/crossChainRecovery.js +41 -37
- 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 +186 -0
- package/dist/cjs/test/unit/recovery/mock.d.ts +15 -8
- package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
- package/dist/cjs/test/unit/recovery/mock.js +50 -77
- 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 +244 -0
- package/dist/cjs/test/unit/testSpoofTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/testSpoofTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/testSpoofTransaction.js +114 -0
- package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +46 -12
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -1
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +38 -4
- package/dist/cjs/test/unit/transaction/descriptor/parse.js +22 -19
- package/dist/cjs/test/unit/transaction/descriptor/sign.js +60 -16
- package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +43 -10
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -2
- 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.js +8 -226
- package/dist/cjs/test/unit/txFormat.d.ts.map +1 -1
- package/dist/cjs/test/unit/txFormat.js +9 -9
- package/dist/cjs/test/unit/util/address.d.ts +13 -0
- package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/address.js +15 -0
- package/dist/cjs/test/unit/util/index.d.ts +3 -0
- package/dist/cjs/test/unit/util/index.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/index.js +4 -1
- package/dist/cjs/test/unit/util/keychains.d.ts +29 -0
- package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/keychains.js +51 -1
- package/dist/cjs/test/unit/util/nockBitGo.d.ts +8 -1
- package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/nockBitGo.js +17 -1
- package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/nockIndexerAPI.js +4 -37
- 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 +8 -4
- package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/transaction.js +22 -2
- package/dist/cjs/test/unit/util/unspents.d.ts +66 -8
- package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/unspents.js +130 -15
- package/dist/cjs/test/unit/util/utxoCoins.d.ts +13 -0
- package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/utxoCoins.js +33 -2
- package/dist/cjs/test/unit/wallet.js +4 -4
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +9 -13
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +30 -16
- package/dist/esm/address/fixedScript.d.ts +4 -9
- package/dist/esm/address/fixedScript.d.ts.map +1 -1
- package/dist/esm/address/fixedScript.js +18 -17
- package/dist/esm/descriptor/NamedDescriptor.d.ts +4 -5
- package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -1
- package/dist/esm/descriptor/NamedDescriptor.js +5 -7
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -5
- package/dist/esm/descriptor/builder/builder.d.ts +2 -3
- package/dist/esm/descriptor/builder/builder.d.ts.map +1 -1
- package/dist/esm/descriptor/builder/builder.js +1 -1
- package/dist/esm/descriptor/builder/parse.d.ts.map +1 -1
- package/dist/esm/descriptor/builder/parse.js +3 -3
- package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +2 -2
- package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
- package/dist/esm/descriptor/createWallet/createDescriptors.js +1 -1
- package/dist/esm/descriptor/descriptorWallet.d.ts +1 -1
- package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -1
- package/dist/esm/descriptor/descriptorWallet.js +1 -1
- package/dist/esm/descriptor/index.d.ts +1 -1
- package/dist/esm/descriptor/index.d.ts.map +1 -1
- package/dist/esm/descriptor/index.js +1 -1
- package/dist/esm/descriptor/validatePolicy.d.ts +3 -3
- package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -1
- package/dist/esm/descriptor/validatePolicy.js +3 -3
- package/dist/esm/impl/bch/bch.d.ts.map +1 -1
- package/dist/esm/impl/bch/bch.js +6 -5
- package/dist/esm/impl/btc/inscriptionBuilder.d.ts +15 -5
- package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -1
- package/dist/esm/impl/btc/inscriptionBuilder.js +44 -23
- package/dist/esm/impl/doge/doge.d.ts +2 -1
- package/dist/esm/impl/doge/doge.d.ts.map +1 -1
- package/dist/esm/impl/doge/doge.js +1 -1
- package/dist/esm/impl/ltc/ltc.d.ts +0 -1
- package/dist/esm/impl/ltc/ltc.d.ts.map +1 -1
- package/dist/esm/impl/ltc/ltc.js +3 -8
- package/dist/esm/impl/ltc/tltc.d.ts +0 -1
- package/dist/esm/impl/ltc/tltc.d.ts.map +1 -1
- package/dist/esm/impl/ltc/tltc.js +3 -7
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/keychains.d.ts +5 -0
- package/dist/esm/keychains.d.ts.map +1 -1
- package/dist/esm/keychains.js +9 -1
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +2 -2
- package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
- package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/esm/offlineVault/descriptor/transaction.js +5 -8
- package/dist/esm/recovery/RecoveryProvider.d.ts +1 -3
- package/dist/esm/recovery/RecoveryProvider.d.ts.map +1 -1
- package/dist/esm/recovery/RecoveryProvider.js +1 -1
- package/dist/esm/recovery/backupKeyRecovery.d.ts +73 -4
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/backupKeyRecovery.js +165 -100
- package/dist/esm/recovery/crossChainRecovery.d.ts +5 -5
- package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/crossChainRecovery.js +24 -90
- package/dist/esm/recovery/psbt.d.ts +8 -31
- package/dist/esm/recovery/psbt.d.ts.map +1 -1
- package/dist/esm/recovery/psbt.js +14 -91
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts +3 -3
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/explainPsbt.js +14 -18
- package/dist/esm/transaction/descriptor/index.d.ts +1 -1
- package/dist/esm/transaction/descriptor/index.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/index.js +1 -1
- package/dist/esm/transaction/descriptor/parse.d.ts +6 -4
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parse.js +22 -15
- package/dist/esm/transaction/descriptor/signPsbt.d.ts +6 -7
- package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/signPsbt.js +19 -18
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +4 -4
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.js +10 -5
- package/dist/esm/transaction/explainTransaction.d.ts +2 -1
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/explainTransaction.js +3 -2
- package/dist/esm/transaction/fixedScript/SigningError.d.ts +5 -3
- package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/SigningError.js +8 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +2 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.js +1 -8
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/parseOutput.js +8 -12
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +2 -2
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/parseTransaction.js +36 -11
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +4 -2
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +3 -2
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtWasm.js +14 -24
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +6 -5
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signTransaction.js +10 -8
- package/dist/esm/transaction/outputDifference.d.ts +5 -1
- package/dist/esm/transaction/outputDifference.d.ts.map +1 -1
- package/dist/esm/transaction/outputDifference.js +5 -2
- package/dist/esm/transaction/recipient.d.ts +5 -0
- package/dist/esm/transaction/recipient.d.ts.map +1 -1
- package/dist/esm/transaction/recipient.js +13 -1
- package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/signTransaction.js +10 -10
- package/dist/esm/unspent.d.ts +55 -0
- package/dist/esm/unspent.d.ts.map +1 -0
- package/dist/esm/unspent.js +8 -0
- package/dist/esm/wasmUtil.d.ts +29 -0
- package/dist/esm/wasmUtil.d.ts.map +1 -0
- package/dist/esm/wasmUtil.js +47 -0
- package/package.json +13 -14
- package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts +0 -2
- package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/btc/unit/btc.js +0 -220
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts +0 -4
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.js +0 -10
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts +0 -2
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.js +0 -18
- package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts +0 -2
- package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/ltc/unit/index.js +0 -39
- package/dist/cjs/test/unit/transaction/descriptor/outputDifference.d.ts.map +0 -1
- package/dist/cjs/test/unit/transaction/descriptor/outputDifference.js +0 -76
- /package/dist/cjs/test/unit/transaction/{descriptor/outputDifference.d.ts → outputDifference.d.ts} +0 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
2
|
+
/**
|
|
3
|
+
* Unspent transaction output (UTXO) type definition
|
|
4
|
+
*
|
|
5
|
+
* This type represents an unspent transaction output, independent from utxo-lib.
|
|
6
|
+
* The structure matches utxolib.bitgo.Unspent but is defined locally.
|
|
7
|
+
*
|
|
8
|
+
* @property id - Format: ${txid}:${vout}. Use `parseOutputId(id)` to parse.
|
|
9
|
+
* @property address - The network-specific encoded address. Use `toOutputScript(address, network)` to obtain scriptPubKey.
|
|
10
|
+
* @property value - The amount in satoshi.
|
|
11
|
+
*/
|
|
12
|
+
export interface Unspent<TNumber extends number | bigint = number> {
|
|
13
|
+
/**
|
|
14
|
+
* Format: ${txid}:${vout}.
|
|
15
|
+
* Use `parseOutputId(id)` to parse.
|
|
16
|
+
*/
|
|
17
|
+
id: string;
|
|
18
|
+
/**
|
|
19
|
+
* The network-specific encoded address.
|
|
20
|
+
* Use `toOutputScript(address, network)` to obtain scriptPubKey.
|
|
21
|
+
*/
|
|
22
|
+
address: string;
|
|
23
|
+
/**
|
|
24
|
+
* The amount in satoshi.
|
|
25
|
+
*/
|
|
26
|
+
value: TNumber;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Wallet unspent type - extends Unspent with wallet-specific fields
|
|
30
|
+
*
|
|
31
|
+
* This type includes all fields from Unspent plus:
|
|
32
|
+
* - chain: ChainCode (chain code for wallet derivation)
|
|
33
|
+
* - index: number (index for wallet derivation)
|
|
34
|
+
*/
|
|
35
|
+
export interface WalletUnspent<TNumber extends number | bigint = number> extends Unspent<TNumber> {
|
|
36
|
+
chain: utxolib.bitgo.ChainCode;
|
|
37
|
+
index: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Unspent with previous transaction data
|
|
41
|
+
*
|
|
42
|
+
* Extends Unspent with:
|
|
43
|
+
* - prevTx: Buffer (previous transaction data for legacy transactions)
|
|
44
|
+
*/
|
|
45
|
+
export interface UnspentWithPrevTx<TNumber extends number | bigint = number> extends Unspent<TNumber> {
|
|
46
|
+
prevTx: Buffer;
|
|
47
|
+
}
|
|
48
|
+
export declare function parseOutputId(id: string): {
|
|
49
|
+
txid: string;
|
|
50
|
+
vout: number;
|
|
51
|
+
};
|
|
52
|
+
export declare function unspentSum(unspents: {
|
|
53
|
+
value: number | bigint;
|
|
54
|
+
}[]): bigint;
|
|
55
|
+
//# sourceMappingURL=unspent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unspent.d.ts","sourceRoot":"","sources":["../../src/unspent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;;;GASG;AACH,MAAM,WAAW,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IAC/D;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,OAAO,CAAC,OAAO,CAAC;IAC/F,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,OAAO,CAAC,OAAO,CAAC;IACnG,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAGxE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAEzE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export function parseOutputId(id) {
|
|
2
|
+
const [txid, vout] = id.split(':');
|
|
3
|
+
return { txid, vout: Number(vout) };
|
|
4
|
+
}
|
|
5
|
+
export function unspentSum(unspents) {
|
|
6
|
+
return unspents.reduce((sum, unspent) => sum + BigInt(unspent.value), 0n);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zcGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91bnNwZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1EQSxNQUFNLFVBQVUsYUFBYSxDQUFDLEVBQVU7SUFDdEMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLFFBQXNDO0lBQy9ELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbi8qKlxuICogVW5zcGVudCB0cmFuc2FjdGlvbiBvdXRwdXQgKFVUWE8pIHR5cGUgZGVmaW5pdGlvblxuICpcbiAqIFRoaXMgdHlwZSByZXByZXNlbnRzIGFuIHVuc3BlbnQgdHJhbnNhY3Rpb24gb3V0cHV0LCBpbmRlcGVuZGVudCBmcm9tIHV0eG8tbGliLlxuICogVGhlIHN0cnVjdHVyZSBtYXRjaGVzIHV0eG9saWIuYml0Z28uVW5zcGVudCBidXQgaXMgZGVmaW5lZCBsb2NhbGx5LlxuICpcbiAqIEBwcm9wZXJ0eSBpZCAtIEZvcm1hdDogJHt0eGlkfToke3ZvdXR9LiBVc2UgYHBhcnNlT3V0cHV0SWQoaWQpYCB0byBwYXJzZS5cbiAqIEBwcm9wZXJ0eSBhZGRyZXNzIC0gVGhlIG5ldHdvcmstc3BlY2lmaWMgZW5jb2RlZCBhZGRyZXNzLiBVc2UgYHRvT3V0cHV0U2NyaXB0KGFkZHJlc3MsIG5ldHdvcmspYCB0byBvYnRhaW4gc2NyaXB0UHViS2V5LlxuICogQHByb3BlcnR5IHZhbHVlIC0gVGhlIGFtb3VudCBpbiBzYXRvc2hpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICAvKipcbiAgICogRm9ybWF0OiAke3R4aWR9OiR7dm91dH0uXG4gICAqIFVzZSBgcGFyc2VPdXRwdXRJZChpZClgIHRvIHBhcnNlLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuZXR3b3JrLXNwZWNpZmljIGVuY29kZWQgYWRkcmVzcy5cbiAgICogVXNlIGB0b091dHB1dFNjcmlwdChhZGRyZXNzLCBuZXR3b3JrKWAgdG8gb2J0YWluIHNjcmlwdFB1YktleS5cbiAgICovXG4gIGFkZHJlc3M6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgaW4gc2F0b3NoaS5cbiAgICovXG4gIHZhbHVlOiBUTnVtYmVyO1xufVxuXG4vKipcbiAqIFdhbGxldCB1bnNwZW50IHR5cGUgLSBleHRlbmRzIFVuc3BlbnQgd2l0aCB3YWxsZXQtc3BlY2lmaWMgZmllbGRzXG4gKlxuICogVGhpcyB0eXBlIGluY2x1ZGVzIGFsbCBmaWVsZHMgZnJvbSBVbnNwZW50IHBsdXM6XG4gKiAtIGNoYWluOiBDaGFpbkNvZGUgKGNoYWluIGNvZGUgZm9yIHdhbGxldCBkZXJpdmF0aW9uKVxuICogLSBpbmRleDogbnVtYmVyIChpbmRleCBmb3Igd2FsbGV0IGRlcml2YXRpb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FsbGV0VW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIFVuc3BlbnQ8VE51bWJlcj4ge1xuICBjaGFpbjogdXR4b2xpYi5iaXRnby5DaGFpbkNvZGU7XG4gIGluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogVW5zcGVudCB3aXRoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGRhdGFcbiAqXG4gKiBFeHRlbmRzIFVuc3BlbnQgd2l0aDpcbiAqIC0gcHJldlR4OiBCdWZmZXIgKHByZXZpb3VzIHRyYW5zYWN0aW9uIGRhdGEgZm9yIGxlZ2FjeSB0cmFuc2FjdGlvbnMpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5zcGVudFdpdGhQcmV2VHg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBVbnNwZW50PFROdW1iZXI+IHtcbiAgcHJldlR4OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU91dHB1dElkKGlkOiBzdHJpbmcpOiB7IHR4aWQ6IHN0cmluZzsgdm91dDogbnVtYmVyIH0ge1xuICBjb25zdCBbdHhpZCwgdm91dF0gPSBpZC5zcGxpdCgnOicpO1xuICByZXR1cm4geyB0eGlkLCB2b3V0OiBOdW1iZXIodm91dCkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3BlbnRTdW0odW5zcGVudHM6IHsgdmFsdWU6IG51bWJlciB8IGJpZ2ludCB9W10pOiBiaWdpbnQge1xuICByZXR1cm4gdW5zcGVudHMucmVkdWNlKChzdW0sIHVuc3BlbnQpID0+IHN1bSArIEJpZ0ludCh1bnNwZW50LnZhbHVlKSwgMG4pO1xufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BIP32, ECPair, Psbt, descriptorWallet } from '@bitgo/wasm-utxo';
|
|
2
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
3
|
+
export type BIP32Key = BIP32 | utxolib.BIP32Interface;
|
|
4
|
+
export type ECPairKey = ECPair | utxolib.ECPairInterface | Uint8Array;
|
|
5
|
+
export type UtxoLibPsbt = utxolib.Psbt | utxolib.bitgo.UtxoPsbt;
|
|
6
|
+
/**
|
|
7
|
+
* Map of descriptor name to Descriptor instance.
|
|
8
|
+
* Re-exported from wasm-utxo for consistency.
|
|
9
|
+
*/
|
|
10
|
+
export type DescriptorMap = descriptorWallet.DescriptorMap;
|
|
11
|
+
/**
|
|
12
|
+
* Key type accepted by descriptorWallet.signWithKey
|
|
13
|
+
*/
|
|
14
|
+
export type SignerKey = Parameters<typeof descriptorWallet.signWithKey>[1];
|
|
15
|
+
/**
|
|
16
|
+
* Convert a utxo-lib BIP32Interface to a wasm-utxo BIP32 instance.
|
|
17
|
+
* Preserves private key by using base58 serialization.
|
|
18
|
+
*/
|
|
19
|
+
export declare function toWasmBIP32(key: BIP32Key): BIP32;
|
|
20
|
+
export declare function toWasmECPair(key: ECPairKey): ECPair;
|
|
21
|
+
export declare function isUtxoLibPsbt(psbt: unknown): psbt is UtxoLibPsbt;
|
|
22
|
+
export declare function toWasmPsbt(psbt: Psbt | UtxoLibPsbt | Uint8Array): Psbt;
|
|
23
|
+
/**
|
|
24
|
+
* Sum the `value` property of an array of objects.
|
|
25
|
+
*/
|
|
26
|
+
export declare function sumValues(arr: {
|
|
27
|
+
value: bigint;
|
|
28
|
+
}[]): bigint;
|
|
29
|
+
//# sourceMappingURL=wasmUtil.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasmUtil.d.ts","sourceRoot":"","sources":["../../src/wasmUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;AACtD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,UAAU,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AAEhE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,KAAK,CAMhD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAWnD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,WAAW,CAEhE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAWtE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { BIP32, ECPair, Psbt } from '@bitgo/wasm-utxo';
|
|
2
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
3
|
+
/**
|
|
4
|
+
* Convert a utxo-lib BIP32Interface to a wasm-utxo BIP32 instance.
|
|
5
|
+
* Preserves private key by using base58 serialization.
|
|
6
|
+
*/
|
|
7
|
+
export function toWasmBIP32(key) {
|
|
8
|
+
if (key instanceof BIP32) {
|
|
9
|
+
return key;
|
|
10
|
+
}
|
|
11
|
+
// All utxo-lib BIP32Interface instances have toBase58
|
|
12
|
+
return BIP32.fromBase58(key.toBase58());
|
|
13
|
+
}
|
|
14
|
+
export function toWasmECPair(key) {
|
|
15
|
+
if (key instanceof ECPair) {
|
|
16
|
+
return key;
|
|
17
|
+
}
|
|
18
|
+
if (key instanceof Uint8Array) {
|
|
19
|
+
return ECPair.from(key);
|
|
20
|
+
}
|
|
21
|
+
if (key.privateKey) {
|
|
22
|
+
return ECPair.fromPrivateKey(key.privateKey);
|
|
23
|
+
}
|
|
24
|
+
return ECPair.fromPublicKey(key.publicKey);
|
|
25
|
+
}
|
|
26
|
+
export function isUtxoLibPsbt(psbt) {
|
|
27
|
+
return psbt instanceof utxolib.Psbt || psbt instanceof utxolib.bitgo.UtxoPsbt;
|
|
28
|
+
}
|
|
29
|
+
export function toWasmPsbt(psbt) {
|
|
30
|
+
if (psbt instanceof Psbt) {
|
|
31
|
+
return psbt;
|
|
32
|
+
}
|
|
33
|
+
if (psbt instanceof Uint8Array) {
|
|
34
|
+
return Psbt.deserialize(psbt);
|
|
35
|
+
}
|
|
36
|
+
if (isUtxoLibPsbt(psbt)) {
|
|
37
|
+
return Psbt.deserialize(psbt.toBuffer());
|
|
38
|
+
}
|
|
39
|
+
throw new Error('Unsupported PSBT type');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Sum the `value` property of an array of objects.
|
|
43
|
+
*/
|
|
44
|
+
export function sumValues(arr) {
|
|
45
|
+
return arr.reduce((sum, e) => sum + e.value, BigInt(0));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbVV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FzbVV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFvQixNQUFNLGtCQUFrQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFpQjNDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBYTtJQUN2QyxJQUFJLEdBQUcsWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxzREFBc0Q7SUFDdEQsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQWM7SUFDekMsSUFBSSxHQUFHLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsSUFBSSxHQUFHLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQWE7SUFDekMsT0FBTyxJQUFJLFlBQVksT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDaEYsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBcUM7SUFDOUQsSUFBSSxJQUFJLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBd0I7SUFDaEQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJJUDMyLCBFQ1BhaXIsIFBzYnQsIGRlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuZXhwb3J0IHR5cGUgQklQMzJLZXkgPSBCSVAzMiB8IHV0eG9saWIuQklQMzJJbnRlcmZhY2U7XG5leHBvcnQgdHlwZSBFQ1BhaXJLZXkgPSBFQ1BhaXIgfCB1dHhvbGliLkVDUGFpckludGVyZmFjZSB8IFVpbnQ4QXJyYXk7XG5leHBvcnQgdHlwZSBVdHhvTGliUHNidCA9IHV0eG9saWIuUHNidCB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG5cbi8qKlxuICogTWFwIG9mIGRlc2NyaXB0b3IgbmFtZSB0byBEZXNjcmlwdG9yIGluc3RhbmNlLlxuICogUmUtZXhwb3J0ZWQgZnJvbSB3YXNtLXV0eG8gZm9yIGNvbnNpc3RlbmN5LlxuICovXG5leHBvcnQgdHlwZSBEZXNjcmlwdG9yTWFwID0gZGVzY3JpcHRvcldhbGxldC5EZXNjcmlwdG9yTWFwO1xuXG4vKipcbiAqIEtleSB0eXBlIGFjY2VwdGVkIGJ5IGRlc2NyaXB0b3JXYWxsZXQuc2lnbldpdGhLZXlcbiAqL1xuZXhwb3J0IHR5cGUgU2lnbmVyS2V5ID0gUGFyYW1ldGVyczx0eXBlb2YgZGVzY3JpcHRvcldhbGxldC5zaWduV2l0aEtleT5bMV07XG5cbi8qKlxuICogQ29udmVydCBhIHV0eG8tbGliIEJJUDMySW50ZXJmYWNlIHRvIGEgd2FzbS11dHhvIEJJUDMyIGluc3RhbmNlLlxuICogUHJlc2VydmVzIHByaXZhdGUga2V5IGJ5IHVzaW5nIGJhc2U1OCBzZXJpYWxpemF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9XYXNtQklQMzIoa2V5OiBCSVAzMktleSk6IEJJUDMyIHtcbiAgaWYgKGtleSBpbnN0YW5jZW9mIEJJUDMyKSB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICAvLyBBbGwgdXR4by1saWIgQklQMzJJbnRlcmZhY2UgaW5zdGFuY2VzIGhhdmUgdG9CYXNlNThcbiAgcmV0dXJuIEJJUDMyLmZyb21CYXNlNTgoa2V5LnRvQmFzZTU4KCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9XYXNtRUNQYWlyKGtleTogRUNQYWlyS2V5KTogRUNQYWlyIHtcbiAgaWYgKGtleSBpbnN0YW5jZW9mIEVDUGFpcikge1xuICAgIHJldHVybiBrZXk7XG4gIH1cbiAgaWYgKGtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gRUNQYWlyLmZyb20oa2V5KTtcbiAgfVxuICBpZiAoa2V5LnByaXZhdGVLZXkpIHtcbiAgICByZXR1cm4gRUNQYWlyLmZyb21Qcml2YXRlS2V5KGtleS5wcml2YXRlS2V5KTtcbiAgfVxuICByZXR1cm4gRUNQYWlyLmZyb21QdWJsaWNLZXkoa2V5LnB1YmxpY0tleSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1V0eG9MaWJQc2J0KHBzYnQ6IHVua25vd24pOiBwc2J0IGlzIFV0eG9MaWJQc2J0IHtcbiAgcmV0dXJuIHBzYnQgaW5zdGFuY2VvZiB1dHhvbGliLlBzYnQgfHwgcHNidCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1dhc21Qc2J0KHBzYnQ6IFBzYnQgfCBVdHhvTGliUHNidCB8IFVpbnQ4QXJyYXkpOiBQc2J0IHtcbiAgaWYgKHBzYnQgaW5zdGFuY2VvZiBQc2J0KSB7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cbiAgaWYgKHBzYnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgcmV0dXJuIFBzYnQuZGVzZXJpYWxpemUocHNidCk7XG4gIH1cbiAgaWYgKGlzVXR4b0xpYlBzYnQocHNidCkpIHtcbiAgICByZXR1cm4gUHNidC5kZXNlcmlhbGl6ZShwc2J0LnRvQnVmZmVyKCkpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgUFNCVCB0eXBlJyk7XG59XG5cbi8qKlxuICogU3VtIHRoZSBgdmFsdWVgIHByb3BlcnR5IG9mIGFuIGFycmF5IG9mIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdW1WYWx1ZXMoYXJyOiB7IHZhbHVlOiBiaWdpbnQgfVtdKTogYmlnaW50IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKHN1bSwgZSkgPT4gc3VtICsgZS52YWx1ZSwgQmlnSW50KDApKTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo/abstract-utxo",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.18.0",
|
|
4
4
|
"description": "BitGo SDK coin library for UTXO base implementation",
|
|
5
5
|
"main": "./dist/cjs/src/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"build:cjs": "yarn tsc --build --incremental --verbose .",
|
|
28
28
|
"build:esm": "yarn tsc --project tsconfig.esm.json",
|
|
29
29
|
"fmt": "prettier --write .",
|
|
30
|
-
"check-fmt": "prettier --check '
|
|
30
|
+
"check-fmt": "prettier --check '{src,test}/**/*.{ts,js,json}'",
|
|
31
31
|
"clean": "rm -rf ./dist",
|
|
32
32
|
"lint": "eslint --quiet .",
|
|
33
33
|
"prepare": "npm run build",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"author": "BitGo SDK Team <sdkteam@bitgo.com>",
|
|
39
39
|
"license": "MIT",
|
|
40
40
|
"engines": {
|
|
41
|
-
"node": ">=20 <
|
|
41
|
+
"node": ">=20 <25"
|
|
42
42
|
},
|
|
43
43
|
"repository": {
|
|
44
44
|
"type": "git",
|
|
@@ -60,15 +60,14 @@
|
|
|
60
60
|
]
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@bitgo/blockapis": "^1.
|
|
64
|
-
"@bitgo/sdk-api": "^1.
|
|
65
|
-
"@bitgo/sdk-core": "^36.
|
|
66
|
-
"@bitgo/secp256k1": "^1.
|
|
67
|
-
"@bitgo/
|
|
68
|
-
"@bitgo/utxo-
|
|
69
|
-
"@bitgo/utxo-
|
|
70
|
-
"@bitgo/utxo
|
|
71
|
-
"@bitgo/wasm-utxo": "^1.27.0",
|
|
63
|
+
"@bitgo/blockapis": "^1.13.0",
|
|
64
|
+
"@bitgo/sdk-api": "^1.74.0",
|
|
65
|
+
"@bitgo/sdk-core": "^36.31.0",
|
|
66
|
+
"@bitgo/secp256k1": "^1.10.0",
|
|
67
|
+
"@bitgo/utxo-core": "^1.33.0",
|
|
68
|
+
"@bitgo/utxo-lib": "^11.21.0",
|
|
69
|
+
"@bitgo/utxo-ord": "^1.26.0",
|
|
70
|
+
"@bitgo/wasm-utxo": "^1.36.0",
|
|
72
71
|
"@types/lodash": "^4.14.121",
|
|
73
72
|
"@types/superagent": "4.1.15",
|
|
74
73
|
"bignumber.js": "^9.0.2",
|
|
@@ -79,8 +78,8 @@
|
|
|
79
78
|
"superagent": "^9.0.1"
|
|
80
79
|
},
|
|
81
80
|
"devDependencies": {
|
|
82
|
-
"@bitgo/sdk-test": "^9.1.
|
|
81
|
+
"@bitgo/sdk-test": "^9.1.26",
|
|
83
82
|
"mocha": "^10.2.0"
|
|
84
83
|
},
|
|
85
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "83a7782d1f719c62e132ab63b2fef30d44675226"
|
|
86
85
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"btc.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/impl/btc/unit/btc.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
@@ -1,220 +0,0 @@
|
|
|
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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
require("should");
|
|
40
|
-
const assert_1 = __importDefault(require("assert"));
|
|
41
|
-
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
42
|
-
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
43
|
-
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
44
|
-
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
45
|
-
const btc_1 = require("../../../../../src/impl/btc");
|
|
46
|
-
const fixtures_1 = require("./fixtures");
|
|
47
|
-
describe('BTC:', () => {
|
|
48
|
-
let bitgo;
|
|
49
|
-
before(() => {
|
|
50
|
-
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
51
|
-
bitgo.safeRegister('tbtc', btc_1.Tbtc.createInstance);
|
|
52
|
-
bitgo.initializeTestVars();
|
|
53
|
-
});
|
|
54
|
-
describe('Address validation:', () => {
|
|
55
|
-
let coin;
|
|
56
|
-
before(() => {
|
|
57
|
-
coin = bitgo.coin('tbtc');
|
|
58
|
-
});
|
|
59
|
-
it('should validate a base58 address', () => {
|
|
60
|
-
const validBase58Address = '2Mv1fGp8gHSqsiXYG7WqcYmHZdurDGVtUbn';
|
|
61
|
-
coin.isValidAddress(validBase58Address).should.be.true();
|
|
62
|
-
const invalidBase58Address = '2MV1FGP8GHSQSSXYG7WQCYMHZDURDGVTUBN';
|
|
63
|
-
coin.isValidAddress(invalidBase58Address).should.be.false();
|
|
64
|
-
});
|
|
65
|
-
it('should validate a bech32 address', () => {
|
|
66
|
-
const validBech32Address = 'tb1qtxxqmkkdx4n4lcp0nt2cct89uh3h3dlcu940kw9fcqyyq36peh0st94hfp';
|
|
67
|
-
coin.isValidAddress(validBech32Address).should.be.true();
|
|
68
|
-
coin.isValidAddress(validBech32Address.toUpperCase()).should.be.false();
|
|
69
|
-
});
|
|
70
|
-
it('should validate a bech32m address', () => {
|
|
71
|
-
// https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki#Test_vectors_for_Bech32m
|
|
72
|
-
const validBech32mAddress = 'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7';
|
|
73
|
-
coin.isValidAddress(validBech32mAddress).should.be.true();
|
|
74
|
-
coin.isValidAddress(validBech32mAddress.toUpperCase()).should.be.false();
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
describe('Post Build Validation', () => {
|
|
78
|
-
let coin;
|
|
79
|
-
before(() => {
|
|
80
|
-
coin = bitgo.coin('tbtc');
|
|
81
|
-
});
|
|
82
|
-
it('should not modify locktime on postProcessPrebuild', async () => {
|
|
83
|
-
const txHex = '0100000001a8ec78f09f7acb0d344622ed3082c1a98e51ba1b1ab65406044f6e0a801609020100000000ffffffff02a0860100000000001976a9149f9a7abd600c0caa03983a77c8c3df8e062cb2fa88acfbf2150000000000220020b922cc1e737e679d24ff2d2b18cfa9fff4e35a733b4fba94282eaa1b7cfe56d200000000';
|
|
84
|
-
const blockHeight = 100;
|
|
85
|
-
const preBuild = { txHex, blockHeight };
|
|
86
|
-
const postProcessBuilt = await coin.postProcessPrebuild(preBuild);
|
|
87
|
-
const transaction = utxolib.bitgo.createTransactionFromHex(postProcessBuilt.txHex, utxolib.networks.bitcoin);
|
|
88
|
-
transaction.locktime.should.equal(0);
|
|
89
|
-
const inputs = transaction.ins;
|
|
90
|
-
for (const input of inputs) {
|
|
91
|
-
input.sequence.should.equal(0xffffffff);
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
describe('Audit Key', () => {
|
|
96
|
-
const { key } = fixtures_1.btcBackupKey;
|
|
97
|
-
let coin;
|
|
98
|
-
before(() => {
|
|
99
|
-
coin = bitgo.coin('tbtc');
|
|
100
|
-
});
|
|
101
|
-
it('should return for valid inputs', () => {
|
|
102
|
-
coin.assertIsValidKey({
|
|
103
|
-
encryptedPrv: key,
|
|
104
|
-
walletPassphrase: 'kAm[EFQ6o=SxlcLFDw%,',
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
it('should throw error if the walletPassphrase is incorrect', () => {
|
|
108
|
-
assert_1.default.throws(() => coin.assertIsValidKey({
|
|
109
|
-
encryptedPrv: key,
|
|
110
|
-
walletPassphrase: 'foo',
|
|
111
|
-
}), { message: "failed to decrypt prv: ccm: tag doesn't match" });
|
|
112
|
-
});
|
|
113
|
-
it('should return throw if the key is altered', () => {
|
|
114
|
-
const alteredKey = key.replace(/[0-9]/g, '0');
|
|
115
|
-
assert_1.default.throws(() => coin.assertIsValidKey({
|
|
116
|
-
encryptedPrv: alteredKey,
|
|
117
|
-
walletPassphrase: 'kAm[EFQ6o=SxlcLFDw%,',
|
|
118
|
-
}), { message: 'failed to decrypt prv: json decrypt: invalid parameters' });
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
describe('Unspent management spoofability - Consolidation (BUILD_SIGN_SEND)', () => {
|
|
122
|
-
let coin;
|
|
123
|
-
let bitgoTest;
|
|
124
|
-
before(() => {
|
|
125
|
-
bitgoTest = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
126
|
-
bitgoTest.safeRegister('tbtc', btc_1.Tbtc.createInstance);
|
|
127
|
-
bitgoTest.initializeTestVars();
|
|
128
|
-
coin = bitgoTest.coin('tbtc');
|
|
129
|
-
});
|
|
130
|
-
it('should detect hex spoofing in BUILD_SIGN_SEND', async () => {
|
|
131
|
-
const keyTriple = utxolib.testutil.getKeyTriple('default');
|
|
132
|
-
const rootWalletKey = new utxolib.bitgo.RootWalletKeys(keyTriple);
|
|
133
|
-
const [user] = keyTriple;
|
|
134
|
-
const wallet = new sdk_core_1.Wallet(bitgoTest, coin, {
|
|
135
|
-
id: '5b34252f1bf349930e34020a',
|
|
136
|
-
coin: 'tbtc',
|
|
137
|
-
keys: ['user', 'backup', 'bitgo'],
|
|
138
|
-
});
|
|
139
|
-
const originalPsbt = utxolib.testutil.constructPsbt([{ scriptType: 'p2wsh', value: BigInt(10000) }], [{ address: 'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7', value: BigInt(9000) }], coin.network, rootWalletKey, 'unsigned');
|
|
140
|
-
utxolib.bitgo.addXpubsToPsbt(originalPsbt, rootWalletKey);
|
|
141
|
-
const spoofedPsbt = utxolib.testutil.constructPsbt([{ scriptType: 'p2wsh', value: BigInt(10000) }], [{ address: 'tb1pjgg9ty3s2ztp60v6lhgrw76f7hxydzuk9t9mjsndh3p2gf2ah7gs4850kn', value: BigInt(9000) }], coin.network, rootWalletKey, 'unsigned');
|
|
142
|
-
utxolib.bitgo.addXpubsToPsbt(spoofedPsbt, rootWalletKey);
|
|
143
|
-
const spoofedHex = spoofedPsbt.toHex();
|
|
144
|
-
const bgUrl = bitgoTest._baseUrl;
|
|
145
|
-
const nock = require('nock');
|
|
146
|
-
nock(bgUrl)
|
|
147
|
-
.post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/consolidateUnspents`)
|
|
148
|
-
.reply(200, { txHex: spoofedHex, consolidateId: 'test' });
|
|
149
|
-
nock(bgUrl)
|
|
150
|
-
.post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`)
|
|
151
|
-
.reply((requestBody) => {
|
|
152
|
-
if (requestBody?.txHex === spoofedHex) {
|
|
153
|
-
throw new Error('Spoofed transaction was sent: spoofing protection failed');
|
|
154
|
-
}
|
|
155
|
-
return [200, { txid: 'test-txid-123', status: 'signed' }];
|
|
156
|
-
});
|
|
157
|
-
const pubs = keyTriple.map((k) => k.neutered().toBase58());
|
|
158
|
-
const responses = [
|
|
159
|
-
{ pub: pubs[0], encryptedPrv: (0, sdk_api_1.encrypt)('pass', user.toBase58()) },
|
|
160
|
-
{ pub: pubs[1] },
|
|
161
|
-
{ pub: pubs[2] },
|
|
162
|
-
];
|
|
163
|
-
wallet
|
|
164
|
-
.keyIds()
|
|
165
|
-
.forEach((id, i) => nock(bgUrl).get(`/api/v2/${wallet.coin()}/key/${id}`).reply(200, responses[i]));
|
|
166
|
-
await assert_1.default.rejects(wallet.consolidateUnspents({ walletPassphrase: 'pass' }), (e) => typeof e?.message === 'string' &&
|
|
167
|
-
e.message.includes('prebuild attempts to spend to unintended external recipients'));
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
describe('Unspent management spoofability - Fanout (BUILD_SIGN_SEND)', () => {
|
|
171
|
-
let coin;
|
|
172
|
-
let bitgoTest;
|
|
173
|
-
before(() => {
|
|
174
|
-
bitgoTest = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
175
|
-
bitgoTest.safeRegister('tbtc', btc_1.Tbtc.createInstance);
|
|
176
|
-
bitgoTest.initializeTestVars();
|
|
177
|
-
coin = bitgoTest.coin('tbtc');
|
|
178
|
-
});
|
|
179
|
-
it('should detect hex spoofing in fanout BUILD_SIGN_SEND', async () => {
|
|
180
|
-
const keyTriple = utxolib.testutil.getKeyTriple('default');
|
|
181
|
-
const rootWalletKey = new utxolib.bitgo.RootWalletKeys(keyTriple);
|
|
182
|
-
const [user] = keyTriple;
|
|
183
|
-
const wallet = new sdk_core_1.Wallet(bitgoTest, coin, {
|
|
184
|
-
id: '5b34252f1bf349930e34020a',
|
|
185
|
-
coin: 'tbtc',
|
|
186
|
-
keys: ['user', 'backup', 'bitgo'],
|
|
187
|
-
});
|
|
188
|
-
const originalPsbt = utxolib.testutil.constructPsbt([{ scriptType: 'p2wsh', value: BigInt(10000) }], [{ address: 'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7', value: BigInt(9000) }], coin.network, rootWalletKey, 'unsigned');
|
|
189
|
-
utxolib.bitgo.addXpubsToPsbt(originalPsbt, rootWalletKey);
|
|
190
|
-
const spoofedPsbt = utxolib.testutil.constructPsbt([{ scriptType: 'p2wsh', value: BigInt(10000) }], [{ address: 'tb1pjgg9ty3s2ztp60v6lhgrw76f7hxydzuk9t9mjsndh3p2gf2ah7gs4850kn', value: BigInt(9000) }], coin.network, rootWalletKey, 'unsigned');
|
|
191
|
-
utxolib.bitgo.addXpubsToPsbt(spoofedPsbt, rootWalletKey);
|
|
192
|
-
const spoofedHex = spoofedPsbt.toHex();
|
|
193
|
-
const bgUrl = bitgoTest._baseUrl;
|
|
194
|
-
const nock = require('nock');
|
|
195
|
-
nock(bgUrl)
|
|
196
|
-
.post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/fanoutUnspents`)
|
|
197
|
-
.reply(200, { txHex: spoofedHex, fanoutId: 'test' });
|
|
198
|
-
nock(bgUrl)
|
|
199
|
-
.post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`)
|
|
200
|
-
.reply((requestBody) => {
|
|
201
|
-
if (requestBody?.txHex === spoofedHex) {
|
|
202
|
-
throw new Error('Spoofed transaction was sent: spoofing protection failed');
|
|
203
|
-
}
|
|
204
|
-
return [200, { txid: 'test-txid-123', status: 'signed' }];
|
|
205
|
-
});
|
|
206
|
-
const pubs = keyTriple.map((k) => k.neutered().toBase58());
|
|
207
|
-
const responses = [
|
|
208
|
-
{ pub: pubs[0], encryptedPrv: (0, sdk_api_1.encrypt)('pass', user.toBase58()) },
|
|
209
|
-
{ pub: pubs[1] },
|
|
210
|
-
{ pub: pubs[2] },
|
|
211
|
-
];
|
|
212
|
-
wallet
|
|
213
|
-
.keyIds()
|
|
214
|
-
.forEach((id, i) => nock(bgUrl).get(`/api/v2/${wallet.coin()}/key/${id}`).reply(200, responses[i]));
|
|
215
|
-
await assert_1.default.rejects(wallet.fanoutUnspents({ walletPassphrase: 'pass' }), (e) => typeof e?.message === 'string' &&
|
|
216
|
-
e.message.includes('prebuild attempts to spend to unintended external recipients'));
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnRjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2ltcGwvYnRjL3VuaXQvYnRjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0JBQWdCO0FBQ2hCLG9EQUE0QjtBQUU1Qiw4Q0FBK0Q7QUFDL0QsNENBQW1EO0FBQ25ELHlEQUEyQztBQUMzQyw4Q0FBeUM7QUFFekMscURBQW1EO0FBRW5ELHlDQUEwQztBQUUxQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUNwQixJQUFJLEtBQW1CLENBQUM7SUFFeEIsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxJQUFJLElBQVUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQVMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsTUFBTSxrQkFBa0IsR0FBRyxxQ0FBcUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxNQUFNLG9CQUFvQixHQUFHLHFDQUFxQyxDQUFDO1lBQ25F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QUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMzRCxNQUFNLFNBQVMsR0FBRztnQkFDaEIsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFBLGlCQUFPLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO2dCQUNoRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTthQUNqQixDQUFDO1lBQ0YsTUFBTTtpQkFDSCxNQUFNLEVBQUU7aUJBQ1IsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0RyxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUNsQixNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFDbkQsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUNULE9BQU8sQ0FBQyxFQUFFLE9BQU8sS0FBSyxRQUFRO2dCQUM5QixDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyw4REFBOEQsQ0FBQyxDQUNyRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyB0eXBlIFRlc3RCaXRHb0FQSSwgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJLCBlbmNyeXB0IH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgVGJ0YyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL2J0Yyc7XG5cbmltcG9ydCB7IGJ0Y0JhY2t1cEtleSB9IGZyb20gJy4vZml4dHVyZXMnO1xuXG5kZXNjcmliZSgnQlRDOicsICgpID0+IHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG5cbiAgYmVmb3JlKCgpID0+IHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RidGMnLCBUYnRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgdmFsaWRhdGlvbjonLCAoKSA9PiB7XG4gICAgbGV0IGNvaW46IFRidGM7XG4gICAgYmVmb3JlKCgpID0+IHtcbiAgICAgIGNvaW4gPSBiaXRnby5jb2luKCd0YnRjJykgYXMgVGJ0YztcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBiYXNlNTggYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkQmFzZTU4QWRkcmVzcyA9ICcyTXYxZkdwOGdIU3FzaVhZRzdXcWNZbUhaZHVyREdWdFVibic7XG4gICAgICBjb2luLmlzVmFsaWRBZGRyZXNzKHZhbGlkQmFzZTU4QWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNvbnN0IGludmFsaWRCYXNlNThBZGRyZXNzID0gJzJNVjFGR1A4R0hTUVNTWFlHN1dRQ1lNSFpEVVJER1ZUVUJOJztcbiAgICAgIGNvaW4uaXNWYWxpZEFkZHJlc3MoaW52YWxpZEJhc2U1OEFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIGJlY2gzMiBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRCZWNoMzJBZGRyZXNzID0gJ3RiMXF0eHhxbWtrZHg0bjRsY3AwbnQyY2N0ODl1aDNoM2RsY3U5NDBrdzlmY3F5eXEzNnBlaDBzdDk0aGZwJztcbiAgICAgIGNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRCZWNoMzJBZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgY29pbi5pc1ZhbGlkQWRkcmVzcyh2YWxpZEJlY2gzMkFkZHJlc3MudG9VcHBlckNhc2UoKSkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgYmVjaDMybSBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDM1MC5tZWRpYXdpa2kjVGVzdF92ZWN0b3JzX2Zvcl9CZWNoMzJtXG4gICAgICBjb25zdCB2YWxpZEJlY2gzMm1BZGRyZXNzID0gJ3RiMXFycDMzZzBxNWM1dHhzcDlhcnlzcng0azZ6ZGtmczRuY2U0eGowZ2RjY2NlZnZweXN4ZjNxMHNsNWs3JztcbiAgICAgIGNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRCZWNoMzJtQWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRCZWNoMzJtQWRkcmVzcy50b1VwcGVyQ2FzZSgpKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Bvc3QgQnVpbGQgVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBsZXQgY29pbjogVGJ0YztcbiAgICBiZWZvcmUoKCkgPT4ge1xuICAgICAgY29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKSBhcyBUYnRjO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbW9kaWZ5IGxvY2t0aW1lIG9uIHBvc3RQcm9jZXNzUHJlYnVpbGQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9XG4gICAgICAgICcwMTAwMDAwMDAxYThlYzc4ZjA5ZjdhY2IwZDM0NDYyMmVkMzA4MmMxYTk4ZTUxYmExYjFhYjY1NDA2MDQ0ZjZlMGE4MDE2MDkwMjAxMDAwMDAwMDBmZmZmZmZmZjAyYTA4NjAxMDAwMDAwMDAwMDE5NzZhOTE0OWY5YTdhYmQ2MDBjMGNhYTAzOTgzYTc3YzhjM2RmOGUwNjJjYjJmYTg4YWNmYmYyMTUwMDAwMDAwMDAwMjIwMDIwYjkyMmNjMWU3MzdlNjc5ZDI0ZmYyZDJiMThjZmE5ZmZmNGUzNWE3MzNiNGZiYTk0MjgyZWFhMWI3Y2ZlNTZkMjAwMDAwMDAwJztcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgY29uc3QgcHJlQnVpbGQgPSB7IHR4SGV4LCBibG9ja0hlaWdodCB9O1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NCdWlsdCA9IGF3YWl0IGNvaW4ucG9zdFByb2Nlc3NQcmVidWlsZChwcmVCdWlsZCk7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4KFxuICAgICAgICBwb3N0UHJvY2Vzc0J1aWx0LnR4SGV4IGFzIHN0cmluZyxcbiAgICAgICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICAgICApO1xuXG4gICAgICB0cmFuc2FjdGlvbi5sb2NrdGltZS5zaG91bGQuZXF1YWwoMCk7XG4gICAgICBjb25zdCBpbnB1dHMgPSB0cmFuc2FjdGlvbi5pbnM7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuICAgICAgICBpbnB1dC5zZXF1ZW5jZS5zaG91bGQuZXF1YWwoMHhmZmZmZmZmZik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBdWRpdCBLZXknLCAoKSA9PiB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGJ0Y0JhY2t1cEtleTtcbiAgICBsZXQgY29pbjogVGJ0YztcbiAgICBiZWZvcmUoKCkgPT4ge1xuICAgICAgY29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKSBhcyBUYnRjO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZm9yIHZhbGlkIGlucHV0cycsICgpID0+IHtcbiAgICAgIGNvaW4uYXNzZXJ0SXNWYWxpZEtleSh7XG4gICAgICAgIGVuY3J5cHRlZFBydjoga2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAna0FtW0VGUTZvPVN4bGNMRkR3JSwnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIHRoZSB3YWxsZXRQYXNzcGhyYXNlIGlzIGluY29ycmVjdCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgY29pbi5hc3NlcnRJc1ZhbGlkS2V5KHtcbiAgICAgICAgICAgIGVuY3J5cHRlZFBydjoga2V5LFxuICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2ZvbycsXG4gICAgICAgICAgfSksXG4gICAgICAgIHsgbWVzc2FnZTogXCJmYWlsZWQgdG8gZGVjcnlwdCBwcnY6IGNjbTogdGFnIGRvZXNuJ3QgbWF0Y2hcIiB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhyb3cgaWYgdGhlIGtleSBpcyBhbHRlcmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWx0ZXJlZEtleSA9IGtleS5yZXBsYWNlKC9bMC05XS9nLCAnMCcpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBjb2luLmFzc2VydElzVmFsaWRLZXkoe1xuICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiBhbHRlcmVkS2V5LFxuICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2tBbVtFRlE2bz1TeGxjTEZEdyUsJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgeyBtZXNzYWdlOiAnZmFpbGVkIHRvIGRlY3J5cHQgcHJ2OiBqc29uIGRlY3J5cHQ6IGludmFsaWQgcGFyYW1ldGVycycgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Vuc3BlbnQgbWFuYWdlbWVudCBzcG9vZmFiaWxpdHkgLSBDb25zb2xpZGF0aW9uIChCVUlMRF9TSUdOX1NFTkQpJywgKCkgPT4ge1xuICAgIGxldCBjb2luOiBUYnRjO1xuICAgIGxldCBiaXRnb1Rlc3Q6IFRlc3RCaXRHb0FQSTtcbiAgICBiZWZvcmUoKCkgPT4ge1xuICAgICAgYml0Z29UZXN0ID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgICAgYml0Z29UZXN0LnNhZmVSZWdpc3RlcigndGJ0YycsIFRidGMuY3JlYXRlSW5zdGFuY2UpO1xuICAgICAgYml0Z29UZXN0LmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgICAgY29pbiA9IGJpdGdvVGVzdC5jb2luKCd0YnRjJykgYXMgVGJ0YztcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGhleCBzcG9vZmluZyBpbiBCVUlMRF9TSUdOX1NFTkQnLCBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBrZXlUcmlwbGUgPSB1dHhvbGliLnRlc3R1dGlsLmdldEtleVRyaXBsZSgnZGVmYXVsdCcpO1xuICAgICAgY29uc3Qgcm9vdFdhbGxldEtleSA9IG5ldyB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKGtleVRyaXBsZSk7XG4gICAgICBjb25zdCBbdXNlcl0gPSBrZXlUcmlwbGU7XG5cbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z29UZXN0LCBjb2luLCB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICBrZXlzOiBbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ10sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxQc2J0ID0gdXR4b2xpYi50ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KFxuICAgICAgICBbeyBzY3JpcHRUeXBlOiAncDJ3c2gnIGFzIGNvbnN0LCB2YWx1ZTogQmlnSW50KDEwMDAwKSB9XSxcbiAgICAgICAgW3sgYWRkcmVzczogJ3RiMXFycDMzZzBxNWM1dHhzcDlhcnlzcng0azZ6ZGtmczRuY2U0eGowZ2RjY2NlZnZweXN4ZjNxMHNsNWs3JywgdmFsdWU6IEJpZ0ludCg5MDAwKSB9XSxcbiAgICAgICAgY29pbi5uZXR3b3JrLFxuICAgICAgICByb290V2FsbGV0S2V5LFxuICAgICAgICAndW5zaWduZWQnIGFzIGNvbnN0XG4gICAgICApO1xuICAgICAgdXR4b2xpYi5iaXRnby5hZGRYcHVic1RvUHNidChvcmlnaW5hbFBzYnQsIHJvb3RXYWxsZXRLZXkpO1xuICAgICAgY29uc3Qgc3Bvb2ZlZFBzYnQgPSB1dHhvbGliLnRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoXG4gICAgICAgIFt7IHNjcmlwdFR5cGU6ICdwMndzaCcgYXMgY29uc3QsIHZhbHVlOiBCaWdJbnQoMTAwMDApIH1dLFxuICAgICAgICBbeyBhZGRyZXNzOiAndGIxcGpnZzl0eTNzMnp0cDYwdjZsaGdydzc2ZjdoeHlkenVrOXQ5bWpzbmRoM3AyZ2YyYWg3Z3M0ODUwa24nLCB2YWx1ZTogQmlnSW50KDkwMDApIH1dLFxuICAgICAgICBjb2luLm5ldHdvcmssXG4gICAgICAgIHJvb3RXYWxsZXRLZXksXG4gICAgICAgICd1bnNpZ25lZCcgYXMgY29uc3RcbiAgICAgICk7XG4gICAgICB1dHhvbGliLmJpdGdvLmFkZFhwdWJzVG9Qc2J0KHNwb29mZWRQc2J0LCByb290V2FsbGV0S2V5KTtcbiAgICAgIGNvbnN0IHNwb29mZWRIZXg6IHN0cmluZyA9IHNwb29mZWRQc2J0LnRvSGV4KCk7XG5cbiAgICAgIGNvbnN0IGJnVXJsOiBzdHJpbmcgPSAoYml0Z29UZXN0IGFzIGFueSkuX2Jhc2VVcmw7XG4gICAgICBjb25zdCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9jb25zb2xpZGF0ZVVuc3BlbnRzYClcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB0eEhleDogc3Bvb2ZlZEhleCwgY29uc29saWRhdGVJZDogJ3Rlc3QnIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zZW5kYClcbiAgICAgICAgLnJlcGx5KChyZXF1ZXN0Qm9keTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcXVlc3RCb2R5Py50eEhleCA9PT0gc3Bvb2ZlZEhleCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTcG9vZmVkIHRyYW5zYWN0aW9uIHdhcyBzZW50OiBzcG9vZmluZyBwcm90ZWN0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gWzIwMCwgeyB0eGlkOiAndGVzdC10eGlkLTEyMycsIHN0YXR1czogJ3NpZ25lZCcgfV07XG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwdWJzID0ga2V5VHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgICAgY29uc3QgcmVzcG9uc2VzID0gW1xuICAgICAgICB7IHB1YjogcHVic1swXSwgZW5jcnlwdGVkUHJ2OiBlbmNyeXB0KCdwYXNzJywgdXNlci50b0Jhc2U1OCgpKSB9LFxuICAgICAgICB7IHB1YjogcHVic1sxXSB9LFxuICAgICAgICB7IHB1YjogcHVic1syXSB9LFxuICAgICAgXTtcbiAgICAgIHdhbGxldFxuICAgICAgICAua2V5SWRzKClcbiAgICAgICAgLmZvckVhY2goKGlkLCBpKSA9PiBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS9rZXkvJHtpZH1gKS5yZXBseSgyMDAsIHJlc3BvbnNlc1tpXSkpO1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgd2FsbGV0LmNvbnNvbGlkYXRlVW5zcGVudHMoeyB3YWxsZXRQYXNzcGhyYXNlOiAncGFzcycgfSksXG4gICAgICAgIChlOiBhbnkpID0+XG4gICAgICAgICAgdHlwZW9mIGU/Lm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgZS5tZXNzYWdlLmluY2x1ZGVzKCdwcmVidWlsZCBhdHRlbXB0cyB0byBzcGVuZCB0byB1bmludGVuZGVkIGV4dGVybmFsIHJlY2lwaWVudHMnKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Vuc3BlbnQgbWFuYWdlbWVudCBzcG9vZmFiaWxpdHkgLSBGYW5vdXQgKEJVSUxEX1NJR05fU0VORCknLCAoKSA9PiB7XG4gICAgbGV0IGNvaW46IFRidGM7XG4gICAgbGV0IGJpdGdvVGVzdDogVGVzdEJpdEdvQVBJO1xuICAgIGJlZm9yZSgoKSA9PiB7XG4gICAgICBiaXRnb1Rlc3QgPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgICBiaXRnb1Rlc3Quc2FmZVJlZ2lzdGVyKCd0YnRjJywgVGJ0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgICBiaXRnb1Rlc3QuaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgICBjb2luID0gYml0Z29UZXN0LmNvaW4oJ3RidGMnKSBhcyBUYnRjO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXRlY3QgaGV4IHNwb29maW5nIGluIGZhbm91dCBCVUlMRF9TSUdOX1NFTkQnLCBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBrZXlUcmlwbGUgPSB1dHhvbGliLnRlc3R1dGlsLmdldEtleVRyaXBsZSgnZGVmYXVsdCcpO1xuICAgICAgY29uc3Qgcm9vdFdhbGxldEtleSA9IG5ldyB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKGtleVRyaXBsZSk7XG4gICAgICBjb25zdCBbdXNlcl0gPSBrZXlUcmlwbGU7XG5cbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z29UZXN0LCBjb2luLCB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICBrZXlzOiBbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ10sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxQc2J0ID0gdXR4b2xpYi50ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KFxuICAgICAgICBbeyBzY3JpcHRUeXBlOiAncDJ3c2gnIGFzIGNvbnN0LCB2YWx1ZTogQmlnSW50KDEwMDAwKSB9XSxcbiAgICAgICAgW3sgYWRkcmVzczogJ3RiMXFycDMzZzBxNWM1dHhzcDlhcnlzcng0azZ6ZGtmczRuY2U0eGowZ2RjY2NlZnZweXN4ZjNxMHNsNWs3JywgdmFsdWU6IEJpZ0ludCg5MDAwKSB9XSxcbiAgICAgICAgY29pbi5uZXR3b3JrLFxuICAgICAgICByb290V2FsbGV0S2V5LFxuICAgICAgICAndW5zaWduZWQnIGFzIGNvbnN0XG4gICAgICApO1xuICAgICAgdXR4b2xpYi5iaXRnby5hZGRYcHVic1RvUHNidChvcmlnaW5hbFBzYnQsIHJvb3RXYWxsZXRLZXkpO1xuXG4gICAgICBjb25zdCBzcG9vZmVkUHNidCA9IHV0eG9saWIudGVzdHV0aWwuY29uc3RydWN0UHNidChcbiAgICAgICAgW3sgc2NyaXB0VHlwZTogJ3Ayd3NoJyBhcyBjb25zdCwgdmFsdWU6IEJpZ0ludCgxMDAwMCkgfV0sXG4gICAgICAgIFt7IGFkZHJlc3M6ICd0YjFwamdnOXR5M3MyenRwNjB2NmxoZ3J3NzZmN2h4eWR6dWs5dDltanNuZGgzcDJnZjJhaDdnczQ4NTBrbicsIHZhbHVlOiBCaWdJbnQoOTAwMCkgfV0sXG4gICAgICAgIGNvaW4ubmV0d29yayxcbiAgICAgICAgcm9vdFdhbGxldEtleSxcbiAgICAgICAgJ3Vuc2lnbmVkJyBhcyBjb25zdFxuICAgICAgKTtcbiAgICAgIHV0eG9saWIuYml0Z28uYWRkWHB1YnNUb1BzYnQoc3Bvb2ZlZFBzYnQsIHJvb3RXYWxsZXRLZXkpO1xuICAgICAgY29uc3Qgc3Bvb2ZlZEhleDogc3RyaW5nID0gc3Bvb2ZlZFBzYnQudG9IZXgoKTtcblxuICAgICAgY29uc3QgYmdVcmw6IHN0cmluZyA9IChiaXRnb1Rlc3QgYXMgYW55KS5fYmFzZVVybDtcbiAgICAgIGNvbnN0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Zhbm91dFVuc3BlbnRzYClcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB0eEhleDogc3Bvb2ZlZEhleCwgZmFub3V0SWQ6ICd0ZXN0JyB9KTtcblxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2VuZGApXG4gICAgICAgIC5yZXBseSgocmVxdWVzdEJvZHk6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keT8udHhIZXggPT09IHNwb29mZWRIZXgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3Bvb2ZlZCB0cmFuc2FjdGlvbiB3YXMgc2VudDogc3Bvb2ZpbmcgcHJvdGVjdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFsyMDAsIHsgdHhpZDogJ3Rlc3QtdHhpZC0xMjMnLCBzdGF0dXM6ICdzaWduZWQnIH1dO1xuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgcHVicyA9IGtleVRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlcyA9IFtcbiAgICAgICAgeyBwdWI6IHB1YnNbMF0sIGVuY3J5cHRlZFBydjogZW5jcnlwdCgncGFzcycsIHVzZXIudG9CYXNlNTgoKSkgfSxcbiAgICAgICAgeyBwdWI6IHB1YnNbMV0gfSxcbiAgICAgICAgeyBwdWI6IHB1YnNbMl0gfSxcbiAgICAgIF07XG4gICAgICB3YWxsZXRcbiAgICAgICAgLmtleUlkcygpXG4gICAgICAgIC5mb3JFYWNoKChpZCwgaSkgPT4gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0va2V5LyR7aWR9YCkucmVwbHkoMjAwLCByZXNwb25zZXNbaV0pKTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIHdhbGxldC5mYW5vdXRVbnNwZW50cyh7IHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzJyB9KSxcbiAgICAgICAgKGU6IGFueSkgPT5cbiAgICAgICAgICB0eXBlb2YgZT8ubWVzc2FnZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3ByZWJ1aWxkIGF0dGVtcHRzIHRvIHNwZW5kIHRvIHVuaW50ZW5kZWQgZXh0ZXJuYWwgcmVjaXBpZW50cycpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"btcBackupKey.d.ts","sourceRoot":"","sources":["../../../../../../../../test/unit/impl/btc/unit/fixtures/btcBackupKey.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;CAMxB,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.btcBackupKey = void 0;
|
|
4
|
-
exports.btcBackupKey = {
|
|
5
|
-
key: '{"iv":"JgqqE4W45/tKBSMSYqD+qg==","v":1,"iter":10000,"ks":256,"ts":64,"mode"' +
|
|
6
|
-
':"ccm","adata":"","cipher":"aes","salt":"kiLPf8VSdI0=","ct":"zUh4Oko/06g02E' +
|
|
7
|
-
'wnqOfzJbTwtE2p3b19jDk8Tum07Jv3N/RP7Bo0w/ObLBO1uIJFossO3nJ1JS+7t/vPQhdCtN8oD' +
|
|
8
|
-
'6YrZnEZYrRwN6JQkL1uYPnZ1PoWbYI9navK5CLU1KQwDTO9YEN46++OrzFH+CjpQVLblaw="}',
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnRjQmFja3VwS2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2ltcGwvYnRjL3VuaXQvZml4dHVyZXMvYnRjQmFja3VwS2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsWUFBWSxHQUFHO0lBQzFCLEdBQUcsRUFDRCw2RUFBNkU7UUFDN0UsNkVBQTZFO1FBQzdFLDZFQUE2RTtRQUM3RSwyRUFBMkU7Q0FDOUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBidGNCYWNrdXBLZXkgPSB7XG4gIGtleTpcbiAgICAne1wiaXZcIjpcIkpncXFFNFc0NS90S0JTTVNZcUQrcWc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCInICtcbiAgICAnOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwia2lMUGY4VlNkSTA9XCIsXCJjdFwiOlwielVoNE9rby8wNmcwMkUnICtcbiAgICAnd25xT2Z6SmJUd3RFMnAzYjE5akRrOFR1bTA3SnYzTi9SUDdCbzB3L09iTEJPMXVJSkZvc3NPM25KMUpTKzd0L3ZQUWhkQ3ROOG9EJyArXG4gICAgJzZZclpuRVpZclJ3TjZKUWtMMXVZUG5aMVBvV2JZSTluYXZLNUNMVTFLUXdEVE85WUVONDYrK09yekZIK0NqcFFWTGJsYXc9XCJ9Jyxcbn07XG4iXX0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../test/unit/impl/btc/unit/fixtures/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./btcBackupKey"), exports);
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvaW1wbC9idGMvdW5pdC9maXh0dXJlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQStCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9idGNCYWNrdXBLZXknO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/impl/ltc/unit/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
require("should");
|
|
4
|
-
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
5
|
-
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
6
|
-
const ltc_1 = require("../../../../../src/impl/ltc");
|
|
7
|
-
describe('Litecoin:', function () {
|
|
8
|
-
const bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
9
|
-
bitgo.initializeTestVars();
|
|
10
|
-
bitgo.safeRegister('ltc', ltc_1.Ltc.createInstance);
|
|
11
|
-
bitgo.safeRegister('tltc', ltc_1.Tltc.createInstance);
|
|
12
|
-
const ltc = bitgo.coin('ltc');
|
|
13
|
-
const tltc = bitgo.coin('tltc');
|
|
14
|
-
describe('should validate addresses', () => {
|
|
15
|
-
it('should validate base58 addresses', () => {
|
|
16
|
-
// known valid main and testnet base58 address are valid
|
|
17
|
-
ltc.isValidAddress('MH6J1PzpsAfapZek7QGHv2mheUxnP8Kdek').should.be.true();
|
|
18
|
-
tltc.isValidAddress('QWC1miKKHFikbwg2iyt8KZBGsTSEBKr21i').should.be.true();
|
|
19
|
-
// malformed base58 addresses are invalid
|
|
20
|
-
ltc.isValidAddress('MH6J1PzpsAfapZek7QGHv2mheUxnP8Kder').should.be.false();
|
|
21
|
-
tltc.isValidAddress('QWC1miKKHFikbwg2iyt8KZBGsTSEBKr21l').should.be.false();
|
|
22
|
-
});
|
|
23
|
-
it('should validate bech32 addresses', () => {
|
|
24
|
-
// all lower case is valid
|
|
25
|
-
ltc.isValidAddress('ltc1qq7fzt3ek5ege3v92wh0q6wzcjr39pqswlpe36mu28f6yufark3wspfryg7').should.be.true();
|
|
26
|
-
tltc.isValidAddress('tltc1qq7fzt3ek5ege3v92wh0q6wzcjr39pqswlpe36mu28f6yufark3ws2x86ht').should.be.true();
|
|
27
|
-
// all upper case is valid
|
|
28
|
-
ltc.isValidAddress('LTC1QQ7FZT3EK5EGE3V92WH0Q6WZCJR39PQSWLPE36MU28F6YUFARK3WSPFRYG7').should.be.false();
|
|
29
|
-
tltc.isValidAddress('TLTC1QQ7FZT3EK5EGE3V92WH0Q6WZCJR39PQSWLPE36MU28F6YUFARK3WS2X86HT').should.be.false();
|
|
30
|
-
// mixed case is invalid
|
|
31
|
-
ltc.isValidAddress('LTC1QQ7FZT3EK5EGE3V92WH0Q6WZCJR39PQSWLPE36MU28F6YUFARK3WSPFRYg7').should.be.false();
|
|
32
|
-
tltc.isValidAddress('TLTC1QQ7FZT3EK5EGE3V92WH0Q6WZCJR39PQSWLPE36MU28F6YUFARK3WS2X86Ht').should.be.false();
|
|
33
|
-
// malformed addresses are invalid
|
|
34
|
-
ltc.isValidAddress('ltc1qq7fzt3ek5ege3v92wh0q6wzcjr39pqswlpe36mu28f6yufark3wspfryg9').should.be.false();
|
|
35
|
-
tltc.isValidAddress('tltc1qq7fzt3ek5ege3v92wh0q6wzcjr39pqswlpe36mu28f6yufark3ws2x86hl').should.be.false();
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvaW1wbC9sdGMvdW5pdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUVoQiw4Q0FBMEQ7QUFDMUQsNENBQTBDO0FBRTFDLHFEQUF3RDtBQUV4RCxRQUFRLENBQUMsV0FBVyxFQUFFO0lBQ3BCLE1BQU0sS0FBSyxHQUFpQixvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDMUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVoRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBUSxDQUFDO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFTLENBQUM7SUFFeEMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUN6QyxFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1lBQzFDLHdEQUF3RDtZQUN4RCxHQUFHLENBQUMsY0FBYyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRSxJQUFJLENBQUMsY0FBYyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRSx5Q0FBeUM7WUFDekMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1lBQzFDLDBCQUEwQjtZQUMxQixHQUFHLENBQUMsY0FBYyxDQUFDLGlFQUFpRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2RyxJQUFJLENBQUMsY0FBYyxDQUFDLGtFQUFrRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RywwQkFBMEI7WUFDMUIsR0FBRyxDQUFDLGNBQWMsQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUcsd0JBQXdCO1lBQ3hCLEdBQUcsQ0FBQyxjQUFjLENBQUMsaUVBQWlFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hHLElBQUksQ0FBQyxjQUFjLENBQUMsa0VBQWtFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFHLGtDQUFrQztZQUNsQyxHQUFHLENBQUMsY0FBYyxDQUFDLGlFQUFpRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4RyxJQUFJLENBQUMsY0FBYyxDQUFDLGtFQUFrRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1RyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5cbmltcG9ydCB7IFRlc3RCaXRHb0FQSSwgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuXG5pbXBvcnQgeyBMdGMsIFRsdGMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC9sdGMnO1xuXG5kZXNjcmliZSgnTGl0ZWNvaW46JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBiaXRnbzogVGVzdEJpdEdvQVBJID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgYml0Z28uc2FmZVJlZ2lzdGVyKCdsdGMnLCBMdGMuY3JlYXRlSW5zdGFuY2UpO1xuICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RsdGMnLCBUbHRjLmNyZWF0ZUluc3RhbmNlKTtcblxuICBjb25zdCBsdGMgPSBiaXRnby5jb2luKCdsdGMnKSBhcyBMdGM7XG4gIGNvbnN0IHRsdGMgPSBiaXRnby5jb2luKCd0bHRjJykgYXMgVGx0YztcblxuICBkZXNjcmliZSgnc2hvdWxkIHZhbGlkYXRlIGFkZHJlc3NlcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGJhc2U1OCBhZGRyZXNzZXMnLCAoKSA9PiB7XG4gICAgICAvLyBrbm93biB2YWxpZCBtYWluIGFuZCB0ZXN0bmV0IGJhc2U1OCBhZGRyZXNzIGFyZSB2YWxpZFxuICAgICAgbHRjLmlzVmFsaWRBZGRyZXNzKCdNSDZKMVB6cHNBZmFwWmVrN1FHSHYybWhlVXhuUDhLZGVrJykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHRsdGMuaXNWYWxpZEFkZHJlc3MoJ1FXQzFtaUtLSEZpa2J3ZzJpeXQ4S1pCR3NUU0VCS3IyMWknKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgLy8gbWFsZm9ybWVkIGJhc2U1OCBhZGRyZXNzZXMgYXJlIGludmFsaWRcbiAgICAgIGx0Yy5pc1ZhbGlkQWRkcmVzcygnTUg2SjFQenBzQWZhcFplazdRR0h2Mm1oZVV4blA4S2RlcicpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgdGx0Yy5pc1ZhbGlkQWRkcmVzcygnUVdDMW1pS0tIRmlrYndnMml5dDhLWkJHc1RTRUJLcjIxbCcpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYmVjaDMyIGFkZHJlc3NlcycsICgpID0+IHtcbiAgICAgIC8vIGFsbCBsb3dlciBjYXNlIGlzIHZhbGlkXG4gICAgICBsdGMuaXNWYWxpZEFkZHJlc3MoJ2x0YzFxcTdmenQzZWs1ZWdlM3Y5MndoMHE2d3pjanIzOXBxc3dscGUzNm11MjhmNnl1ZmFyazN3c3BmcnlnNycpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB0bHRjLmlzVmFsaWRBZGRyZXNzKCd0bHRjMXFxN2Z6dDNlazVlZ2Uzdjkyd2gwcTZ3emNqcjM5cHFzd2xwZTM2bXUyOGY2eXVmYXJrM3dzMng4Nmh0Jykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIC8vIGFsbCB1cHBlciBjYXNlIGlzIHZhbGlkXG4gICAgICBsdGMuaXNWYWxpZEFkZHJlc3MoJ0xUQzFRUTdGWlQzRUs1RUdFM1Y5MldIMFE2V1pDSlIzOVBRU1dMUEUzNk1VMjhGNllVRkFSSzNXU1BGUllHNycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgdGx0Yy5pc1ZhbGlkQWRkcmVzcygnVExUQzFRUTdGWlQzRUs1RUdFM1Y5MldIMFE2V1pDSlIzOVBRU1dMUEUzNk1VMjhGNllVRkFSSzNXUzJYODZIVCcpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgLy8gbWl4ZWQgY2FzZSBpcyBpbnZhbGlkXG4gICAgICBsdGMuaXNWYWxpZEFkZHJlc3MoJ0xUQzFRUTdGWlQzRUs1RUdFM1Y5MldIMFE2V1pDSlIzOVBRU1dMUEUzNk1VMjhGNllVRkFSSzNXU1BGUllnNycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgdGx0Yy5pc1ZhbGlkQWRkcmVzcygnVExUQzFRUTdGWlQzRUs1RUdFM1Y5MldIMFE2V1pDSlIzOVBRU1dMUEUzNk1VMjhGNllVRkFSSzNXUzJYODZIdCcpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgLy8gbWFsZm9ybWVkIGFkZHJlc3NlcyBhcmUgaW52YWxpZFxuICAgICAgbHRjLmlzVmFsaWRBZGRyZXNzKCdsdGMxcXE3Znp0M2VrNWVnZTN2OTJ3aDBxNnd6Y2pyMzlwcXN3bHBlMzZtdTI4ZjZ5dWZhcmszd3NwZnJ5ZzknKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIHRsdGMuaXNWYWxpZEFkZHJlc3MoJ3RsdGMxcXE3Znp0M2VrNWVnZTN2OTJ3aDBxNnd6Y2pyMzlwcXN3bHBlMzZtdTI4ZjZ5dWZhcmszd3MyeDg2aGwnKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"outputDifference.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/transaction/descriptor/outputDifference.ts"],"names":[],"mappings":""}
|