@bitgo-beta/abstract-utxo 1.6.1-alpha.34 → 1.6.1-alpha.341
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/src/abstractUtxoCoin.d.ts +200 -98
- package/dist/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/src/abstractUtxoCoin.js +314 -541
- package/dist/src/descriptor/NamedDescriptor.d.ts +20 -0
- package/dist/src/descriptor/NamedDescriptor.d.ts.map +1 -0
- package/dist/src/descriptor/NamedDescriptor.js +79 -0
- package/dist/src/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
- package/dist/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
- package/dist/src/descriptor/assertDescriptorWalletAddress.js +66 -0
- package/dist/src/descriptor/builder/builder.d.ts +13 -0
- package/dist/src/descriptor/builder/builder.d.ts.map +1 -0
- package/dist/src/descriptor/builder/builder.js +37 -0
- package/dist/src/descriptor/builder/index.d.ts +3 -0
- package/dist/src/descriptor/builder/index.d.ts.map +1 -0
- package/dist/src/descriptor/builder/index.js +8 -0
- package/dist/src/descriptor/builder/parse.d.ts +5 -0
- package/dist/src/descriptor/builder/parse.d.ts.map +1 -0
- package/dist/src/descriptor/builder/parse.js +149 -0
- package/dist/src/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
- package/dist/src/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
- package/dist/src/descriptor/createWallet/createDescriptorWallet.js +74 -0
- package/dist/src/descriptor/createWallet/createDescriptors.d.ts +12 -0
- package/dist/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
- package/dist/src/descriptor/createWallet/createDescriptors.js +33 -0
- package/dist/src/descriptor/createWallet/index.d.ts +3 -0
- package/dist/src/descriptor/createWallet/index.d.ts.map +1 -0
- package/dist/src/descriptor/createWallet/index.js +19 -0
- package/dist/src/descriptor/descriptorWallet.d.ts +19 -0
- package/dist/src/descriptor/descriptorWallet.d.ts.map +1 -0
- package/dist/src/descriptor/descriptorWallet.js +54 -0
- package/dist/src/descriptor/index.d.ts +8 -0
- package/dist/src/descriptor/index.d.ts.map +1 -0
- package/dist/src/descriptor/index.js +53 -0
- package/dist/src/descriptor/validatePolicy.d.ts +22 -0
- package/dist/src/descriptor/validatePolicy.d.ts.map +1 -0
- package/dist/src/descriptor/validatePolicy.js +92 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +31 -2
- package/dist/src/keychains.d.ts +48 -0
- package/dist/src/keychains.d.ts.map +1 -0
- package/dist/src/keychains.js +104 -0
- package/dist/src/names.d.ts +26 -0
- package/dist/src/names.d.ts.map +1 -0
- package/dist/src/names.js +214 -0
- package/dist/src/offlineVault/OfflineVaultHalfSigned.d.ts +8 -0
- package/dist/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
- package/dist/src/offlineVault/OfflineVaultHalfSigned.js +59 -0
- package/dist/src/offlineVault/OfflineVaultSignable.d.ts +46 -0
- package/dist/src/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
- package/dist/src/offlineVault/OfflineVaultSignable.js +55 -0
- package/dist/src/offlineVault/TransactionExplanation.d.ts +15 -0
- package/dist/src/offlineVault/TransactionExplanation.d.ts.map +1 -0
- package/dist/src/offlineVault/TransactionExplanation.js +16 -0
- package/dist/src/offlineVault/descriptor/index.d.ts +2 -0
- package/dist/src/offlineVault/descriptor/index.d.ts.map +1 -0
- package/dist/src/offlineVault/descriptor/index.js +18 -0
- package/dist/src/offlineVault/descriptor/transaction.d.ts +38 -0
- package/dist/src/offlineVault/descriptor/transaction.d.ts.map +1 -0
- package/dist/src/offlineVault/descriptor/transaction.js +80 -0
- package/dist/src/offlineVault/index.d.ts +6 -0
- package/dist/src/offlineVault/index.d.ts.map +1 -0
- package/dist/src/offlineVault/index.js +44 -0
- package/dist/src/recovery/RecoveryProvider.d.ts +1 -1
- package/dist/src/recovery/RecoveryProvider.d.ts.map +1 -1
- package/dist/src/recovery/RecoveryProvider.js +2 -4
- package/dist/src/recovery/backupKeyRecovery.d.ts +42 -16
- package/dist/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/src/recovery/backupKeyRecovery.js +174 -102
- package/dist/src/recovery/baseApi.d.ts +3 -6
- package/dist/src/recovery/baseApi.d.ts.map +1 -1
- package/dist/src/recovery/baseApi.js +6 -6
- package/dist/src/recovery/coingeckoApi.d.ts +0 -3
- package/dist/src/recovery/coingeckoApi.d.ts.map +1 -1
- package/dist/src/recovery/coingeckoApi.js +1 -4
- package/dist/src/recovery/crossChainRecovery.d.ts +5 -4
- package/dist/src/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/src/recovery/crossChainRecovery.js +95 -25
- package/dist/src/recovery/index.d.ts +0 -1
- package/dist/src/recovery/index.d.ts.map +1 -1
- package/dist/src/recovery/index.js +6 -3
- package/dist/src/recovery/mempoolApi.d.ts.map +1 -1
- package/dist/src/recovery/mempoolApi.js +10 -7
- package/dist/src/replayProtection.js +37 -5
- package/dist/src/sign.d.ts +29 -8
- package/dist/src/sign.d.ts.map +1 -1
- package/dist/src/sign.js +114 -15
- package/dist/src/transaction/common/verifyPayGoAmount.d.ts +2 -0
- package/dist/src/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
- package/dist/src/transaction/common/verifyPayGoAmount.js +3 -0
- package/dist/src/transaction/descriptor/explainPsbt.d.ts +5 -0
- package/dist/src/transaction/descriptor/explainPsbt.d.ts.map +1 -0
- package/dist/src/transaction/descriptor/explainPsbt.js +80 -0
- package/dist/src/transaction/descriptor/index.d.ts +7 -0
- package/dist/src/transaction/descriptor/index.d.ts.map +1 -0
- package/dist/src/transaction/descriptor/index.js +14 -0
- package/dist/src/transaction/descriptor/parse.d.ts +15 -0
- package/dist/src/transaction/descriptor/parse.d.ts.map +1 -0
- package/dist/src/transaction/descriptor/parse.js +116 -0
- package/dist/src/transaction/descriptor/parseToAmountType.d.ts +13 -0
- package/dist/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
- package/dist/src/transaction/descriptor/parseToAmountType.js +60 -0
- package/dist/src/transaction/descriptor/recipient.d.ts +5 -0
- package/dist/src/transaction/descriptor/recipient.d.ts.map +1 -0
- package/dist/src/transaction/descriptor/recipient.js +3 -0
- package/dist/src/transaction/descriptor/signPsbt.d.ts +25 -0
- package/dist/src/transaction/descriptor/signPsbt.d.ts.map +1 -0
- package/dist/src/transaction/descriptor/signPsbt.js +43 -0
- package/dist/src/transaction/descriptor/verifyTransaction.d.ts +33 -0
- package/dist/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
- package/dist/src/transaction/descriptor/verifyTransaction.js +105 -0
- package/dist/src/transaction/explainTransaction.d.ts +17 -0
- package/dist/src/transaction/explainTransaction.d.ts.map +1 -0
- package/dist/src/transaction/explainTransaction.js +67 -0
- package/dist/src/transaction/fetchInputs.d.ts +26 -0
- package/dist/src/transaction/fetchInputs.d.ts.map +1 -0
- package/dist/src/transaction/fetchInputs.js +109 -0
- package/dist/src/transaction/fixedScript/explainTransaction.d.ts +30 -0
- package/dist/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/explainTransaction.js +216 -0
- package/dist/src/transaction/fixedScript/index.d.ts +6 -0
- package/dist/src/transaction/fixedScript/index.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/index.js +13 -0
- package/dist/src/transaction/fixedScript/parseOutput.d.ts +26 -0
- package/dist/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/parseOutput.js +213 -0
- package/dist/src/transaction/fixedScript/parseTransaction.d.ts +7 -0
- package/dist/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/parseTransaction.js +203 -0
- package/dist/src/transaction/fixedScript/signTransaction.d.ts +17 -0
- package/dist/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/signTransaction.js +138 -0
- package/dist/src/transaction/fixedScript/verifyTransaction.d.ts +4 -0
- package/dist/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/verifyTransaction.js +176 -0
- package/dist/src/transaction/index.d.ts +6 -0
- package/dist/src/transaction/index.d.ts.map +1 -0
- package/dist/src/transaction/index.js +26 -0
- package/dist/src/transaction/outputDifference.d.ts +40 -0
- package/dist/src/transaction/outputDifference.d.ts.map +1 -0
- package/dist/src/transaction/outputDifference.js +47 -0
- package/dist/src/transaction/parseTransaction.d.ts +3 -0
- package/dist/src/transaction/parseTransaction.d.ts.map +1 -0
- package/dist/src/transaction/parseTransaction.js +48 -0
- package/dist/src/transaction/recipient.d.ts +29 -0
- package/dist/src/transaction/recipient.d.ts.map +1 -0
- package/dist/src/transaction/recipient.js +88 -0
- package/dist/src/transaction/signTransaction.d.ts +6 -0
- package/dist/src/transaction/signTransaction.d.ts.map +1 -0
- package/dist/src/transaction/signTransaction.js +102 -0
- package/dist/src/transaction/verifyTransaction.d.ts +4 -0
- package/dist/src/transaction/verifyTransaction.d.ts.map +1 -0
- package/dist/src/transaction/verifyTransaction.js +50 -0
- package/dist/src/verifyKey.d.ts +28 -0
- package/dist/src/verifyKey.d.ts.map +1 -0
- package/dist/src/verifyKey.js +164 -0
- package/dist/src/wallet.d.ts +15 -0
- package/dist/src/wallet.d.ts.map +1 -0
- package/dist/src/wallet.js +8 -0
- package/package.json +19 -13
- package/.eslintignore +0 -5
- package/CHANGELOG.md +0 -235
- package/dist/src/parseOutput.d.ts +0 -22
- package/dist/src/parseOutput.d.ts.map +0 -1
- package/dist/src/parseOutput.js +0 -170
- 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/tsconfig.tsbuildinfo +0 -8013
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.isScriptRecipient = isScriptRecipient;
|
|
37
|
+
exports.fromExtendedAddressFormat = fromExtendedAddressFormat;
|
|
38
|
+
exports.fromExtendedAddressFormatToScript = fromExtendedAddressFormatToScript;
|
|
39
|
+
exports.toExtendedAddressFormat = toExtendedAddressFormat;
|
|
40
|
+
exports.assertValidTransactionRecipient = assertValidTransactionRecipient;
|
|
41
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
42
|
+
const ScriptRecipientPrefix = 'scriptPubKey:';
|
|
43
|
+
/**
|
|
44
|
+
* Check if the address is a script recipient (starts with `scriptPubKey:`).
|
|
45
|
+
* @param address
|
|
46
|
+
*/
|
|
47
|
+
function isScriptRecipient(address) {
|
|
48
|
+
return address.toLowerCase().startsWith(ScriptRecipientPrefix.toLowerCase());
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* An extended address is one that encodes either a regular address or a hex encoded script with the prefix `scriptPubKey:`.
|
|
52
|
+
* This function converts the extended address format to either a script or an address.
|
|
53
|
+
* @param extendedAddress
|
|
54
|
+
*/
|
|
55
|
+
function fromExtendedAddressFormat(extendedAddress) {
|
|
56
|
+
if (isScriptRecipient(extendedAddress)) {
|
|
57
|
+
return { script: extendedAddress.slice(ScriptRecipientPrefix.length) };
|
|
58
|
+
}
|
|
59
|
+
return { address: extendedAddress };
|
|
60
|
+
}
|
|
61
|
+
function fromExtendedAddressFormatToScript(extendedAddress, network) {
|
|
62
|
+
const result = fromExtendedAddressFormat(extendedAddress);
|
|
63
|
+
if ('script' in result) {
|
|
64
|
+
return Buffer.from(result.script, 'hex');
|
|
65
|
+
}
|
|
66
|
+
return utxolib.addressFormat.toOutputScriptTryFormats(result.address, network);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Convert a script or address to the extended address format.
|
|
70
|
+
* @param script
|
|
71
|
+
* @param network
|
|
72
|
+
* @returns if the script is an OP_RETURN script, then it will be prefixed with `scriptPubKey:`, otherwise it will be converted to an address.
|
|
73
|
+
*/
|
|
74
|
+
function toExtendedAddressFormat(script, network) {
|
|
75
|
+
return script[0] === utxolib.opcodes.OP_RETURN
|
|
76
|
+
? `${ScriptRecipientPrefix}${script.toString('hex')}`
|
|
77
|
+
: utxolib.address.fromOutputScript(script, network);
|
|
78
|
+
}
|
|
79
|
+
function assertValidTransactionRecipient(output) {
|
|
80
|
+
// In the case that this is an OP_RETURN output or another non-encodable scriptPubkey, we dont have an address.
|
|
81
|
+
// We will verify that the amount is zero, and if it isnt then we will throw an error.
|
|
82
|
+
if (!output.address || isScriptRecipient(output.address)) {
|
|
83
|
+
if (output.amount.toString() !== '0') {
|
|
84
|
+
throw new Error(`Only zero amounts allowed for non-encodeable scriptPubkeys: ${JSON.stringify(output)}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3JlY2lwaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLDhDQUVDO0FBT0QsOERBS0M7QUFFRCw4RUFNQztBQVFELDBEQUlDO0FBRUQsMEVBUUM7QUFwREQsOERBQWdEO0FBRWhELE1BQU0scUJBQXFCLEdBQUcsZUFBZSxDQUFDO0FBRTlDOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE9BQWU7SUFDL0MsT0FBTyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxlQUF1QjtJQUMvRCxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDekUsQ0FBQztJQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFDdEMsQ0FBQztBQUVELFNBQWdCLGlDQUFpQyxDQUFDLGVBQXVCLEVBQUUsT0FBd0I7SUFDakcsTUFBTSxNQUFNLEdBQUcseUJBQXlCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDMUQsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7UUFDdkIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLE1BQWMsRUFBRSxPQUF3QjtJQUM5RSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVM7UUFDNUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyRCxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELFNBQWdCLCtCQUErQixDQUFDLE1BQThEO0lBQzVHLCtHQUErRztJQUMvRyxzRkFBc0Y7SUFDdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDekQsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5jb25zdCBTY3JpcHRSZWNpcGllbnRQcmVmaXggPSAnc2NyaXB0UHViS2V5Oic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGFkZHJlc3MgaXMgYSBzY3JpcHQgcmVjaXBpZW50IChzdGFydHMgd2l0aCBgc2NyaXB0UHViS2V5OmApLlxuICogQHBhcmFtIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NyaXB0UmVjaXBpZW50KGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gYWRkcmVzcy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoU2NyaXB0UmVjaXBpZW50UHJlZml4LnRvTG93ZXJDYXNlKCkpO1xufVxuXG4vKipcbiAqIEFuIGV4dGVuZGVkIGFkZHJlc3MgaXMgb25lIHRoYXQgZW5jb2RlcyBlaXRoZXIgYSByZWd1bGFyIGFkZHJlc3Mgb3IgYSBoZXggZW5jb2RlZCBzY3JpcHQgd2l0aCB0aGUgcHJlZml4IGBzY3JpcHRQdWJLZXk6YC5cbiAqIFRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIGV4dGVuZGVkIGFkZHJlc3MgZm9ybWF0IHRvIGVpdGhlciBhIHNjcmlwdCBvciBhbiBhZGRyZXNzLlxuICogQHBhcmFtIGV4dGVuZGVkQWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdChleHRlbmRlZEFkZHJlc3M6IHN0cmluZyk6IHsgYWRkcmVzczogc3RyaW5nIH0gfCB7IHNjcmlwdDogc3RyaW5nIH0ge1xuICBpZiAoaXNTY3JpcHRSZWNpcGllbnQoZXh0ZW5kZWRBZGRyZXNzKSkge1xuICAgIHJldHVybiB7IHNjcmlwdDogZXh0ZW5kZWRBZGRyZXNzLnNsaWNlKFNjcmlwdFJlY2lwaWVudFByZWZpeC5sZW5ndGgpIH07XG4gIH1cbiAgcmV0dXJuIHsgYWRkcmVzczogZXh0ZW5kZWRBZGRyZXNzIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQoZXh0ZW5kZWRBZGRyZXNzOiBzdHJpbmcsIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJlc3VsdCA9IGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoZXh0ZW5kZWRBZGRyZXNzKTtcbiAgaWYgKCdzY3JpcHQnIGluIHJlc3VsdCkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShyZXN1bHQuc2NyaXB0LCAnaGV4Jyk7XG4gIH1cbiAgcmV0dXJuIHV0eG9saWIuYWRkcmVzc0Zvcm1hdC50b091dHB1dFNjcmlwdFRyeUZvcm1hdHMocmVzdWx0LmFkZHJlc3MsIG5ldHdvcmspO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzY3JpcHQgb3IgYWRkcmVzcyB0byB0aGUgZXh0ZW5kZWQgYWRkcmVzcyBmb3JtYXQuXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gbmV0d29ya1xuICogQHJldHVybnMgaWYgdGhlIHNjcmlwdCBpcyBhbiBPUF9SRVRVUk4gc2NyaXB0LCB0aGVuIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBgc2NyaXB0UHViS2V5OmAsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBhZGRyZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoc2NyaXB0OiBCdWZmZXIsIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IHN0cmluZyB7XG4gIHJldHVybiBzY3JpcHRbMF0gPT09IHV0eG9saWIub3Bjb2Rlcy5PUF9SRVRVUk5cbiAgICA/IGAke1NjcmlwdFJlY2lwaWVudFByZWZpeH0ke3NjcmlwdC50b1N0cmluZygnaGV4Jyl9YFxuICAgIDogdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoc2NyaXB0LCBuZXR3b3JrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQob3V0cHV0OiB7IGFtb3VudDogYmlnaW50IHwgbnVtYmVyIHwgc3RyaW5nOyBhZGRyZXNzPzogc3RyaW5nIH0pOiB2b2lkIHtcbiAgLy8gSW4gdGhlIGNhc2UgdGhhdCB0aGlzIGlzIGFuIE9QX1JFVFVSTiBvdXRwdXQgb3IgYW5vdGhlciBub24tZW5jb2RhYmxlIHNjcmlwdFB1YmtleSwgd2UgZG9udCBoYXZlIGFuIGFkZHJlc3MuXG4gIC8vIFdlIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIGFtb3VudCBpcyB6ZXJvLCBhbmQgaWYgaXQgaXNudCB0aGVuIHdlIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gIGlmICghb3V0cHV0LmFkZHJlc3MgfHwgaXNTY3JpcHRSZWNpcGllbnQob3V0cHV0LmFkZHJlc3MpKSB7XG4gICAgaWYgKG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSAhPT0gJzAnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgemVybyBhbW91bnRzIGFsbG93ZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXM6ICR7SlNPTi5zdHJpbmdpZnkob3V0cHV0KX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BitGoBase } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { AbstractUtxoCoin, SignTransactionOptions } from '../abstractUtxoCoin';
|
|
3
|
+
export declare function signTransaction<TNumber extends number | bigint>(coin: AbstractUtxoCoin, bitgo: BitGoBase, params: SignTransactionOptions<TNumber>): Promise<{
|
|
4
|
+
txHex: string;
|
|
5
|
+
}>;
|
|
6
|
+
//# sourceMappingURL=signTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/signTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKjD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAwB/E,wBAAsB,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACnE,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACtC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC5B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
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
|
+
exports.signTransaction = signTransaction;
|
|
40
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
41
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
42
|
+
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
43
|
+
const debug_1 = __importDefault(require("debug"));
|
|
44
|
+
const descriptor_1 = require("../descriptor");
|
|
45
|
+
const keychains_1 = require("../keychains");
|
|
46
|
+
const fixedScript = __importStar(require("./fixedScript"));
|
|
47
|
+
const descriptor = __importStar(require("./descriptor"));
|
|
48
|
+
const debug = (0, debug_1.default)('bitgo:abstract-utxo:transaction:signTransaction');
|
|
49
|
+
function getSignerKeychain(userPrv) {
|
|
50
|
+
if (userPrv === undefined) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
if (typeof userPrv !== 'string') {
|
|
54
|
+
throw new Error('expected user private key to be a string');
|
|
55
|
+
}
|
|
56
|
+
const signerKeychain = utxo_lib_1.bip32.fromBase58(userPrv, utxolib.networks.bitcoin);
|
|
57
|
+
if (signerKeychain.isNeutered()) {
|
|
58
|
+
throw new Error('expected user private key but received public key');
|
|
59
|
+
}
|
|
60
|
+
debug(`Here is the public key of the xprv you used to sign: ${signerKeychain.neutered().toBase58()}`);
|
|
61
|
+
return signerKeychain;
|
|
62
|
+
}
|
|
63
|
+
async function signTransaction(coin, bitgo, params) {
|
|
64
|
+
const txPrebuild = params.txPrebuild;
|
|
65
|
+
if (lodash_1.default.isUndefined(txPrebuild) || !lodash_1.default.isObject(txPrebuild)) {
|
|
66
|
+
if (!lodash_1.default.isUndefined(txPrebuild) && !lodash_1.default.isObject(txPrebuild)) {
|
|
67
|
+
throw new Error(`txPrebuild must be an object, got type ${typeof txPrebuild}`);
|
|
68
|
+
}
|
|
69
|
+
throw new Error('missing txPrebuild parameter');
|
|
70
|
+
}
|
|
71
|
+
const tx = coin.decodeTransactionFromPrebuild(params.txPrebuild);
|
|
72
|
+
const signerKeychain = getSignerKeychain(params.prv);
|
|
73
|
+
const { wallet } = params;
|
|
74
|
+
if (wallet && (0, descriptor_1.isDescriptorWallet)(wallet)) {
|
|
75
|
+
if (!signerKeychain) {
|
|
76
|
+
throw new Error('missing signer');
|
|
77
|
+
}
|
|
78
|
+
const walletKeys = (0, keychains_1.toBip32Triple)(await (0, keychains_1.fetchKeychains)(coin, wallet));
|
|
79
|
+
const descriptorMap = (0, descriptor_1.getDescriptorMapFromWallet)(wallet, walletKeys, (0, descriptor_1.getPolicyForEnv)(bitgo.env));
|
|
80
|
+
if (tx instanceof utxolib.bitgo.UtxoPsbt) {
|
|
81
|
+
descriptor.signPsbt(tx, descriptorMap, signerKeychain, {
|
|
82
|
+
onUnknownInput: 'throw',
|
|
83
|
+
});
|
|
84
|
+
return { txHex: tx.toHex() };
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
throw new Error('expected a UtxoPsbt object');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
return fixedScript.signTransaction(coin, tx, getSignerKeychain(params.prv), {
|
|
92
|
+
walletId: params.txPrebuild.walletId,
|
|
93
|
+
txInfo: params.txPrebuild.txInfo,
|
|
94
|
+
isLastSignature: params.isLastSignature ?? false,
|
|
95
|
+
signingStep: params.signingStep,
|
|
96
|
+
allowNonSegwitSigningWithoutPrevTx: params.allowNonSegwitSigningWithoutPrevTx ?? false,
|
|
97
|
+
pubs: params.pubs,
|
|
98
|
+
cosignerPub: params.cosignerPub,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3NpZ25UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThCQSwwQ0E2Q0M7QUEzRUQsb0RBQXVCO0FBRXZCLDhEQUFnRDtBQUNoRCxtREFBNkM7QUFDN0Msa0RBQStCO0FBRy9CLDhDQUFnRztBQUNoRyw0Q0FBNkQ7QUFFN0QsMkRBQTZDO0FBQzdDLHlEQUEyQztBQUUzQyxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVUsRUFBQyxpREFBaUQsQ0FBQyxDQUFDO0FBRTVFLFNBQVMsaUJBQWlCLENBQUMsT0FBZ0I7SUFDekMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxNQUFNLGNBQWMsR0FBRyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRSxJQUFJLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsS0FBSyxDQUFDLHdEQUF3RCxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFTSxLQUFLLFVBQVUsZUFBZSxDQUNuQyxJQUFzQixFQUN0QixLQUFnQixFQUNoQixNQUF1QztJQUV2QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBRXJDLElBQUksZ0JBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxnQkFBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsT0FBTyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFakUsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXJELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFMUIsSUFBSSxNQUFNLElBQUksSUFBQSwrQkFBa0IsRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQWEsRUFBQyxNQUFNLElBQUEsMEJBQWMsRUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLGFBQWEsR0FBRyxJQUFBLHVDQUEwQixFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBQSw0QkFBZSxFQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLElBQUksRUFBRSxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRTtnQkFDckQsY0FBYyxFQUFFLE9BQU87YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUNwQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1lBQ2hDLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZSxJQUFJLEtBQUs7WUFDaEQsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLGtDQUFrQyxFQUFFLE1BQU0sQ0FBQyxrQ0FBa0MsSUFBSSxLQUFLO1lBQ3RGLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGdldFBvbGljeUZvckVudiwgaXNEZXNjcmlwdG9yV2FsbGV0IH0gZnJvbSAnLi4vZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBmZXRjaEtleWNoYWlucywgdG9CaXAzMlRyaXBsZSB9IGZyb20gJy4uL2tleWNoYWlucyc7XG5cbmltcG9ydCAqIGFzIGZpeGVkU2NyaXB0IGZyb20gJy4vZml4ZWRTY3JpcHQnO1xuaW1wb3J0ICogYXMgZGVzY3JpcHRvciBmcm9tICcuL2Rlc2NyaXB0b3InO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ2JpdGdvOmFic3RyYWN0LXV0eG86dHJhbnNhY3Rpb246c2lnblRyYW5zYWN0aW9uJyk7XG5cbmZ1bmN0aW9uIGdldFNpZ25lcktleWNoYWluKHVzZXJQcnY6IHVua25vd24pOiB1dHhvbGliLkJJUDMySW50ZXJmYWNlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHVzZXJQcnYgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB1c2VyUHJ2ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgdXNlciBwcml2YXRlIGtleSB0byBiZSBhIHN0cmluZycpO1xuICB9XG4gIGNvbnN0IHNpZ25lcktleWNoYWluID0gYmlwMzIuZnJvbUJhc2U1OCh1c2VyUHJ2LCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICBpZiAoc2lnbmVyS2V5Y2hhaW4uaXNOZXV0ZXJlZCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCB1c2VyIHByaXZhdGUga2V5IGJ1dCByZWNlaXZlZCBwdWJsaWMga2V5Jyk7XG4gIH1cbiAgZGVidWcoYEhlcmUgaXMgdGhlIHB1YmxpYyBrZXkgb2YgdGhlIHhwcnYgeW91IHVzZWQgdG8gc2lnbjogJHtzaWduZXJLZXljaGFpbi5uZXV0ZXJlZCgpLnRvQmFzZTU4KCl9YCk7XG4gIHJldHVybiBzaWduZXJLZXljaGFpbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4pOiBQcm9taXNlPHsgdHhIZXg6IHN0cmluZyB9PiB7XG4gIGNvbnN0IHR4UHJlYnVpbGQgPSBwYXJhbXMudHhQcmVidWlsZDtcblxuICBpZiAoXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkKSB8fCAhXy5pc09iamVjdCh0eFByZWJ1aWxkKSkge1xuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkKSAmJiAhXy5pc09iamVjdCh0eFByZWJ1aWxkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eFByZWJ1aWxkIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgdHlwZSAke3R5cGVvZiB0eFByZWJ1aWxkfWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdHhQcmVidWlsZCBwYXJhbWV0ZXInKTtcbiAgfVxuXG4gIGNvbnN0IHR4ID0gY29pbi5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwYXJhbXMudHhQcmVidWlsZCk7XG5cbiAgY29uc3Qgc2lnbmVyS2V5Y2hhaW4gPSBnZXRTaWduZXJLZXljaGFpbihwYXJhbXMucHJ2KTtcblxuICBjb25zdCB7IHdhbGxldCB9ID0gcGFyYW1zO1xuXG4gIGlmICh3YWxsZXQgJiYgaXNEZXNjcmlwdG9yV2FsbGV0KHdhbGxldCkpIHtcbiAgICBpZiAoIXNpZ25lcktleWNoYWluKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3Npbmcgc2lnbmVyJyk7XG4gICAgfVxuICAgIGNvbnN0IHdhbGxldEtleXMgPSB0b0JpcDMyVHJpcGxlKGF3YWl0IGZldGNoS2V5Y2hhaW5zKGNvaW4sIHdhbGxldCkpO1xuICAgIGNvbnN0IGRlc2NyaXB0b3JNYXAgPSBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCh3YWxsZXQsIHdhbGxldEtleXMsIGdldFBvbGljeUZvckVudihiaXRnby5lbnYpKTtcbiAgICBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNpZ25Qc2J0KHR4LCBkZXNjcmlwdG9yTWFwLCBzaWduZXJLZXljaGFpbiwge1xuICAgICAgICBvblVua25vd25JbnB1dDogJ3Rocm93JyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgdHhIZXg6IHR4LnRvSGV4KCkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBhIFV0eG9Qc2J0IG9iamVjdCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZml4ZWRTY3JpcHQuc2lnblRyYW5zYWN0aW9uKGNvaW4sIHR4LCBnZXRTaWduZXJLZXljaGFpbihwYXJhbXMucHJ2KSwge1xuICAgICAgd2FsbGV0SWQ6IHBhcmFtcy50eFByZWJ1aWxkLndhbGxldElkLFxuICAgICAgdHhJbmZvOiBwYXJhbXMudHhQcmVidWlsZC50eEluZm8sXG4gICAgICBpc0xhc3RTaWduYXR1cmU6IHBhcmFtcy5pc0xhc3RTaWduYXR1cmUgPz8gZmFsc2UsXG4gICAgICBzaWduaW5nU3RlcDogcGFyYW1zLnNpZ25pbmdTdGVwLFxuICAgICAgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeDogcGFyYW1zLmFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHggPz8gZmFsc2UsXG4gICAgICBwdWJzOiBwYXJhbXMucHVicyxcbiAgICAgIGNvc2lnbmVyUHViOiBwYXJhbXMuY29zaWduZXJQdWIsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { BitGoBase } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { AbstractUtxoCoin, VerifyTransactionOptions } from '../abstractUtxoCoin';
|
|
3
|
+
export declare function verifyTransaction<TNumber extends bigint | number>(coin: AbstractUtxoCoin, bitgo: BitGoBase, params: VerifyTransactionOptions<TNumber>): Promise<boolean>;
|
|
4
|
+
//# sourceMappingURL=verifyTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/verifyTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAOjF,wBAAsB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrE,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACxC,OAAO,CAAC,OAAO,CAAC,CAWlB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.verifyTransaction = verifyTransaction;
|
|
37
|
+
const descriptor_1 = require("../descriptor");
|
|
38
|
+
const keychains_1 = require("../keychains");
|
|
39
|
+
const fixedScript = __importStar(require("./fixedScript"));
|
|
40
|
+
const descriptor = __importStar(require("./descriptor"));
|
|
41
|
+
async function verifyTransaction(coin, bitgo, params) {
|
|
42
|
+
if ((0, descriptor_1.isDescriptorWallet)(params.wallet)) {
|
|
43
|
+
const walletKeys = (0, keychains_1.toBip32Triple)(await (0, keychains_1.fetchKeychains)(coin, params.wallet));
|
|
44
|
+
return descriptor.verifyTransaction(coin, params, (0, descriptor_1.getDescriptorMapFromWallet)(params.wallet, walletKeys, (0, descriptor_1.getPolicyForEnv)(bitgo.env)));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return fixedScript.verifyTransaction(coin, bitgo, params);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vdmVyaWZ5VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQSw4Q0FlQztBQXJCRCw4Q0FBZ0c7QUFDaEcsNENBQTZEO0FBRTdELDJEQUE2QztBQUM3Qyx5REFBMkM7QUFFcEMsS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxJQUFzQixFQUN0QixLQUFnQixFQUNoQixNQUF5QztJQUV6QyxJQUFJLElBQUEsK0JBQWtCLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdEMsTUFBTSxVQUFVLEdBQUcsSUFBQSx5QkFBYSxFQUFDLE1BQU0sSUFBQSwwQkFBYyxFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM1RSxPQUFPLFVBQVUsQ0FBQyxpQkFBaUIsQ0FDakMsSUFBSSxFQUNKLE1BQU0sRUFDTixJQUFBLHVDQUEwQixFQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUEsNEJBQWUsRUFBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbEYsQ0FBQztJQUNKLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCwgaXNEZXNjcmlwdG9yV2FsbGV0LCBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuLi9kZXNjcmlwdG9yJztcbmltcG9ydCB7IGZldGNoS2V5Y2hhaW5zLCB0b0JpcDMyVHJpcGxlIH0gZnJvbSAnLi4va2V5Y2hhaW5zJztcblxuaW1wb3J0ICogYXMgZml4ZWRTY3JpcHQgZnJvbSAnLi9maXhlZFNjcmlwdCc7XG5pbXBvcnQgKiBhcyBkZXNjcmlwdG9yIGZyb20gJy4vZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoaXNEZXNjcmlwdG9yV2FsbGV0KHBhcmFtcy53YWxsZXQpKSB7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IHRvQmlwMzJUcmlwbGUoYXdhaXQgZmV0Y2hLZXljaGFpbnMoY29pbiwgcGFyYW1zLndhbGxldCkpO1xuICAgIHJldHVybiBkZXNjcmlwdG9yLnZlcmlmeVRyYW5zYWN0aW9uKFxuICAgICAgY29pbixcbiAgICAgIHBhcmFtcyxcbiAgICAgIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0KHBhcmFtcy53YWxsZXQsIHdhbGxldEtleXMsIGdldFBvbGljeUZvckVudihiaXRnby5lbnYpKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpeGVkU2NyaXB0LnZlcmlmeVRyYW5zYWN0aW9uKGNvaW4sIGJpdGdvLCBwYXJhbXMpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BitGoBase } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { ParsedTransaction, VerifyKeySignaturesOptions, VerifyUserPublicKeyOptions } from './abstractUtxoCoin';
|
|
3
|
+
import { UtxoKeychain } from './keychains';
|
|
4
|
+
/**
|
|
5
|
+
* Verify signatures produced by the user key over the backup and bitgo keys.
|
|
6
|
+
*
|
|
7
|
+
* If set, these signatures ensure that the wallet keys cannot be changed after the wallet has been created.
|
|
8
|
+
* @param {VerifyKeySignaturesOptions} params
|
|
9
|
+
* @return {{backup: boolean, bitgo: boolean}}
|
|
10
|
+
*/
|
|
11
|
+
export declare function verifyKeySignature(params: VerifyKeySignaturesOptions): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Verify signatures against the user private key over the change wallet extended keys
|
|
14
|
+
* @param {ParsedTransaction} tx
|
|
15
|
+
* @param {Keychain} userKeychain
|
|
16
|
+
* @return {boolean}
|
|
17
|
+
* @protected
|
|
18
|
+
*/
|
|
19
|
+
export declare function verifyCustomChangeKeySignatures<TNumber extends number | bigint>(tx: ParsedTransaction<TNumber>, userKeychain: UtxoKeychain): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Decrypt the wallet's user private key and verify that the claimed public key matches
|
|
22
|
+
* @param {BitGoBase} bitgo
|
|
23
|
+
* @param {VerifyUserPublicKeyOptions} params
|
|
24
|
+
* @return {boolean}
|
|
25
|
+
* @protected
|
|
26
|
+
*/
|
|
27
|
+
export declare function verifyUserPublicKey(bitgo: BitGoBase, params: VerifyUserPublicKeyOptions): boolean;
|
|
28
|
+
//# sourceMappingURL=verifyKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyKey.d.ts","sourceRoot":"","sources":["../../src/verifyKey.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAyC,MAAM,sBAAsB,CAAC;AAExF,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAuC9E;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC7E,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAC9B,YAAY,EAAE,YAAY,GACzB,OAAO,CAyBT;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAiCjG"}
|
|
@@ -0,0 +1,164 @@
|
|
|
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
|
+
exports.verifyKeySignature = verifyKeySignature;
|
|
40
|
+
exports.verifyCustomChangeKeySignatures = verifyCustomChangeKeySignatures;
|
|
41
|
+
exports.verifyUserPublicKey = verifyUserPublicKey;
|
|
42
|
+
/*
|
|
43
|
+
|
|
44
|
+
These are actually not utxo-specific and belong in a more general module.
|
|
45
|
+
|
|
46
|
+
*/
|
|
47
|
+
const assert_1 = __importDefault(require("assert"));
|
|
48
|
+
const debug_1 = __importDefault(require("debug"));
|
|
49
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
50
|
+
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
51
|
+
const bitcoinMessage = __importStar(require("bitcoinjs-message"));
|
|
52
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
53
|
+
const debug = (0, debug_1.default)('bitgo:abstract-utxo:verifyKey');
|
|
54
|
+
/**
|
|
55
|
+
* Verify signatures produced by the user key over the backup and bitgo keys.
|
|
56
|
+
*
|
|
57
|
+
* If set, these signatures ensure that the wallet keys cannot be changed after the wallet has been created.
|
|
58
|
+
* @param {VerifyKeySignaturesOptions} params
|
|
59
|
+
* @return {{backup: boolean, bitgo: boolean}}
|
|
60
|
+
*/
|
|
61
|
+
function verifyKeySignature(params) {
|
|
62
|
+
// first, let's verify the integrity of the user key, whose public key is used for subsequent verifications
|
|
63
|
+
const { userKeychain, keychainToVerify, keySignature } = params;
|
|
64
|
+
if (!userKeychain) {
|
|
65
|
+
throw new Error('user keychain is required');
|
|
66
|
+
}
|
|
67
|
+
if (!keychainToVerify) {
|
|
68
|
+
throw new Error('keychain to verify is required');
|
|
69
|
+
}
|
|
70
|
+
if (!keySignature) {
|
|
71
|
+
throw new Error('key signature is required');
|
|
72
|
+
}
|
|
73
|
+
// verify the signature against the user public key
|
|
74
|
+
(0, assert_1.default)(userKeychain.pub);
|
|
75
|
+
const publicKey = utxo_lib_1.bip32.fromBase58(userKeychain.pub).publicKey;
|
|
76
|
+
// Due to interface of `bitcoinMessage`, we need to convert the public key to an address.
|
|
77
|
+
// Note that this address has no relationship to on-chain transactions. We are
|
|
78
|
+
// only interested in the address as a representation of the public key.
|
|
79
|
+
const signingAddress = utxolib.address.toBase58Check(utxolib.crypto.hash160(publicKey), utxolib.networks.bitcoin.pubKeyHash,
|
|
80
|
+
// we do not pass `this.network` here because it would fail for zcash
|
|
81
|
+
// the bitcoinMessage library decodes the address and throws away the first byte
|
|
82
|
+
// because zcash has a two-byte prefix, verify() decodes zcash addresses to an invalid pubkey hash
|
|
83
|
+
utxolib.networks.bitcoin);
|
|
84
|
+
// BG-5703: use BTC mainnet prefix for all key signature operations
|
|
85
|
+
// (this means do not pass a prefix parameter, and let it use the default prefix instead)
|
|
86
|
+
(0, assert_1.default)(keychainToVerify.pub);
|
|
87
|
+
try {
|
|
88
|
+
return bitcoinMessage.verify(keychainToVerify.pub, signingAddress, Buffer.from(keySignature, 'hex'));
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
debug('error thrown from bitcoinmessage while verifying key signature', e);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Verify signatures against the user private key over the change wallet extended keys
|
|
97
|
+
* @param {ParsedTransaction} tx
|
|
98
|
+
* @param {Keychain} userKeychain
|
|
99
|
+
* @return {boolean}
|
|
100
|
+
* @protected
|
|
101
|
+
*/
|
|
102
|
+
function verifyCustomChangeKeySignatures(tx, userKeychain) {
|
|
103
|
+
if (!tx.customChange) {
|
|
104
|
+
throw new Error('parsed transaction is missing required custom change verification data');
|
|
105
|
+
}
|
|
106
|
+
if (!Array.isArray(tx.customChange.keys) || !Array.isArray(tx.customChange.signatures)) {
|
|
107
|
+
throw new Error('customChange property is missing keys or signatures');
|
|
108
|
+
}
|
|
109
|
+
for (const keyIndex of [sdk_core_1.KeyIndices.USER, sdk_core_1.KeyIndices.BACKUP, sdk_core_1.KeyIndices.BITGO]) {
|
|
110
|
+
const keychainToVerify = tx.customChange.keys[keyIndex];
|
|
111
|
+
const keySignature = tx.customChange.signatures[keyIndex];
|
|
112
|
+
if (!keychainToVerify) {
|
|
113
|
+
throw new Error(`missing required custom change ${sdk_core_1.KeyIndices[keyIndex].toLowerCase()} keychain public key`);
|
|
114
|
+
}
|
|
115
|
+
if (!keySignature) {
|
|
116
|
+
throw new Error(`missing required custom change ${sdk_core_1.KeyIndices[keyIndex].toLowerCase()} keychain signature`);
|
|
117
|
+
}
|
|
118
|
+
if (!verifyKeySignature({ userKeychain, keychainToVerify, keySignature })) {
|
|
119
|
+
debug('failed to verify custom change %s key signature!', sdk_core_1.KeyIndices[keyIndex].toLowerCase());
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Decrypt the wallet's user private key and verify that the claimed public key matches
|
|
127
|
+
* @param {BitGoBase} bitgo
|
|
128
|
+
* @param {VerifyUserPublicKeyOptions} params
|
|
129
|
+
* @return {boolean}
|
|
130
|
+
* @protected
|
|
131
|
+
*/
|
|
132
|
+
function verifyUserPublicKey(bitgo, params) {
|
|
133
|
+
const { userKeychain, txParams, disableNetworking } = params;
|
|
134
|
+
if (!userKeychain) {
|
|
135
|
+
throw new Error('user keychain is required');
|
|
136
|
+
}
|
|
137
|
+
const userPub = userKeychain.pub;
|
|
138
|
+
// decrypt the user private key, so we can verify that the claimed public key is a match
|
|
139
|
+
let userPrv = userKeychain.prv;
|
|
140
|
+
if (!userPrv && txParams.walletPassphrase) {
|
|
141
|
+
userPrv = (0, sdk_core_1.decryptKeychainPrivateKey)(bitgo, userKeychain, txParams.walletPassphrase);
|
|
142
|
+
}
|
|
143
|
+
if (!userPrv) {
|
|
144
|
+
const errorMessage = 'user private key unavailable for verification';
|
|
145
|
+
if (disableNetworking) {
|
|
146
|
+
console.log(errorMessage);
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
throw new Error(errorMessage);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
const userPrivateKey = utxo_lib_1.bip32.fromBase58(userPrv);
|
|
155
|
+
if (userPrivateKey.toBase58() === userPrivateKey.neutered().toBase58()) {
|
|
156
|
+
throw new Error('user private key is only public');
|
|
157
|
+
}
|
|
158
|
+
if (userPrivateKey.neutered().toBase58() !== userPub) {
|
|
159
|
+
throw new Error('user private key does not match public key');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5S2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZlcmlmeUtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQSxnREF1Q0M7QUFTRCwwRUE0QkM7QUFTRCxrREFpQ0M7QUEvSUQ7Ozs7R0FJRztBQUNILG9EQUE0QjtBQUU1QixrREFBK0I7QUFDL0IsOERBQWdEO0FBQ2hELG1EQUE2QztBQUM3QyxrRUFBb0Q7QUFDcEQsbURBQXdGO0FBS3hGLE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBVSxFQUFDLCtCQUErQixDQUFDLENBQUM7QUFFMUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsTUFBa0M7SUFDbkUsMkdBQTJHO0lBQzNHLE1BQU0sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ2hFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELElBQUEsZ0JBQU0sRUFBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsTUFBTSxTQUFTLEdBQUcsZ0JBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMvRCx5RkFBeUY7SUFDekYsOEVBQThFO0lBQzlFLHdFQUF3RTtJQUN4RSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FDbEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQ2pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVU7SUFDbkMscUVBQXFFO0lBQ3JFLGdGQUFnRjtJQUNoRixrR0FBa0c7SUFDbEcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQ3pCLENBQUM7SUFFRixtRUFBbUU7SUFDbkUseUZBQXlGO0lBQ3pGLElBQUEsZ0JBQU0sRUFBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUM7UUFDSCxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsS0FBSyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQiwrQkFBK0IsQ0FDN0MsRUFBOEIsRUFDOUIsWUFBMEI7SUFFMUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUN2RixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELEtBQUssTUFBTSxRQUFRLElBQUksQ0FBQyxxQkFBVSxDQUFDLElBQUksRUFBRSxxQkFBVSxDQUFDLE1BQU0sRUFBRSxxQkFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDOUUsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxxQkFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MscUJBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUM3RyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxRSxLQUFLLENBQUMsa0RBQWtELEVBQUUscUJBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFnQixFQUFFLE1BQWtDO0lBQ3RGLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQzdELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFFakMsd0ZBQXdGO0lBQ3hGLElBQUksT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDL0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQyxPQUFPLEdBQUcsSUFBQSxvQ0FBeUIsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLFlBQVksR0FBRywrQ0FBK0MsQ0FBQztRQUNyRSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLGNBQWMsR0FBRyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN2RSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5cblRoZXNlIGFyZSBhY3R1YWxseSBub3QgdXR4by1zcGVjaWZpYyBhbmQgYmVsb25nIGluIGEgbW9yZSBnZW5lcmFsIG1vZHVsZS5cblxuICovXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyBiaXRjb2luTWVzc2FnZSBmcm9tICdiaXRjb2luanMtbWVzc2FnZSc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UsIGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXksIEtleUluZGljZXMgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IFBhcnNlZFRyYW5zYWN0aW9uLCBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucywgVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMgfSBmcm9tICcuL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgVXR4b0tleWNoYWluIH0gZnJvbSAnLi9rZXljaGFpbnMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ2JpdGdvOmFic3RyYWN0LXV0eG86dmVyaWZ5S2V5Jyk7XG5cbi8qKlxuICogVmVyaWZ5IHNpZ25hdHVyZXMgcHJvZHVjZWQgYnkgdGhlIHVzZXIga2V5IG92ZXIgdGhlIGJhY2t1cCBhbmQgYml0Z28ga2V5cy5cbiAqXG4gKiBJZiBzZXQsIHRoZXNlIHNpZ25hdHVyZXMgZW5zdXJlIHRoYXQgdGhlIHdhbGxldCBrZXlzIGNhbm5vdCBiZSBjaGFuZ2VkIGFmdGVyIHRoZSB3YWxsZXQgaGFzIGJlZW4gY3JlYXRlZC5cbiAqIEBwYXJhbSB7VmVyaWZ5S2V5U2lnbmF0dXJlc09wdGlvbnN9IHBhcmFtc1xuICogQHJldHVybiB7e2JhY2t1cDogYm9vbGVhbiwgYml0Z286IGJvb2xlYW59fVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5S2V5U2lnbmF0dXJlKHBhcmFtczogVmVyaWZ5S2V5U2lnbmF0dXJlc09wdGlvbnMpOiBib29sZWFuIHtcbiAgLy8gZmlyc3QsIGxldCdzIHZlcmlmeSB0aGUgaW50ZWdyaXR5IG9mIHRoZSB1c2VyIGtleSwgd2hvc2UgcHVibGljIGtleSBpcyB1c2VkIGZvciBzdWJzZXF1ZW50IHZlcmlmaWNhdGlvbnNcbiAgY29uc3QgeyB1c2VyS2V5Y2hhaW4sIGtleWNoYWluVG9WZXJpZnksIGtleVNpZ25hdHVyZSB9ID0gcGFyYW1zO1xuICBpZiAoIXVzZXJLZXljaGFpbikge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlciBrZXljaGFpbiBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFrZXljaGFpblRvVmVyaWZ5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdrZXljaGFpbiB0byB2ZXJpZnkgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmICgha2V5U2lnbmF0dXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdrZXkgc2lnbmF0dXJlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICAvLyB2ZXJpZnkgdGhlIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSB1c2VyIHB1YmxpYyBrZXlcbiAgYXNzZXJ0KHVzZXJLZXljaGFpbi5wdWIpO1xuICBjb25zdCBwdWJsaWNLZXkgPSBiaXAzMi5mcm9tQmFzZTU4KHVzZXJLZXljaGFpbi5wdWIpLnB1YmxpY0tleTtcbiAgLy8gRHVlIHRvIGludGVyZmFjZSBvZiBgYml0Y29pbk1lc3NhZ2VgLCB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIHB1YmxpYyBrZXkgdG8gYW4gYWRkcmVzcy5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgYWRkcmVzcyBoYXMgbm8gcmVsYXRpb25zaGlwIHRvIG9uLWNoYWluIHRyYW5zYWN0aW9ucy4gV2UgYXJlXG4gIC8vIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgYWRkcmVzcyBhcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwdWJsaWMga2V5LlxuICBjb25zdCBzaWduaW5nQWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy50b0Jhc2U1OENoZWNrKFxuICAgIHV0eG9saWIuY3J5cHRvLmhhc2gxNjAocHVibGljS2V5KSxcbiAgICB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4ucHViS2V5SGFzaCxcbiAgICAvLyB3ZSBkbyBub3QgcGFzcyBgdGhpcy5uZXR3b3JrYCBoZXJlIGJlY2F1c2UgaXQgd291bGQgZmFpbCBmb3IgemNhc2hcbiAgICAvLyB0aGUgYml0Y29pbk1lc3NhZ2UgbGlicmFyeSBkZWNvZGVzIHRoZSBhZGRyZXNzIGFuZCB0aHJvd3MgYXdheSB0aGUgZmlyc3QgYnl0ZVxuICAgIC8vIGJlY2F1c2UgemNhc2ggaGFzIGEgdHdvLWJ5dGUgcHJlZml4LCB2ZXJpZnkoKSBkZWNvZGVzIHpjYXNoIGFkZHJlc3NlcyB0byBhbiBpbnZhbGlkIHB1YmtleSBoYXNoXG4gICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICk7XG5cbiAgLy8gQkctNTcwMzogdXNlIEJUQyBtYWlubmV0IHByZWZpeCBmb3IgYWxsIGtleSBzaWduYXR1cmUgb3BlcmF0aW9uc1xuICAvLyAodGhpcyBtZWFucyBkbyBub3QgcGFzcyBhIHByZWZpeCBwYXJhbWV0ZXIsIGFuZCBsZXQgaXQgdXNlIHRoZSBkZWZhdWx0IHByZWZpeCBpbnN0ZWFkKVxuICBhc3NlcnQoa2V5Y2hhaW5Ub1ZlcmlmeS5wdWIpO1xuICB0cnkge1xuICAgIHJldHVybiBiaXRjb2luTWVzc2FnZS52ZXJpZnkoa2V5Y2hhaW5Ub1ZlcmlmeS5wdWIsIHNpZ25pbmdBZGRyZXNzLCBCdWZmZXIuZnJvbShrZXlTaWduYXR1cmUsICdoZXgnKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkZWJ1ZygnZXJyb3IgdGhyb3duIGZyb20gYml0Y29pbm1lc3NhZ2Ugd2hpbGUgdmVyaWZ5aW5nIGtleSBzaWduYXR1cmUnLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZnkgc2lnbmF0dXJlcyBhZ2FpbnN0IHRoZSB1c2VyIHByaXZhdGUga2V5IG92ZXIgdGhlIGNoYW5nZSB3YWxsZXQgZXh0ZW5kZWQga2V5c1xuICogQHBhcmFtIHtQYXJzZWRUcmFuc2FjdGlvbn0gdHhcbiAqIEBwYXJhbSB7S2V5Y2hhaW59IHVzZXJLZXljaGFpblxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeUN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgdXNlcktleWNoYWluOiBVdHhvS2V5Y2hhaW5cbik6IGJvb2xlYW4ge1xuICBpZiAoIXR4LmN1c3RvbUNoYW5nZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyc2VkIHRyYW5zYWN0aW9uIGlzIG1pc3NpbmcgcmVxdWlyZWQgY3VzdG9tIGNoYW5nZSB2ZXJpZmljYXRpb24gZGF0YScpO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHR4LmN1c3RvbUNoYW5nZS5rZXlzKSB8fCAhQXJyYXkuaXNBcnJheSh0eC5jdXN0b21DaGFuZ2Uuc2lnbmF0dXJlcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2N1c3RvbUNoYW5nZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGtleXMgb3Igc2lnbmF0dXJlcycpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXlJbmRleCBvZiBbS2V5SW5kaWNlcy5VU0VSLCBLZXlJbmRpY2VzLkJBQ0tVUCwgS2V5SW5kaWNlcy5CSVRHT10pIHtcbiAgICBjb25zdCBrZXljaGFpblRvVmVyaWZ5ID0gdHguY3VzdG9tQ2hhbmdlLmtleXNba2V5SW5kZXhdO1xuICAgIGNvbnN0IGtleVNpZ25hdHVyZSA9IHR4LmN1c3RvbUNoYW5nZS5zaWduYXR1cmVzW2tleUluZGV4XTtcbiAgICBpZiAoIWtleWNoYWluVG9WZXJpZnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbWlzc2luZyByZXF1aXJlZCBjdXN0b20gY2hhbmdlICR7S2V5SW5kaWNlc1trZXlJbmRleF0udG9Mb3dlckNhc2UoKX0ga2V5Y2hhaW4gcHVibGljIGtleWApO1xuICAgIH1cbiAgICBpZiAoIWtleVNpZ25hdHVyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtaXNzaW5nIHJlcXVpcmVkIGN1c3RvbSBjaGFuZ2UgJHtLZXlJbmRpY2VzW2tleUluZGV4XS50b0xvd2VyQ2FzZSgpfSBrZXljaGFpbiBzaWduYXR1cmVgKTtcbiAgICB9XG4gICAgaWYgKCF2ZXJpZnlLZXlTaWduYXR1cmUoeyB1c2VyS2V5Y2hhaW4sIGtleWNoYWluVG9WZXJpZnksIGtleVNpZ25hdHVyZSB9KSkge1xuICAgICAgZGVidWcoJ2ZhaWxlZCB0byB2ZXJpZnkgY3VzdG9tIGNoYW5nZSAlcyBrZXkgc2lnbmF0dXJlIScsIEtleUluZGljZXNba2V5SW5kZXhdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERlY3J5cHQgdGhlIHdhbGxldCdzIHVzZXIgcHJpdmF0ZSBrZXkgYW5kIHZlcmlmeSB0aGF0IHRoZSBjbGFpbWVkIHB1YmxpYyBrZXkgbWF0Y2hlc1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvXG4gKiBAcGFyYW0ge1ZlcmlmeVVzZXJQdWJsaWNLZXlPcHRpb25zfSBwYXJhbXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAcHJvdGVjdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlVc2VyUHVibGljS2V5KGJpdGdvOiBCaXRHb0Jhc2UsIHBhcmFtczogVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMpOiBib29sZWFuIHtcbiAgY29uc3QgeyB1c2VyS2V5Y2hhaW4sIHR4UGFyYW1zLCBkaXNhYmxlTmV0d29ya2luZyB9ID0gcGFyYW1zO1xuICBpZiAoIXVzZXJLZXljaGFpbikge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlciBrZXljaGFpbiBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgY29uc3QgdXNlclB1YiA9IHVzZXJLZXljaGFpbi5wdWI7XG5cbiAgLy8gZGVjcnlwdCB0aGUgdXNlciBwcml2YXRlIGtleSwgc28gd2UgY2FuIHZlcmlmeSB0aGF0IHRoZSBjbGFpbWVkIHB1YmxpYyBrZXkgaXMgYSBtYXRjaFxuICBsZXQgdXNlclBydiA9IHVzZXJLZXljaGFpbi5wcnY7XG4gIGlmICghdXNlclBydiAmJiB0eFBhcmFtcy53YWxsZXRQYXNzcGhyYXNlKSB7XG4gICAgdXNlclBydiA9IGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkoYml0Z28sIHVzZXJLZXljaGFpbiwgdHhQYXJhbXMud2FsbGV0UGFzc3BocmFzZSk7XG4gIH1cblxuICBpZiAoIXVzZXJQcnYpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAndXNlciBwcml2YXRlIGtleSB1bmF2YWlsYWJsZSBmb3IgdmVyaWZpY2F0aW9uJztcbiAgICBpZiAoZGlzYWJsZU5ldHdvcmtpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yTWVzc2FnZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1c2VyUHJpdmF0ZUtleSA9IGJpcDMyLmZyb21CYXNlNTgodXNlclBydik7XG4gICAgaWYgKHVzZXJQcml2YXRlS2V5LnRvQmFzZTU4KCkgPT09IHVzZXJQcml2YXRlS2V5Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1c2VyIHByaXZhdGUga2V5IGlzIG9ubHkgcHVibGljJyk7XG4gICAgfVxuICAgIGlmICh1c2VyUHJpdmF0ZUtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkgIT09IHVzZXJQdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXNlciBwcml2YXRlIGtleSBkb2VzIG5vdCBtYXRjaCBwdWJsaWMga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Wallet, WalletData } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { UtxoCoinName } from './names';
|
|
3
|
+
export interface UtxoWalletData extends WalletData {
|
|
4
|
+
coin: UtxoCoinName;
|
|
5
|
+
customChangeKeySignatures: {
|
|
6
|
+
user: string;
|
|
7
|
+
backup: string;
|
|
8
|
+
bitgo: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export declare function isUtxoWalletData(obj: WalletData): obj is UtxoWalletData;
|
|
12
|
+
export interface UtxoWallet extends Wallet {
|
|
13
|
+
_wallet: UtxoWalletData;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvD,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,EAAE,YAAY,CAAC;IACnB,yBAAyB,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG,IAAI,cAAc,CAEvE;AAED,MAAM,WAAW,UAAW,SAAQ,MAAM;IACxC,OAAO,EAAE,cAAc,CAAC;CACzB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isUtxoWalletData = isUtxoWalletData;
|
|
4
|
+
const names_1 = require("./names");
|
|
5
|
+
function isUtxoWalletData(obj) {
|
|
6
|
+
return (0, names_1.isUtxoCoinName)(obj.coin);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWNBLDRDQUVDO0FBZEQsbUNBQXVEO0FBWXZELFNBQWdCLGdCQUFnQixDQUFDLEdBQWU7SUFDOUMsT0FBTyxJQUFBLHNCQUFjLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXYWxsZXQsIFdhbGxldERhdGEgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IGlzVXR4b0NvaW5OYW1lLCBVdHhvQ29pbk5hbWUgfSBmcm9tICcuL25hbWVzJztcblxuLy8gcGFyc2VUcmFuc2FjdGlvbnMnIHJldHVybiB0eXBlIG1ha2VzIHVzZSBvZiBXYWxsZXREYXRhJ3MgdHlwZSBidXQgd2l0aCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzIGFzIHJlcXVpcmVkLlxuZXhwb3J0IGludGVyZmFjZSBVdHhvV2FsbGV0RGF0YSBleHRlbmRzIFdhbGxldERhdGEge1xuICBjb2luOiBVdHhvQ29pbk5hbWU7XG4gIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXM6IHtcbiAgICB1c2VyOiBzdHJpbmc7XG4gICAgYmFja3VwOiBzdHJpbmc7XG4gICAgYml0Z286IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXR4b1dhbGxldERhdGEob2JqOiBXYWxsZXREYXRhKTogb2JqIGlzIFV0eG9XYWxsZXREYXRhIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lKG9iai5jb2luKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVdHhvV2FsbGV0IGV4dGVuZHMgV2FsbGV0IHtcbiAgX3dhbGxldDogVXR4b1dhbGxldERhdGE7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/abstract-utxo",
|
|
3
|
-
"version": "1.6.1-alpha.
|
|
3
|
+
"version": "1.6.1-alpha.341",
|
|
4
4
|
"description": "BitGo SDK coin library for UTXO base implementation",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/src"
|
|
9
|
+
],
|
|
7
10
|
"scripts": {
|
|
8
11
|
"build": "yarn tsc --build --incremental --verbose .",
|
|
9
12
|
"fmt": "prettier --write .",
|
|
10
13
|
"check-fmt": "prettier --check .",
|
|
11
14
|
"clean": "rm -r ./dist",
|
|
12
15
|
"lint": "eslint --quiet .",
|
|
13
|
-
"prepare": "npm run build"
|
|
16
|
+
"prepare": "npm run build",
|
|
17
|
+
"test": "npm run unit-test",
|
|
18
|
+
"unit-test": "mocha --recursive test/"
|
|
14
19
|
},
|
|
15
20
|
"author": "BitGo SDK Team <sdkteam@bitgo.com>",
|
|
16
21
|
"license": "MIT",
|
|
17
22
|
"engines": {
|
|
18
|
-
"node": ">=
|
|
23
|
+
"node": ">=18 <23"
|
|
19
24
|
},
|
|
20
25
|
"repository": {
|
|
21
26
|
"type": "git",
|
|
@@ -37,20 +42,21 @@
|
|
|
37
42
|
]
|
|
38
43
|
},
|
|
39
44
|
"dependencies": {
|
|
40
|
-
"@bitgo-beta/blockapis": "1.3.3-alpha.
|
|
41
|
-
"@bitgo-beta/sdk-api": "1.6.1-alpha.
|
|
42
|
-
"@bitgo-beta/sdk-core": "2.4.1-alpha.
|
|
43
|
-
"@bitgo-beta/unspents": "0.11.3-alpha.
|
|
44
|
-
"@bitgo-beta/utxo-
|
|
45
|
-
"@
|
|
45
|
+
"@bitgo-beta/blockapis": "1.3.3-alpha.342",
|
|
46
|
+
"@bitgo-beta/sdk-api": "1.6.1-alpha.341",
|
|
47
|
+
"@bitgo-beta/sdk-core": "2.4.1-alpha.341",
|
|
48
|
+
"@bitgo-beta/unspents": "0.11.3-alpha.342",
|
|
49
|
+
"@bitgo-beta/utxo-core": "1.0.1-alpha.72",
|
|
50
|
+
"@bitgo-beta/utxo-lib": "4.0.1-alpha.342",
|
|
51
|
+
"@bitgo/wasm-miniscript": "2.0.0-beta.7",
|
|
46
52
|
"@types/lodash": "^4.14.121",
|
|
47
53
|
"@types/superagent": "4.1.15",
|
|
48
54
|
"bignumber.js": "^9.0.2",
|
|
49
|
-
"bitcoinjs-message": "
|
|
50
|
-
"bluebird": "^3.5.3",
|
|
55
|
+
"bitcoinjs-message": "npm:@bitgo-forks/bitcoinjs-message@1.0.0-master.3",
|
|
51
56
|
"debug": "^3.1.0",
|
|
57
|
+
"io-ts": "npm:@bitgo-forks/io-ts@2.1.4",
|
|
52
58
|
"lodash": "^4.17.14",
|
|
53
|
-
"superagent": "^
|
|
59
|
+
"superagent": "^9.0.1"
|
|
54
60
|
},
|
|
55
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "09c7732759d29de5ab19184a8f3048b7a885ff75"
|
|
56
62
|
}
|