@typeberry/lib 0.10.0 → 0.11.0-829b7ea

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 (146) 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/node/export.d.ts.map +1 -1
  22. package/packages/jam/node/export.js +8 -17
  23. package/packages/jam/node/jam-config.d.ts +5 -1
  24. package/packages/jam/node/jam-config.d.ts.map +1 -1
  25. package/packages/jam/node/jam-config.js +6 -2
  26. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  27. package/packages/jam/node/main-fuzz.js +32 -19
  28. package/packages/jam/node/main-importer.d.ts +2 -6
  29. package/packages/jam/node/main-importer.d.ts.map +1 -1
  30. package/packages/jam/node/main-importer.js +13 -28
  31. package/packages/jam/node/main.d.ts.map +1 -1
  32. package/packages/jam/node/main.js +6 -16
  33. package/packages/jam/rpc/index.d.ts +3 -0
  34. package/packages/jam/rpc/index.d.ts.map +1 -0
  35. package/packages/jam/rpc/index.js +2 -0
  36. package/packages/jam/rpc/src/handlers/best-block.d.ts +6 -0
  37. package/packages/jam/rpc/src/handlers/best-block.d.ts.map +1 -0
  38. package/packages/jam/rpc/src/handlers/best-block.js +15 -0
  39. package/packages/jam/rpc/src/handlers/finalized-block.d.ts +6 -0
  40. package/packages/jam/rpc/src/handlers/finalized-block.d.ts.map +1 -0
  41. package/packages/jam/rpc/src/handlers/finalized-block.js +7 -0
  42. package/packages/jam/rpc/src/handlers/list-services.d.ts +6 -0
  43. package/packages/jam/rpc/src/handlers/list-services.d.ts.map +1 -0
  44. package/packages/jam/rpc/src/handlers/list-services.js +15 -0
  45. package/packages/jam/rpc/src/handlers/not-implemented.d.ts +4 -0
  46. package/packages/jam/rpc/src/handlers/not-implemented.d.ts.map +1 -0
  47. package/packages/jam/rpc/src/handlers/not-implemented.js +4 -0
  48. package/packages/jam/rpc/src/handlers/parameters.d.ts +7 -0
  49. package/packages/jam/rpc/src/handlers/parameters.d.ts.map +1 -0
  50. package/packages/jam/rpc/src/handlers/parameters.js +53 -0
  51. package/packages/jam/rpc/src/handlers/parent.d.ts +6 -0
  52. package/packages/jam/rpc/src/handlers/parent.d.ts.map +1 -0
  53. package/packages/jam/rpc/src/handlers/parent.js +25 -0
  54. package/packages/jam/rpc/src/handlers/service-data.d.ts +6 -0
  55. package/packages/jam/rpc/src/handlers/service-data.d.ts.map +1 -0
  56. package/packages/jam/rpc/src/handlers/service-data.js +21 -0
  57. package/packages/jam/rpc/src/handlers/service-preimage.d.ts +6 -0
  58. package/packages/jam/rpc/src/handlers/service-preimage.d.ts.map +1 -0
  59. package/packages/jam/rpc/src/handlers/service-preimage.js +23 -0
  60. package/packages/jam/rpc/src/handlers/service-request.d.ts +6 -0
  61. package/packages/jam/rpc/src/handlers/service-request.d.ts.map +1 -0
  62. package/packages/jam/rpc/src/handlers/service-request.js +23 -0
  63. package/packages/jam/rpc/src/handlers/service-value.d.ts +6 -0
  64. package/packages/jam/rpc/src/handlers/service-value.d.ts.map +1 -0
  65. package/packages/jam/rpc/src/handlers/service-value.js +23 -0
  66. package/packages/jam/rpc/src/handlers/state-root.d.ts +6 -0
  67. package/packages/jam/rpc/src/handlers/state-root.d.ts.map +1 -0
  68. package/packages/jam/rpc/src/handlers/state-root.js +14 -0
  69. package/packages/jam/rpc/src/handlers/statistics.d.ts +6 -0
  70. package/packages/jam/rpc/src/handlers/statistics.d.ts.map +1 -0
  71. package/packages/jam/rpc/src/handlers/statistics.js +16 -0
  72. package/packages/jam/rpc/src/handlers/subscribe-best-block.d.ts +6 -0
  73. package/packages/jam/rpc/src/handlers/subscribe-best-block.d.ts.map +1 -0
  74. package/packages/jam/rpc/src/handlers/subscribe-best-block.js +8 -0
  75. package/packages/jam/rpc/src/handlers/subscribe-finalized-block.d.ts +6 -0
  76. package/packages/jam/rpc/src/handlers/subscribe-finalized-block.d.ts.map +1 -0
  77. package/packages/jam/rpc/src/handlers/subscribe-finalized-block.js +8 -0
  78. package/packages/jam/rpc/src/handlers/subscribe-service-data.d.ts +6 -0
  79. package/packages/jam/rpc/src/handlers/subscribe-service-data.d.ts.map +1 -0
  80. package/packages/jam/rpc/src/handlers/subscribe-service-data.js +13 -0
  81. package/packages/jam/rpc/src/handlers/subscribe-service-preimage.d.ts +6 -0
  82. package/packages/jam/rpc/src/handlers/subscribe-service-preimage.d.ts.map +1 -0
  83. package/packages/jam/rpc/src/handlers/subscribe-service-preimage.js +13 -0
  84. package/packages/jam/rpc/src/handlers/subscribe-service-request.d.ts +6 -0
  85. package/packages/jam/rpc/src/handlers/subscribe-service-request.d.ts.map +1 -0
  86. package/packages/jam/rpc/src/handlers/subscribe-service-request.js +13 -0
  87. package/packages/jam/rpc/src/handlers/subscribe-service-value.d.ts +6 -0
  88. package/packages/jam/rpc/src/handlers/subscribe-service-value.d.ts.map +1 -0
  89. package/packages/jam/rpc/src/handlers/subscribe-service-value.js +13 -0
  90. package/packages/jam/rpc/src/handlers/subscribe-statistics.d.ts +6 -0
  91. package/packages/jam/rpc/src/handlers/subscribe-statistics.d.ts.map +1 -0
  92. package/packages/jam/rpc/src/handlers/subscribe-statistics.js +13 -0
  93. package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.d.ts +8 -0
  94. package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.d.ts.map +1 -0
  95. package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.js +68 -0
  96. package/packages/jam/rpc/src/handlers/unsubscribe.d.ts +4 -0
  97. package/packages/jam/rpc/src/handlers/unsubscribe.d.ts.map +1 -0
  98. package/packages/jam/rpc/src/handlers/unsubscribe.js +3 -0
  99. package/packages/jam/rpc/src/handlers.d.ts +3 -0
  100. package/packages/jam/rpc/src/handlers.d.ts.map +1 -0
  101. package/packages/jam/rpc/src/handlers.js +60 -0
  102. package/packages/jam/rpc/src/server.d.ts +31 -0
  103. package/packages/jam/rpc/src/server.d.ts.map +1 -0
  104. package/packages/jam/rpc/src/server.js +179 -0
  105. package/packages/jam/rpc/src/subscription-manager.d.ts +20 -0
  106. package/packages/jam/rpc/src/subscription-manager.d.ts.map +1 -0
  107. package/packages/jam/rpc/src/subscription-manager.js +74 -0
  108. package/packages/jam/rpc/test/e2e-server.d.ts +3 -0
  109. package/packages/jam/rpc/test/e2e-server.d.ts.map +1 -0
  110. package/packages/jam/rpc/test/e2e-server.js +30 -0
  111. package/packages/jam/rpc/test/e2e-setup.d.ts +2 -0
  112. package/packages/jam/rpc/test/e2e-setup.d.ts.map +1 -0
  113. package/packages/jam/rpc/test/e2e-setup.js +126 -0
  114. package/packages/jam/rpc/test/e2e.d.ts +2 -0
  115. package/packages/jam/rpc/test/e2e.d.ts.map +1 -0
  116. package/packages/jam/rpc/test/e2e.js +326 -0
  117. package/packages/jam/state-merkleization/index.d.ts +1 -1
  118. package/packages/jam/state-merkleization/index.js +1 -1
  119. package/packages/workers/api-node/config.d.ts +6 -40
  120. package/packages/workers/api-node/config.d.ts.map +1 -1
  121. package/packages/workers/api-node/config.js +6 -82
  122. package/packages/workers/api-node/config.test.js +26 -63
  123. package/packages/workers/importer/main.d.ts +2 -0
  124. package/packages/workers/importer/main.d.ts.map +1 -1
  125. package/packages/workers/importer/main.js +1 -1
  126. package/packages/jam/database-lmdb/blocks.d.ts +0 -24
  127. package/packages/jam/database-lmdb/blocks.d.ts.map +0 -1
  128. package/packages/jam/database-lmdb/blocks.js +0 -82
  129. package/packages/jam/database-lmdb/hybrid-states.d.ts +0 -56
  130. package/packages/jam/database-lmdb/hybrid-states.d.ts.map +0 -1
  131. package/packages/jam/database-lmdb/hybrid-states.js +0 -149
  132. package/packages/jam/database-lmdb/hybrid-states.test.d.ts +0 -2
  133. package/packages/jam/database-lmdb/hybrid-states.test.d.ts.map +0 -1
  134. package/packages/jam/database-lmdb/hybrid-states.test.js +0 -180
  135. package/packages/jam/database-lmdb/index.d.ts +0 -5
  136. package/packages/jam/database-lmdb/index.d.ts.map +0 -1
  137. package/packages/jam/database-lmdb/index.js +0 -4
  138. package/packages/jam/database-lmdb/root.d.ts +0 -26
  139. package/packages/jam/database-lmdb/root.d.ts.map +0 -1
  140. package/packages/jam/database-lmdb/root.js +0 -53
  141. package/packages/jam/database-lmdb/states.d.ts +0 -76
  142. package/packages/jam/database-lmdb/states.d.ts.map +0 -1
  143. package/packages/jam/database-lmdb/states.js +0 -145
  144. package/packages/jam/database-lmdb/states.test.d.ts +0 -2
  145. package/packages/jam/database-lmdb/states.test.d.ts.map +0 -1
  146. 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
- });