@ledgerhq/hw-app-btc 6.2.0 → 6.9.1-6.9.1-taproot.0.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/lib/Btc.d.ts +7 -3
- package/lib/Btc.d.ts.map +1 -1
- package/lib/Btc.js +99 -30
- package/lib/Btc.js.map +1 -1
- package/lib/BtcNew.d.ts +70 -0
- package/lib/BtcNew.d.ts.map +1 -0
- package/lib/BtcNew.js +372 -0
- package/lib/BtcNew.js.map +1 -0
- package/lib/BtcOld.d.ts +114 -0
- package/lib/BtcOld.d.ts.map +1 -0
- package/lib/BtcOld.js +138 -0
- package/lib/BtcOld.js.map +1 -0
- package/lib/bip32.d.ts +8 -0
- package/lib/bip32.d.ts.map +1 -1
- package/lib/bip32.js +32 -3
- package/lib/bip32.js.map +1 -1
- package/lib/buffertools.d.ts +28 -0
- package/lib/buffertools.d.ts.map +1 -0
- package/lib/buffertools.js +100 -0
- package/lib/buffertools.js.map +1 -0
- package/lib/createTransaction.d.ts.map +1 -1
- package/lib/createTransaction.js +16 -16
- package/lib/createTransaction.js.map +1 -1
- package/lib/finalizeInput.js +1 -1
- package/lib/finalizeInput.js.map +1 -1
- package/lib/getAppAndVersion.js +1 -1
- package/lib/getAppAndVersion.js.map +1 -1
- package/lib/getTrustedInput.js +6 -6
- package/lib/getTrustedInput.js.map +1 -1
- package/lib/getTrustedInputBIP143.js +2 -2
- package/lib/getTrustedInputBIP143.js.map +1 -1
- package/lib/getWalletPublicKey.d.ts +1 -1
- package/lib/getWalletPublicKey.d.ts.map +1 -1
- package/lib/getWalletPublicKey.js +1 -1
- package/lib/getWalletPublicKey.js.map +1 -1
- package/lib/hashPublicKey.d.ts +1 -1
- package/lib/hashPublicKey.d.ts.map +1 -1
- package/lib/hashPublicKey.js +1 -1
- package/lib/hashPublicKey.js.map +1 -1
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +8 -0
- package/lib/index.js.map +1 -0
- package/lib/newops/appClient.d.ts +14 -0
- package/lib/newops/appClient.d.ts.map +1 -0
- package/lib/newops/appClient.js +242 -0
- package/lib/newops/appClient.js.map +1 -0
- package/lib/newops/clientCommands.d.ts +61 -0
- package/lib/newops/clientCommands.d.ts.map +1 -0
- package/lib/newops/clientCommands.js +331 -0
- package/lib/newops/clientCommands.js.map +1 -0
- package/lib/newops/merkelizedPsbt.d.ts +15 -0
- package/lib/newops/merkelizedPsbt.d.ts.map +1 -0
- package/lib/newops/merkelizedPsbt.js +91 -0
- package/lib/newops/merkelizedPsbt.js.map +1 -0
- package/lib/newops/merkle.d.ts +29 -0
- package/lib/newops/merkle.d.ts.map +1 -0
- package/lib/newops/merkle.js +133 -0
- package/lib/newops/merkle.js.map +1 -0
- package/lib/newops/merkleMap.d.ts +15 -0
- package/lib/newops/merkleMap.d.ts.map +1 -0
- package/lib/newops/merkleMap.js +37 -0
- package/lib/newops/merkleMap.js.map +1 -0
- package/lib/newops/policy.d.ts +14 -0
- package/lib/newops/policy.d.ts.map +1 -0
- package/lib/newops/policy.js +40 -0
- package/lib/newops/policy.js.map +1 -0
- package/lib/newops/psbtExtractor.d.ts +4 -0
- package/lib/newops/psbtExtractor.d.ts.map +1 -0
- package/lib/newops/psbtExtractor.js +36 -0
- package/lib/newops/psbtExtractor.js.map +1 -0
- package/lib/newops/psbtFinalizer.d.ts +7 -0
- package/lib/newops/psbtFinalizer.d.ts.map +1 -0
- package/lib/newops/psbtFinalizer.js +111 -0
- package/lib/newops/psbtFinalizer.js.map +1 -0
- package/lib/newops/psbtv2.d.ts +129 -0
- package/lib/newops/psbtv2.d.ts.map +1 -0
- package/lib/newops/psbtv2.js +478 -0
- package/lib/newops/psbtv2.js.map +1 -0
- package/lib/serializeTransaction.js +4 -4
- package/lib/serializeTransaction.js.map +1 -1
- package/lib/signP2SHTransaction.js +5 -5
- package/lib/signP2SHTransaction.js.map +1 -1
- package/lib/signTransaction.js +1 -1
- package/lib/signTransaction.js.map +1 -1
- package/lib/splitTransaction.js +7 -7
- package/lib/splitTransaction.js.map +1 -1
- package/lib/startUntrustedHashTransactionInput.js +2 -2
- package/lib/startUntrustedHashTransactionInput.js.map +1 -1
- package/lib/varint.d.ts.map +1 -1
- package/lib/varint.js +1 -0
- package/lib/varint.js.map +1 -1
- package/lib-es/Btc.d.ts +7 -3
- package/lib-es/Btc.d.ts.map +1 -1
- package/lib-es/Btc.js +92 -26
- package/lib-es/Btc.js.map +1 -1
- package/lib-es/BtcNew.d.ts +70 -0
- package/lib-es/BtcNew.d.ts.map +1 -0
- package/lib-es/BtcNew.js +370 -0
- package/lib-es/BtcNew.js.map +1 -0
- package/lib-es/BtcOld.d.ts +114 -0
- package/lib-es/BtcOld.d.ts.map +1 -0
- package/lib-es/BtcOld.js +136 -0
- package/lib-es/BtcOld.js.map +1 -0
- package/lib-es/bip32.d.ts +8 -0
- package/lib-es/bip32.d.ts.map +1 -1
- package/lib-es/bip32.js +26 -2
- package/lib-es/bip32.js.map +1 -1
- package/lib-es/buffertools.d.ts +28 -0
- package/lib-es/buffertools.d.ts.map +1 -0
- package/lib-es/buffertools.js +94 -0
- package/lib-es/buffertools.js.map +1 -0
- package/lib-es/createTransaction.d.ts.map +1 -1
- package/lib-es/getWalletPublicKey.d.ts +1 -1
- package/lib-es/getWalletPublicKey.d.ts.map +1 -1
- package/lib-es/getWalletPublicKey.js.map +1 -1
- package/lib-es/hashPublicKey.d.ts +1 -1
- package/lib-es/hashPublicKey.d.ts.map +1 -1
- package/lib-es/index.d.ts +3 -0
- package/lib-es/index.d.ts.map +1 -0
- package/lib-es/index.js +3 -0
- package/lib-es/index.js.map +1 -0
- package/lib-es/newops/appClient.d.ts +14 -0
- package/lib-es/newops/appClient.d.ts.map +1 -0
- package/lib-es/newops/appClient.js +239 -0
- package/lib-es/newops/appClient.js.map +1 -0
- package/lib-es/newops/clientCommands.d.ts +61 -0
- package/lib-es/newops/clientCommands.d.ts.map +1 -0
- package/lib-es/newops/clientCommands.js +328 -0
- package/lib-es/newops/clientCommands.js.map +1 -0
- package/lib-es/newops/merkelizedPsbt.d.ts +15 -0
- package/lib-es/newops/merkelizedPsbt.d.ts.map +1 -0
- package/lib-es/newops/merkelizedPsbt.js +88 -0
- package/lib-es/newops/merkelizedPsbt.js.map +1 -0
- package/lib-es/newops/merkle.d.ts +29 -0
- package/lib-es/newops/merkle.d.ts.map +1 -0
- package/lib-es/newops/merkle.js +129 -0
- package/lib-es/newops/merkle.js.map +1 -0
- package/lib-es/newops/merkleMap.d.ts +15 -0
- package/lib-es/newops/merkleMap.d.ts.map +1 -0
- package/lib-es/newops/merkleMap.js +34 -0
- package/lib-es/newops/merkleMap.js.map +1 -0
- package/lib-es/newops/policy.d.ts +14 -0
- package/lib-es/newops/policy.d.ts.map +1 -0
- package/lib-es/newops/policy.js +36 -0
- package/lib-es/newops/policy.js.map +1 -0
- package/lib-es/newops/psbtExtractor.d.ts +4 -0
- package/lib-es/newops/psbtExtractor.d.ts.map +1 -0
- package/lib-es/newops/psbtExtractor.js +32 -0
- package/lib-es/newops/psbtExtractor.js.map +1 -0
- package/lib-es/newops/psbtFinalizer.d.ts +7 -0
- package/lib-es/newops/psbtFinalizer.d.ts.map +1 -0
- package/lib-es/newops/psbtFinalizer.js +107 -0
- package/lib-es/newops/psbtFinalizer.js.map +1 -0
- package/lib-es/newops/psbtv2.d.ts +129 -0
- package/lib-es/newops/psbtv2.d.ts.map +1 -0
- package/lib-es/newops/psbtv2.js +475 -0
- package/lib-es/newops/psbtv2.js.map +1 -0
- package/lib-es/varint.d.ts.map +1 -1
- package/lib-es/varint.js +1 -0
- package/lib-es/varint.js.map +1 -1
- package/package.json +7 -4
- package/src/Btc.ts +42 -25
- package/src/BtcNew.ts +326 -0
- package/src/BtcOld.ts +156 -0
- package/src/bip32.ts +34 -2
- package/src/buffertools.ts +102 -0
- package/src/createTransaction.ts +2 -2
- package/src/getWalletPublicKey.ts +6 -1
- package/src/hashPublicKey.ts +1 -1
- package/src/index.ts +2 -0
- package/src/newops/appClient.ts +178 -0
- package/src/newops/clientCommands.ts +312 -0
- package/src/newops/merkelizedPsbt.ts +55 -0
- package/src/newops/merkle.ts +123 -0
- package/src/newops/merkleMap.ts +39 -0
- package/src/newops/policy.ts +52 -0
- package/src/newops/psbtExtractor.ts +33 -0
- package/src/newops/psbtFinalizer.ts +110 -0
- package/src/newops/psbtv2.ts +548 -0
- package/src/varint.ts +2 -0
- package/tests/Btc.integration.test.ts +89 -0
- package/tests/Btc.test.ts +6 -0
- package/tests/newops/BtcNew.test.ts +646 -0
- package/tests/newops/common.ts +25 -0
- package/tests/newops/merkle.test.ts +97 -0
- package/tests/trustedInputs.test.ts +4 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
18
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
19
|
+
if (!m) return o;
|
|
20
|
+
var i = m.call(o), r, ar = [], e;
|
|
21
|
+
try {
|
|
22
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
23
|
+
}
|
|
24
|
+
catch (error) { e = { error: error }; }
|
|
25
|
+
finally {
|
|
26
|
+
try {
|
|
27
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
28
|
+
}
|
|
29
|
+
finally { if (e) throw e.error; }
|
|
30
|
+
}
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
34
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
35
|
+
if (ar || !(i in from)) {
|
|
36
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
37
|
+
ar[i] = from[i];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
41
|
+
};
|
|
42
|
+
var __values = (this && this.__values) || function(o) {
|
|
43
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
44
|
+
if (m) return m.call(o);
|
|
45
|
+
if (o && typeof o.length === "number") return {
|
|
46
|
+
next: function () {
|
|
47
|
+
if (o && i >= o.length) o = void 0;
|
|
48
|
+
return { value: o && o[i++], done: !o };
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
52
|
+
};
|
|
53
|
+
exports.__esModule = true;
|
|
54
|
+
exports.ClientCommandInterpreter = exports.GetMoreElementsCommand = exports.GetMerkleLeafIndexCommand = exports.GetMerkleLeafProofCommand = exports.GetPreimageCommand = exports.YieldCommand = void 0;
|
|
55
|
+
var bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
56
|
+
var varint_1 = require("../varint");
|
|
57
|
+
var merkle_1 = require("./merkle");
|
|
58
|
+
var ClientCommandCode;
|
|
59
|
+
(function (ClientCommandCode) {
|
|
60
|
+
ClientCommandCode[ClientCommandCode["YIELD"] = 16] = "YIELD";
|
|
61
|
+
ClientCommandCode[ClientCommandCode["GET_PREIMAGE"] = 64] = "GET_PREIMAGE";
|
|
62
|
+
ClientCommandCode[ClientCommandCode["GET_MERKLE_LEAF_PROOF"] = 65] = "GET_MERKLE_LEAF_PROOF";
|
|
63
|
+
ClientCommandCode[ClientCommandCode["GET_MERKLE_LEAF_INDEX"] = 66] = "GET_MERKLE_LEAF_INDEX";
|
|
64
|
+
ClientCommandCode[ClientCommandCode["GET_MORE_ELEMENTS"] = 160] = "GET_MORE_ELEMENTS";
|
|
65
|
+
})(ClientCommandCode || (ClientCommandCode = {}));
|
|
66
|
+
var ClientCommand = /** @class */ (function () {
|
|
67
|
+
function ClientCommand() {
|
|
68
|
+
}
|
|
69
|
+
return ClientCommand;
|
|
70
|
+
}());
|
|
71
|
+
var YieldCommand = /** @class */ (function (_super) {
|
|
72
|
+
__extends(YieldCommand, _super);
|
|
73
|
+
function YieldCommand(results) {
|
|
74
|
+
var _this = _super.call(this) || this;
|
|
75
|
+
_this.code = ClientCommandCode.YIELD;
|
|
76
|
+
_this.results = results;
|
|
77
|
+
return _this;
|
|
78
|
+
}
|
|
79
|
+
YieldCommand.prototype.execute = function (request) {
|
|
80
|
+
this.results.push(Buffer.from(request.subarray(1)));
|
|
81
|
+
return Buffer.from("");
|
|
82
|
+
};
|
|
83
|
+
return YieldCommand;
|
|
84
|
+
}(ClientCommand));
|
|
85
|
+
exports.YieldCommand = YieldCommand;
|
|
86
|
+
var GetPreimageCommand = /** @class */ (function (_super) {
|
|
87
|
+
__extends(GetPreimageCommand, _super);
|
|
88
|
+
function GetPreimageCommand(known_preimages, queue) {
|
|
89
|
+
var _this = _super.call(this) || this;
|
|
90
|
+
_this.code = ClientCommandCode.GET_PREIMAGE;
|
|
91
|
+
_this.known_preimages = known_preimages;
|
|
92
|
+
_this.queue = queue;
|
|
93
|
+
return _this;
|
|
94
|
+
}
|
|
95
|
+
GetPreimageCommand.prototype.execute = function (request) {
|
|
96
|
+
var req = request.subarray(1);
|
|
97
|
+
// we expect no more data to read
|
|
98
|
+
if (req.length != 1 + 32) {
|
|
99
|
+
throw new Error("Invalid request, unexpected trailing data");
|
|
100
|
+
}
|
|
101
|
+
if (req[0] != 0) {
|
|
102
|
+
throw new Error("Unsupported request, the first byte should be 0");
|
|
103
|
+
}
|
|
104
|
+
// read the hash
|
|
105
|
+
var hash = Buffer.alloc(32);
|
|
106
|
+
for (var i = 0; i < 32; i++) {
|
|
107
|
+
hash[i] = req[1 + i];
|
|
108
|
+
}
|
|
109
|
+
var req_hash_hex = hash.toString("hex");
|
|
110
|
+
var known_preimage = this.known_preimages.get(req_hash_hex);
|
|
111
|
+
if (known_preimage != undefined) {
|
|
112
|
+
var preimage_len_varint = (0, varint_1.createVarint)(known_preimage.length);
|
|
113
|
+
// We can send at most 255 - len(preimage_len_out) - 1 bytes in a single message;
|
|
114
|
+
// the rest will be stored in the queue for GET_MORE_ELEMENTS
|
|
115
|
+
var max_payload_size = 255 - preimage_len_varint.length - 1;
|
|
116
|
+
var payload_size = Math.min(max_payload_size, known_preimage.length);
|
|
117
|
+
if (payload_size < known_preimage.length) {
|
|
118
|
+
for (var i = payload_size; i < known_preimage.length; i++) {
|
|
119
|
+
this.queue.push(Buffer.from([known_preimage[i]]));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return Buffer.concat([
|
|
123
|
+
preimage_len_varint,
|
|
124
|
+
Buffer.from([payload_size]),
|
|
125
|
+
known_preimage.subarray(0, payload_size),
|
|
126
|
+
]);
|
|
127
|
+
}
|
|
128
|
+
throw Error("Requested unknown preimage for: " + req_hash_hex);
|
|
129
|
+
};
|
|
130
|
+
return GetPreimageCommand;
|
|
131
|
+
}(ClientCommand));
|
|
132
|
+
exports.GetPreimageCommand = GetPreimageCommand;
|
|
133
|
+
var GetMerkleLeafProofCommand = /** @class */ (function (_super) {
|
|
134
|
+
__extends(GetMerkleLeafProofCommand, _super);
|
|
135
|
+
function GetMerkleLeafProofCommand(known_trees, queue) {
|
|
136
|
+
var _this = _super.call(this) || this;
|
|
137
|
+
_this.code = ClientCommandCode.GET_MERKLE_LEAF_PROOF;
|
|
138
|
+
_this.known_trees = known_trees;
|
|
139
|
+
_this.queue = queue;
|
|
140
|
+
return _this;
|
|
141
|
+
}
|
|
142
|
+
GetMerkleLeafProofCommand.prototype.execute = function (request) {
|
|
143
|
+
var _a;
|
|
144
|
+
var req = request.subarray(1);
|
|
145
|
+
if (req.length != 32 + 4 + 4) {
|
|
146
|
+
throw new Error("Invalid request, unexpected trailing data");
|
|
147
|
+
}
|
|
148
|
+
// read the hash
|
|
149
|
+
var hash = Buffer.alloc(32);
|
|
150
|
+
for (var i = 0; i < 32; i++) {
|
|
151
|
+
hash[i] = req.readUInt8(i);
|
|
152
|
+
}
|
|
153
|
+
var hash_hex = hash.toString("hex");
|
|
154
|
+
var tree_size = req.readUInt32BE(32);
|
|
155
|
+
var leaf_index = req.readUInt32BE(32 + 4);
|
|
156
|
+
var mt = this.known_trees.get(hash_hex);
|
|
157
|
+
if (!mt) {
|
|
158
|
+
throw Error("Requested Merkle leaf proof for unknown tree: " + hash_hex);
|
|
159
|
+
}
|
|
160
|
+
if (leaf_index >= tree_size || mt.size() != tree_size) {
|
|
161
|
+
throw Error("Invalid index or tree size.");
|
|
162
|
+
}
|
|
163
|
+
if (this.queue.length != 0) {
|
|
164
|
+
throw Error("This command should not execute when the queue is not empty.");
|
|
165
|
+
}
|
|
166
|
+
var proof = mt.getProof(leaf_index);
|
|
167
|
+
var n_response_elements = Math.min(Math.floor((255 - 32 - 1 - 1) / 32), proof.length);
|
|
168
|
+
var n_leftover_elements = proof.length - n_response_elements;
|
|
169
|
+
// Add to the queue any proof elements that do not fit the response
|
|
170
|
+
if (n_leftover_elements > 0) {
|
|
171
|
+
(_a = this.queue).push.apply(_a, __spreadArray([], __read(proof.slice(-n_leftover_elements)), false));
|
|
172
|
+
}
|
|
173
|
+
return Buffer.concat(__spreadArray([
|
|
174
|
+
mt.getLeafHash(leaf_index),
|
|
175
|
+
Buffer.from([proof.length]),
|
|
176
|
+
Buffer.from([n_response_elements])
|
|
177
|
+
], __read(proof.slice(0, n_response_elements)), false));
|
|
178
|
+
};
|
|
179
|
+
return GetMerkleLeafProofCommand;
|
|
180
|
+
}(ClientCommand));
|
|
181
|
+
exports.GetMerkleLeafProofCommand = GetMerkleLeafProofCommand;
|
|
182
|
+
var GetMerkleLeafIndexCommand = /** @class */ (function (_super) {
|
|
183
|
+
__extends(GetMerkleLeafIndexCommand, _super);
|
|
184
|
+
function GetMerkleLeafIndexCommand(known_trees) {
|
|
185
|
+
var _this = _super.call(this) || this;
|
|
186
|
+
_this.code = ClientCommandCode.GET_MERKLE_LEAF_INDEX;
|
|
187
|
+
_this.known_trees = known_trees;
|
|
188
|
+
return _this;
|
|
189
|
+
}
|
|
190
|
+
GetMerkleLeafIndexCommand.prototype.execute = function (request) {
|
|
191
|
+
var req = request.subarray(1);
|
|
192
|
+
if (req.length != 32 + 32) {
|
|
193
|
+
throw new Error("Invalid request, unexpected trailing data");
|
|
194
|
+
}
|
|
195
|
+
// read the root hash
|
|
196
|
+
var root_hash = Buffer.alloc(32);
|
|
197
|
+
for (var i = 0; i < 32; i++) {
|
|
198
|
+
root_hash[i] = req.readUInt8(i);
|
|
199
|
+
}
|
|
200
|
+
var root_hash_hex = root_hash.toString("hex");
|
|
201
|
+
// read the leaf hash
|
|
202
|
+
var leef_hash = Buffer.alloc(32);
|
|
203
|
+
for (var i = 0; i < 32; i++) {
|
|
204
|
+
leef_hash[i] = req.readUInt8(32 + i);
|
|
205
|
+
}
|
|
206
|
+
var leef_hash_hex = leef_hash.toString("hex");
|
|
207
|
+
var mt = this.known_trees.get(root_hash_hex);
|
|
208
|
+
if (!mt) {
|
|
209
|
+
throw Error("Requested Merkle leaf index for unknown root: " + root_hash_hex);
|
|
210
|
+
}
|
|
211
|
+
var leaf_index = 0;
|
|
212
|
+
var found = 0;
|
|
213
|
+
for (var i = 0; i < mt.size(); i++) {
|
|
214
|
+
if (mt.getLeafHash(i).toString("hex") == leef_hash_hex) {
|
|
215
|
+
found = 1;
|
|
216
|
+
leaf_index = i;
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return Buffer.concat([Buffer.from([found]), (0, varint_1.createVarint)(leaf_index)]);
|
|
221
|
+
};
|
|
222
|
+
return GetMerkleLeafIndexCommand;
|
|
223
|
+
}(ClientCommand));
|
|
224
|
+
exports.GetMerkleLeafIndexCommand = GetMerkleLeafIndexCommand;
|
|
225
|
+
var GetMoreElementsCommand = /** @class */ (function (_super) {
|
|
226
|
+
__extends(GetMoreElementsCommand, _super);
|
|
227
|
+
function GetMoreElementsCommand(queue) {
|
|
228
|
+
var _this = _super.call(this) || this;
|
|
229
|
+
_this.code = ClientCommandCode.GET_MORE_ELEMENTS;
|
|
230
|
+
_this.queue = queue;
|
|
231
|
+
return _this;
|
|
232
|
+
}
|
|
233
|
+
GetMoreElementsCommand.prototype.execute = function (request) {
|
|
234
|
+
if (request.length != 1) {
|
|
235
|
+
throw new Error("Invalid request, unexpected trailing data");
|
|
236
|
+
}
|
|
237
|
+
if (this.queue.length === 0) {
|
|
238
|
+
throw new Error("No elements to get");
|
|
239
|
+
}
|
|
240
|
+
// all elements should have the same length
|
|
241
|
+
var element_len = this.queue[0].length;
|
|
242
|
+
if (this.queue.some(function (el) { return el.length != element_len; })) {
|
|
243
|
+
throw new Error("The queue contains elements with different byte length, which is not expected");
|
|
244
|
+
}
|
|
245
|
+
var max_elements = Math.floor(253 / element_len);
|
|
246
|
+
var n_returned_elements = Math.min(max_elements, this.queue.length);
|
|
247
|
+
var returned_elements = this.queue.splice(0, n_returned_elements);
|
|
248
|
+
return Buffer.concat(__spreadArray([
|
|
249
|
+
Buffer.from([n_returned_elements]),
|
|
250
|
+
Buffer.from([element_len])
|
|
251
|
+
], __read(returned_elements), false));
|
|
252
|
+
};
|
|
253
|
+
return GetMoreElementsCommand;
|
|
254
|
+
}(ClientCommand));
|
|
255
|
+
exports.GetMoreElementsCommand = GetMoreElementsCommand;
|
|
256
|
+
var ClientCommandInterpreter = /** @class */ (function () {
|
|
257
|
+
function ClientCommandInterpreter() {
|
|
258
|
+
var e_1, _a;
|
|
259
|
+
this.roots = new Map();
|
|
260
|
+
this.preimages = new Map();
|
|
261
|
+
this.yielded = [];
|
|
262
|
+
this.queue = [];
|
|
263
|
+
this.commands = new Map();
|
|
264
|
+
var commands = [
|
|
265
|
+
new YieldCommand(this.yielded),
|
|
266
|
+
new GetPreimageCommand(this.preimages, this.queue),
|
|
267
|
+
new GetMerkleLeafIndexCommand(this.roots),
|
|
268
|
+
new GetMerkleLeafProofCommand(this.roots, this.queue),
|
|
269
|
+
new GetMoreElementsCommand(this.queue),
|
|
270
|
+
];
|
|
271
|
+
try {
|
|
272
|
+
for (var commands_1 = __values(commands), commands_1_1 = commands_1.next(); !commands_1_1.done; commands_1_1 = commands_1.next()) {
|
|
273
|
+
var cmd = commands_1_1.value;
|
|
274
|
+
if (this.commands.has(cmd.code)) {
|
|
275
|
+
throw new Error("Multiple commands with code " + cmd.code);
|
|
276
|
+
}
|
|
277
|
+
this.commands.set(cmd.code, cmd);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
281
|
+
finally {
|
|
282
|
+
try {
|
|
283
|
+
if (commands_1_1 && !commands_1_1.done && (_a = commands_1["return"])) _a.call(commands_1);
|
|
284
|
+
}
|
|
285
|
+
finally { if (e_1) throw e_1.error; }
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
ClientCommandInterpreter.prototype.getYielded = function () {
|
|
289
|
+
return this.yielded;
|
|
290
|
+
};
|
|
291
|
+
ClientCommandInterpreter.prototype.addKnownPreimage = function (preimage) {
|
|
292
|
+
this.preimages.set(bitcoinjs_lib_1.crypto.sha256(preimage).toString("hex"), preimage);
|
|
293
|
+
};
|
|
294
|
+
ClientCommandInterpreter.prototype.addKnownList = function (elements) {
|
|
295
|
+
var e_2, _a;
|
|
296
|
+
try {
|
|
297
|
+
for (var elements_1 = __values(elements), elements_1_1 = elements_1.next(); !elements_1_1.done; elements_1_1 = elements_1.next()) {
|
|
298
|
+
var el = elements_1_1.value;
|
|
299
|
+
var preimage = Buffer.concat([Buffer.from([0]), el]);
|
|
300
|
+
this.addKnownPreimage(preimage);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
304
|
+
finally {
|
|
305
|
+
try {
|
|
306
|
+
if (elements_1_1 && !elements_1_1.done && (_a = elements_1["return"])) _a.call(elements_1);
|
|
307
|
+
}
|
|
308
|
+
finally { if (e_2) throw e_2.error; }
|
|
309
|
+
}
|
|
310
|
+
var mt = new merkle_1.Merkle(elements.map(function (el) { return (0, merkle_1.hashLeaf)(el); }));
|
|
311
|
+
this.roots.set(mt.getRoot().toString("hex"), mt);
|
|
312
|
+
};
|
|
313
|
+
ClientCommandInterpreter.prototype.addKnownMapping = function (mm) {
|
|
314
|
+
this.addKnownList(mm.keys);
|
|
315
|
+
this.addKnownList(mm.values);
|
|
316
|
+
};
|
|
317
|
+
ClientCommandInterpreter.prototype.execute = function (request) {
|
|
318
|
+
if (request.length == 0) {
|
|
319
|
+
throw new Error("Unexpected empty command");
|
|
320
|
+
}
|
|
321
|
+
var cmdCode = request[0];
|
|
322
|
+
var cmd = this.commands.get(cmdCode);
|
|
323
|
+
if (!cmd) {
|
|
324
|
+
throw new Error("Unexpected command code " + cmdCode);
|
|
325
|
+
}
|
|
326
|
+
return cmd.execute(request);
|
|
327
|
+
};
|
|
328
|
+
return ClientCommandInterpreter;
|
|
329
|
+
}());
|
|
330
|
+
exports.ClientCommandInterpreter = ClientCommandInterpreter;
|
|
331
|
+
//# sourceMappingURL=clientCommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientCommands.js","sourceRoot":"","sources":["../../src/newops/clientCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { MerkleMap } from "./merkleMap";
|
|
3
|
+
import { PsbtV2 } from "./psbtv2";
|
|
4
|
+
export declare class MerkelizedPsbt extends PsbtV2 {
|
|
5
|
+
globalMerkleMap: MerkleMap;
|
|
6
|
+
inputMerkleMaps: MerkleMap[];
|
|
7
|
+
outputMerkleMaps: MerkleMap[];
|
|
8
|
+
inputMapCommitments: Buffer[];
|
|
9
|
+
outputMapCommitments: Buffer[];
|
|
10
|
+
constructor(psbt: PsbtV2);
|
|
11
|
+
getGlobalSize(): number;
|
|
12
|
+
getGlobalKeysValuesRoot(): Buffer;
|
|
13
|
+
private static createMerkleMap;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=merkelizedPsbt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkelizedPsbt.d.ts","sourceRoot":"","sources":["../../src/newops/merkelizedPsbt.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,cAAe,SAAQ,MAAM;IACjC,eAAe,EAAE,SAAS,CAAC;IAC3B,eAAe,EAAE,SAAS,EAAE,CAAM;IAClC,gBAAgB,EAAE,SAAS,EAAE,CAAM;IACnC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,oBAAoB,EAAE,MAAM,EAAE,CAAC;gBAC1B,IAAI,EAAE,MAAM;IAwBxB,aAAa,IAAI,MAAM;IAGvB,uBAAuB,IAAI,MAAM;IAIjC,OAAO,CAAC,MAAM,CAAC,eAAe;CAc/B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
18
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
19
|
+
if (!m) return o;
|
|
20
|
+
var i = m.call(o), r, ar = [], e;
|
|
21
|
+
try {
|
|
22
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
23
|
+
}
|
|
24
|
+
catch (error) { e = { error: error }; }
|
|
25
|
+
finally {
|
|
26
|
+
try {
|
|
27
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
28
|
+
}
|
|
29
|
+
finally { if (e) throw e.error; }
|
|
30
|
+
}
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
34
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
35
|
+
if (ar || !(i in from)) {
|
|
36
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
37
|
+
ar[i] = from[i];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
41
|
+
};
|
|
42
|
+
exports.__esModule = true;
|
|
43
|
+
exports.MerkelizedPsbt = void 0;
|
|
44
|
+
var merkleMap_1 = require("./merkleMap");
|
|
45
|
+
var psbtv2_1 = require("./psbtv2");
|
|
46
|
+
var MerkelizedPsbt = /** @class */ (function (_super) {
|
|
47
|
+
__extends(MerkelizedPsbt, _super);
|
|
48
|
+
function MerkelizedPsbt(psbt) {
|
|
49
|
+
var _this = _super.call(this) || this;
|
|
50
|
+
_this.inputMerkleMaps = [];
|
|
51
|
+
_this.outputMerkleMaps = [];
|
|
52
|
+
psbt.copy(_this);
|
|
53
|
+
_this.globalMerkleMap = MerkelizedPsbt.createMerkleMap(_this.globalMap);
|
|
54
|
+
for (var i = 0; i < _this.getGlobalInputCount(); i++) {
|
|
55
|
+
_this.inputMerkleMaps.push(MerkelizedPsbt.createMerkleMap(_this.inputMaps[i]));
|
|
56
|
+
}
|
|
57
|
+
_this.inputMapCommitments = __spreadArray([], __read(_this.inputMerkleMaps.values()), false).map(function (v) {
|
|
58
|
+
return v.commitment();
|
|
59
|
+
});
|
|
60
|
+
for (var i = 0; i < _this.getGlobalOutputCount(); i++) {
|
|
61
|
+
_this.outputMerkleMaps.push(MerkelizedPsbt.createMerkleMap(_this.outputMaps[i]));
|
|
62
|
+
}
|
|
63
|
+
_this.outputMapCommitments = __spreadArray([], __read(_this.outputMerkleMaps.values()), false).map(function (v) {
|
|
64
|
+
return v.commitment();
|
|
65
|
+
});
|
|
66
|
+
return _this;
|
|
67
|
+
}
|
|
68
|
+
// These public functions are for MerkelizedPsbt.
|
|
69
|
+
MerkelizedPsbt.prototype.getGlobalSize = function () {
|
|
70
|
+
return this.globalMap.size;
|
|
71
|
+
};
|
|
72
|
+
MerkelizedPsbt.prototype.getGlobalKeysValuesRoot = function () {
|
|
73
|
+
return this.globalMerkleMap.commitment();
|
|
74
|
+
};
|
|
75
|
+
MerkelizedPsbt.createMerkleMap = function (map) {
|
|
76
|
+
var sortedKeysStrings = __spreadArray([], __read(map.keys()), false).sort();
|
|
77
|
+
var values = sortedKeysStrings.map(function (k) {
|
|
78
|
+
var v = map.get(k);
|
|
79
|
+
if (!v) {
|
|
80
|
+
throw new Error("No value for key " + k);
|
|
81
|
+
}
|
|
82
|
+
return v;
|
|
83
|
+
});
|
|
84
|
+
var sortedKeys = sortedKeysStrings.map(function (k) { return Buffer.from(k, "hex"); });
|
|
85
|
+
var merkleMap = new merkleMap_1.MerkleMap(sortedKeys, values);
|
|
86
|
+
return merkleMap;
|
|
87
|
+
};
|
|
88
|
+
return MerkelizedPsbt;
|
|
89
|
+
}(psbtv2_1.PsbtV2));
|
|
90
|
+
exports.MerkelizedPsbt = MerkelizedPsbt;
|
|
91
|
+
//# sourceMappingURL=merkelizedPsbt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkelizedPsbt.js","sourceRoot":"","sources":["../../src/newops/merkelizedPsbt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAwC;AACxC,mCAAkC;AAElC;IAAoC,kCAAM;IAMxC,wBAAY,IAAY;QAAxB,YACE,iBAAO,SAqBR;QA1BM,qBAAe,GAAgB,EAAE,CAAC;QAClC,sBAAgB,GAAgB,EAAE,CAAC;QAKxC,IAAI,CAAC,IAAI,CAAC,KAAI,CAAC,CAAC;QAChB,KAAI,CAAC,eAAe,GAAG,cAAc,CAAC,eAAe,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC;QAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;YACnD,KAAI,CAAC,eAAe,CAAC,IAAI,CACvB,cAAc,CAAC,eAAe,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAClD,CAAC;SACH;QACD,KAAI,CAAC,mBAAmB,GAAG,yBAAI,KAAI,CAAC,eAAe,CAAC,MAAM,EAAE,UAAE,GAAG,CAAC,UAAC,CAAC;YAClE,OAAA,CAAC,CAAC,UAAU,EAAE;QAAd,CAAc,CACf,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE;YACpD,KAAI,CAAC,gBAAgB,CAAC,IAAI,CACxB,cAAc,CAAC,eAAe,CAAC,KAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC;SACH;QACD,KAAI,CAAC,oBAAoB,GAAG,yBAAI,KAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAE,GAAG,CAAC,UAAC,CAAC;YACpE,OAAA,CAAC,CAAC,UAAU,EAAE;QAAd,CAAc,CACf,CAAC;;IACJ,CAAC;IACD,iDAAiD;IACjD,sCAAa,GAAb;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,gDAAuB,GAAvB;QACE,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;IAC3C,CAAC;IAEc,8BAAe,GAA9B,UAA+B,GAAwB;QACrD,IAAM,iBAAiB,GAAG,yBAAI,GAAG,CAAC,IAAI,EAAE,UAAE,IAAI,EAAE,CAAC;QACjD,IAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAC,CAAC;YACrC,IAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC,EAAE;gBACN,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC;aAC1C;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,IAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,EAArB,CAAqB,CAAC,CAAC;QAEvE,IAAM,SAAS,GAAG,IAAI,qBAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IACH,qBAAC;AAAD,CAAC,AAnDD,CAAoC,eAAM,GAmDzC;AAnDY,wCAAc"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export declare class Merkle {
|
|
3
|
+
private leaves;
|
|
4
|
+
private rootNode;
|
|
5
|
+
private leafNodes;
|
|
6
|
+
private h;
|
|
7
|
+
constructor(leaves: Buffer[], hasher?: (buf: Buffer) => Buffer);
|
|
8
|
+
getRoot(): Buffer;
|
|
9
|
+
size(): number;
|
|
10
|
+
getLeaves(): Buffer[];
|
|
11
|
+
getLeafHash(index: number): Buffer;
|
|
12
|
+
getProof(index: number): Buffer[];
|
|
13
|
+
calculateRoot(leaves: Buffer[]): {
|
|
14
|
+
root: Node;
|
|
15
|
+
leaves: Node[];
|
|
16
|
+
};
|
|
17
|
+
hashNode(left: Buffer, right: Buffer): Buffer;
|
|
18
|
+
}
|
|
19
|
+
export declare function hashLeaf(buf: Buffer, hashFunction?: (buf: Buffer) => Buffer): Buffer;
|
|
20
|
+
declare class Node {
|
|
21
|
+
leftChild?: Node;
|
|
22
|
+
rightChild?: Node;
|
|
23
|
+
parent?: Node;
|
|
24
|
+
hash: Buffer;
|
|
25
|
+
constructor(left: Node | undefined, right: Node | undefined, hash: Buffer);
|
|
26
|
+
isLeaf(): boolean;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=merkle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../src/newops/merkle.ts"],"names":[],"mappings":";AAEA,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,QAAQ,CAAO;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,CAAC,CAA0B;gBAEjC,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAsB;IAQjD,OAAO,IAAI,MAAM;IAGjB,IAAI,IAAI,MAAM;IAGd,SAAS,IAAI,MAAM,EAAE;IAGrB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAGlC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAKjC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,IAAI,EAAE,CAAA;KAAE;IAwB/D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;CAG9C;AAED,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,YAAY,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAsB,GACpD,MAAM,CAER;AAUD,cAAM,IAAI;IACR,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;gBACD,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM;IAKzE,MAAM,IAAI,OAAO;CAGlB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
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
|
+
var Merkle = /** @class */ (function () {
|
|
31
|
+
function Merkle(leaves, hasher) {
|
|
32
|
+
if (hasher === void 0) { hasher = bitcoinjs_lib_1.crypto.sha256; }
|
|
33
|
+
this.leaves = leaves;
|
|
34
|
+
this.h = hasher;
|
|
35
|
+
var nodes = this.calculateRoot(leaves);
|
|
36
|
+
this.rootNode = nodes.root;
|
|
37
|
+
this.leafNodes = nodes.leaves;
|
|
38
|
+
}
|
|
39
|
+
Merkle.prototype.getRoot = function () {
|
|
40
|
+
return this.rootNode.hash;
|
|
41
|
+
};
|
|
42
|
+
Merkle.prototype.size = function () {
|
|
43
|
+
return this.leaves.length;
|
|
44
|
+
};
|
|
45
|
+
Merkle.prototype.getLeaves = function () {
|
|
46
|
+
return this.leaves;
|
|
47
|
+
};
|
|
48
|
+
Merkle.prototype.getLeafHash = function (index) {
|
|
49
|
+
return this.leafNodes[index].hash;
|
|
50
|
+
};
|
|
51
|
+
Merkle.prototype.getProof = function (index) {
|
|
52
|
+
if (index >= this.leaves.length)
|
|
53
|
+
throw Error("Index out of bounds");
|
|
54
|
+
return proveNode(this.leafNodes[index]);
|
|
55
|
+
};
|
|
56
|
+
Merkle.prototype.calculateRoot = function (leaves) {
|
|
57
|
+
var n = leaves.length;
|
|
58
|
+
if (n == 0) {
|
|
59
|
+
return {
|
|
60
|
+
root: new Node(undefined, undefined, Buffer.alloc(32, 0)),
|
|
61
|
+
leaves: []
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
if (n == 1) {
|
|
65
|
+
var newNode = new Node(undefined, undefined, leaves[0]);
|
|
66
|
+
return { root: newNode, leaves: [newNode] };
|
|
67
|
+
}
|
|
68
|
+
var leftCount = highestPowerOf2LessThan(n);
|
|
69
|
+
var leftBranch = this.calculateRoot(leaves.slice(0, leftCount));
|
|
70
|
+
var rightBranch = this.calculateRoot(leaves.slice(leftCount));
|
|
71
|
+
var leftChild = leftBranch.root;
|
|
72
|
+
var rightChild = rightBranch.root;
|
|
73
|
+
var hash = this.hashNode(leftChild.hash, rightChild.hash);
|
|
74
|
+
var node = new Node(leftChild, rightChild, hash);
|
|
75
|
+
leftChild.parent = node;
|
|
76
|
+
rightChild.parent = node;
|
|
77
|
+
return { root: node, leaves: leftBranch.leaves.concat(rightBranch.leaves) };
|
|
78
|
+
};
|
|
79
|
+
Merkle.prototype.hashNode = function (left, right) {
|
|
80
|
+
return this.h(Buffer.concat([Buffer.of(1), left, right]));
|
|
81
|
+
};
|
|
82
|
+
return Merkle;
|
|
83
|
+
}());
|
|
84
|
+
exports.Merkle = Merkle;
|
|
85
|
+
function hashLeaf(buf, hashFunction) {
|
|
86
|
+
if (hashFunction === void 0) { hashFunction = bitcoinjs_lib_1.crypto.sha256; }
|
|
87
|
+
return hashConcat(Buffer.of(0), buf, hashFunction);
|
|
88
|
+
}
|
|
89
|
+
exports.hashLeaf = hashLeaf;
|
|
90
|
+
function hashConcat(bufA, bufB, hashFunction) {
|
|
91
|
+
return hashFunction(Buffer.concat([bufA, bufB]));
|
|
92
|
+
}
|
|
93
|
+
var Node = /** @class */ (function () {
|
|
94
|
+
function Node(left, right, hash) {
|
|
95
|
+
this.leftChild = left;
|
|
96
|
+
this.rightChild = right;
|
|
97
|
+
this.hash = hash;
|
|
98
|
+
}
|
|
99
|
+
Node.prototype.isLeaf = function () {
|
|
100
|
+
return this.leftChild == undefined;
|
|
101
|
+
};
|
|
102
|
+
return Node;
|
|
103
|
+
}());
|
|
104
|
+
function proveNode(node) {
|
|
105
|
+
if (!node.parent) {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
if (node.parent.leftChild == node) {
|
|
109
|
+
if (!node.parent.rightChild) {
|
|
110
|
+
throw new Error("Expected right child to exist");
|
|
111
|
+
}
|
|
112
|
+
return __spreadArray([node.parent.rightChild.hash], __read(proveNode(node.parent)), false);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
if (!node.parent.leftChild) {
|
|
116
|
+
throw new Error("Expected left child to exist");
|
|
117
|
+
}
|
|
118
|
+
return __spreadArray([node.parent.leftChild.hash], __read(proveNode(node.parent)), false);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function highestPowerOf2LessThan(n) {
|
|
122
|
+
if (n < 2) {
|
|
123
|
+
throw Error("Expected n >= 2");
|
|
124
|
+
}
|
|
125
|
+
if (isPowerOf2(n)) {
|
|
126
|
+
return n / 2;
|
|
127
|
+
}
|
|
128
|
+
return 1 << Math.floor(Math.log2(n));
|
|
129
|
+
}
|
|
130
|
+
function isPowerOf2(n) {
|
|
131
|
+
return (n & (n - 1)) == 0;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=merkle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/newops/merkle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Merkle } from "./merkle";
|
|
3
|
+
export declare class MerkleMap {
|
|
4
|
+
keys: Buffer[];
|
|
5
|
+
keysTree: Merkle;
|
|
6
|
+
values: Buffer[];
|
|
7
|
+
valuesTree: Merkle;
|
|
8
|
+
/**
|
|
9
|
+
* @param keys Sorted list of (unhashed) keys
|
|
10
|
+
* @param values values, in corresponding order as the keys, and of equal length
|
|
11
|
+
*/
|
|
12
|
+
constructor(keys: Buffer[], values: Buffer[]);
|
|
13
|
+
commitment(): Buffer;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=merkleMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkleMap.d.ts","sourceRoot":"","sources":["../../src/newops/merkleMap.ts"],"names":[],"mappings":";AACA,OAAO,EAAY,MAAM,EAAE,MAAM,UAAU,CAAC;AAE5C,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"}
|