@bitgo-beta/utxo-core 1.0.1-alpha.94 → 1.0.1-alpha.95
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/bip322/index.d.ts +2 -0
- package/dist/src/bip322/index.d.ts.map +1 -1
- package/dist/src/bip322/index.js +3 -1
- package/dist/src/bip322/toSign.d.ts +18 -0
- package/dist/src/bip322/toSign.d.ts.map +1 -0
- package/dist/src/bip322/toSign.js +60 -0
- package/dist/src/bip322/toSpend.d.ts +4 -2
- package/dist/src/bip322/toSpend.d.ts.map +1 -1
- package/dist/src/bip322/toSpend.js +12 -3
- package/dist/src/bip322/utils.d.ts +6 -0
- package/dist/src/bip322/utils.d.ts.map +1 -0
- package/dist/src/bip322/utils.js +71 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bip322/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bip322/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
|
package/dist/src/bip322/index.js
CHANGED
|
@@ -15,4 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./toSpend"), exports);
|
|
18
|
-
|
|
18
|
+
__exportStar(require("./toSign"), exports);
|
|
19
|
+
__exportStar(require("./utils"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwMzIyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEI7QUFDMUIsMkNBQXlCO0FBQ3pCLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdG9TcGVuZCc7XG5leHBvcnQgKiBmcm9tICcuL3RvU2lnbic7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Psbt, Transaction, bitgo } from '@bitgo-beta/utxo-lib';
|
|
2
|
+
export type AddressDetails = {
|
|
3
|
+
redeemScript?: Buffer;
|
|
4
|
+
witnessScript?: Buffer;
|
|
5
|
+
scriptPubKey: Buffer;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Construct the toSign PSBT for a BIP322 verification.
|
|
9
|
+
* Source implementation:
|
|
10
|
+
* https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
|
|
11
|
+
*
|
|
12
|
+
* @param {string} toSpendTxHex - The hex representation of the `toSpend` transaction.
|
|
13
|
+
* @param {AddressDetails} addressDetails - The details of the address, including redeemScript and/or witnessScript.
|
|
14
|
+
* @returns {string} - The hex representation of the constructed PSBT.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildToSignPsbt(toSpendTx: Transaction<bigint>, addressDetails: AddressDetails): Psbt;
|
|
17
|
+
export declare function buildToSignPsbtForChainAndIndex(toSpendTx: Transaction<bigint>, rootWalletKeys: bitgo.RootWalletKeys, chain: bitgo.ChainCode, index: number): Psbt;
|
|
18
|
+
//# sourceMappingURL=toSign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toSign.d.ts","sourceRoot":"","sources":["../../../src/bip322/toSign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIhE,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,CA8BpG;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAC9B,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,KAAK,EAAE,MAAM,GACZ,IAAI,CAmBN"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildToSignPsbt = buildToSignPsbt;
|
|
4
|
+
exports.buildToSignPsbtForChainAndIndex = buildToSignPsbtForChainAndIndex;
|
|
5
|
+
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
/**
|
|
8
|
+
* Construct the toSign PSBT for a BIP322 verification.
|
|
9
|
+
* Source implementation:
|
|
10
|
+
* https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
|
|
11
|
+
*
|
|
12
|
+
* @param {string} toSpendTxHex - The hex representation of the `toSpend` transaction.
|
|
13
|
+
* @param {AddressDetails} addressDetails - The details of the address, including redeemScript and/or witnessScript.
|
|
14
|
+
* @returns {string} - The hex representation of the constructed PSBT.
|
|
15
|
+
*/
|
|
16
|
+
function buildToSignPsbt(toSpendTx, addressDetails) {
|
|
17
|
+
// Create PSBT object for constructing the transaction
|
|
18
|
+
const psbt = new utxo_lib_1.Psbt();
|
|
19
|
+
// Set default value for nVersion and nLockTime
|
|
20
|
+
psbt.setVersion(0); // nVersion = 0
|
|
21
|
+
psbt.setLocktime(0); // nLockTime = 0
|
|
22
|
+
// Set the input
|
|
23
|
+
psbt.addInput({
|
|
24
|
+
hash: toSpendTx.getId(), // vin[0].prevout.hash = to_spend.txid
|
|
25
|
+
index: 0, // vin[0].prevout.n = 0
|
|
26
|
+
sequence: 0, // vin[0].nSequence = 0
|
|
27
|
+
nonWitnessUtxo: toSpendTx.toBuffer(), // previous transaction for us to rebuild later to verify
|
|
28
|
+
});
|
|
29
|
+
psbt.updateInput(0, {
|
|
30
|
+
witnessUtxo: { value: BigInt(0), script: addressDetails.scriptPubKey },
|
|
31
|
+
});
|
|
32
|
+
if (addressDetails.redeemScript) {
|
|
33
|
+
psbt.updateInput(0, { redeemScript: addressDetails.redeemScript });
|
|
34
|
+
}
|
|
35
|
+
if (addressDetails.witnessScript) {
|
|
36
|
+
psbt.updateInput(0, { witnessScript: addressDetails.witnessScript });
|
|
37
|
+
}
|
|
38
|
+
// Set the output
|
|
39
|
+
psbt.addOutput({
|
|
40
|
+
value: BigInt(0), // vout[0].nValue = 0
|
|
41
|
+
script: Buffer.from([0x6a]), // vout[0].scriptPubKey = OP_RETURN
|
|
42
|
+
});
|
|
43
|
+
return psbt;
|
|
44
|
+
}
|
|
45
|
+
function buildToSignPsbtForChainAndIndex(toSpendTx, rootWalletKeys, chain, index) {
|
|
46
|
+
if ((0, utils_1.isTaprootChain)(chain)) {
|
|
47
|
+
throw new Error('BIP322 is not supported for Taproot script types.');
|
|
48
|
+
}
|
|
49
|
+
const output = utxo_lib_1.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys, utxo_lib_1.bitgo.scriptTypeForChain(chain));
|
|
50
|
+
const toSpendScriptPubKey = toSpendTx.outs[0].script;
|
|
51
|
+
if (!toSpendScriptPubKey.equals(output.scriptPubKey)) {
|
|
52
|
+
throw new Error('Output scriptPubKey does not match the expected output script for the chain and index.');
|
|
53
|
+
}
|
|
54
|
+
return buildToSignPsbt(toSpendTx, {
|
|
55
|
+
scriptPubKey: output.scriptPubKey,
|
|
56
|
+
redeemScript: output.redeemScript,
|
|
57
|
+
witnessScript: output.witnessScript,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpcDMyMi90b1NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsMENBOEJDO0FBRUQsMEVBd0JDO0FBM0VELG1EQUFnRTtBQUVoRSxtQ0FBeUM7QUFRekM7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixlQUFlLENBQUMsU0FBOEIsRUFBRSxjQUE4QjtJQUM1RixzREFBc0Q7SUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFJLEVBQUUsQ0FBQztJQUN4QiwrQ0FBK0M7SUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWU7SUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtJQUNyQyxnQkFBZ0I7SUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNaLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsc0NBQXNDO1FBQy9ELEtBQUssRUFBRSxDQUFDLEVBQUUsdUJBQXVCO1FBQ2pDLFFBQVEsRUFBRSxDQUFDLEVBQUUsdUJBQXVCO1FBQ3BDLGNBQWMsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUseURBQXlEO0tBQ2hHLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO1FBQ2xCLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUU7S0FDdkUsQ0FBQyxDQUFDO0lBRUgsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNiLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUscUJBQXFCO1FBQ3ZDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxtQ0FBbUM7S0FDakUsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBZ0IsK0JBQStCLENBQzdDLFNBQThCLEVBQzlCLGNBQW9DLEVBQ3BDLEtBQXNCLEVBQ3RCLEtBQWE7SUFFYixJQUFJLElBQUEsc0JBQWMsRUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsZ0JBQUssQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQ3ZELGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUM5RCxnQkFBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUNoQyxDQUFDO0lBRUYsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsd0ZBQXdGLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsT0FBTyxlQUFlLENBQUMsU0FBUyxFQUFFO1FBQ2hDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtRQUNqQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7UUFDakMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO0tBQ3BDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQc2J0LCBUcmFuc2FjdGlvbiwgYml0Z28gfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCB7IGlzVGFwcm9vdENoYWluIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIEFkZHJlc3NEZXRhaWxzID0ge1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIHNjcmlwdFB1YktleTogQnVmZmVyO1xufTtcblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhlIHRvU2lnbiBQU0JUIGZvciBhIEJJUDMyMiB2ZXJpZmljYXRpb24uXG4gKiBTb3VyY2UgaW1wbGVtZW50YXRpb246XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSNmdWxsXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvU3BlbmRUeEhleCAtIFRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIGB0b1NwZW5kYCB0cmFuc2FjdGlvbi5cbiAqIEBwYXJhbSB7QWRkcmVzc0RldGFpbHN9IGFkZHJlc3NEZXRhaWxzIC0gVGhlIGRldGFpbHMgb2YgdGhlIGFkZHJlc3MsIGluY2x1ZGluZyByZWRlZW1TY3JpcHQgYW5kL29yIHdpdG5lc3NTY3JpcHQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0cnVjdGVkIFBTQlQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvU2lnblBzYnQodG9TcGVuZFR4OiBUcmFuc2FjdGlvbjxiaWdpbnQ+LCBhZGRyZXNzRGV0YWlsczogQWRkcmVzc0RldGFpbHMpOiBQc2J0IHtcbiAgLy8gQ3JlYXRlIFBTQlQgb2JqZWN0IGZvciBjb25zdHJ1Y3RpbmcgdGhlIHRyYW5zYWN0aW9uXG4gIGNvbnN0IHBzYnQgPSBuZXcgUHNidCgpO1xuICAvLyBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgblZlcnNpb24gYW5kIG5Mb2NrVGltZVxuICBwc2J0LnNldFZlcnNpb24oMCk7IC8vIG5WZXJzaW9uID0gMFxuICBwc2J0LnNldExvY2t0aW1lKDApOyAvLyBuTG9ja1RpbWUgPSAwXG4gIC8vIFNldCB0aGUgaW5wdXRcbiAgcHNidC5hZGRJbnB1dCh7XG4gICAgaGFzaDogdG9TcGVuZFR4LmdldElkKCksIC8vIHZpblswXS5wcmV2b3V0Lmhhc2ggPSB0b19zcGVuZC50eGlkXG4gICAgaW5kZXg6IDAsIC8vIHZpblswXS5wcmV2b3V0Lm4gPSAwXG4gICAgc2VxdWVuY2U6IDAsIC8vIHZpblswXS5uU2VxdWVuY2UgPSAwXG4gICAgbm9uV2l0bmVzc1V0eG86IHRvU3BlbmRUeC50b0J1ZmZlcigpLCAvLyBwcmV2aW91cyB0cmFuc2FjdGlvbiBmb3IgdXMgdG8gcmVidWlsZCBsYXRlciB0byB2ZXJpZnlcbiAgfSk7XG4gIHBzYnQudXBkYXRlSW5wdXQoMCwge1xuICAgIHdpdG5lc3NVdHhvOiB7IHZhbHVlOiBCaWdJbnQoMCksIHNjcmlwdDogYWRkcmVzc0RldGFpbHMuc2NyaXB0UHViS2V5IH0sXG4gIH0pO1xuXG4gIGlmIChhZGRyZXNzRGV0YWlscy5yZWRlZW1TY3JpcHQpIHtcbiAgICBwc2J0LnVwZGF0ZUlucHV0KDAsIHsgcmVkZWVtU2NyaXB0OiBhZGRyZXNzRGV0YWlscy5yZWRlZW1TY3JpcHQgfSk7XG4gIH1cbiAgaWYgKGFkZHJlc3NEZXRhaWxzLndpdG5lc3NTY3JpcHQpIHtcbiAgICBwc2J0LnVwZGF0ZUlucHV0KDAsIHsgd2l0bmVzc1NjcmlwdDogYWRkcmVzc0RldGFpbHMud2l0bmVzc1NjcmlwdCB9KTtcbiAgfVxuXG4gIC8vIFNldCB0aGUgb3V0cHV0XG4gIHBzYnQuYWRkT3V0cHV0KHtcbiAgICB2YWx1ZTogQmlnSW50KDApLCAvLyB2b3V0WzBdLm5WYWx1ZSA9IDBcbiAgICBzY3JpcHQ6IEJ1ZmZlci5mcm9tKFsweDZhXSksIC8vIHZvdXRbMF0uc2NyaXB0UHViS2V5ID0gT1BfUkVUVVJOXG4gIH0pO1xuICByZXR1cm4gcHNidDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVG9TaWduUHNidEZvckNoYWluQW5kSW5kZXgoXG4gIHRvU3BlbmRUeDogVHJhbnNhY3Rpb248YmlnaW50PixcbiAgcm9vdFdhbGxldEtleXM6IGJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogYml0Z28uQ2hhaW5Db2RlLFxuICBpbmRleDogbnVtYmVyXG4pOiBQc2J0IHtcbiAgaWYgKGlzVGFwcm9vdENoYWluKGNoYWluKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQklQMzIyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFRhcHJvb3Qgc2NyaXB0IHR5cGVzLicpO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IGJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhcbiAgICByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KGNoYWluLCBpbmRleCkucHVibGljS2V5cyxcbiAgICBiaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pXG4gICk7XG5cbiAgY29uc3QgdG9TcGVuZFNjcmlwdFB1YktleSA9IHRvU3BlbmRUeC5vdXRzWzBdLnNjcmlwdDtcbiAgaWYgKCF0b1NwZW5kU2NyaXB0UHViS2V5LmVxdWFscyhvdXRwdXQuc2NyaXB0UHViS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT3V0cHV0IHNjcmlwdFB1YktleSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgb3V0cHV0IHNjcmlwdCBmb3IgdGhlIGNoYWluIGFuZCBpbmRleC4nKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZFRvU2lnblBzYnQodG9TcGVuZFR4LCB7XG4gICAgc2NyaXB0UHViS2V5OiBvdXRwdXQuc2NyaXB0UHViS2V5LFxuICAgIHJlZGVlbVNjcmlwdDogb3V0cHV0LnJlZGVlbVNjcmlwdCxcbiAgICB3aXRuZXNzU2NyaXB0OiBvdXRwdXQud2l0bmVzc1NjcmlwdCxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Transaction, bitgo } from '@bitgo-beta/utxo-lib';
|
|
1
2
|
export declare const BIP322_TAG = "BIP0322-signed-message";
|
|
2
3
|
/**
|
|
3
4
|
* Perform a tagged hash
|
|
@@ -14,7 +15,8 @@ export declare function hashMessageWithTag(message: string | Buffer, tag?: strin
|
|
|
14
15
|
* @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
|
|
15
16
|
* @param {string | Buffer} message - The message to include in the transaction
|
|
16
17
|
* @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
|
|
17
|
-
* @returns {
|
|
18
|
+
* @returns {Transaction} - The constructed transaction
|
|
18
19
|
*/
|
|
19
|
-
export declare function buildToSpendTransaction(scriptPubKey: Buffer, message: string | Buffer, tag?: string):
|
|
20
|
+
export declare function buildToSpendTransaction(scriptPubKey: Buffer, message: string | Buffer, tag?: string): Transaction<bigint>;
|
|
21
|
+
export declare function buildToSpendTransactionFromChainAndIndex(rootWalletKeys: bitgo.RootWalletKeys, chain: bitgo.ChainCode, index: number, message: string | Buffer, tag?: string): Transaction<bigint>;
|
|
20
22
|
//# sourceMappingURL=toSpend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toSpend.d.ts","sourceRoot":"","sources":["../../../src/bip322/toSpend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"toSpend.d.ts","sourceRoot":"","sources":["../../../src/bip322/toSpend.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,WAAW,EAAE,KAAK,EAAY,MAAM,sBAAsB,CAAC;AAI1E,eAAO,MAAM,UAAU,2BAA2B,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,CAYrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,GAAG,SAAa,GACf,WAAW,CAAC,MAAM,CAAC,CA4BrB;AAED,wBAAgB,wCAAwC,CACtD,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,GAAG,SAAa,GACf,WAAW,CAAC,MAAM,CAAC,CAWrB"}
|
|
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BIP322_TAG = void 0;
|
|
4
4
|
exports.hashMessageWithTag = hashMessageWithTag;
|
|
5
5
|
exports.buildToSpendTransaction = buildToSpendTransaction;
|
|
6
|
+
exports.buildToSpendTransactionFromChainAndIndex = buildToSpendTransactionFromChainAndIndex;
|
|
6
7
|
const fast_sha256_1 = require("fast-sha256");
|
|
7
8
|
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
9
|
+
const utils_1 = require("./utils");
|
|
8
10
|
exports.BIP322_TAG = 'BIP0322-signed-message';
|
|
9
11
|
/**
|
|
10
12
|
* Perform a tagged hash
|
|
@@ -33,7 +35,7 @@ function hashMessageWithTag(message, tag = exports.BIP322_TAG) {
|
|
|
33
35
|
* @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
|
|
34
36
|
* @param {string | Buffer} message - The message to include in the transaction
|
|
35
37
|
* @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
|
|
36
|
-
* @returns {
|
|
38
|
+
* @returns {Transaction} - The constructed transaction
|
|
37
39
|
*/
|
|
38
40
|
function buildToSpendTransaction(scriptPubKey, message, tag = exports.BIP322_TAG) {
|
|
39
41
|
// Create PSBT object for constructing the transaction
|
|
@@ -62,6 +64,13 @@ function buildToSpendTransaction(scriptPubKey, message, tag = exports.BIP322_TAG
|
|
|
62
64
|
script: scriptPubKey, // vout[0].scriptPubKey = message_challenge
|
|
63
65
|
});
|
|
64
66
|
// Return transaction
|
|
65
|
-
return psbt.extractTransaction()
|
|
67
|
+
return psbt.extractTransaction();
|
|
66
68
|
}
|
|
67
|
-
|
|
69
|
+
function buildToSpendTransactionFromChainAndIndex(rootWalletKeys, chain, index, message, tag = exports.BIP322_TAG) {
|
|
70
|
+
if ((0, utils_1.isTaprootChain)(chain)) {
|
|
71
|
+
throw new Error('BIP322 is not supported for Taproot script types.');
|
|
72
|
+
}
|
|
73
|
+
const outputScript = utxo_lib_1.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys, utxo_lib_1.bitgo.scriptTypeForChain(chain), utxo_lib_1.networks.bitcoin);
|
|
74
|
+
return buildToSpendTransaction(outputScript.scriptPubKey, message, tag);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TcGVuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXAzMjIvdG9TcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFjQSxnREFZQztBQVdELDBEQWdDQztBQUVELDRGQWlCQztBQXhGRCw2Q0FBbUM7QUFDbkMsbURBQTBFO0FBRTFFLG1DQUF5QztBQUU1QixRQUFBLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQztBQUVuRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxPQUF3QixFQUFFLEdBQUcsR0FBRyxrQkFBVTtJQUMzRSwyRUFBMkU7SUFDM0UsaUZBQWlGO0lBQ2pGLE1BQU0sU0FBUyxHQUFHLElBQUksa0JBQUksRUFBRSxDQUFDO0lBQzdCLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBVSxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxrQkFBSSxFQUFFLENBQUM7SUFDakMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQ3JDLFlBQW9CLEVBQ3BCLE9BQXdCLEVBQ3hCLEdBQUcsR0FBRyxrQkFBVTtJQUVoQixzREFBc0Q7SUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFJLEVBQUUsQ0FBQztJQUN4QiwrQ0FBK0M7SUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWU7SUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtJQUNyQywyRUFBMkU7SUFDM0UsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELHdEQUF3RDtJQUN4RCxNQUFNLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO0lBQ3JFLE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0UsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELGdCQUFnQjtJQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ1osSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsbUNBQW1DO1FBQ3pELEtBQUssRUFBRSxVQUFVLEVBQUUsZ0NBQWdDO1FBQ25ELFFBQVEsRUFBRSxDQUFDLEVBQUUsdUJBQXVCO1FBQ3BDLGNBQWMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGlEQUFpRDtRQUN6RixhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSw0QkFBNEI7S0FDN0QsQ0FBQyxDQUFDO0lBQ0gsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQjtRQUN2QyxNQUFNLEVBQUUsWUFBWSxFQUFFLDJDQUEyQztLQUNsRSxDQUFDLENBQUM7SUFDSCxxQkFBcUI7SUFDckIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBZ0Isd0NBQXdDLENBQ3RELGNBQW9DLEVBQ3BDLEtBQXNCLEVBQ3RCLEtBQWEsRUFDYixPQUF3QixFQUN4QixHQUFHLEdBQUcsa0JBQVU7SUFFaEIsSUFBSSxJQUFBLHNCQUFjLEVBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLGdCQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUM3RCxjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFDOUQsZ0JBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDL0IsbUJBQVEsQ0FBQyxPQUFPLENBQ2pCLENBQUM7SUFDRixPQUFPLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXNoIH0gZnJvbSAnZmFzdC1zaGEyNTYnO1xuaW1wb3J0IHsgUHNidCwgVHJhbnNhY3Rpb24sIGJpdGdvLCBuZXR3b3JrcyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgaXNUYXByb290Q2hhaW4gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IEJJUDMyMl9UQUcgPSAnQklQMDMyMi1zaWduZWQtbWVzc2FnZSc7XG5cbi8qKlxuICogUGVyZm9ybSBhIHRhZ2dlZCBoYXNoXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBoYXNoIGFzIGEgQnVmZmVyIG9yIHV0Zi04IHN0cmluZ1xuICogQHBhcmFtIHtCdWZmZXJ9IFt0YWc9QklQMzIyX1RBR10gLSBUaGUgdGFnIHRvIHVzZSBmb3IgaGFzaGluZywgZGVmYXVsdHMgdG8gQklQMzIyX1RBRy5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIHJlc3VsdGluZyBoYXNoIG9mIHRoZSBtZXNzYWdlIHdpdGggdGhlIHRhZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hNZXNzYWdlV2l0aFRhZyhtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIsIHRhZyA9IEJJUDMyMl9UQUcpOiBCdWZmZXIge1xuICAvLyBDb21wdXRlIHRoZSBtZXNzYWdlIGhhc2ggLSBTSEEyNTYoU0hBMjU2KHRhZykgfHwgU0hBMjU2KHRhZykgfHwgbWVzc2FnZSlcbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSNmdWxsXG4gIGNvbnN0IHRhZ0hhc2hlciA9IG5ldyBIYXNoKCk7XG4gIHRhZ0hhc2hlci51cGRhdGUoQnVmZmVyLmZyb20oQklQMzIyX1RBRykpO1xuICBjb25zdCB0YWdIYXNoID0gdGFnSGFzaGVyLmRpZ2VzdCgpO1xuICBjb25zdCBtZXNzYWdlSGFzaGVyID0gbmV3IEhhc2goKTtcbiAgbWVzc2FnZUhhc2hlci51cGRhdGUodGFnSGFzaCk7XG4gIG1lc3NhZ2VIYXNoZXIudXBkYXRlKHRhZ0hhc2gpO1xuICBtZXNzYWdlSGFzaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShtZXNzYWdlKSk7XG4gIGNvbnN0IG1lc3NhZ2VIYXNoID0gbWVzc2FnZUhhc2hlci5kaWdlc3QoKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG1lc3NhZ2VIYXNoKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIEJJUDMyMiBcInRvIHNwZW5kXCIgdHJhbnNhY3Rpb25cbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDMyMi5tZWRpYXdpa2kjZnVsbFxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBzY3JpcHRQdWJLZXkgLSBUaGUgc2NyaXB0UHViS2V5IHRvIHVzZSBmb3IgdGhlIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBpbmNsdWRlIGluIHRoZSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHtCdWZmZXJ9IFt0YWc9QklQMzIyX1RBR10gLSBUaGUgdGFnIHRvIHVzZSBmb3IgaGFzaGluZywgZGVmYXVsdHMgdG8gQklQMzIyX1RBRy5cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0gLSBUaGUgY29uc3RydWN0ZWQgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVG9TcGVuZFRyYW5zYWN0aW9uKFxuICBzY3JpcHRQdWJLZXk6IEJ1ZmZlcixcbiAgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLFxuICB0YWcgPSBCSVAzMjJfVEFHXG4pOiBUcmFuc2FjdGlvbjxiaWdpbnQ+IHtcbiAgLy8gQ3JlYXRlIFBTQlQgb2JqZWN0IGZvciBjb25zdHJ1Y3RpbmcgdGhlIHRyYW5zYWN0aW9uXG4gIGNvbnN0IHBzYnQgPSBuZXcgUHNidCgpO1xuICAvLyBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgblZlcnNpb24gYW5kIG5Mb2NrVGltZVxuICBwc2J0LnNldFZlcnNpb24oMCk7IC8vIG5WZXJzaW9uID0gMFxuICBwc2J0LnNldExvY2t0aW1lKDApOyAvLyBuTG9ja1RpbWUgPSAwXG4gIC8vIENvbXB1dGUgdGhlIG1lc3NhZ2UgaGFzaCAtIFNIQTI1NihTSEEyNTYodGFnKSB8fCBTSEEyNTYodGFnKSB8fCBtZXNzYWdlKVxuICBjb25zdCBtZXNzYWdlSGFzaCA9IGhhc2hNZXNzYWdlV2l0aFRhZyhtZXNzYWdlLCB0YWcpO1xuICAvLyBDb25zdHJ1Y3QgdGhlIHNjcmlwdFNpZyAtIE9QXzAgUFVTSDMyWyBtZXNzYWdlX2hhc2ggXVxuICBjb25zdCBzY3JpcHRTaWdQYXJ0T25lID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MjBdKTsgLy8gT1BfMCBQVVNIMzJcbiAgY29uc3Qgc2NyaXB0U2lnID0gbmV3IFVpbnQ4QXJyYXkoc2NyaXB0U2lnUGFydE9uZS5sZW5ndGggKyBtZXNzYWdlSGFzaC5sZW5ndGgpO1xuICBzY3JpcHRTaWcuc2V0KHNjcmlwdFNpZ1BhcnRPbmUpO1xuICBzY3JpcHRTaWcuc2V0KG1lc3NhZ2VIYXNoLCBzY3JpcHRTaWdQYXJ0T25lLmxlbmd0aCk7XG4gIC8vIFNldCB0aGUgaW5wdXRcbiAgcHNidC5hZGRJbnB1dCh7XG4gICAgaGFzaDogJzAnLnJlcGVhdCg2NCksIC8vIHZpblswXS5wcmV2b3V0Lmhhc2ggPSAwMDAwLi4uMDAwXG4gICAgaW5kZXg6IDB4ZmZmZmZmZmYsIC8vIHZpblswXS5wcmV2b3V0Lm4gPSAweEZGRkZGRkZGXG4gICAgc2VxdWVuY2U6IDAsIC8vIHZpblswXS5uU2VxdWVuY2UgPSAwXG4gICAgZmluYWxTY3JpcHRTaWc6IEJ1ZmZlci5mcm9tKHNjcmlwdFNpZyksIC8vIHZpblswXS5zY3JpcHRTaWcgPSBPUF8wIFBVU0gzMlsgbWVzc2FnZV9oYXNoIF1cbiAgICB3aXRuZXNzU2NyaXB0OiBCdWZmZXIuZnJvbShbXSksIC8vIHZpblswXS5zY3JpcHRXaXRuZXNzID0gW11cbiAgfSk7XG4gIC8vIFNldCB0aGUgb3V0cHV0XG4gIHBzYnQuYWRkT3V0cHV0KHtcbiAgICB2YWx1ZTogQmlnSW50KDApLCAvLyB2b3V0WzBdLm5WYWx1ZSA9IDBcbiAgICBzY3JpcHQ6IHNjcmlwdFB1YktleSwgLy8gdm91dFswXS5zY3JpcHRQdWJLZXkgPSBtZXNzYWdlX2NoYWxsZW5nZVxuICB9KTtcbiAgLy8gUmV0dXJuIHRyYW5zYWN0aW9uXG4gIHJldHVybiBwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUb1NwZW5kVHJhbnNhY3Rpb25Gcm9tQ2hhaW5BbmRJbmRleChcbiAgcm9vdFdhbGxldEtleXM6IGJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogYml0Z28uQ2hhaW5Db2RlLFxuICBpbmRleDogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIsXG4gIHRhZyA9IEJJUDMyMl9UQUdcbik6IFRyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICBpZiAoaXNUYXByb290Q2hhaW4oY2hhaW4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCSVAzMjIgaXMgbm90IHN1cHBvcnRlZCBmb3IgVGFwcm9vdCBzY3JpcHQgdHlwZXMuJyk7XG4gIH1cblxuICBjb25zdCBvdXRwdXRTY3JpcHQgPSBiaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpLnB1YmxpY0tleXMsXG4gICAgYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKSxcbiAgICBuZXR3b3Jrcy5iaXRjb2luXG4gICk7XG4gIHJldHVybiBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbihvdXRwdXRTY3JpcHQuc2NyaXB0UHViS2V5LCBtZXNzYWdlLCB0YWcpO1xufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
export declare function addBip322ProofMessage(psbt: utxolib.bitgo.UtxoPsbt, inputIndex: number, message: Buffer): void;
|
|
3
|
+
export declare function getBip322ProofInputIndex(psbt: utxolib.Psbt): number | undefined;
|
|
4
|
+
export declare function psbtIsBip322Proof(psbt: utxolib.Psbt): boolean;
|
|
5
|
+
export declare function isTaprootChain(chain: utxolib.bitgo.ChainCode): boolean;
|
|
6
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/bip322/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAS7G;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS,CAY/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAE7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAGtE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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.addBip322ProofMessage = addBip322ProofMessage;
|
|
37
|
+
exports.getBip322ProofInputIndex = getBip322ProofInputIndex;
|
|
38
|
+
exports.psbtIsBip322Proof = psbtIsBip322Proof;
|
|
39
|
+
exports.isTaprootChain = isTaprootChain;
|
|
40
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
41
|
+
function addBip322ProofMessage(psbt, inputIndex, message) {
|
|
42
|
+
utxolib.bitgo.addProprietaryKeyValuesFromUnknownKeyValues(psbt, 'input', inputIndex, {
|
|
43
|
+
key: {
|
|
44
|
+
identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
|
|
45
|
+
subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
|
|
46
|
+
keydata: Buffer.alloc(0),
|
|
47
|
+
},
|
|
48
|
+
value: message,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function getBip322ProofInputIndex(psbt) {
|
|
52
|
+
const res = psbt.data.inputs.flatMap((input, inputIndex) => {
|
|
53
|
+
const proprietaryKeyVals = utxolib.bitgo.getPsbtInputProprietaryKeyVals(input, {
|
|
54
|
+
identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
|
|
55
|
+
subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
|
|
56
|
+
});
|
|
57
|
+
if (proprietaryKeyVals.length > 1) {
|
|
58
|
+
throw new Error(`Multiple BIP322 messages found at input index ${inputIndex}`);
|
|
59
|
+
}
|
|
60
|
+
return proprietaryKeyVals.length === 0 ? [] : [inputIndex];
|
|
61
|
+
});
|
|
62
|
+
return res.length === 0 ? undefined : res[0];
|
|
63
|
+
}
|
|
64
|
+
function psbtIsBip322Proof(psbt) {
|
|
65
|
+
return getBip322ProofInputIndex(psbt) !== undefined;
|
|
66
|
+
}
|
|
67
|
+
function isTaprootChain(chain) {
|
|
68
|
+
const taprootChains = [...utxolib.bitgo.chainCodesP2tr, ...utxolib.bitgo.chainCodesP2trMusig2];
|
|
69
|
+
return taprootChains.some((tc) => tc === chain);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwMzIyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsc0RBU0M7QUFFRCw0REFZQztBQUVELDhDQUVDO0FBRUQsd0NBR0M7QUFsQ0QsOERBQWdEO0FBRWhELFNBQWdCLHFCQUFxQixDQUFDLElBQTRCLEVBQUUsVUFBa0IsRUFBRSxPQUFlO0lBQ3JHLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7UUFDbkYsR0FBRyxFQUFFO1lBQ0gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCO1lBQ3JELE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQWM7WUFDM0QsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsS0FBSyxFQUFFLE9BQU87S0FDZixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0Isd0JBQXdCLENBQUMsSUFBa0I7SUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFO1FBQ3pELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLEVBQUU7WUFDN0UsVUFBVSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCO1lBQ3JELE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQWM7U0FDNUQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBa0I7SUFDbEQsT0FBTyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxLQUE4QjtJQUMzRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0YsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQmlwMzIyUHJvb2ZNZXNzYWdlKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIGlucHV0SW5kZXg6IG51bWJlciwgbWVzc2FnZTogQnVmZmVyKTogdm9pZCB7XG4gIHV0eG9saWIuYml0Z28uYWRkUHJvcHJpZXRhcnlLZXlWYWx1ZXNGcm9tVW5rbm93bktleVZhbHVlcyhwc2J0LCAnaW5wdXQnLCBpbnB1dEluZGV4LCB7XG4gICAga2V5OiB7XG4gICAgICBpZGVudGlmaWVyOiB1dHhvbGliLmJpdGdvLlBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUixcbiAgICAgIHN1YnR5cGU6IHV0eG9saWIuYml0Z28uUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLkJJUDMyMl9NRVNTQUdFLFxuICAgICAga2V5ZGF0YTogQnVmZmVyLmFsbG9jKDApLFxuICAgIH0sXG4gICAgdmFsdWU6IG1lc3NhZ2UsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmlwMzIyUHJvb2ZJbnB1dEluZGV4KHBzYnQ6IHV0eG9saWIuUHNidCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJlcyA9IHBzYnQuZGF0YS5pbnB1dHMuZmxhdE1hcCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICBjb25zdCBwcm9wcmlldGFyeUtleVZhbHMgPSB1dHhvbGliLmJpdGdvLmdldFBzYnRJbnB1dFByb3ByaWV0YXJ5S2V5VmFscyhpbnB1dCwge1xuICAgICAgaWRlbnRpZmllcjogdXR4b2xpYi5iaXRnby5QU0JUX1BST1BSSUVUQVJZX0lERU5USUZJRVIsXG4gICAgICBzdWJ0eXBlOiB1dHhvbGliLmJpdGdvLlByb3ByaWV0YXJ5S2V5U3VidHlwZS5CSVAzMjJfTUVTU0FHRSxcbiAgICB9KTtcbiAgICBpZiAocHJvcHJpZXRhcnlLZXlWYWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgQklQMzIyIG1lc3NhZ2VzIGZvdW5kIGF0IGlucHV0IGluZGV4ICR7aW5wdXRJbmRleH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3ByaWV0YXJ5S2V5VmFscy5sZW5ndGggPT09IDAgPyBbXSA6IFtpbnB1dEluZGV4XTtcbiAgfSk7XG4gIHJldHVybiByZXMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogcmVzWzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHNidElzQmlwMzIyUHJvb2YocHNidDogdXR4b2xpYi5Qc2J0KTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRCaXAzMjJQcm9vZklucHV0SW5kZXgocHNidCkgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFwcm9vdENoYWluKGNoYWluOiB1dHhvbGliLmJpdGdvLkNoYWluQ29kZSk6IGJvb2xlYW4ge1xuICBjb25zdCB0YXByb290Q2hhaW5zID0gWy4uLnV0eG9saWIuYml0Z28uY2hhaW5Db2Rlc1AydHIsIC4uLnV0eG9saWIuYml0Z28uY2hhaW5Db2Rlc1AydHJNdXNpZzJdO1xuICByZXR1cm4gdGFwcm9vdENoYWlucy5zb21lKCh0YykgPT4gdGMgPT09IGNoYWluKTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/utxo-core",
|
|
3
|
-
"version": "1.0.1-alpha.
|
|
3
|
+
"version": "1.0.1-alpha.95",
|
|
4
4
|
"description": "BitGo UTXO Core types",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -52,12 +52,12 @@
|
|
|
52
52
|
]
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@bitgo-beta/unspents": "0.11.3-alpha.
|
|
56
|
-
"@bitgo-beta/utxo-lib": "4.0.1-alpha.
|
|
55
|
+
"@bitgo-beta/unspents": "0.11.3-alpha.365",
|
|
56
|
+
"@bitgo-beta/utxo-lib": "4.0.1-alpha.365",
|
|
57
57
|
"@bitgo/wasm-miniscript": "2.0.0-beta.7",
|
|
58
58
|
"bip174": "npm:@bitgo-forks/bip174@3.1.0-master.4",
|
|
59
59
|
"bitcoinjs-message": "npm:@bitgo-forks/bitcoinjs-message@1.0.0-master.3",
|
|
60
60
|
"fast-sha256": "^1.3.0"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "8623e8b41ab934ba5981c9acf83ee5a71261ba90"
|
|
63
63
|
}
|