@typeberry/lib 0.10.0-5a5e4ab → 0.10.0-9e3af22

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.
Files changed (110) hide show
  1. package/package.json +3 -3
  2. package/packages/configs/index.d.ts +9 -0
  3. package/packages/configs/index.d.ts.map +1 -1
  4. package/packages/configs/typeberry-default.json +4 -1
  5. package/packages/configs/typeberry-dev-full.json +3 -0
  6. package/packages/configs/typeberry-dev-tiny.json +3 -0
  7. package/packages/jam/config-node/index.d.ts +1 -0
  8. package/packages/jam/config-node/index.d.ts.map +1 -1
  9. package/packages/jam/config-node/index.js +1 -0
  10. package/packages/jam/config-node/node-config.d.ts +5 -1
  11. package/packages/jam/config-node/node-config.d.ts.map +1 -1
  12. package/packages/jam/config-node/node-config.js +9 -3
  13. package/packages/jam/config-node/node-config.test.js +9 -0
  14. package/packages/jam/config-node/rpc.d.ts +11 -0
  15. package/packages/jam/config-node/rpc.d.ts.map +1 -0
  16. package/packages/jam/config-node/rpc.js +16 -0
  17. package/packages/jam/node/jam-config.d.ts +5 -1
  18. package/packages/jam/node/jam-config.d.ts.map +1 -1
  19. package/packages/jam/node/jam-config.js +6 -2
  20. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  21. package/packages/jam/node/main-fuzz.js +30 -15
  22. package/packages/jam/node/main-importer.d.ts.map +1 -1
  23. package/packages/jam/node/main-importer.js +1 -1
  24. package/packages/jam/rpc/index.d.ts +3 -0
  25. package/packages/jam/rpc/index.d.ts.map +1 -0
  26. package/packages/jam/rpc/index.js +2 -0
  27. package/packages/jam/rpc/src/handlers/best-block.d.ts +6 -0
  28. package/packages/jam/rpc/src/handlers/best-block.d.ts.map +1 -0
  29. package/packages/jam/rpc/src/handlers/best-block.js +15 -0
  30. package/packages/jam/rpc/src/handlers/finalized-block.d.ts +6 -0
  31. package/packages/jam/rpc/src/handlers/finalized-block.d.ts.map +1 -0
  32. package/packages/jam/rpc/src/handlers/finalized-block.js +7 -0
  33. package/packages/jam/rpc/src/handlers/list-services.d.ts +6 -0
  34. package/packages/jam/rpc/src/handlers/list-services.d.ts.map +1 -0
  35. package/packages/jam/rpc/src/handlers/list-services.js +15 -0
  36. package/packages/jam/rpc/src/handlers/not-implemented.d.ts +4 -0
  37. package/packages/jam/rpc/src/handlers/not-implemented.d.ts.map +1 -0
  38. package/packages/jam/rpc/src/handlers/not-implemented.js +4 -0
  39. package/packages/jam/rpc/src/handlers/parameters.d.ts +7 -0
  40. package/packages/jam/rpc/src/handlers/parameters.d.ts.map +1 -0
  41. package/packages/jam/rpc/src/handlers/parameters.js +53 -0
  42. package/packages/jam/rpc/src/handlers/parent.d.ts +6 -0
  43. package/packages/jam/rpc/src/handlers/parent.d.ts.map +1 -0
  44. package/packages/jam/rpc/src/handlers/parent.js +25 -0
  45. package/packages/jam/rpc/src/handlers/service-data.d.ts +6 -0
  46. package/packages/jam/rpc/src/handlers/service-data.d.ts.map +1 -0
  47. package/packages/jam/rpc/src/handlers/service-data.js +21 -0
  48. package/packages/jam/rpc/src/handlers/service-preimage.d.ts +6 -0
  49. package/packages/jam/rpc/src/handlers/service-preimage.d.ts.map +1 -0
  50. package/packages/jam/rpc/src/handlers/service-preimage.js +23 -0
  51. package/packages/jam/rpc/src/handlers/service-request.d.ts +6 -0
  52. package/packages/jam/rpc/src/handlers/service-request.d.ts.map +1 -0
  53. package/packages/jam/rpc/src/handlers/service-request.js +23 -0
  54. package/packages/jam/rpc/src/handlers/service-value.d.ts +6 -0
  55. package/packages/jam/rpc/src/handlers/service-value.d.ts.map +1 -0
  56. package/packages/jam/rpc/src/handlers/service-value.js +23 -0
  57. package/packages/jam/rpc/src/handlers/state-root.d.ts +6 -0
  58. package/packages/jam/rpc/src/handlers/state-root.d.ts.map +1 -0
  59. package/packages/jam/rpc/src/handlers/state-root.js +14 -0
  60. package/packages/jam/rpc/src/handlers/statistics.d.ts +6 -0
  61. package/packages/jam/rpc/src/handlers/statistics.d.ts.map +1 -0
  62. package/packages/jam/rpc/src/handlers/statistics.js +16 -0
  63. package/packages/jam/rpc/src/handlers/subscribe-best-block.d.ts +6 -0
  64. package/packages/jam/rpc/src/handlers/subscribe-best-block.d.ts.map +1 -0
  65. package/packages/jam/rpc/src/handlers/subscribe-best-block.js +8 -0
  66. package/packages/jam/rpc/src/handlers/subscribe-finalized-block.d.ts +6 -0
  67. package/packages/jam/rpc/src/handlers/subscribe-finalized-block.d.ts.map +1 -0
  68. package/packages/jam/rpc/src/handlers/subscribe-finalized-block.js +8 -0
  69. package/packages/jam/rpc/src/handlers/subscribe-service-data.d.ts +6 -0
  70. package/packages/jam/rpc/src/handlers/subscribe-service-data.d.ts.map +1 -0
  71. package/packages/jam/rpc/src/handlers/subscribe-service-data.js +13 -0
  72. package/packages/jam/rpc/src/handlers/subscribe-service-preimage.d.ts +6 -0
  73. package/packages/jam/rpc/src/handlers/subscribe-service-preimage.d.ts.map +1 -0
  74. package/packages/jam/rpc/src/handlers/subscribe-service-preimage.js +13 -0
  75. package/packages/jam/rpc/src/handlers/subscribe-service-request.d.ts +6 -0
  76. package/packages/jam/rpc/src/handlers/subscribe-service-request.d.ts.map +1 -0
  77. package/packages/jam/rpc/src/handlers/subscribe-service-request.js +13 -0
  78. package/packages/jam/rpc/src/handlers/subscribe-service-value.d.ts +6 -0
  79. package/packages/jam/rpc/src/handlers/subscribe-service-value.d.ts.map +1 -0
  80. package/packages/jam/rpc/src/handlers/subscribe-service-value.js +13 -0
  81. package/packages/jam/rpc/src/handlers/subscribe-statistics.d.ts +6 -0
  82. package/packages/jam/rpc/src/handlers/subscribe-statistics.d.ts.map +1 -0
  83. package/packages/jam/rpc/src/handlers/subscribe-statistics.js +13 -0
  84. package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.d.ts +8 -0
  85. package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.d.ts.map +1 -0
  86. package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.js +68 -0
  87. package/packages/jam/rpc/src/handlers/unsubscribe.d.ts +4 -0
  88. package/packages/jam/rpc/src/handlers/unsubscribe.d.ts.map +1 -0
  89. package/packages/jam/rpc/src/handlers/unsubscribe.js +3 -0
  90. package/packages/jam/rpc/src/handlers.d.ts +3 -0
  91. package/packages/jam/rpc/src/handlers.d.ts.map +1 -0
  92. package/packages/jam/rpc/src/handlers.js +60 -0
  93. package/packages/jam/rpc/src/server.d.ts +31 -0
  94. package/packages/jam/rpc/src/server.d.ts.map +1 -0
  95. package/packages/jam/rpc/src/server.js +179 -0
  96. package/packages/jam/rpc/src/subscription-manager.d.ts +20 -0
  97. package/packages/jam/rpc/src/subscription-manager.d.ts.map +1 -0
  98. package/packages/jam/rpc/src/subscription-manager.js +74 -0
  99. package/packages/jam/rpc/test/e2e-server.d.ts +3 -0
  100. package/packages/jam/rpc/test/e2e-server.d.ts.map +1 -0
  101. package/packages/jam/rpc/test/e2e-server.js +32 -0
  102. package/packages/jam/rpc/test/e2e-setup.d.ts +2 -0
  103. package/packages/jam/rpc/test/e2e-setup.d.ts.map +1 -0
  104. package/packages/jam/rpc/test/e2e-setup.js +126 -0
  105. package/packages/jam/rpc/test/e2e.d.ts +2 -0
  106. package/packages/jam/rpc/test/e2e.d.ts.map +1 -0
  107. package/packages/jam/rpc/test/e2e.js +326 -0
  108. package/packages/workers/importer/main.d.ts +2 -0
  109. package/packages/workers/importer/main.d.ts.map +1 -1
  110. package/packages/workers/importer/main.js +1 -1
@@ -0,0 +1,326 @@
1
+ import assert from "node:assert";
2
+ import { after, before, describe, it } from "node:test";
3
+ import { RpcClient } from "#@typeberry/rpc-client";
4
+ import { JSON_RPC_VERSION, validation } from "#@typeberry/rpc-validation";
5
+ import { startTestRpcServer } from "./e2e-server.js";
6
+ function hexToUint8Array(hex) {
7
+ return new Uint8Array(Buffer.from(hex, "hex"));
8
+ }
9
+ describe("JSON RPC Client-Server E2E", { concurrency: false }, () => {
10
+ let client;
11
+ let server;
12
+ before(async () => {
13
+ server = await startTestRpcServer(`${import.meta.dirname}/e2e.config.json`);
14
+ client = RpcClient.new("ws://localhost:19800");
15
+ await client.waitForConnection();
16
+ });
17
+ after(async () => {
18
+ client.close();
19
+ await server.close();
20
+ });
21
+ it("gets best block", async () => {
22
+ const result = await client.call("bestBlock");
23
+ assert.deepStrictEqual(result, {
24
+ header_hash: hexToUint8Array("9eb96a960cb553d5b27a63e6df4bf422c2781d8a013d9dcfbe32a30ef25afd52"),
25
+ slot: 100,
26
+ });
27
+ });
28
+ it("gets finalized block", async () => {
29
+ // todo [seko] we're temporarily returning the best instead of finalized block
30
+ const result = await client.call("finalizedBlock");
31
+ assert.deepStrictEqual(result, {
32
+ header_hash: hexToUint8Array("9eb96a960cb553d5b27a63e6df4bf422c2781d8a013d9dcfbe32a30ef25afd52"),
33
+ slot: 100,
34
+ });
35
+ });
36
+ it("gets parent block", async () => {
37
+ const bestBlock = await client.call("bestBlock");
38
+ const result = await client.call("parent", [bestBlock.header_hash]);
39
+ assert.deepStrictEqual(result, {
40
+ header_hash: hexToUint8Array("958ff3540f9641de3b7e1d89272c5979c0d7071817d9f5cd691d4f7fdb97e4d2"),
41
+ slot: 99,
42
+ });
43
+ });
44
+ it("throws an error when a non-existing block hash is provided", async () => {
45
+ await assert.rejects(async () => {
46
+ await client.call("parent", [
47
+ hexToUint8Array("1111111111111111111111111111111111111111111111111111111111111111"),
48
+ ]);
49
+ }, {
50
+ code: 1,
51
+ message: "Block unavailable: 0x1111111111111111111111111111111111111111111111111111111111111111",
52
+ data: "ERERERERERERERERERERERERERERERERERERERERERE=",
53
+ });
54
+ });
55
+ it("gets state root", async () => {
56
+ const bestBlock = await client.call("bestBlock");
57
+ const result = await client.call("stateRoot", [bestBlock.header_hash]);
58
+ assert.deepStrictEqual(result, hexToUint8Array("a685a3a56825043f0de06709e023d8fd83a8a311f3fe20b47fdd0f93706d1323"));
59
+ });
60
+ it("gets statistics", async () => {
61
+ const bestBlock = await client.call("bestBlock");
62
+ const result = await client.call("statistics", [bestBlock.header_hash]);
63
+ assert.deepStrictEqual(result, hexToUint8Array("01000000000000000000000000000000020000000500000002000000000000000000000000000000020000000500000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000500000001000000000000000000000000000000000000000300000001000000000000000000000000000000020000000300000002000000000000000000000000000000040000000a00000002000000000000000000000000000000060000000b00000003000000000000000000000000000000060000000c00000003000000000000000000000000000000040000000c00000001000000000000000000000000000000040000000a00000001000000000000000000000000000000060000000a000000000300128519008be9c30c0500000000000000000100000000000004c30c0500128519000000"));
64
+ });
65
+ it("gets service data", async () => {
66
+ const bestBlock = await client.call("bestBlock");
67
+ const result = await client.call("serviceData", [bestBlock.header_hash, 0]);
68
+ assert.deepStrictEqual(result, hexToUint8Array("d1b097b4410b3a63446d7c57d093972a9744fcd2d74f4a5e2ec163610e6d6327ffffffffffffffff0a000000000000000a000000000000007c20020000000000ffffffffffffffff1a000000000000006200000000000000"));
69
+ });
70
+ it("gets service value", async () => {
71
+ const bestBlock = await client.call("bestBlock");
72
+ const result = await client.call("serviceValue", [
73
+ bestBlock.header_hash,
74
+ 1,
75
+ hexToUint8Array("0242a295a93ac7f3ba564f0be83089a647a9bd3861798cf9fbffae0daa2ce1ff"),
76
+ ]);
77
+ assert.deepStrictEqual(result, null);
78
+ });
79
+ // The preimage hash comes from the post state of block 100 (can be extracted using the state viewer tool)
80
+ const testPreimageHash = hexToUint8Array("d1b097b4410b3a63446d7c57d093972a9744fcd2d74f4a5e2ec163610e6d6327");
81
+ it("gets service preimage", async () => {
82
+ const bestBlock = await client.call("bestBlock");
83
+ const data = await client.call("servicePreimage", [bestBlock.header_hash, 0, testPreimageHash]);
84
+ assert.deepStrictEqual(data?.length, 137056);
85
+ });
86
+ it("gets service request", async () => {
87
+ const bestBlock = await client.call("bestBlock");
88
+ const result = await client.call("serviceRequest", [bestBlock.header_hash, 0, testPreimageHash, 137056]);
89
+ assert.deepStrictEqual(result, [0]);
90
+ });
91
+ it("lists services", async () => {
92
+ const bestBlock = await client.call("bestBlock");
93
+ const result = await client.call("listServices", [bestBlock.header_hash]);
94
+ // TODO [ToDr] We should probably do a little bit better in terms of
95
+ // tracking recently active services. Some options for the future:
96
+ // 1. Use InMemoryDb for RPC E2E tests.
97
+ // 2. Store additional service metadata in LMDB
98
+ // 3. Cache the state object, so that accessed services would be returned here.
99
+ assert.deepStrictEqual(result, []);
100
+ });
101
+ it("subscribes and unsubscribes to/from service preimage", async () => {
102
+ const subscription = await client.subscribe("subscribeServicePreimage", [0, testPreimageHash, false]);
103
+ try {
104
+ const data = await new Promise((resolve) => subscription.once("data", (result) => resolve(result)));
105
+ assert.deepStrictEqual(data.length, 182744);
106
+ }
107
+ finally {
108
+ await subscription.unsubscribe();
109
+ }
110
+ });
111
+ it("client handles errors when subscription is being requested", async () => {
112
+ await assert.rejects(async () => client.subscribe("subscribeServicePreimage", [
113
+ 0,
114
+ hexToUint8Array("c16326432b5b3213dfd1609495e13c6b276cb474d679645337e5c2c09f19b53c3d"), // invalid preimage hash
115
+ false,
116
+ ]));
117
+ });
118
+ it("client handles errors produced by the subscription", async (test) => {
119
+ const handlers = server.getHandlers();
120
+ const originalHandler = handlers.subscribeBestBlock;
121
+ handlers.subscribeBestBlock = async (params, { subscription }) => {
122
+ return subscription.subscribe("subscribeBestBlock", () => {
123
+ throw new Error("Forced error for bestBlock");
124
+ }, validation.schemas.bestBlock.output, params);
125
+ };
126
+ test.after(() => {
127
+ handlers.subscribeBestBlock = originalHandler;
128
+ });
129
+ return new Promise((resolve, reject) => {
130
+ client.subscribe("subscribeBestBlock", []).then((subscription) => {
131
+ subscription.on("data", async () => {
132
+ await subscription.unsubscribe();
133
+ reject(new Error("Subscription callback should not be called."));
134
+ });
135
+ subscription.on("error", async (error) => {
136
+ assert.strictEqual(error, "Error: Forced error for bestBlock");
137
+ await subscription.unsubscribe();
138
+ resolve();
139
+ });
140
+ });
141
+ });
142
+ });
143
+ it("server raises an error for unknown method", async () => {
144
+ const socket = client.getSocket();
145
+ socket.send(JSON.stringify({
146
+ jsonrpc: JSON_RPC_VERSION,
147
+ method: "unknownMethod",
148
+ params: [],
149
+ id: 1,
150
+ }));
151
+ const message = await new Promise((resolve) => {
152
+ socket.on("message", (data) => {
153
+ resolve(data.toString());
154
+ });
155
+ });
156
+ assert.deepStrictEqual(JSON.parse(message), {
157
+ jsonrpc: "2.0",
158
+ error: { code: -32601, message: "Method not found: unknownMethod" },
159
+ id: 1,
160
+ });
161
+ });
162
+ it("server raises an error when more than necessary parameters are supplied", async () => {
163
+ const bestBlock = await client.call("bestBlock");
164
+ const socket = client.getSocket();
165
+ socket.send(JSON.stringify({
166
+ jsonrpc: JSON_RPC_VERSION,
167
+ method: "stateRoot",
168
+ params: [Buffer.from(bestBlock.header_hash).toString("base64"), 0],
169
+ id: 1,
170
+ }));
171
+ const message = await new Promise((resolve) => {
172
+ socket.on("message", (data) => {
173
+ resolve(data.toString());
174
+ });
175
+ });
176
+ assert.deepStrictEqual(JSON.parse(message), {
177
+ jsonrpc: "2.0",
178
+ error: { code: -32602, message: "Invalid params:\n[] Too big: expected array to have <1 items" },
179
+ id: 1,
180
+ });
181
+ });
182
+ it("server raises an error when a parameter of the wrong type is supplied", async () => {
183
+ const bestBlock = await client.call("bestBlock");
184
+ const socket = client.getSocket();
185
+ socket.send(JSON.stringify({
186
+ jsonrpc: JSON_RPC_VERSION,
187
+ method: "serviceData",
188
+ params: [Buffer.from(bestBlock.header_hash).toString("base64"), "wrong argument"],
189
+ id: 1,
190
+ }));
191
+ const message = await new Promise((resolve) => {
192
+ socket.on("message", (data) => {
193
+ resolve(data.toString());
194
+ });
195
+ });
196
+ assert.deepStrictEqual(JSON.parse(message), {
197
+ jsonrpc: "2.0",
198
+ error: { code: -32602, message: "Invalid params:\n[1] Invalid input: expected number, received string" },
199
+ id: 1,
200
+ });
201
+ });
202
+ it("server raises an error when no parameters are supplied (even though necessary)", async () => {
203
+ const socket = client.getSocket();
204
+ socket.send(JSON.stringify({
205
+ jsonrpc: JSON_RPC_VERSION,
206
+ method: "stateRoot",
207
+ id: 1,
208
+ }));
209
+ const message = await new Promise((resolve) => {
210
+ socket.on("message", (data) => {
211
+ resolve(data.toString());
212
+ });
213
+ });
214
+ assert.deepStrictEqual(JSON.parse(message), {
215
+ jsonrpc: "2.0",
216
+ error: { code: -32602, message: "Invalid params:\n[0] Invalid input: expected string, received undefined" },
217
+ id: 1,
218
+ });
219
+ });
220
+ it("server raises an error when some (not all) parameters are missing", async () => {
221
+ const bestBlock = await client.call("bestBlock");
222
+ const socket = client.getSocket();
223
+ socket.send(JSON.stringify({
224
+ jsonrpc: JSON_RPC_VERSION,
225
+ method: "serviceData",
226
+ params: [Buffer.from(bestBlock.header_hash).toString("base64")],
227
+ id: 1,
228
+ }));
229
+ const message = await new Promise((resolve) => {
230
+ socket.on("message", (data) => {
231
+ resolve(data.toString());
232
+ });
233
+ });
234
+ assert.deepStrictEqual(JSON.parse(message), {
235
+ jsonrpc: "2.0",
236
+ error: { code: -32602, message: "Invalid params:\n[1] Invalid input: expected number, received undefined" },
237
+ id: 1,
238
+ });
239
+ });
240
+ it("server raises an error when an unimplemented method is called", async () => {
241
+ const socket = client.getSocket();
242
+ socket.send(JSON.stringify({
243
+ jsonrpc: JSON_RPC_VERSION,
244
+ method: "submitPreimage",
245
+ params: [],
246
+ id: 1,
247
+ }));
248
+ const message = await new Promise((resolve) => {
249
+ socket.on("message", (data) => {
250
+ resolve(data.toString());
251
+ });
252
+ });
253
+ assert.deepStrictEqual(JSON.parse(message), {
254
+ jsonrpc: "2.0",
255
+ error: { code: 0, message: "Method not implemented" },
256
+ id: 1,
257
+ });
258
+ });
259
+ it("server raises an error when a non-base64 string is provided as hash", async () => {
260
+ const socket = client.getSocket();
261
+ socket.send(JSON.stringify({
262
+ jsonrpc: JSON_RPC_VERSION,
263
+ method: "parent",
264
+ params: ["ThisIsNotBase64!!"],
265
+ id: 1,
266
+ }));
267
+ const message = await new Promise((resolve) => {
268
+ socket.on("message", (data) => {
269
+ resolve(data.toString());
270
+ });
271
+ });
272
+ assert.deepStrictEqual(JSON.parse(message), {
273
+ jsonrpc: "2.0",
274
+ error: { code: -32602, message: "Invalid params:\n[0] Invalid base64-encoded string" },
275
+ id: 1,
276
+ });
277
+ });
278
+ it("server gracefully handles malformed requests", async () => {
279
+ const socket = client.getSocket();
280
+ socket.send(JSON.stringify({ foo: "bar" }));
281
+ const message = await new Promise((resolve) => {
282
+ socket.on("message", (data) => {
283
+ resolve(data.toString());
284
+ });
285
+ });
286
+ assert.deepStrictEqual(JSON.parse(message), {
287
+ jsonrpc: "2.0",
288
+ error: { code: -32600, message: 'Invalid request: {"foo":"bar"}' },
289
+ id: null,
290
+ });
291
+ });
292
+ it("server handles batch requests", async () => {
293
+ const socket = client.getSocket();
294
+ const bestBlock = await client.call("bestBlock");
295
+ socket.send(JSON.stringify([
296
+ { foo: "bar" }, // malformed request (error expected)
297
+ {
298
+ jsonrpc: JSON_RPC_VERSION,
299
+ method: "notificationTest",
300
+ params: [],
301
+ }, // notification (no response expected, even if causes error)
302
+ {
303
+ jsonrpc: JSON_RPC_VERSION,
304
+ method: "bestBlock",
305
+ params: [],
306
+ id: 1,
307
+ }, // correct request
308
+ ]));
309
+ const message = await new Promise((resolve) => {
310
+ socket.on("message", (data) => {
311
+ resolve(data.toString());
312
+ });
313
+ });
314
+ assert.deepStrictEqual(JSON.parse(message), [
315
+ { jsonrpc: "2.0", error: { code: -32600, message: 'Invalid request: {"foo":"bar"}' }, id: null },
316
+ {
317
+ jsonrpc: "2.0",
318
+ result: {
319
+ ...bestBlock,
320
+ header_hash: Buffer.from(bestBlock.header_hash).toString("base64"),
321
+ },
322
+ id: 1,
323
+ },
324
+ ]);
325
+ });
326
+ });
@@ -6,6 +6,8 @@ import type { ImporterConfig, ImporterInternal } from "./protocol.js";
6
6
  export type Config = WorkerConfig<ImporterConfig, BlocksDb, StatesDb<SerializedState<LeafDb>>>;
7
7
  export type CreateImporterOptions = {
8
8
  initGenesisFromAncestry?: boolean;
9
+ /** Provide an already-open database to reuse instead of opening a new one. */
10
+ db?: Awaited<ReturnType<Config["openDatabase"]>>;
9
11
  };
10
12
  export declare function createImporter(config: Config, options?: CreateImporterOptions): Promise<{
11
13
  importer: Importer;
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtE,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAE/F,MAAM,MAAM,qBAAqB,GAAG;IAClC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC;IACT,QAAQ,EAAE,QAAQ,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;CACjD,CAAC,CA8BD;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,iBAwCjE"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtE,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAE/F,MAAM,MAAM,qBAAqB,GAAG;IAClC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,8EAA8E;IAC9E,EAAE,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;CAClD,CAAC;AAEF,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC;IACT,QAAQ,EAAE,QAAQ,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;CACjD,CAAC,CA8BD;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,iBAwCjE"}
@@ -10,7 +10,7 @@ const keccakHasher = keccak.KeccakHasher.create();
10
10
  const blake2b = Blake2b.createHasher();
11
11
  export async function createImporter(config, options = {}) {
12
12
  const chainSpec = config.chainSpec;
13
- const db = await config.openDatabase({ readonly: false });
13
+ const db = options.db ?? (await config.openDatabase({ readonly: false }));
14
14
  const pvm = config.workerParams.pvm;
15
15
  const blocks = db.getBlocksDb();
16
16
  const states = db.getStatesDb();