@ledgerhq/hw-app-btc 6.21.0 → 6.24.2-monorepo.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -0
- package/CHANGELOG.md +10 -0
- package/README.md +4 -4
- package/jest.config.ts +6 -0
- package/package.json +15 -6
- package/src/bip32.ts +5 -3
- package/src/getTrustedInput.ts +2 -8
- package/src/newops/appClient.ts +8 -4
- package/src/newops/psbtv2.ts +13 -9
- package/LICENSE +0 -202
- package/lib/Btc.d.ts +0 -149
- package/lib/Btc.d.ts.map +0 -1
- package/lib/Btc.js +0 -353
- package/lib/Btc.js.map +0 -1
- package/lib/BtcNew.d.ts +0 -122
- package/lib/BtcNew.d.ts.map +0 -1
- package/lib/BtcNew.js +0 -451
- package/lib/BtcNew.js.map +0 -1
- package/lib/BtcOld.d.ts +0 -120
- package/lib/BtcOld.d.ts.map +0 -1
- package/lib/BtcOld.js +0 -263
- package/lib/BtcOld.js.map +0 -1
- package/lib/bip32.d.ts +0 -13
- package/lib/bip32.d.ts.map +0 -1
- package/lib/bip32.js +0 -57
- package/lib/bip32.js.map +0 -1
- package/lib/buffertools.d.ts +0 -30
- package/lib/buffertools.d.ts.map +0 -1
- package/lib/buffertools.js +0 -132
- package/lib/buffertools.js.map +0 -1
- package/lib/compressPublicKey.d.ts +0 -3
- package/lib/compressPublicKey.d.ts.map +0 -1
- package/lib/compressPublicKey.js +0 -11
- package/lib/compressPublicKey.js.map +0 -1
- package/lib/constants.d.ts +0 -13
- package/lib/constants.d.ts.map +0 -1
- package/lib/constants.js +0 -17
- package/lib/constants.js.map +0 -1
- package/lib/createTransaction.d.ts +0 -35
- package/lib/createTransaction.d.ts.map +0 -1
- package/lib/createTransaction.js +0 -411
- package/lib/createTransaction.js.map +0 -1
- package/lib/debug.d.ts +0 -4
- package/lib/debug.d.ts.map +0 -1
- package/lib/debug.js +0 -45
- package/lib/debug.js.map +0 -1
- package/lib/finalizeInput.d.ts +0 -5
- package/lib/finalizeInput.d.ts.map +0 -1
- package/lib/finalizeInput.js +0 -81
- package/lib/finalizeInput.js.map +0 -1
- package/lib/getAppAndVersion.d.ts +0 -9
- package/lib/getAppAndVersion.d.ts.map +0 -1
- package/lib/getAppAndVersion.js +0 -69
- package/lib/getAppAndVersion.js.map +0 -1
- package/lib/getTrustedInput.d.ts +0 -6
- package/lib/getTrustedInput.d.ts.map +0 -1
- package/lib/getTrustedInput.js +0 -275
- package/lib/getTrustedInput.js.map +0 -1
- package/lib/getTrustedInputBIP143.d.ts +0 -4
- package/lib/getTrustedInputBIP143.d.ts.map +0 -1
- package/lib/getTrustedInputBIP143.js +0 -34
- package/lib/getTrustedInputBIP143.js.map +0 -1
- package/lib/getWalletPublicKey.d.ts +0 -15
- package/lib/getWalletPublicKey.d.ts.map +0 -1
- package/lib/getWalletPublicKey.js +0 -93
- package/lib/getWalletPublicKey.js.map +0 -1
- package/lib/hashPublicKey.d.ts +0 -3
- package/lib/hashPublicKey.d.ts.map +0 -1
- package/lib/hashPublicKey.js +0 -13
- package/lib/hashPublicKey.js.map +0 -1
- package/lib/index.d.ts +0 -3
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -8
- package/lib/index.js.map +0 -1
- package/lib/newops/accounttype.d.ts +0 -110
- package/lib/newops/accounttype.d.ts.map +0 -1
- package/lib/newops/accounttype.js +0 -236
- package/lib/newops/accounttype.js.map +0 -1
- package/lib/newops/appClient.d.ts +0 -18
- package/lib/newops/appClient.d.ts.map +0 -1
- package/lib/newops/appClient.js +0 -246
- package/lib/newops/appClient.js.map +0 -1
- package/lib/newops/clientCommands.d.ts +0 -77
- package/lib/newops/clientCommands.d.ts.map +0 -1
- package/lib/newops/clientCommands.js +0 -353
- package/lib/newops/clientCommands.js.map +0 -1
- package/lib/newops/merkelizedPsbt.d.ts +0 -26
- package/lib/newops/merkelizedPsbt.d.ts.map +0 -1
- package/lib/newops/merkelizedPsbt.js +0 -102
- package/lib/newops/merkelizedPsbt.js.map +0 -1
- package/lib/newops/merkle.d.ts +0 -34
- package/lib/newops/merkle.d.ts.map +0 -1
- package/lib/newops/merkle.js +0 -138
- package/lib/newops/merkle.js.map +0 -1
- package/lib/newops/merkleMap.d.ts +0 -25
- package/lib/newops/merkleMap.d.ts.map +0 -1
- package/lib/newops/merkleMap.js +0 -47
- package/lib/newops/merkleMap.js.map +0 -1
- package/lib/newops/policy.d.ts +0 -22
- package/lib/newops/policy.d.ts.map +0 -1
- package/lib/newops/policy.js +0 -48
- package/lib/newops/policy.js.map +0 -1
- package/lib/newops/psbtExtractor.d.ts +0 -10
- package/lib/newops/psbtExtractor.d.ts.map +0 -1
- package/lib/newops/psbtExtractor.js +0 -42
- package/lib/newops/psbtExtractor.js.map +0 -1
- package/lib/newops/psbtFinalizer.d.ts +0 -17
- package/lib/newops/psbtFinalizer.d.ts.map +0 -1
- package/lib/newops/psbtFinalizer.js +0 -135
- package/lib/newops/psbtFinalizer.js.map +0 -1
- package/lib/newops/psbtv2.d.ts +0 -149
- package/lib/newops/psbtv2.d.ts.map +0 -1
- package/lib/newops/psbtv2.js +0 -506
- package/lib/newops/psbtv2.js.map +0 -1
- package/lib/serializeTransaction.d.ts +0 -10
- package/lib/serializeTransaction.d.ts.map +0 -1
- package/lib/serializeTransaction.js +0 -72
- package/lib/serializeTransaction.js.map +0 -1
- package/lib/shouldUseTrustedInputForSegwit.d.ts +0 -5
- package/lib/shouldUseTrustedInputForSegwit.d.ts.map +0 -1
- package/lib/shouldUseTrustedInputForSegwit.js +0 -17
- package/lib/shouldUseTrustedInputForSegwit.js.map +0 -1
- package/lib/signMessage.d.ts +0 -10
- package/lib/signMessage.d.ts.map +0 -1
- package/lib/signMessage.js +0 -118
- package/lib/signMessage.js.map +0 -1
- package/lib/signP2SHTransaction.d.ts +0 -21
- package/lib/signP2SHTransaction.d.ts.map +0 -1
- package/lib/signP2SHTransaction.js +0 -208
- package/lib/signP2SHTransaction.js.map +0 -1
- package/lib/signTransaction.d.ts +0 -4
- package/lib/signTransaction.d.ts.map +0 -1
- package/lib/signTransaction.js +0 -36
- package/lib/signTransaction.js.map +0 -1
- package/lib/splitTransaction.d.ts +0 -3
- package/lib/splitTransaction.d.ts.map +0 -1
- package/lib/splitTransaction.js +0 -142
- package/lib/splitTransaction.js.map +0 -1
- package/lib/startUntrustedHashTransactionInput.d.ts +0 -9
- package/lib/startUntrustedHashTransactionInput.d.ts.map +0 -1
- package/lib/startUntrustedHashTransactionInput.js +0 -197
- package/lib/startUntrustedHashTransactionInput.js.map +0 -1
- package/lib/types.d.ts +0 -34
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -3
- package/lib/types.js.map +0 -1
- package/lib/varint.d.ts +0 -4
- package/lib/varint.d.ts.map +0 -1
- package/lib/varint.js +0 -45
- package/lib/varint.js.map +0 -1
- package/lib-es/Btc.d.ts +0 -149
- package/lib-es/Btc.d.ts.map +0 -1
- package/lib-es/Btc.js +0 -329
- package/lib-es/Btc.js.map +0 -1
- package/lib-es/BtcNew.d.ts +0 -122
- package/lib-es/BtcNew.d.ts.map +0 -1
- package/lib-es/BtcNew.js +0 -444
- package/lib-es/BtcNew.js.map +0 -1
- package/lib-es/BtcOld.d.ts +0 -120
- package/lib-es/BtcOld.d.ts.map +0 -1
- package/lib-es/BtcOld.js +0 -258
- package/lib-es/BtcOld.js.map +0 -1
- package/lib-es/bip32.d.ts +0 -13
- package/lib-es/bip32.d.ts.map +0 -1
- package/lib-es/bip32.js +0 -44
- package/lib-es/bip32.js.map +0 -1
- package/lib-es/buffertools.d.ts +0 -30
- package/lib-es/buffertools.d.ts.map +0 -1
- package/lib-es/buffertools.js +0 -124
- package/lib-es/buffertools.js.map +0 -1
- package/lib-es/compressPublicKey.d.ts +0 -3
- package/lib-es/compressPublicKey.d.ts.map +0 -1
- package/lib-es/compressPublicKey.js +0 -7
- package/lib-es/compressPublicKey.js.map +0 -1
- package/lib-es/constants.d.ts +0 -13
- package/lib-es/constants.d.ts.map +0 -1
- package/lib-es/constants.js +0 -14
- package/lib-es/constants.js.map +0 -1
- package/lib-es/createTransaction.d.ts +0 -35
- package/lib-es/createTransaction.d.ts.map +0 -1
- package/lib-es/createTransaction.js +0 -407
- package/lib-es/createTransaction.js.map +0 -1
- package/lib-es/debug.d.ts +0 -4
- package/lib-es/debug.d.ts.map +0 -1
- package/lib-es/debug.js +0 -40
- package/lib-es/debug.js.map +0 -1
- package/lib-es/finalizeInput.d.ts +0 -5
- package/lib-es/finalizeInput.d.ts.map +0 -1
- package/lib-es/finalizeInput.js +0 -76
- package/lib-es/finalizeInput.js.map +0 -1
- package/lib-es/getAppAndVersion.d.ts +0 -9
- package/lib-es/getAppAndVersion.d.ts.map +0 -1
- package/lib-es/getAppAndVersion.js +0 -62
- package/lib-es/getAppAndVersion.js.map +0 -1
- package/lib-es/getTrustedInput.d.ts +0 -6
- package/lib-es/getTrustedInput.d.ts.map +0 -1
- package/lib-es/getTrustedInput.js +0 -267
- package/lib-es/getTrustedInput.js.map +0 -1
- package/lib-es/getTrustedInputBIP143.d.ts +0 -4
- package/lib-es/getTrustedInputBIP143.d.ts.map +0 -1
- package/lib-es/getTrustedInputBIP143.js +0 -27
- package/lib-es/getTrustedInputBIP143.js.map +0 -1
- package/lib-es/getWalletPublicKey.d.ts +0 -15
- package/lib-es/getWalletPublicKey.d.ts.map +0 -1
- package/lib-es/getWalletPublicKey.js +0 -89
- package/lib-es/getWalletPublicKey.js.map +0 -1
- package/lib-es/hashPublicKey.d.ts +0 -3
- package/lib-es/hashPublicKey.d.ts.map +0 -1
- package/lib-es/hashPublicKey.js +0 -6
- package/lib-es/hashPublicKey.js.map +0 -1
- package/lib-es/index.d.ts +0 -3
- package/lib-es/index.d.ts.map +0 -1
- package/lib-es/index.js +0 -3
- package/lib-es/index.js.map +0 -1
- package/lib-es/newops/accounttype.d.ts +0 -110
- package/lib-es/newops/accounttype.d.ts.map +0 -1
- package/lib-es/newops/accounttype.js +0 -233
- package/lib-es/newops/accounttype.js.map +0 -1
- package/lib-es/newops/appClient.d.ts +0 -18
- package/lib-es/newops/appClient.d.ts.map +0 -1
- package/lib-es/newops/appClient.js +0 -243
- package/lib-es/newops/appClient.js.map +0 -1
- package/lib-es/newops/clientCommands.d.ts +0 -77
- package/lib-es/newops/clientCommands.d.ts.map +0 -1
- package/lib-es/newops/clientCommands.js +0 -350
- package/lib-es/newops/clientCommands.js.map +0 -1
- package/lib-es/newops/merkelizedPsbt.d.ts +0 -26
- package/lib-es/newops/merkelizedPsbt.d.ts.map +0 -1
- package/lib-es/newops/merkelizedPsbt.js +0 -99
- package/lib-es/newops/merkelizedPsbt.js.map +0 -1
- package/lib-es/newops/merkle.d.ts +0 -34
- package/lib-es/newops/merkle.d.ts.map +0 -1
- package/lib-es/newops/merkle.js +0 -134
- package/lib-es/newops/merkle.js.map +0 -1
- package/lib-es/newops/merkleMap.d.ts +0 -25
- package/lib-es/newops/merkleMap.d.ts.map +0 -1
- package/lib-es/newops/merkleMap.js +0 -44
- package/lib-es/newops/merkleMap.js.map +0 -1
- package/lib-es/newops/policy.d.ts +0 -22
- package/lib-es/newops/policy.d.ts.map +0 -1
- package/lib-es/newops/policy.js +0 -44
- package/lib-es/newops/policy.js.map +0 -1
- package/lib-es/newops/psbtExtractor.d.ts +0 -10
- package/lib-es/newops/psbtExtractor.d.ts.map +0 -1
- package/lib-es/newops/psbtExtractor.js +0 -38
- package/lib-es/newops/psbtExtractor.js.map +0 -1
- package/lib-es/newops/psbtFinalizer.d.ts +0 -17
- package/lib-es/newops/psbtFinalizer.d.ts.map +0 -1
- package/lib-es/newops/psbtFinalizer.js +0 -131
- package/lib-es/newops/psbtFinalizer.js.map +0 -1
- package/lib-es/newops/psbtv2.d.ts +0 -149
- package/lib-es/newops/psbtv2.d.ts.map +0 -1
- package/lib-es/newops/psbtv2.js +0 -503
- package/lib-es/newops/psbtv2.js.map +0 -1
- package/lib-es/serializeTransaction.d.ts +0 -10
- package/lib-es/serializeTransaction.d.ts.map +0 -1
- package/lib-es/serializeTransaction.js +0 -67
- package/lib-es/serializeTransaction.js.map +0 -1
- package/lib-es/shouldUseTrustedInputForSegwit.d.ts +0 -5
- package/lib-es/shouldUseTrustedInputForSegwit.d.ts.map +0 -1
- package/lib-es/shouldUseTrustedInputForSegwit.js +0 -10
- package/lib-es/shouldUseTrustedInputForSegwit.js.map +0 -1
- package/lib-es/signMessage.d.ts +0 -10
- package/lib-es/signMessage.d.ts.map +0 -1
- package/lib-es/signMessage.js +0 -111
- package/lib-es/signMessage.js.map +0 -1
- package/lib-es/signP2SHTransaction.d.ts +0 -21
- package/lib-es/signP2SHTransaction.d.ts.map +0 -1
- package/lib-es/signP2SHTransaction.js +0 -204
- package/lib-es/signP2SHTransaction.js.map +0 -1
- package/lib-es/signTransaction.d.ts +0 -4
- package/lib-es/signTransaction.d.ts.map +0 -1
- package/lib-es/signTransaction.js +0 -32
- package/lib-es/signTransaction.js.map +0 -1
- package/lib-es/splitTransaction.d.ts +0 -3
- package/lib-es/splitTransaction.d.ts.map +0 -1
- package/lib-es/splitTransaction.js +0 -138
- package/lib-es/splitTransaction.js.map +0 -1
- package/lib-es/startUntrustedHashTransactionInput.d.ts +0 -9
- package/lib-es/startUntrustedHashTransactionInput.d.ts.map +0 -1
- package/lib-es/startUntrustedHashTransactionInput.js +0 -192
- package/lib-es/startUntrustedHashTransactionInput.js.map +0 -1
- package/lib-es/types.d.ts +0 -34
- package/lib-es/types.d.ts.map +0 -1
- package/lib-es/types.js +0 -2
- package/lib-es/types.js.map +0 -1
- package/lib-es/varint.d.ts +0 -4
- package/lib-es/varint.d.ts.map +0 -1
- package/lib-es/varint.js +0 -40
- package/lib-es/varint.js.map +0 -1
package/lib/newops/merkle.js
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
-
if (!m) return o;
|
|
5
|
-
var i = m.call(o), r, ar = [], e;
|
|
6
|
-
try {
|
|
7
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
-
}
|
|
9
|
-
catch (error) { e = { error: error }; }
|
|
10
|
-
finally {
|
|
11
|
-
try {
|
|
12
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
-
}
|
|
14
|
-
finally { if (e) throw e.error; }
|
|
15
|
-
}
|
|
16
|
-
return ar;
|
|
17
|
-
};
|
|
18
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
-
if (ar || !(i in from)) {
|
|
21
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
-
ar[i] = from[i];
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
26
|
-
};
|
|
27
|
-
exports.__esModule = true;
|
|
28
|
-
exports.hashLeaf = exports.Merkle = void 0;
|
|
29
|
-
var bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
30
|
-
/**
|
|
31
|
-
* This class implements the merkle tree used by Ledger Bitcoin app v2+,
|
|
32
|
-
* which is documented at
|
|
33
|
-
* https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/merkle.md
|
|
34
|
-
*/
|
|
35
|
-
var Merkle = /** @class */ (function () {
|
|
36
|
-
function Merkle(leaves, hasher) {
|
|
37
|
-
if (hasher === void 0) { hasher = bitcoinjs_lib_1.crypto.sha256; }
|
|
38
|
-
this.leaves = leaves;
|
|
39
|
-
this.h = hasher;
|
|
40
|
-
var nodes = this.calculateRoot(leaves);
|
|
41
|
-
this.rootNode = nodes.root;
|
|
42
|
-
this.leafNodes = nodes.leaves;
|
|
43
|
-
}
|
|
44
|
-
Merkle.prototype.getRoot = function () {
|
|
45
|
-
return this.rootNode.hash;
|
|
46
|
-
};
|
|
47
|
-
Merkle.prototype.size = function () {
|
|
48
|
-
return this.leaves.length;
|
|
49
|
-
};
|
|
50
|
-
Merkle.prototype.getLeaves = function () {
|
|
51
|
-
return this.leaves;
|
|
52
|
-
};
|
|
53
|
-
Merkle.prototype.getLeafHash = function (index) {
|
|
54
|
-
return this.leafNodes[index].hash;
|
|
55
|
-
};
|
|
56
|
-
Merkle.prototype.getProof = function (index) {
|
|
57
|
-
if (index >= this.leaves.length)
|
|
58
|
-
throw Error("Index out of bounds");
|
|
59
|
-
return proveNode(this.leafNodes[index]);
|
|
60
|
-
};
|
|
61
|
-
Merkle.prototype.calculateRoot = function (leaves) {
|
|
62
|
-
var n = leaves.length;
|
|
63
|
-
if (n == 0) {
|
|
64
|
-
return {
|
|
65
|
-
root: new Node(undefined, undefined, Buffer.alloc(32, 0)),
|
|
66
|
-
leaves: []
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
if (n == 1) {
|
|
70
|
-
var newNode = new Node(undefined, undefined, leaves[0]);
|
|
71
|
-
return { root: newNode, leaves: [newNode] };
|
|
72
|
-
}
|
|
73
|
-
var leftCount = highestPowerOf2LessThan(n);
|
|
74
|
-
var leftBranch = this.calculateRoot(leaves.slice(0, leftCount));
|
|
75
|
-
var rightBranch = this.calculateRoot(leaves.slice(leftCount));
|
|
76
|
-
var leftChild = leftBranch.root;
|
|
77
|
-
var rightChild = rightBranch.root;
|
|
78
|
-
var hash = this.hashNode(leftChild.hash, rightChild.hash);
|
|
79
|
-
var node = new Node(leftChild, rightChild, hash);
|
|
80
|
-
leftChild.parent = node;
|
|
81
|
-
rightChild.parent = node;
|
|
82
|
-
return { root: node, leaves: leftBranch.leaves.concat(rightBranch.leaves) };
|
|
83
|
-
};
|
|
84
|
-
Merkle.prototype.hashNode = function (left, right) {
|
|
85
|
-
return this.h(Buffer.concat([Buffer.from([1]), left, right]));
|
|
86
|
-
};
|
|
87
|
-
return Merkle;
|
|
88
|
-
}());
|
|
89
|
-
exports.Merkle = Merkle;
|
|
90
|
-
function hashLeaf(buf, hashFunction) {
|
|
91
|
-
if (hashFunction === void 0) { hashFunction = bitcoinjs_lib_1.crypto.sha256; }
|
|
92
|
-
return hashConcat(Buffer.from([0]), buf, hashFunction);
|
|
93
|
-
}
|
|
94
|
-
exports.hashLeaf = hashLeaf;
|
|
95
|
-
function hashConcat(bufA, bufB, hashFunction) {
|
|
96
|
-
return hashFunction(Buffer.concat([bufA, bufB]));
|
|
97
|
-
}
|
|
98
|
-
var Node = /** @class */ (function () {
|
|
99
|
-
function Node(left, right, hash) {
|
|
100
|
-
this.leftChild = left;
|
|
101
|
-
this.rightChild = right;
|
|
102
|
-
this.hash = hash;
|
|
103
|
-
}
|
|
104
|
-
Node.prototype.isLeaf = function () {
|
|
105
|
-
return this.leftChild == undefined;
|
|
106
|
-
};
|
|
107
|
-
return Node;
|
|
108
|
-
}());
|
|
109
|
-
function proveNode(node) {
|
|
110
|
-
if (!node.parent) {
|
|
111
|
-
return [];
|
|
112
|
-
}
|
|
113
|
-
if (node.parent.leftChild == node) {
|
|
114
|
-
if (!node.parent.rightChild) {
|
|
115
|
-
throw new Error("Expected right child to exist");
|
|
116
|
-
}
|
|
117
|
-
return __spreadArray([node.parent.rightChild.hash], __read(proveNode(node.parent)), false);
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
if (!node.parent.leftChild) {
|
|
121
|
-
throw new Error("Expected left child to exist");
|
|
122
|
-
}
|
|
123
|
-
return __spreadArray([node.parent.leftChild.hash], __read(proveNode(node.parent)), false);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
function highestPowerOf2LessThan(n) {
|
|
127
|
-
if (n < 2) {
|
|
128
|
-
throw Error("Expected n >= 2");
|
|
129
|
-
}
|
|
130
|
-
if (isPowerOf2(n)) {
|
|
131
|
-
return n / 2;
|
|
132
|
-
}
|
|
133
|
-
return 1 << Math.floor(Math.log2(n));
|
|
134
|
-
}
|
|
135
|
-
function isPowerOf2(n) {
|
|
136
|
-
return (n & (n - 1)) == 0;
|
|
137
|
-
}
|
|
138
|
-
//# sourceMappingURL=merkle.js.map
|
package/lib/newops/merkle.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/newops/merkle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { Merkle } from "./merkle";
|
|
3
|
-
/**
|
|
4
|
-
* This implements "Merkelized Maps", documented at
|
|
5
|
-
* https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/merkle.md#merkleized-maps
|
|
6
|
-
*
|
|
7
|
-
* A merkelized map consist of two merkle trees, one for the keys of
|
|
8
|
-
* a map and one for the values of the same map, thus the two merkle
|
|
9
|
-
* trees have the same shape. The commitment is the number elements
|
|
10
|
-
* in the map followed by the keys' merkle root followed by the
|
|
11
|
-
* values' merkle root.
|
|
12
|
-
*/
|
|
13
|
-
export declare class MerkleMap {
|
|
14
|
-
keys: Buffer[];
|
|
15
|
-
keysTree: Merkle;
|
|
16
|
-
values: Buffer[];
|
|
17
|
-
valuesTree: Merkle;
|
|
18
|
-
/**
|
|
19
|
-
* @param keys Sorted list of (unhashed) keys
|
|
20
|
-
* @param values values, in corresponding order as the keys, and of equal length
|
|
21
|
-
*/
|
|
22
|
-
constructor(keys: Buffer[], values: Buffer[]);
|
|
23
|
-
commitment(): Buffer;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=merkleMap.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merkleMap.d.ts","sourceRoot":"","sources":["../../src/newops/merkleMap.ts"],"names":[],"mappings":";AACA,OAAO,EAAY,MAAM,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;;;;GASG;AACH,qBAAa,SAAS;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;gBACS,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;IAkB5C,UAAU,IAAI,MAAM;CAQrB"}
|
package/lib/newops/merkleMap.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
exports.__esModule = true;
|
|
3
|
-
exports.MerkleMap = void 0;
|
|
4
|
-
var varint_1 = require("../varint");
|
|
5
|
-
var merkle_1 = require("./merkle");
|
|
6
|
-
/**
|
|
7
|
-
* This implements "Merkelized Maps", documented at
|
|
8
|
-
* https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/merkle.md#merkleized-maps
|
|
9
|
-
*
|
|
10
|
-
* A merkelized map consist of two merkle trees, one for the keys of
|
|
11
|
-
* a map and one for the values of the same map, thus the two merkle
|
|
12
|
-
* trees have the same shape. The commitment is the number elements
|
|
13
|
-
* in the map followed by the keys' merkle root followed by the
|
|
14
|
-
* values' merkle root.
|
|
15
|
-
*/
|
|
16
|
-
var MerkleMap = /** @class */ (function () {
|
|
17
|
-
/**
|
|
18
|
-
* @param keys Sorted list of (unhashed) keys
|
|
19
|
-
* @param values values, in corresponding order as the keys, and of equal length
|
|
20
|
-
*/
|
|
21
|
-
function MerkleMap(keys, values) {
|
|
22
|
-
if (keys.length != values.length) {
|
|
23
|
-
throw new Error("keys and values should have the same length");
|
|
24
|
-
}
|
|
25
|
-
// Sanity check: verify that keys are actually sorted and with no duplicates
|
|
26
|
-
for (var i = 0; i < keys.length - 1; i++) {
|
|
27
|
-
if (keys[i].toString("hex") >= keys[i + 1].toString("hex")) {
|
|
28
|
-
throw new Error("keys must be in strictly increasing order");
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
this.keys = keys;
|
|
32
|
-
this.keysTree = new merkle_1.Merkle(keys.map(function (k) { return (0, merkle_1.hashLeaf)(k); }));
|
|
33
|
-
this.values = values;
|
|
34
|
-
this.valuesTree = new merkle_1.Merkle(values.map(function (v) { return (0, merkle_1.hashLeaf)(v); }));
|
|
35
|
-
}
|
|
36
|
-
MerkleMap.prototype.commitment = function () {
|
|
37
|
-
// returns a buffer between 65 and 73 (included) bytes long
|
|
38
|
-
return Buffer.concat([
|
|
39
|
-
(0, varint_1.createVarint)(this.keys.length),
|
|
40
|
-
this.keysTree.getRoot(),
|
|
41
|
-
this.valuesTree.getRoot(),
|
|
42
|
-
]);
|
|
43
|
-
};
|
|
44
|
-
return MerkleMap;
|
|
45
|
-
}());
|
|
46
|
-
exports.MerkleMap = MerkleMap;
|
|
47
|
-
//# sourceMappingURL=merkleMap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merkleMap.js","sourceRoot":"","sources":["../../src/newops/merkleMap.ts"],"names":[],"mappings":";;;AAAA,oCAAyC;AACzC,mCAA4C;AAE5C;;;;;;;;;GASG;AACH;IAKE;;;OAGG;IACH,mBAAY,IAAc,EAAE,MAAgB;QAC1C,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;QAED,4EAA4E;QAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC1D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;aAC9D;SACF;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,IAAA,iBAAQ,EAAC,CAAC,CAAC,EAAX,CAAW,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,IAAA,iBAAQ,EAAC,CAAC,CAAC,EAAX,CAAW,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,8BAAU,GAAV;QACE,2DAA2D;QAC3D,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAA,qBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;SAC1B,CAAC,CAAC;IACL,CAAC;IACH,gBAAC;AAAD,CAAC,AAnCD,IAmCC;AAnCY,8BAAS"}
|
package/lib/newops/policy.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
export declare type DefaultDescriptorTemplate = "pkh(@0)" | "sh(wpkh(@0))" | "wpkh(@0)" | "tr(@0)";
|
|
3
|
-
/**
|
|
4
|
-
* The Bitcon hardware app uses a descriptors-like thing to describe
|
|
5
|
-
* how to construct output scripts from keys. A "Wallet Policy" consists
|
|
6
|
-
* of a "Descriptor Template" and a list of "keys". A key is basically
|
|
7
|
-
* a serialized BIP32 extended public key with some added derivation path
|
|
8
|
-
* information. This is documented at
|
|
9
|
-
* https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/wallet.md
|
|
10
|
-
*/
|
|
11
|
-
export declare class WalletPolicy {
|
|
12
|
-
descriptorTemplate: string;
|
|
13
|
-
keys: string[];
|
|
14
|
-
/**
|
|
15
|
-
* For now, we only support default descriptor templates.
|
|
16
|
-
*/
|
|
17
|
-
constructor(descriptorTemplate: DefaultDescriptorTemplate, key: string);
|
|
18
|
-
getWalletId(): Buffer;
|
|
19
|
-
serialize(): Buffer;
|
|
20
|
-
}
|
|
21
|
-
export declare function createKey(masterFingerprint: Buffer, path: number[], xpub: string): string;
|
|
22
|
-
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/newops/policy.ts"],"names":[],"mappings":";AAKA,oBAAY,yBAAyB,GACjC,SAAS,GACT,cAAc,GACd,UAAU,GACV,QAAQ,CAAC;AAEb;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;OAEG;gBACS,kBAAkB,EAAE,yBAAyB,EAAE,GAAG,EAAE,MAAM;IAKtE,WAAW,IAAI,MAAM;IAKrB,SAAS,IAAI,MAAM;CAapB;AAED,wBAAgB,SAAS,CACvB,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,GACX,MAAM,CAKR"}
|
package/lib/newops/policy.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
exports.__esModule = true;
|
|
3
|
-
exports.createKey = exports.WalletPolicy = void 0;
|
|
4
|
-
var bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
5
|
-
var bip32_1 = require("../bip32");
|
|
6
|
-
var buffertools_1 = require("../buffertools");
|
|
7
|
-
var merkle_1 = require("./merkle");
|
|
8
|
-
/**
|
|
9
|
-
* The Bitcon hardware app uses a descriptors-like thing to describe
|
|
10
|
-
* how to construct output scripts from keys. A "Wallet Policy" consists
|
|
11
|
-
* of a "Descriptor Template" and a list of "keys". A key is basically
|
|
12
|
-
* a serialized BIP32 extended public key with some added derivation path
|
|
13
|
-
* information. This is documented at
|
|
14
|
-
* https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/wallet.md
|
|
15
|
-
*/
|
|
16
|
-
var WalletPolicy = /** @class */ (function () {
|
|
17
|
-
/**
|
|
18
|
-
* For now, we only support default descriptor templates.
|
|
19
|
-
*/
|
|
20
|
-
function WalletPolicy(descriptorTemplate, key) {
|
|
21
|
-
this.descriptorTemplate = descriptorTemplate;
|
|
22
|
-
this.keys = [key];
|
|
23
|
-
}
|
|
24
|
-
WalletPolicy.prototype.getWalletId = function () {
|
|
25
|
-
// wallet_id (sha256 of the wallet serialization),
|
|
26
|
-
return bitcoinjs_lib_1.crypto.sha256(this.serialize());
|
|
27
|
-
};
|
|
28
|
-
WalletPolicy.prototype.serialize = function () {
|
|
29
|
-
var keyBuffers = this.keys.map(function (k) {
|
|
30
|
-
return Buffer.from(k, "ascii");
|
|
31
|
-
});
|
|
32
|
-
var m = new merkle_1.Merkle(keyBuffers.map(function (k) { return (0, merkle_1.hashLeaf)(k); }));
|
|
33
|
-
var buf = new buffertools_1.BufferWriter();
|
|
34
|
-
buf.writeUInt8(0x01); // wallet type (policy map)
|
|
35
|
-
buf.writeUInt8(0); // length of wallet name (empty string for default wallets)
|
|
36
|
-
buf.writeVarSlice(Buffer.from(this.descriptorTemplate, "ascii"));
|
|
37
|
-
buf.writeVarInt(this.keys.length), buf.writeSlice(m.getRoot());
|
|
38
|
-
return buf.buffer();
|
|
39
|
-
};
|
|
40
|
-
return WalletPolicy;
|
|
41
|
-
}());
|
|
42
|
-
exports.WalletPolicy = WalletPolicy;
|
|
43
|
-
function createKey(masterFingerprint, path, xpub) {
|
|
44
|
-
var accountPath = (0, bip32_1.pathArrayToString)(path);
|
|
45
|
-
return "[".concat(masterFingerprint.toString("hex")).concat(accountPath.substring(1), "]").concat(xpub, "/**");
|
|
46
|
-
}
|
|
47
|
-
exports.createKey = createKey;
|
|
48
|
-
//# sourceMappingURL=policy.js.map
|
package/lib/newops/policy.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/newops/policy.ts"],"names":[],"mappings":";;;AAAA,+CAAuC;AACvC,kCAA6C;AAC7C,8CAA8C;AAC9C,mCAA4C;AAQ5C;;;;;;;GAOG;AACH;IAGE;;OAEG;IACH,sBAAY,kBAA6C,EAAE,GAAW;QACpE,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,kCAAW,GAAX;QACE,kDAAkD;QAClD,OAAO,sBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,gCAAS,GAAT;QACE,IAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,CAAC;YACjC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,IAAM,CAAC,GAAG,IAAI,eAAM,CAAC,UAAU,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,IAAA,iBAAQ,EAAC,CAAC,CAAC,EAAX,CAAW,CAAC,CAAC,CAAC;QAEzD,IAAM,GAAG,GAAG,IAAI,0BAAY,EAAE,CAAC;QAC/B,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B;QACjD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,2DAA2D;QAC9E,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;IACH,mBAAC;AAAD,CAAC,AA7BD,IA6BC;AA7BY,oCAAY;AA+BzB,SAAgB,SAAS,CACvB,iBAAyB,EACzB,IAAc,EACd,IAAY;IAEZ,IAAM,WAAW,GAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,WAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAG,WAAW,CAAC,SAAS,CAClE,CAAC,CACF,cAAI,IAAI,QAAK,CAAC;AACjB,CAAC;AATD,8BASC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { PsbtV2 } from "./psbtv2";
|
|
3
|
-
/**
|
|
4
|
-
* This implements the "Transaction Extractor" role of BIP370 (PSBTv2
|
|
5
|
-
* https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki#transaction-extractor). However
|
|
6
|
-
* the role is partially documented in BIP174 (PSBTv0
|
|
7
|
-
* https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#transaction-extractor).
|
|
8
|
-
*/
|
|
9
|
-
export declare function extract(psbt: PsbtV2): Buffer;
|
|
10
|
-
//# sourceMappingURL=psbtExtractor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"psbtExtractor.d.ts","sourceRoot":"","sources":["../../src/newops/psbtExtractor.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA6B5C"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
exports.__esModule = true;
|
|
3
|
-
exports.extract = void 0;
|
|
4
|
-
var buffertools_1 = require("../buffertools");
|
|
5
|
-
/**
|
|
6
|
-
* This implements the "Transaction Extractor" role of BIP370 (PSBTv2
|
|
7
|
-
* https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki#transaction-extractor). However
|
|
8
|
-
* the role is partially documented in BIP174 (PSBTv0
|
|
9
|
-
* https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#transaction-extractor).
|
|
10
|
-
*/
|
|
11
|
-
function extract(psbt) {
|
|
12
|
-
var _a, _b;
|
|
13
|
-
var tx = new buffertools_1.BufferWriter();
|
|
14
|
-
tx.writeUInt32(psbt.getGlobalTxVersion());
|
|
15
|
-
var isSegwit = !!psbt.getInputWitnessUtxo(0);
|
|
16
|
-
if (isSegwit) {
|
|
17
|
-
tx.writeSlice(Buffer.from([0, 1]));
|
|
18
|
-
}
|
|
19
|
-
var inputCount = psbt.getGlobalInputCount();
|
|
20
|
-
tx.writeVarInt(inputCount);
|
|
21
|
-
var witnessWriter = new buffertools_1.BufferWriter();
|
|
22
|
-
for (var i = 0; i < inputCount; i++) {
|
|
23
|
-
tx.writeSlice(psbt.getInputPreviousTxid(i));
|
|
24
|
-
tx.writeUInt32(psbt.getInputOutputIndex(i));
|
|
25
|
-
tx.writeVarSlice((_a = psbt.getInputFinalScriptsig(i)) !== null && _a !== void 0 ? _a : Buffer.from([]));
|
|
26
|
-
tx.writeUInt32(psbt.getInputSequence(i));
|
|
27
|
-
if (isSegwit) {
|
|
28
|
-
witnessWriter.writeSlice(psbt.getInputFinalScriptwitness(i));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
var outputCount = psbt.getGlobalOutputCount();
|
|
32
|
-
tx.writeVarInt(outputCount);
|
|
33
|
-
for (var i = 0; i < outputCount; i++) {
|
|
34
|
-
tx.writeUInt64(psbt.getOutputAmount(i));
|
|
35
|
-
tx.writeVarSlice(psbt.getOutputScript(i));
|
|
36
|
-
}
|
|
37
|
-
tx.writeSlice(witnessWriter.buffer());
|
|
38
|
-
tx.writeUInt32((_b = psbt.getGlobalFallbackLocktime()) !== null && _b !== void 0 ? _b : 0);
|
|
39
|
-
return tx.buffer();
|
|
40
|
-
}
|
|
41
|
-
exports.extract = extract;
|
|
42
|
-
//# sourceMappingURL=psbtExtractor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"psbtExtractor.js","sourceRoot":"","sources":["../../src/newops/psbtExtractor.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAG9C;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,IAAY;;IAClC,IAAM,EAAE,GAAG,IAAI,0BAAY,EAAE,CAAC;IAC9B,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE1C,IAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,QAAQ,EAAE;QACZ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACpC;IACD,IAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC9C,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC3B,IAAM,aAAa,GAAG,IAAI,0BAAY,EAAE,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;QACnC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,EAAE,CAAC,aAAa,CAAC,MAAA,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,mCAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE;YACZ,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9D;KACF;IACD,IAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChD,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;QACpC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;IACD,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,EAAE,CAAC,WAAW,CAAC,MAAA,IAAI,CAAC,yBAAyB,EAAE,mCAAI,CAAC,CAAC,CAAC;IACtD,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;AACrB,CAAC;AA7BD,0BA6BC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { PsbtV2 } from "./psbtv2";
|
|
2
|
-
/**
|
|
3
|
-
* This roughly implements the "input finalizer" role of BIP370 (PSBTv2
|
|
4
|
-
* https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki). However
|
|
5
|
-
* the role is documented in BIP174 (PSBTv0
|
|
6
|
-
* https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki).
|
|
7
|
-
*
|
|
8
|
-
* Verify that all inputs have a signature, and set inputFinalScriptwitness
|
|
9
|
-
* and/or inputFinalScriptSig depending on the type of the spent outputs. Clean
|
|
10
|
-
* fields that aren't useful anymore, partial signatures, redeem script and
|
|
11
|
-
* derivation paths.
|
|
12
|
-
*
|
|
13
|
-
* @param psbt The psbt with all signatures added as partial sigs, either
|
|
14
|
-
* through PSBT_IN_PARTIAL_SIG or PSBT_IN_TAP_KEY_SIG
|
|
15
|
-
*/
|
|
16
|
-
export declare function finalize(psbt: PsbtV2): void;
|
|
17
|
-
//# sourceMappingURL=psbtFinalizer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"psbtFinalizer.d.ts","sourceRoot":"","sources":["../../src/newops/psbtFinalizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,MAAM,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAoE3C"}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
exports.__esModule = true;
|
|
3
|
-
exports.finalize = void 0;
|
|
4
|
-
var buffertools_1 = require("../buffertools");
|
|
5
|
-
var psbtv2_1 = require("./psbtv2");
|
|
6
|
-
/**
|
|
7
|
-
* This roughly implements the "input finalizer" role of BIP370 (PSBTv2
|
|
8
|
-
* https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki). However
|
|
9
|
-
* the role is documented in BIP174 (PSBTv0
|
|
10
|
-
* https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki).
|
|
11
|
-
*
|
|
12
|
-
* Verify that all inputs have a signature, and set inputFinalScriptwitness
|
|
13
|
-
* and/or inputFinalScriptSig depending on the type of the spent outputs. Clean
|
|
14
|
-
* fields that aren't useful anymore, partial signatures, redeem script and
|
|
15
|
-
* derivation paths.
|
|
16
|
-
*
|
|
17
|
-
* @param psbt The psbt with all signatures added as partial sigs, either
|
|
18
|
-
* through PSBT_IN_PARTIAL_SIG or PSBT_IN_TAP_KEY_SIG
|
|
19
|
-
*/
|
|
20
|
-
function finalize(psbt) {
|
|
21
|
-
// First check that each input has a signature
|
|
22
|
-
var inputCount = psbt.getGlobalInputCount();
|
|
23
|
-
for (var i = 0; i < inputCount; i++) {
|
|
24
|
-
var legacyPubkeys = psbt.getInputKeyDatas(i, psbtv2_1.psbtIn.PARTIAL_SIG);
|
|
25
|
-
var taprootSig = psbt.getInputTapKeySig(i);
|
|
26
|
-
if (legacyPubkeys.length == 0 && !taprootSig) {
|
|
27
|
-
throw Error("No signature for input ".concat(i, " present"));
|
|
28
|
-
}
|
|
29
|
-
if (legacyPubkeys.length > 0) {
|
|
30
|
-
if (legacyPubkeys.length > 1) {
|
|
31
|
-
throw Error("Expected exactly one signature, got ".concat(legacyPubkeys.length));
|
|
32
|
-
}
|
|
33
|
-
if (taprootSig) {
|
|
34
|
-
throw Error("Both taproot and non-taproot signatures present.");
|
|
35
|
-
}
|
|
36
|
-
var isSegwitV0 = !!psbt.getInputWitnessUtxo(i);
|
|
37
|
-
var redeemScript = psbt.getInputRedeemScript(i);
|
|
38
|
-
var isWrappedSegwit = !!redeemScript;
|
|
39
|
-
var signature = psbt.getInputPartialSig(i, legacyPubkeys[0]);
|
|
40
|
-
if (!signature)
|
|
41
|
-
throw new Error("Expected partial signature for input " + i);
|
|
42
|
-
if (isSegwitV0) {
|
|
43
|
-
var witnessBuf = new buffertools_1.BufferWriter();
|
|
44
|
-
witnessBuf.writeVarInt(2);
|
|
45
|
-
witnessBuf.writeVarInt(signature.length);
|
|
46
|
-
witnessBuf.writeSlice(signature);
|
|
47
|
-
witnessBuf.writeVarInt(legacyPubkeys[0].length);
|
|
48
|
-
witnessBuf.writeSlice(legacyPubkeys[0]);
|
|
49
|
-
psbt.setInputFinalScriptwitness(i, witnessBuf.buffer());
|
|
50
|
-
if (isWrappedSegwit) {
|
|
51
|
-
if (!redeemScript || redeemScript.length == 0) {
|
|
52
|
-
throw new Error("Expected non-empty redeemscript. Can't finalize intput " + i);
|
|
53
|
-
}
|
|
54
|
-
var scriptSigBuf = new buffertools_1.BufferWriter();
|
|
55
|
-
// Push redeemScript length
|
|
56
|
-
scriptSigBuf.writeUInt8(redeemScript.length);
|
|
57
|
-
scriptSigBuf.writeSlice(redeemScript);
|
|
58
|
-
psbt.setInputFinalScriptsig(i, scriptSigBuf.buffer());
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
// Legacy input
|
|
63
|
-
var scriptSig = new buffertools_1.BufferWriter();
|
|
64
|
-
writePush(scriptSig, signature);
|
|
65
|
-
writePush(scriptSig, legacyPubkeys[0]);
|
|
66
|
-
psbt.setInputFinalScriptsig(i, scriptSig.buffer());
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
// Taproot input
|
|
71
|
-
var signature = psbt.getInputTapKeySig(i);
|
|
72
|
-
if (!signature) {
|
|
73
|
-
throw Error("No taproot signature found");
|
|
74
|
-
}
|
|
75
|
-
if (signature.length != 64 && signature.length != 65) {
|
|
76
|
-
throw Error("Unexpected length of schnorr signature.");
|
|
77
|
-
}
|
|
78
|
-
var witnessBuf = new buffertools_1.BufferWriter();
|
|
79
|
-
witnessBuf.writeVarInt(1);
|
|
80
|
-
witnessBuf.writeVarSlice(signature);
|
|
81
|
-
psbt.setInputFinalScriptwitness(i, witnessBuf.buffer());
|
|
82
|
-
}
|
|
83
|
-
clearFinalizedInput(psbt, i);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
exports.finalize = finalize;
|
|
87
|
-
/**
|
|
88
|
-
* Deletes fields that are no longer neccesary from the psbt.
|
|
89
|
-
*
|
|
90
|
-
* Note, the spec doesn't say anything about removing ouput fields
|
|
91
|
-
* like PSBT_OUT_BIP32_DERIVATION_PATH and others, so we keep them
|
|
92
|
-
* without actually knowing why. I think we should remove them too.
|
|
93
|
-
*/
|
|
94
|
-
function clearFinalizedInput(psbt, inputIndex) {
|
|
95
|
-
var keyTypes = [
|
|
96
|
-
psbtv2_1.psbtIn.BIP32_DERIVATION,
|
|
97
|
-
psbtv2_1.psbtIn.PARTIAL_SIG,
|
|
98
|
-
psbtv2_1.psbtIn.TAP_BIP32_DERIVATION,
|
|
99
|
-
psbtv2_1.psbtIn.TAP_KEY_SIG,
|
|
100
|
-
];
|
|
101
|
-
var witnessUtxoAvailable = !!psbt.getInputWitnessUtxo(inputIndex);
|
|
102
|
-
var nonWitnessUtxoAvailable = !!psbt.getInputNonWitnessUtxo(inputIndex);
|
|
103
|
-
if (witnessUtxoAvailable && nonWitnessUtxoAvailable) {
|
|
104
|
-
// Remove NON_WITNESS_UTXO for segwit v0 as it's only needed while signing.
|
|
105
|
-
// Segwit v1 doesn't have NON_WITNESS_UTXO set.
|
|
106
|
-
// See https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#cite_note-7
|
|
107
|
-
keyTypes.push(psbtv2_1.psbtIn.NON_WITNESS_UTXO);
|
|
108
|
-
}
|
|
109
|
-
psbt.deleteInputEntries(inputIndex, keyTypes);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Writes a script push operation to buf, which looks different
|
|
113
|
-
* depending on the size of the data. See
|
|
114
|
-
* https://en.bitcoin.it/wiki/Script#Constants
|
|
115
|
-
*
|
|
116
|
-
* @param buf the BufferWriter to write to
|
|
117
|
-
* @param data the Buffer to be pushed.
|
|
118
|
-
*/
|
|
119
|
-
function writePush(buf, data) {
|
|
120
|
-
if (data.length <= 75) {
|
|
121
|
-
buf.writeUInt8(data.length);
|
|
122
|
-
}
|
|
123
|
-
else if (data.length <= 256) {
|
|
124
|
-
buf.writeUInt8(76);
|
|
125
|
-
buf.writeUInt8(data.length);
|
|
126
|
-
}
|
|
127
|
-
else if (data.length <= 256 * 256) {
|
|
128
|
-
buf.writeUInt8(77);
|
|
129
|
-
var b = Buffer.alloc(2);
|
|
130
|
-
b.writeUInt16LE(data.length, 0);
|
|
131
|
-
buf.writeSlice(b);
|
|
132
|
-
}
|
|
133
|
-
buf.writeSlice(data);
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=psbtFinalizer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"psbtFinalizer.js","sourceRoot":"","sources":["../../src/newops/psbtFinalizer.ts"],"names":[],"mappings":"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"}
|