@typeberry/lib 0.10.0 → 0.11.0-411c828

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 (161) hide show
  1. package/package.json +3 -5
  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 -11
  11. package/packages/jam/config-node/node-config.d.ts.map +1 -1
  12. package/packages/jam/config-node/node-config.js +9 -25
  13. package/packages/jam/config-node/node-config.test.js +11 -6
  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/database/states.d.ts +1 -8
  18. package/packages/jam/database/states.d.ts.map +1 -1
  19. package/packages/jam/database/value-refs.d.ts +4 -5
  20. package/packages/jam/database/value-refs.d.ts.map +1 -1
  21. package/packages/jam/database-fjall/blocks.d.ts +1 -0
  22. package/packages/jam/database-fjall/blocks.d.ts.map +1 -1
  23. package/packages/jam/database-fjall/blocks.js +8 -3
  24. package/packages/jam/database-fjall/hybrid-states.d.ts +10 -4
  25. package/packages/jam/database-fjall/hybrid-states.d.ts.map +1 -1
  26. package/packages/jam/database-fjall/hybrid-states.js +22 -6
  27. package/packages/jam/database-fjall/root.d.ts +2 -0
  28. package/packages/jam/database-fjall/root.d.ts.map +1 -1
  29. package/packages/jam/database-fjall/root.js +8 -1
  30. package/packages/jam/database-fjall/root.test.d.ts +2 -0
  31. package/packages/jam/database-fjall/root.test.d.ts.map +1 -0
  32. package/packages/jam/database-fjall/root.test.js +23 -0
  33. package/packages/jam/database-fjall/states.d.ts +1 -0
  34. package/packages/jam/database-fjall/states.d.ts.map +1 -1
  35. package/packages/jam/database-fjall/states.js +6 -3
  36. package/packages/jam/node/export.d.ts.map +1 -1
  37. package/packages/jam/node/export.js +8 -17
  38. package/packages/jam/node/jam-config.d.ts +5 -1
  39. package/packages/jam/node/jam-config.d.ts.map +1 -1
  40. package/packages/jam/node/jam-config.js +6 -2
  41. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  42. package/packages/jam/node/main-fuzz.js +59 -39
  43. package/packages/jam/node/main-importer.d.ts +6 -11
  44. package/packages/jam/node/main-importer.d.ts.map +1 -1
  45. package/packages/jam/node/main-importer.js +15 -29
  46. package/packages/jam/node/main.d.ts.map +1 -1
  47. package/packages/jam/node/main.js +6 -16
  48. package/packages/jam/rpc/index.d.ts +3 -0
  49. package/packages/jam/rpc/index.d.ts.map +1 -0
  50. package/packages/jam/rpc/index.js +2 -0
  51. package/packages/jam/rpc/src/handlers/best-block.d.ts +6 -0
  52. package/packages/jam/rpc/src/handlers/best-block.d.ts.map +1 -0
  53. package/packages/jam/rpc/src/handlers/best-block.js +15 -0
  54. package/packages/jam/rpc/src/handlers/finalized-block.d.ts +6 -0
  55. package/packages/jam/rpc/src/handlers/finalized-block.d.ts.map +1 -0
  56. package/packages/jam/rpc/src/handlers/finalized-block.js +7 -0
  57. package/packages/jam/rpc/src/handlers/list-services.d.ts +6 -0
  58. package/packages/jam/rpc/src/handlers/list-services.d.ts.map +1 -0
  59. package/packages/jam/rpc/src/handlers/list-services.js +15 -0
  60. package/packages/jam/rpc/src/handlers/not-implemented.d.ts +4 -0
  61. package/packages/jam/rpc/src/handlers/not-implemented.d.ts.map +1 -0
  62. package/packages/jam/rpc/src/handlers/not-implemented.js +4 -0
  63. package/packages/jam/rpc/src/handlers/parameters.d.ts +7 -0
  64. package/packages/jam/rpc/src/handlers/parameters.d.ts.map +1 -0
  65. package/packages/jam/rpc/src/handlers/parameters.js +53 -0
  66. package/packages/jam/rpc/src/handlers/parent.d.ts +6 -0
  67. package/packages/jam/rpc/src/handlers/parent.d.ts.map +1 -0
  68. package/packages/jam/rpc/src/handlers/parent.js +25 -0
  69. package/packages/jam/rpc/src/handlers/service-data.d.ts +6 -0
  70. package/packages/jam/rpc/src/handlers/service-data.d.ts.map +1 -0
  71. package/packages/jam/rpc/src/handlers/service-data.js +21 -0
  72. package/packages/jam/rpc/src/handlers/service-preimage.d.ts +6 -0
  73. package/packages/jam/rpc/src/handlers/service-preimage.d.ts.map +1 -0
  74. package/packages/jam/rpc/src/handlers/service-preimage.js +23 -0
  75. package/packages/jam/rpc/src/handlers/service-request.d.ts +6 -0
  76. package/packages/jam/rpc/src/handlers/service-request.d.ts.map +1 -0
  77. package/packages/jam/rpc/src/handlers/service-request.js +23 -0
  78. package/packages/jam/rpc/src/handlers/service-value.d.ts +6 -0
  79. package/packages/jam/rpc/src/handlers/service-value.d.ts.map +1 -0
  80. package/packages/jam/rpc/src/handlers/service-value.js +23 -0
  81. package/packages/jam/rpc/src/handlers/state-root.d.ts +6 -0
  82. package/packages/jam/rpc/src/handlers/state-root.d.ts.map +1 -0
  83. package/packages/jam/rpc/src/handlers/state-root.js +14 -0
  84. package/packages/jam/rpc/src/handlers/statistics.d.ts +6 -0
  85. package/packages/jam/rpc/src/handlers/statistics.d.ts.map +1 -0
  86. package/packages/jam/rpc/src/handlers/statistics.js +16 -0
  87. package/packages/jam/rpc/src/handlers/subscribe-best-block.d.ts +6 -0
  88. package/packages/jam/rpc/src/handlers/subscribe-best-block.d.ts.map +1 -0
  89. package/packages/jam/rpc/src/handlers/subscribe-best-block.js +8 -0
  90. package/packages/jam/rpc/src/handlers/subscribe-finalized-block.d.ts +6 -0
  91. package/packages/jam/rpc/src/handlers/subscribe-finalized-block.d.ts.map +1 -0
  92. package/packages/jam/rpc/src/handlers/subscribe-finalized-block.js +8 -0
  93. package/packages/jam/rpc/src/handlers/subscribe-service-data.d.ts +6 -0
  94. package/packages/jam/rpc/src/handlers/subscribe-service-data.d.ts.map +1 -0
  95. package/packages/jam/rpc/src/handlers/subscribe-service-data.js +13 -0
  96. package/packages/jam/rpc/src/handlers/subscribe-service-preimage.d.ts +6 -0
  97. package/packages/jam/rpc/src/handlers/subscribe-service-preimage.d.ts.map +1 -0
  98. package/packages/jam/rpc/src/handlers/subscribe-service-preimage.js +13 -0
  99. package/packages/jam/rpc/src/handlers/subscribe-service-request.d.ts +6 -0
  100. package/packages/jam/rpc/src/handlers/subscribe-service-request.d.ts.map +1 -0
  101. package/packages/jam/rpc/src/handlers/subscribe-service-request.js +13 -0
  102. package/packages/jam/rpc/src/handlers/subscribe-service-value.d.ts +6 -0
  103. package/packages/jam/rpc/src/handlers/subscribe-service-value.d.ts.map +1 -0
  104. package/packages/jam/rpc/src/handlers/subscribe-service-value.js +13 -0
  105. package/packages/jam/rpc/src/handlers/subscribe-statistics.d.ts +6 -0
  106. package/packages/jam/rpc/src/handlers/subscribe-statistics.d.ts.map +1 -0
  107. package/packages/jam/rpc/src/handlers/subscribe-statistics.js +13 -0
  108. package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.d.ts +8 -0
  109. package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.d.ts.map +1 -0
  110. package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.js +68 -0
  111. package/packages/jam/rpc/src/handlers/unsubscribe.d.ts +4 -0
  112. package/packages/jam/rpc/src/handlers/unsubscribe.d.ts.map +1 -0
  113. package/packages/jam/rpc/src/handlers/unsubscribe.js +3 -0
  114. package/packages/jam/rpc/src/handlers.d.ts +3 -0
  115. package/packages/jam/rpc/src/handlers.d.ts.map +1 -0
  116. package/packages/jam/rpc/src/handlers.js +60 -0
  117. package/packages/jam/rpc/src/server.d.ts +31 -0
  118. package/packages/jam/rpc/src/server.d.ts.map +1 -0
  119. package/packages/jam/rpc/src/server.js +179 -0
  120. package/packages/jam/rpc/src/subscription-manager.d.ts +20 -0
  121. package/packages/jam/rpc/src/subscription-manager.d.ts.map +1 -0
  122. package/packages/jam/rpc/src/subscription-manager.js +74 -0
  123. package/packages/jam/rpc/test/e2e-server.d.ts +3 -0
  124. package/packages/jam/rpc/test/e2e-server.d.ts.map +1 -0
  125. package/packages/jam/rpc/test/e2e-server.js +30 -0
  126. package/packages/jam/rpc/test/e2e-setup.d.ts +2 -0
  127. package/packages/jam/rpc/test/e2e-setup.d.ts.map +1 -0
  128. package/packages/jam/rpc/test/e2e-setup.js +126 -0
  129. package/packages/jam/rpc/test/e2e.d.ts +2 -0
  130. package/packages/jam/rpc/test/e2e.d.ts.map +1 -0
  131. package/packages/jam/rpc/test/e2e.js +326 -0
  132. package/packages/jam/state-merkleization/index.d.ts +1 -1
  133. package/packages/jam/state-merkleization/index.js +1 -1
  134. package/packages/workers/api-node/config.d.ts +14 -46
  135. package/packages/workers/api-node/config.d.ts.map +1 -1
  136. package/packages/workers/api-node/config.js +31 -96
  137. package/packages/workers/api-node/config.test.js +82 -63
  138. package/packages/workers/importer/main.d.ts +2 -0
  139. package/packages/workers/importer/main.d.ts.map +1 -1
  140. package/packages/workers/importer/main.js +1 -1
  141. package/packages/jam/database-lmdb/blocks.d.ts +0 -24
  142. package/packages/jam/database-lmdb/blocks.d.ts.map +0 -1
  143. package/packages/jam/database-lmdb/blocks.js +0 -82
  144. package/packages/jam/database-lmdb/hybrid-states.d.ts +0 -56
  145. package/packages/jam/database-lmdb/hybrid-states.d.ts.map +0 -1
  146. package/packages/jam/database-lmdb/hybrid-states.js +0 -149
  147. package/packages/jam/database-lmdb/hybrid-states.test.d.ts +0 -2
  148. package/packages/jam/database-lmdb/hybrid-states.test.d.ts.map +0 -1
  149. package/packages/jam/database-lmdb/hybrid-states.test.js +0 -180
  150. package/packages/jam/database-lmdb/index.d.ts +0 -5
  151. package/packages/jam/database-lmdb/index.d.ts.map +0 -1
  152. package/packages/jam/database-lmdb/index.js +0 -4
  153. package/packages/jam/database-lmdb/root.d.ts +0 -26
  154. package/packages/jam/database-lmdb/root.d.ts.map +0 -1
  155. package/packages/jam/database-lmdb/root.js +0 -53
  156. package/packages/jam/database-lmdb/states.d.ts +0 -76
  157. package/packages/jam/database-lmdb/states.d.ts.map +0 -1
  158. package/packages/jam/database-lmdb/states.js +0 -145
  159. package/packages/jam/database-lmdb/states.test.d.ts +0 -2
  160. package/packages/jam/database-lmdb/states.test.d.ts.map +0 -1
  161. package/packages/jam/database-lmdb/states.test.js +0 -202
@@ -1,202 +0,0 @@
1
- import assert from "node:assert";
2
- import * as fs from "node:fs";
3
- import { afterEach, before, beforeEach, describe, it } from "node:test";
4
- import { tryAsServiceGas, tryAsServiceId, tryAsTimeSlot } from "#@typeberry/block";
5
- import { Bytes, BytesBlob } from "#@typeberry/bytes";
6
- import { SortedSet } from "#@typeberry/collections";
7
- import { tinyChainSpec } from "#@typeberry/config";
8
- import { Blake2b, HASH_SIZE } from "#@typeberry/hash";
9
- import { tryAsU32, tryAsU64 } from "#@typeberry/numbers";
10
- import { InMemoryState, LookupHistoryItem, PrivilegedServices, ServiceAccountInfo, tryAsLookupHistorySlots, tryAsPerCore, UpdateService, } from "#@typeberry/state";
11
- import { testState } from "#@typeberry/state/test.utils.js";
12
- import { StateEntries } from "#@typeberry/state-merkleization";
13
- import { InMemoryTrie, leafComparator } from "#@typeberry/trie";
14
- import { getBlake2bTrieHasher } from "#@typeberry/trie/hasher.js";
15
- import { deepEqual, OK, Result } from "#@typeberry/utils";
16
- import { LmdbRoot } from "./root.js";
17
- import { LmdbStates } from "./states.js";
18
- let blake2bTrieHasher;
19
- let blake2b;
20
- before(async () => {
21
- blake2b = await Blake2b.createHasher();
22
- blake2bTrieHasher = getBlake2bTrieHasher(blake2b);
23
- });
24
- function createTempDir(suffix = "lmdb") {
25
- return fs.mkdtempSync(`typeberry-${suffix}`);
26
- }
27
- describe("LMDB States database", () => {
28
- let tmpDir = "";
29
- beforeEach(() => {
30
- tmpDir = createTempDir();
31
- });
32
- afterEach(() => {
33
- fs.rmSync(tmpDir, {
34
- recursive: true,
35
- });
36
- });
37
- const headerHash = Bytes.zero(HASH_SIZE).asOpaque();
38
- const spec = tinyChainSpec;
39
- it("should import state and read state", async () => {
40
- const root = LmdbRoot.new(tmpDir, {});
41
- const states = LmdbStates.new(spec, blake2b, root);
42
- try {
43
- const emptyState = InMemoryState.empty(spec);
44
- const serialized = StateEntries.serializeInMemory(spec, blake2b, emptyState);
45
- const emptyRoot = serialized.getRootHash(blake2b);
46
- // when
47
- const res = await states.insertInitialState(headerHash, serialized);
48
- deepEqual(res, Result.ok(OK));
49
- const newState = states.getState(headerHash);
50
- assert.ok(newState !== null);
51
- const newRoot = await states.getStateRoot(newState);
52
- assert.deepStrictEqual(`${newRoot}`, `${emptyRoot}`);
53
- deepEqual(InMemoryState.copyFrom(spec, newState, new Map()), emptyState);
54
- }
55
- finally {
56
- await states.close();
57
- await root.close();
58
- }
59
- });
60
- it("should update the state", async () => {
61
- const root = LmdbRoot.new(tmpDir, {});
62
- const states = LmdbStates.new(spec, blake2b, root);
63
- try {
64
- const state = InMemoryState.empty(spec);
65
- await states.insertInitialState(headerHash, StateEntries.serializeInMemory(spec, blake2b, state));
66
- const newState = states.getState(headerHash);
67
- assert.ok(newState !== null);
68
- const headerHash2 = Bytes.fill(HASH_SIZE, 2).asOpaque();
69
- const lookupHistory = LookupHistoryItem.new(Bytes.fill(HASH_SIZE, 0xff).asOpaque(), tryAsU32(5), tryAsLookupHistorySlots([]));
70
- const stateUpdate = {
71
- timeslot: tryAsTimeSlot(15),
72
- privilegedServices: PrivilegedServices.create({
73
- manager: tryAsServiceId(1),
74
- assigners: tryAsPerCore(new Array(spec.coresCount).fill(tryAsServiceId(2)), spec),
75
- delegator: tryAsServiceId(3),
76
- registrar: tryAsServiceId(4),
77
- autoAccumulateServices: new Map(),
78
- }),
79
- updated: new Map([
80
- [
81
- tryAsServiceId(1),
82
- UpdateService.create({
83
- serviceInfo: ServiceAccountInfo.create({
84
- codeHash: Bytes.zero(HASH_SIZE).asOpaque(),
85
- balance: tryAsU64(1_000_000),
86
- accumulateMinGas: tryAsServiceGas(10_000),
87
- onTransferMinGas: tryAsServiceGas(5_000),
88
- storageUtilisationBytes: tryAsU64(1_000),
89
- gratisStorage: tryAsU64(0),
90
- storageUtilisationCount: tryAsU32(1),
91
- created: tryAsTimeSlot(0),
92
- lastAccumulation: tryAsTimeSlot(0),
93
- parentService: tryAsServiceId(0),
94
- }),
95
- lookupHistory,
96
- }),
97
- ],
98
- ]),
99
- };
100
- // when
101
- // in-memory state update
102
- const res1 = state.applyUpdate(stateUpdate);
103
- deepEqual(res1, Result.ok(OK));
104
- // on-disk state update
105
- const res2 = await states.updateAndSetState(headerHash2, newState, stateUpdate);
106
- deepEqual(res2, Result.ok(OK));
107
- const updatedState = states.getState(headerHash2);
108
- assert.ok(updatedState !== null);
109
- const updatedStateRoot = await states.getStateRoot(updatedState);
110
- deepEqual(InMemoryState.copyFrom(spec, updatedState, new Map([
111
- [
112
- tryAsServiceId(1),
113
- {
114
- storageKeys: [],
115
- preimages: [],
116
- lookupHistory: [{ hash: lookupHistory.hash, length: lookupHistory.length }],
117
- },
118
- ],
119
- ])), state);
120
- assert.strictEqual(`${updatedStateRoot}`, `${StateEntries.serializeInMemory(spec, blake2b, state).getRootHash(blake2b)}`);
121
- }
122
- finally {
123
- await states.close();
124
- await root.close();
125
- }
126
- });
127
- it("sorted set should be actual to trie", () => {
128
- const data = [
129
- [Bytes.fill(HASH_SIZE, 5), BytesBlob.blobFromString("five")],
130
- [Bytes.fill(HASH_SIZE, 1), BytesBlob.blobFromString("one")],
131
- [Bytes.fill(HASH_SIZE, 3), BytesBlob.blobFromString("three")],
132
- [Bytes.fill(HASH_SIZE, 4), BytesBlob.blobFromString("four")],
133
- [Bytes.fill(HASH_SIZE, 2), BytesBlob.blobFromString("two")],
134
- ];
135
- const trie = InMemoryTrie.empty(blake2bTrieHasher);
136
- for (const [key, val] of data) {
137
- trie.set(key.asOpaque(), val);
138
- }
139
- const set = SortedSet.fromArray(leafComparator, data.map(([key, value]) => {
140
- return InMemoryTrie.constructLeaf(blake2bTrieHasher, key.asOpaque(), value);
141
- }));
142
- deepEqual(Array.from(set), Array.from(SortedSet.fromArray(leafComparator, Array.from(trie.nodes.leaves()))));
143
- });
144
- it("should import more complex state", async () => {
145
- const root = LmdbRoot.new(tmpDir, {});
146
- const states = LmdbStates.new(spec, blake2b, root);
147
- try {
148
- const initialState = testState();
149
- const initialService = initialState.services.get(tryAsServiceId(0));
150
- if (initialService === undefined) {
151
- throw new Error("Expected service in test state!");
152
- }
153
- const serialized = StateEntries.serializeInMemory(spec, blake2b, initialState);
154
- const initialRoot = serialized.getRootHash(blake2b);
155
- // when
156
- const res = await states.insertInitialState(headerHash, serialized);
157
- deepEqual(res, Result.ok(OK));
158
- const newState = states.getState(headerHash);
159
- assert.ok(newState !== null);
160
- const newRoot = await states.getStateRoot(newState);
161
- assert.deepStrictEqual(`${newRoot}`, `${initialRoot}`);
162
- deepEqual(InMemoryState.copyFrom(spec, newState, new Map([[initialService.serviceId, initialService.getEntries()]])), initialState);
163
- }
164
- finally {
165
- await states.close();
166
- await root.close();
167
- }
168
- });
169
- it("should update more complex entries", async () => {
170
- const root = LmdbRoot.new(tmpDir, {});
171
- const states = LmdbStates.new(spec, blake2b, root);
172
- try {
173
- const state = testState();
174
- const initialService = state.services.get(tryAsServiceId(0));
175
- if (initialService === undefined) {
176
- throw new Error("Expected service in test state!");
177
- }
178
- await states.insertInitialState(headerHash, StateEntries.serializeInMemory(spec, blake2b, state));
179
- const newState = states.getState(headerHash);
180
- assert.ok(newState !== null);
181
- const headerHash2 = Bytes.fill(HASH_SIZE, 2).asOpaque();
182
- // attempt to update all entries
183
- const stateUpdate = Object.assign({}, state);
184
- // when
185
- // in-memory state update
186
- const res1 = state.applyUpdate(stateUpdate);
187
- deepEqual(res1, Result.ok(OK));
188
- // on-disk state update
189
- const res2 = await states.updateAndSetState(headerHash2, newState, stateUpdate);
190
- deepEqual(res2, Result.ok(OK));
191
- const updatedState = states.getState(headerHash2);
192
- assert.ok(updatedState !== null);
193
- const updatedStateRoot = await states.getStateRoot(updatedState);
194
- deepEqual(InMemoryState.copyFrom(spec, updatedState, new Map([[initialService.serviceId, initialService.getEntries()]])), state);
195
- assert.strictEqual(`${updatedStateRoot}`, `${StateEntries.serializeInMemory(spec, blake2b, state).getRootHash(blake2b)}`);
196
- }
197
- finally {
198
- await states.close();
199
- await root.close();
200
- }
201
- });
202
- });