@ledgerhq/hw-app-btc 6.7.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 +95 -26
- 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/getWalletPublicKey.d.ts +1 -1
- package/lib/getWalletPublicKey.d.ts.map +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/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/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 +6 -3
- 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 +1 -1
- 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,239 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (_) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var __values = (this && this.__values) || function(o) {
|
|
38
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
39
|
+
if (m) return m.call(o);
|
|
40
|
+
if (o && typeof o.length === "number") return {
|
|
41
|
+
next: function () {
|
|
42
|
+
if (o && i >= o.length) o = void 0;
|
|
43
|
+
return { value: o && o[i++], done: !o };
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
47
|
+
};
|
|
48
|
+
import { pathElementsToBuffer } from "../bip32";
|
|
49
|
+
import { MerkelizedPsbt } from "./merkelizedPsbt";
|
|
50
|
+
import { ClientCommandInterpreter } from "./clientCommands";
|
|
51
|
+
import { createVarint } from "../varint";
|
|
52
|
+
import { hashLeaf, Merkle } from "./merkle";
|
|
53
|
+
var CLA_BTC = 0xe1;
|
|
54
|
+
var CLA_FRAMEWORK = 0xf8;
|
|
55
|
+
var BitcoinIns;
|
|
56
|
+
(function (BitcoinIns) {
|
|
57
|
+
BitcoinIns[BitcoinIns["GET_PUBKEY"] = 0] = "GET_PUBKEY";
|
|
58
|
+
// GET_ADDRESS = 0x01,
|
|
59
|
+
BitcoinIns[BitcoinIns["REGISTER_WALLET"] = 2] = "REGISTER_WALLET";
|
|
60
|
+
BitcoinIns[BitcoinIns["GET_WALLET_ADDRESS"] = 3] = "GET_WALLET_ADDRESS";
|
|
61
|
+
BitcoinIns[BitcoinIns["SIGN_PSBT"] = 4] = "SIGN_PSBT";
|
|
62
|
+
BitcoinIns[BitcoinIns["GET_MASTER_FINGERPRINT"] = 5] = "GET_MASTER_FINGERPRINT";
|
|
63
|
+
})(BitcoinIns || (BitcoinIns = {}));
|
|
64
|
+
var FrameworkIns;
|
|
65
|
+
(function (FrameworkIns) {
|
|
66
|
+
FrameworkIns[FrameworkIns["CONTINUE_INTERRUPTED"] = 1] = "CONTINUE_INTERRUPTED";
|
|
67
|
+
})(FrameworkIns || (FrameworkIns = {}));
|
|
68
|
+
var AppClient = /** @class */ (function () {
|
|
69
|
+
function AppClient(transport) {
|
|
70
|
+
this.transport = transport;
|
|
71
|
+
}
|
|
72
|
+
AppClient.prototype.makeRequest = function (ins, data, cci) {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
74
|
+
var response, hwRequest, commandResponse;
|
|
75
|
+
return __generator(this, function (_a) {
|
|
76
|
+
switch (_a.label) {
|
|
77
|
+
case 0: return [4 /*yield*/, this.transport.send(CLA_BTC, ins, 0, 0, data, [
|
|
78
|
+
0x9000,
|
|
79
|
+
0xe000,
|
|
80
|
+
])];
|
|
81
|
+
case 1:
|
|
82
|
+
response = _a.sent();
|
|
83
|
+
_a.label = 2;
|
|
84
|
+
case 2:
|
|
85
|
+
if (!(response.readUInt16BE(response.length - 2) === 0xe000)) return [3 /*break*/, 4];
|
|
86
|
+
if (!cci) {
|
|
87
|
+
throw new Error("Unexpected SW_INTERRUPTED_EXECUTION");
|
|
88
|
+
}
|
|
89
|
+
hwRequest = response.slice(0, -2);
|
|
90
|
+
commandResponse = cci.execute(hwRequest);
|
|
91
|
+
return [4 /*yield*/, this.transport.send(CLA_FRAMEWORK, FrameworkIns.CONTINUE_INTERRUPTED, 0, 0, commandResponse, [0x9000, 0xe000])];
|
|
92
|
+
case 3:
|
|
93
|
+
response = _a.sent();
|
|
94
|
+
return [3 /*break*/, 2];
|
|
95
|
+
case 4: return [2 /*return*/, response.slice(0, -2)]; // drop the status word (can only be 0x9000 at this point)
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
AppClient.prototype.getPubkey = function (display, pathElements) {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
102
|
+
var response;
|
|
103
|
+
return __generator(this, function (_a) {
|
|
104
|
+
switch (_a.label) {
|
|
105
|
+
case 0:
|
|
106
|
+
if (pathElements.length > 6) {
|
|
107
|
+
throw new Error("Path too long. At most 6 levels allowed.");
|
|
108
|
+
}
|
|
109
|
+
return [4 /*yield*/, this.makeRequest(BitcoinIns.GET_PUBKEY, Buffer.concat([
|
|
110
|
+
Buffer.of(display ? 1 : 0),
|
|
111
|
+
pathElementsToBuffer(pathElements),
|
|
112
|
+
]))];
|
|
113
|
+
case 1:
|
|
114
|
+
response = _a.sent();
|
|
115
|
+
return [2 /*return*/, response.toString("ascii")];
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
AppClient.prototype.getWalletAddress = function (walletPolicy, walletHMAC, change, addressIndex, display) {
|
|
121
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
122
|
+
var clientInterpreter, addressIndexBuffer, response;
|
|
123
|
+
return __generator(this, function (_a) {
|
|
124
|
+
switch (_a.label) {
|
|
125
|
+
case 0:
|
|
126
|
+
if (change !== 0 && change !== 1)
|
|
127
|
+
throw new Error("Change can only be 0 or 1");
|
|
128
|
+
if (addressIndex < 0 || !Number.isInteger(addressIndex))
|
|
129
|
+
throw new Error("Invalid address index");
|
|
130
|
+
if (walletHMAC != null && walletHMAC.length != 32) {
|
|
131
|
+
throw new Error("Invalid HMAC length");
|
|
132
|
+
}
|
|
133
|
+
clientInterpreter = new ClientCommandInterpreter();
|
|
134
|
+
clientInterpreter.addKnownList(walletPolicy.keys.map(function (k) { return Buffer.from(k, "ascii"); }));
|
|
135
|
+
clientInterpreter.addKnownPreimage(walletPolicy.serialize());
|
|
136
|
+
addressIndexBuffer = Buffer.alloc(4);
|
|
137
|
+
addressIndexBuffer.writeUInt32BE(addressIndex, 0);
|
|
138
|
+
return [4 /*yield*/, this.makeRequest(BitcoinIns.GET_WALLET_ADDRESS, Buffer.concat([
|
|
139
|
+
Buffer.of(display ? 1 : 0),
|
|
140
|
+
walletPolicy.getWalletId(),
|
|
141
|
+
walletHMAC || Buffer.alloc(32, 0),
|
|
142
|
+
Buffer.of(change),
|
|
143
|
+
addressIndexBuffer,
|
|
144
|
+
]), clientInterpreter)];
|
|
145
|
+
case 1:
|
|
146
|
+
response = _a.sent();
|
|
147
|
+
return [2 /*return*/, response.toString("ascii")];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
AppClient.prototype.signPsbt = function (psbt, walletPolicy, walletHMAC) {
|
|
153
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
154
|
+
var merkelizedPsbt, clientInterpreter, _a, _b, map, _c, _d, map, inputMapsRoot, outputMapsRoot, yielded, ret, yielded_1, yielded_1_1, inputAndSig;
|
|
155
|
+
var e_1, _e, e_2, _f, e_3, _g;
|
|
156
|
+
return __generator(this, function (_h) {
|
|
157
|
+
switch (_h.label) {
|
|
158
|
+
case 0:
|
|
159
|
+
merkelizedPsbt = new MerkelizedPsbt(psbt);
|
|
160
|
+
if (walletHMAC != null && walletHMAC.length != 32) {
|
|
161
|
+
throw new Error("Invalid HMAC length");
|
|
162
|
+
}
|
|
163
|
+
clientInterpreter = new ClientCommandInterpreter();
|
|
164
|
+
// prepare ClientCommandInterpreter
|
|
165
|
+
clientInterpreter.addKnownList(walletPolicy.keys.map(function (k) { return Buffer.from(k, "ascii"); }));
|
|
166
|
+
clientInterpreter.addKnownPreimage(walletPolicy.serialize());
|
|
167
|
+
clientInterpreter.addKnownMapping(merkelizedPsbt.globalMerkleMap);
|
|
168
|
+
try {
|
|
169
|
+
for (_a = __values(merkelizedPsbt.inputMerkleMaps), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
170
|
+
map = _b.value;
|
|
171
|
+
clientInterpreter.addKnownMapping(map);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
175
|
+
finally {
|
|
176
|
+
try {
|
|
177
|
+
if (_b && !_b.done && (_e = _a["return"])) _e.call(_a);
|
|
178
|
+
}
|
|
179
|
+
finally { if (e_1) throw e_1.error; }
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
for (_c = __values(merkelizedPsbt.outputMerkleMaps), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
183
|
+
map = _d.value;
|
|
184
|
+
clientInterpreter.addKnownMapping(map);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
188
|
+
finally {
|
|
189
|
+
try {
|
|
190
|
+
if (_d && !_d.done && (_f = _c["return"])) _f.call(_c);
|
|
191
|
+
}
|
|
192
|
+
finally { if (e_2) throw e_2.error; }
|
|
193
|
+
}
|
|
194
|
+
clientInterpreter.addKnownList(merkelizedPsbt.inputMapCommitments);
|
|
195
|
+
inputMapsRoot = new Merkle(merkelizedPsbt.inputMapCommitments.map(function (m) { return hashLeaf(m); })).getRoot();
|
|
196
|
+
clientInterpreter.addKnownList(merkelizedPsbt.outputMapCommitments);
|
|
197
|
+
outputMapsRoot = new Merkle(merkelizedPsbt.outputMapCommitments.map(function (m) { return hashLeaf(m); })).getRoot();
|
|
198
|
+
return [4 /*yield*/, this.makeRequest(BitcoinIns.SIGN_PSBT, Buffer.concat([
|
|
199
|
+
merkelizedPsbt.getGlobalKeysValuesRoot(),
|
|
200
|
+
createVarint(merkelizedPsbt.getGlobalInputCount()),
|
|
201
|
+
inputMapsRoot,
|
|
202
|
+
createVarint(merkelizedPsbt.getGlobalOutputCount()),
|
|
203
|
+
outputMapsRoot,
|
|
204
|
+
walletPolicy.getWalletId(),
|
|
205
|
+
walletHMAC || Buffer.alloc(32, 0),
|
|
206
|
+
]), clientInterpreter)];
|
|
207
|
+
case 1:
|
|
208
|
+
_h.sent();
|
|
209
|
+
yielded = clientInterpreter.getYielded();
|
|
210
|
+
ret = new Map();
|
|
211
|
+
try {
|
|
212
|
+
for (yielded_1 = __values(yielded), yielded_1_1 = yielded_1.next(); !yielded_1_1.done; yielded_1_1 = yielded_1.next()) {
|
|
213
|
+
inputAndSig = yielded_1_1.value;
|
|
214
|
+
ret[inputAndSig[0]] = inputAndSig.slice(1);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
218
|
+
finally {
|
|
219
|
+
try {
|
|
220
|
+
if (yielded_1_1 && !yielded_1_1.done && (_g = yielded_1["return"])) _g.call(yielded_1);
|
|
221
|
+
}
|
|
222
|
+
finally { if (e_3) throw e_3.error; }
|
|
223
|
+
}
|
|
224
|
+
return [2 /*return*/, ret];
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
AppClient.prototype.getMasterFingerprint = function () {
|
|
230
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
231
|
+
return __generator(this, function (_a) {
|
|
232
|
+
return [2 /*return*/, this.makeRequest(BitcoinIns.GET_MASTER_FINGERPRINT, Buffer.of())];
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
};
|
|
236
|
+
return AppClient;
|
|
237
|
+
}());
|
|
238
|
+
export { AppClient };
|
|
239
|
+
//# sourceMappingURL=appClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appClient.js","sourceRoot":"","sources":["../../src/newops/appClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Merkle } from "./merkle";
|
|
3
|
+
import { MerkleMap } from "./merkleMap";
|
|
4
|
+
declare enum ClientCommandCode {
|
|
5
|
+
YIELD = 16,
|
|
6
|
+
GET_PREIMAGE = 64,
|
|
7
|
+
GET_MERKLE_LEAF_PROOF = 65,
|
|
8
|
+
GET_MERKLE_LEAF_INDEX = 66,
|
|
9
|
+
GET_MORE_ELEMENTS = 160
|
|
10
|
+
}
|
|
11
|
+
declare abstract class ClientCommand {
|
|
12
|
+
abstract code: ClientCommandCode;
|
|
13
|
+
abstract execute(request: Buffer): Buffer;
|
|
14
|
+
}
|
|
15
|
+
export declare class YieldCommand extends ClientCommand {
|
|
16
|
+
private results;
|
|
17
|
+
code: ClientCommandCode;
|
|
18
|
+
constructor(results: Buffer[]);
|
|
19
|
+
execute(request: Buffer): Buffer;
|
|
20
|
+
}
|
|
21
|
+
export declare class GetPreimageCommand extends ClientCommand {
|
|
22
|
+
private known_preimages;
|
|
23
|
+
private queue;
|
|
24
|
+
code: ClientCommandCode;
|
|
25
|
+
constructor(known_preimages: Map<string, Buffer>, queue: Buffer[]);
|
|
26
|
+
execute(request: Buffer): Buffer;
|
|
27
|
+
}
|
|
28
|
+
export declare class GetMerkleLeafProofCommand extends ClientCommand {
|
|
29
|
+
private known_trees;
|
|
30
|
+
private queue;
|
|
31
|
+
code: ClientCommandCode;
|
|
32
|
+
constructor(known_trees: Map<string, Merkle>, queue: Buffer[]);
|
|
33
|
+
execute(request: Buffer): Buffer;
|
|
34
|
+
}
|
|
35
|
+
export declare class GetMerkleLeafIndexCommand extends ClientCommand {
|
|
36
|
+
private known_trees;
|
|
37
|
+
code: ClientCommandCode;
|
|
38
|
+
constructor(known_trees: Map<string, Merkle>);
|
|
39
|
+
execute(request: Buffer): Buffer;
|
|
40
|
+
}
|
|
41
|
+
export declare class GetMoreElementsCommand extends ClientCommand {
|
|
42
|
+
queue: Buffer[];
|
|
43
|
+
code: ClientCommandCode;
|
|
44
|
+
constructor(queue: Buffer[]);
|
|
45
|
+
execute(request: Buffer): Buffer;
|
|
46
|
+
}
|
|
47
|
+
export declare class ClientCommandInterpreter {
|
|
48
|
+
private roots;
|
|
49
|
+
private preimages;
|
|
50
|
+
private yielded;
|
|
51
|
+
private queue;
|
|
52
|
+
private commands;
|
|
53
|
+
constructor();
|
|
54
|
+
getYielded(): Buffer[];
|
|
55
|
+
addKnownPreimage(preimage: Buffer): void;
|
|
56
|
+
addKnownList(elements: Buffer[]): void;
|
|
57
|
+
addKnownMapping(mm: MerkleMap): void;
|
|
58
|
+
execute(request: Buffer): Buffer;
|
|
59
|
+
}
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=clientCommands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientCommands.d.ts","sourceRoot":"","sources":["../../src/newops/clientCommands.ts"],"names":[],"mappings":";AAEA,OAAO,EAAY,MAAM,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,aAAK,iBAAiB;IACpB,KAAK,KAAO;IACZ,YAAY,KAAO;IACnB,qBAAqB,KAAO;IAC5B,qBAAqB,KAAO;IAC5B,iBAAiB,MAAO;CACzB;AAED,uBAAe,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAC1C;AAED,qBAAa,YAAa,SAAQ,aAAa;IAC7C,OAAO,CAAC,OAAO,CAAW;IAE1B,IAAI,oBAA2B;gBAEnB,OAAO,EAAE,MAAM,EAAE;IAK7B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAIjC;AAED,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,KAAK,CAAW;IAExB,IAAI,oBAAkC;gBAE1B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;IAMjE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CA4CjC;AAED,qBAAa,yBAA0B,SAAQ,aAAa;IAC1D,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,KAAK,CAAW;IAExB,IAAI,oBAA2C;gBAEnC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;IAM7D,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAoDjC;AAED,qBAAa,yBAA0B,SAAQ,aAAa;IAC1D,OAAO,CAAC,WAAW,CAAsB;IAEzC,IAAI,oBAA2C;gBAEnC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAK5C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAuCjC;AAED,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,IAAI,oBAAuC;gBAE/B,KAAK,EAAE,MAAM,EAAE;IAK3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CA4BjC;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,SAAS,CAAkC;IAEnD,OAAO,CAAC,OAAO,CAAgB;IAE/B,OAAO,CAAC,KAAK,CAAgB;IAE7B,OAAO,CAAC,QAAQ,CAAoD;;IAmBpE,UAAU,IAAI,MAAM,EAAE;IAItB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIxC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAStC,eAAe,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAKpC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAajC"}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
var __extends = (this && this.__extends) || (function () {
|
|
2
|
+
var extendStatics = function (d, b) {
|
|
3
|
+
extendStatics = Object.setPrototypeOf ||
|
|
4
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
+
return extendStatics(d, b);
|
|
7
|
+
};
|
|
8
|
+
return function (d, b) {
|
|
9
|
+
if (typeof b !== "function" && b !== null)
|
|
10
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
+
extendStatics(d, b);
|
|
12
|
+
function __() { this.constructor = d; }
|
|
13
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
17
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
18
|
+
if (!m) return o;
|
|
19
|
+
var i = m.call(o), r, ar = [], e;
|
|
20
|
+
try {
|
|
21
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
22
|
+
}
|
|
23
|
+
catch (error) { e = { error: error }; }
|
|
24
|
+
finally {
|
|
25
|
+
try {
|
|
26
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
27
|
+
}
|
|
28
|
+
finally { if (e) throw e.error; }
|
|
29
|
+
}
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
33
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
34
|
+
if (ar || !(i in from)) {
|
|
35
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
36
|
+
ar[i] = from[i];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
40
|
+
};
|
|
41
|
+
var __values = (this && this.__values) || function(o) {
|
|
42
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
43
|
+
if (m) return m.call(o);
|
|
44
|
+
if (o && typeof o.length === "number") return {
|
|
45
|
+
next: function () {
|
|
46
|
+
if (o && i >= o.length) o = void 0;
|
|
47
|
+
return { value: o && o[i++], done: !o };
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
51
|
+
};
|
|
52
|
+
import { crypto } from "bitcoinjs-lib";
|
|
53
|
+
import { createVarint } from "../varint";
|
|
54
|
+
import { hashLeaf, Merkle } from "./merkle";
|
|
55
|
+
var ClientCommandCode;
|
|
56
|
+
(function (ClientCommandCode) {
|
|
57
|
+
ClientCommandCode[ClientCommandCode["YIELD"] = 16] = "YIELD";
|
|
58
|
+
ClientCommandCode[ClientCommandCode["GET_PREIMAGE"] = 64] = "GET_PREIMAGE";
|
|
59
|
+
ClientCommandCode[ClientCommandCode["GET_MERKLE_LEAF_PROOF"] = 65] = "GET_MERKLE_LEAF_PROOF";
|
|
60
|
+
ClientCommandCode[ClientCommandCode["GET_MERKLE_LEAF_INDEX"] = 66] = "GET_MERKLE_LEAF_INDEX";
|
|
61
|
+
ClientCommandCode[ClientCommandCode["GET_MORE_ELEMENTS"] = 160] = "GET_MORE_ELEMENTS";
|
|
62
|
+
})(ClientCommandCode || (ClientCommandCode = {}));
|
|
63
|
+
var ClientCommand = /** @class */ (function () {
|
|
64
|
+
function ClientCommand() {
|
|
65
|
+
}
|
|
66
|
+
return ClientCommand;
|
|
67
|
+
}());
|
|
68
|
+
var YieldCommand = /** @class */ (function (_super) {
|
|
69
|
+
__extends(YieldCommand, _super);
|
|
70
|
+
function YieldCommand(results) {
|
|
71
|
+
var _this = _super.call(this) || this;
|
|
72
|
+
_this.code = ClientCommandCode.YIELD;
|
|
73
|
+
_this.results = results;
|
|
74
|
+
return _this;
|
|
75
|
+
}
|
|
76
|
+
YieldCommand.prototype.execute = function (request) {
|
|
77
|
+
this.results.push(Buffer.from(request.subarray(1)));
|
|
78
|
+
return Buffer.from("");
|
|
79
|
+
};
|
|
80
|
+
return YieldCommand;
|
|
81
|
+
}(ClientCommand));
|
|
82
|
+
export { YieldCommand };
|
|
83
|
+
var GetPreimageCommand = /** @class */ (function (_super) {
|
|
84
|
+
__extends(GetPreimageCommand, _super);
|
|
85
|
+
function GetPreimageCommand(known_preimages, queue) {
|
|
86
|
+
var _this = _super.call(this) || this;
|
|
87
|
+
_this.code = ClientCommandCode.GET_PREIMAGE;
|
|
88
|
+
_this.known_preimages = known_preimages;
|
|
89
|
+
_this.queue = queue;
|
|
90
|
+
return _this;
|
|
91
|
+
}
|
|
92
|
+
GetPreimageCommand.prototype.execute = function (request) {
|
|
93
|
+
var req = request.subarray(1);
|
|
94
|
+
// we expect no more data to read
|
|
95
|
+
if (req.length != 1 + 32) {
|
|
96
|
+
throw new Error("Invalid request, unexpected trailing data");
|
|
97
|
+
}
|
|
98
|
+
if (req[0] != 0) {
|
|
99
|
+
throw new Error("Unsupported request, the first byte should be 0");
|
|
100
|
+
}
|
|
101
|
+
// read the hash
|
|
102
|
+
var hash = Buffer.alloc(32);
|
|
103
|
+
for (var i = 0; i < 32; i++) {
|
|
104
|
+
hash[i] = req[1 + i];
|
|
105
|
+
}
|
|
106
|
+
var req_hash_hex = hash.toString("hex");
|
|
107
|
+
var known_preimage = this.known_preimages.get(req_hash_hex);
|
|
108
|
+
if (known_preimage != undefined) {
|
|
109
|
+
var preimage_len_varint = createVarint(known_preimage.length);
|
|
110
|
+
// We can send at most 255 - len(preimage_len_out) - 1 bytes in a single message;
|
|
111
|
+
// the rest will be stored in the queue for GET_MORE_ELEMENTS
|
|
112
|
+
var max_payload_size = 255 - preimage_len_varint.length - 1;
|
|
113
|
+
var payload_size = Math.min(max_payload_size, known_preimage.length);
|
|
114
|
+
if (payload_size < known_preimage.length) {
|
|
115
|
+
for (var i = payload_size; i < known_preimage.length; i++) {
|
|
116
|
+
this.queue.push(Buffer.from([known_preimage[i]]));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return Buffer.concat([
|
|
120
|
+
preimage_len_varint,
|
|
121
|
+
Buffer.from([payload_size]),
|
|
122
|
+
known_preimage.subarray(0, payload_size),
|
|
123
|
+
]);
|
|
124
|
+
}
|
|
125
|
+
throw Error("Requested unknown preimage for: " + req_hash_hex);
|
|
126
|
+
};
|
|
127
|
+
return GetPreimageCommand;
|
|
128
|
+
}(ClientCommand));
|
|
129
|
+
export { GetPreimageCommand };
|
|
130
|
+
var GetMerkleLeafProofCommand = /** @class */ (function (_super) {
|
|
131
|
+
__extends(GetMerkleLeafProofCommand, _super);
|
|
132
|
+
function GetMerkleLeafProofCommand(known_trees, queue) {
|
|
133
|
+
var _this = _super.call(this) || this;
|
|
134
|
+
_this.code = ClientCommandCode.GET_MERKLE_LEAF_PROOF;
|
|
135
|
+
_this.known_trees = known_trees;
|
|
136
|
+
_this.queue = queue;
|
|
137
|
+
return _this;
|
|
138
|
+
}
|
|
139
|
+
GetMerkleLeafProofCommand.prototype.execute = function (request) {
|
|
140
|
+
var _a;
|
|
141
|
+
var req = request.subarray(1);
|
|
142
|
+
if (req.length != 32 + 4 + 4) {
|
|
143
|
+
throw new Error("Invalid request, unexpected trailing data");
|
|
144
|
+
}
|
|
145
|
+
// read the hash
|
|
146
|
+
var hash = Buffer.alloc(32);
|
|
147
|
+
for (var i = 0; i < 32; i++) {
|
|
148
|
+
hash[i] = req.readUInt8(i);
|
|
149
|
+
}
|
|
150
|
+
var hash_hex = hash.toString("hex");
|
|
151
|
+
var tree_size = req.readUInt32BE(32);
|
|
152
|
+
var leaf_index = req.readUInt32BE(32 + 4);
|
|
153
|
+
var mt = this.known_trees.get(hash_hex);
|
|
154
|
+
if (!mt) {
|
|
155
|
+
throw Error("Requested Merkle leaf proof for unknown tree: " + hash_hex);
|
|
156
|
+
}
|
|
157
|
+
if (leaf_index >= tree_size || mt.size() != tree_size) {
|
|
158
|
+
throw Error("Invalid index or tree size.");
|
|
159
|
+
}
|
|
160
|
+
if (this.queue.length != 0) {
|
|
161
|
+
throw Error("This command should not execute when the queue is not empty.");
|
|
162
|
+
}
|
|
163
|
+
var proof = mt.getProof(leaf_index);
|
|
164
|
+
var n_response_elements = Math.min(Math.floor((255 - 32 - 1 - 1) / 32), proof.length);
|
|
165
|
+
var n_leftover_elements = proof.length - n_response_elements;
|
|
166
|
+
// Add to the queue any proof elements that do not fit the response
|
|
167
|
+
if (n_leftover_elements > 0) {
|
|
168
|
+
(_a = this.queue).push.apply(_a, __spreadArray([], __read(proof.slice(-n_leftover_elements)), false));
|
|
169
|
+
}
|
|
170
|
+
return Buffer.concat(__spreadArray([
|
|
171
|
+
mt.getLeafHash(leaf_index),
|
|
172
|
+
Buffer.from([proof.length]),
|
|
173
|
+
Buffer.from([n_response_elements])
|
|
174
|
+
], __read(proof.slice(0, n_response_elements)), false));
|
|
175
|
+
};
|
|
176
|
+
return GetMerkleLeafProofCommand;
|
|
177
|
+
}(ClientCommand));
|
|
178
|
+
export { GetMerkleLeafProofCommand };
|
|
179
|
+
var GetMerkleLeafIndexCommand = /** @class */ (function (_super) {
|
|
180
|
+
__extends(GetMerkleLeafIndexCommand, _super);
|
|
181
|
+
function GetMerkleLeafIndexCommand(known_trees) {
|
|
182
|
+
var _this = _super.call(this) || this;
|
|
183
|
+
_this.code = ClientCommandCode.GET_MERKLE_LEAF_INDEX;
|
|
184
|
+
_this.known_trees = known_trees;
|
|
185
|
+
return _this;
|
|
186
|
+
}
|
|
187
|
+
GetMerkleLeafIndexCommand.prototype.execute = function (request) {
|
|
188
|
+
var req = request.subarray(1);
|
|
189
|
+
if (req.length != 32 + 32) {
|
|
190
|
+
throw new Error("Invalid request, unexpected trailing data");
|
|
191
|
+
}
|
|
192
|
+
// read the root hash
|
|
193
|
+
var root_hash = Buffer.alloc(32);
|
|
194
|
+
for (var i = 0; i < 32; i++) {
|
|
195
|
+
root_hash[i] = req.readUInt8(i);
|
|
196
|
+
}
|
|
197
|
+
var root_hash_hex = root_hash.toString("hex");
|
|
198
|
+
// read the leaf hash
|
|
199
|
+
var leef_hash = Buffer.alloc(32);
|
|
200
|
+
for (var i = 0; i < 32; i++) {
|
|
201
|
+
leef_hash[i] = req.readUInt8(32 + i);
|
|
202
|
+
}
|
|
203
|
+
var leef_hash_hex = leef_hash.toString("hex");
|
|
204
|
+
var mt = this.known_trees.get(root_hash_hex);
|
|
205
|
+
if (!mt) {
|
|
206
|
+
throw Error("Requested Merkle leaf index for unknown root: " + root_hash_hex);
|
|
207
|
+
}
|
|
208
|
+
var leaf_index = 0;
|
|
209
|
+
var found = 0;
|
|
210
|
+
for (var i = 0; i < mt.size(); i++) {
|
|
211
|
+
if (mt.getLeafHash(i).toString("hex") == leef_hash_hex) {
|
|
212
|
+
found = 1;
|
|
213
|
+
leaf_index = i;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return Buffer.concat([Buffer.from([found]), createVarint(leaf_index)]);
|
|
218
|
+
};
|
|
219
|
+
return GetMerkleLeafIndexCommand;
|
|
220
|
+
}(ClientCommand));
|
|
221
|
+
export { GetMerkleLeafIndexCommand };
|
|
222
|
+
var GetMoreElementsCommand = /** @class */ (function (_super) {
|
|
223
|
+
__extends(GetMoreElementsCommand, _super);
|
|
224
|
+
function GetMoreElementsCommand(queue) {
|
|
225
|
+
var _this = _super.call(this) || this;
|
|
226
|
+
_this.code = ClientCommandCode.GET_MORE_ELEMENTS;
|
|
227
|
+
_this.queue = queue;
|
|
228
|
+
return _this;
|
|
229
|
+
}
|
|
230
|
+
GetMoreElementsCommand.prototype.execute = function (request) {
|
|
231
|
+
if (request.length != 1) {
|
|
232
|
+
throw new Error("Invalid request, unexpected trailing data");
|
|
233
|
+
}
|
|
234
|
+
if (this.queue.length === 0) {
|
|
235
|
+
throw new Error("No elements to get");
|
|
236
|
+
}
|
|
237
|
+
// all elements should have the same length
|
|
238
|
+
var element_len = this.queue[0].length;
|
|
239
|
+
if (this.queue.some(function (el) { return el.length != element_len; })) {
|
|
240
|
+
throw new Error("The queue contains elements with different byte length, which is not expected");
|
|
241
|
+
}
|
|
242
|
+
var max_elements = Math.floor(253 / element_len);
|
|
243
|
+
var n_returned_elements = Math.min(max_elements, this.queue.length);
|
|
244
|
+
var returned_elements = this.queue.splice(0, n_returned_elements);
|
|
245
|
+
return Buffer.concat(__spreadArray([
|
|
246
|
+
Buffer.from([n_returned_elements]),
|
|
247
|
+
Buffer.from([element_len])
|
|
248
|
+
], __read(returned_elements), false));
|
|
249
|
+
};
|
|
250
|
+
return GetMoreElementsCommand;
|
|
251
|
+
}(ClientCommand));
|
|
252
|
+
export { GetMoreElementsCommand };
|
|
253
|
+
var ClientCommandInterpreter = /** @class */ (function () {
|
|
254
|
+
function ClientCommandInterpreter() {
|
|
255
|
+
var e_1, _a;
|
|
256
|
+
this.roots = new Map();
|
|
257
|
+
this.preimages = new Map();
|
|
258
|
+
this.yielded = [];
|
|
259
|
+
this.queue = [];
|
|
260
|
+
this.commands = new Map();
|
|
261
|
+
var commands = [
|
|
262
|
+
new YieldCommand(this.yielded),
|
|
263
|
+
new GetPreimageCommand(this.preimages, this.queue),
|
|
264
|
+
new GetMerkleLeafIndexCommand(this.roots),
|
|
265
|
+
new GetMerkleLeafProofCommand(this.roots, this.queue),
|
|
266
|
+
new GetMoreElementsCommand(this.queue),
|
|
267
|
+
];
|
|
268
|
+
try {
|
|
269
|
+
for (var commands_1 = __values(commands), commands_1_1 = commands_1.next(); !commands_1_1.done; commands_1_1 = commands_1.next()) {
|
|
270
|
+
var cmd = commands_1_1.value;
|
|
271
|
+
if (this.commands.has(cmd.code)) {
|
|
272
|
+
throw new Error("Multiple commands with code " + cmd.code);
|
|
273
|
+
}
|
|
274
|
+
this.commands.set(cmd.code, cmd);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
278
|
+
finally {
|
|
279
|
+
try {
|
|
280
|
+
if (commands_1_1 && !commands_1_1.done && (_a = commands_1["return"])) _a.call(commands_1);
|
|
281
|
+
}
|
|
282
|
+
finally { if (e_1) throw e_1.error; }
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
ClientCommandInterpreter.prototype.getYielded = function () {
|
|
286
|
+
return this.yielded;
|
|
287
|
+
};
|
|
288
|
+
ClientCommandInterpreter.prototype.addKnownPreimage = function (preimage) {
|
|
289
|
+
this.preimages.set(crypto.sha256(preimage).toString("hex"), preimage);
|
|
290
|
+
};
|
|
291
|
+
ClientCommandInterpreter.prototype.addKnownList = function (elements) {
|
|
292
|
+
var e_2, _a;
|
|
293
|
+
try {
|
|
294
|
+
for (var elements_1 = __values(elements), elements_1_1 = elements_1.next(); !elements_1_1.done; elements_1_1 = elements_1.next()) {
|
|
295
|
+
var el = elements_1_1.value;
|
|
296
|
+
var preimage = Buffer.concat([Buffer.from([0]), el]);
|
|
297
|
+
this.addKnownPreimage(preimage);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
301
|
+
finally {
|
|
302
|
+
try {
|
|
303
|
+
if (elements_1_1 && !elements_1_1.done && (_a = elements_1["return"])) _a.call(elements_1);
|
|
304
|
+
}
|
|
305
|
+
finally { if (e_2) throw e_2.error; }
|
|
306
|
+
}
|
|
307
|
+
var mt = new Merkle(elements.map(function (el) { return hashLeaf(el); }));
|
|
308
|
+
this.roots.set(mt.getRoot().toString("hex"), mt);
|
|
309
|
+
};
|
|
310
|
+
ClientCommandInterpreter.prototype.addKnownMapping = function (mm) {
|
|
311
|
+
this.addKnownList(mm.keys);
|
|
312
|
+
this.addKnownList(mm.values);
|
|
313
|
+
};
|
|
314
|
+
ClientCommandInterpreter.prototype.execute = function (request) {
|
|
315
|
+
if (request.length == 0) {
|
|
316
|
+
throw new Error("Unexpected empty command");
|
|
317
|
+
}
|
|
318
|
+
var cmdCode = request[0];
|
|
319
|
+
var cmd = this.commands.get(cmdCode);
|
|
320
|
+
if (!cmd) {
|
|
321
|
+
throw new Error("Unexpected command code " + cmdCode);
|
|
322
|
+
}
|
|
323
|
+
return cmd.execute(request);
|
|
324
|
+
};
|
|
325
|
+
return ClientCommandInterpreter;
|
|
326
|
+
}());
|
|
327
|
+
export { ClientCommandInterpreter };
|
|
328
|
+
//# 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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"}
|