@typeberry/lib 0.5.8 → 0.5.9-115148

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 (69) hide show
  1. package/package.json +1 -1
  2. package/packages/core/pvm-host-calls/host-calls-executor.js +3 -3
  3. package/packages/core/utils/debug.d.ts.map +1 -1
  4. package/packages/core/utils/debug.js +14 -3
  5. package/packages/jam/block/work-item-segment.d.ts +23 -6
  6. package/packages/jam/block/work-item-segment.d.ts.map +1 -1
  7. package/packages/jam/block/work-item-segment.js +24 -7
  8. package/packages/jam/block/work-item.d.ts +3 -3
  9. package/packages/jam/block/work-item.d.ts.map +1 -1
  10. package/packages/jam/block/work-item.js +7 -3
  11. package/packages/jam/block/work-package.d.ts +1 -1
  12. package/packages/jam/database/blocks.d.ts +3 -0
  13. package/packages/jam/database/blocks.d.ts.map +1 -1
  14. package/packages/jam/database/blocks.js +5 -0
  15. package/packages/jam/database/serialized-states-db.d.ts +1 -0
  16. package/packages/jam/database/serialized-states-db.d.ts.map +1 -1
  17. package/packages/jam/database/serialized-states-db.js +3 -0
  18. package/packages/jam/database/states.d.ts +3 -0
  19. package/packages/jam/database/states.d.ts.map +1 -1
  20. package/packages/jam/database/states.js +3 -0
  21. package/packages/jam/database-lmdb/blocks.d.ts +1 -0
  22. package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
  23. package/packages/jam/database-lmdb/blocks.js +5 -0
  24. package/packages/jam/database-lmdb/states.d.ts +1 -0
  25. package/packages/jam/database-lmdb/states.d.ts.map +1 -1
  26. package/packages/jam/database-lmdb/states.js +3 -0
  27. package/packages/jam/in-core/externalities/refine.d.ts +27 -6
  28. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  29. package/packages/jam/in-core/externalities/refine.js +40 -7
  30. package/packages/jam/in-core/externalities/refine.test.d.ts +2 -0
  31. package/packages/jam/in-core/externalities/refine.test.d.ts.map +1 -0
  32. package/packages/jam/in-core/externalities/refine.test.js +163 -0
  33. package/packages/jam/in-core/in-core.d.ts +1 -1
  34. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  35. package/packages/jam/in-core/in-core.js +14 -5
  36. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +2 -0
  37. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  38. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
  39. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
  40. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
  41. package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
  42. package/packages/jam/jam-host-calls/refine/export.js +1 -1
  43. package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
  44. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
  45. package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
  46. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
  47. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  48. package/packages/jam/node/main-fuzz.js +5 -1
  49. package/packages/jam/node/main-importer.d.ts +2 -0
  50. package/packages/jam/node/main-importer.d.ts.map +1 -1
  51. package/packages/jam/node/main-importer.js +9 -7
  52. package/packages/jam/node/main.d.ts.map +1 -1
  53. package/packages/jam/node/main.js +2 -0
  54. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  55. package/packages/workers/block-authorship/main.js +26 -0
  56. package/packages/workers/importer/finality.d.ts +32 -0
  57. package/packages/workers/importer/finality.d.ts.map +1 -0
  58. package/packages/workers/importer/finality.js +105 -0
  59. package/packages/workers/importer/finality.test.d.ts +2 -0
  60. package/packages/workers/importer/finality.test.d.ts.map +1 -0
  61. package/packages/workers/importer/finality.test.js +369 -0
  62. package/packages/workers/importer/importer.d.ts +3 -0
  63. package/packages/workers/importer/importer.d.ts.map +1 -1
  64. package/packages/workers/importer/importer.js +13 -0
  65. package/packages/workers/importer/main.d.ts.map +1 -1
  66. package/packages/workers/importer/main.js +9 -1
  67. package/packages/workers/importer/protocol.d.ts +10 -3
  68. package/packages/workers/importer/protocol.d.ts.map +1 -1
  69. package/packages/workers/importer/protocol.js +14 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/lib",
3
- "version": "0.5.8",
3
+ "version": "0.5.9-0115148",
4
4
  "description": "Typeberry Library",
5
5
  "main": "./bin/lib/index.js",
6
6
  "types": "./bin/lib/index.d.ts",
@@ -52,7 +52,7 @@ export class HostCallsExecutor {
52
52
  this.ioTracer?.logPanic(pvmInstance.getExitParam() ?? 0, pc, gas, registers);
53
53
  return { consumedGas, status: ReturnStatus.PANIC };
54
54
  }
55
- async execute(pvmInstance) {
55
+ async execute(pvmInstance, initialPc) {
56
56
  const ioTracker = this.ioTracer?.tracker() ?? null;
57
57
  const registers = new HostCallRegisters(pvmInstance.registers.getAllEncoded());
58
58
  registers.ioTracker = ioTracker;
@@ -60,7 +60,7 @@ export class HostCallsExecutor {
60
60
  memory.ioTracker = ioTracker;
61
61
  const gas = pvmInstance.gas;
62
62
  // log start of execution (note the PVM initialisation should be logged already)
63
- this.ioTracer?.logStart(pvmInstance.getPC(), pvmInstance.gas.get(), registers);
63
+ this.ioTracer?.logStart(initialPc, pvmInstance.gas.get(), registers);
64
64
  for (;;) {
65
65
  // execute program as much as we can
66
66
  pvmInstance.runProgram();
@@ -120,7 +120,7 @@ export class HostCallsExecutor {
120
120
  pvmInstance.resetJam(program, args, initialPc, initialGas);
121
121
  try {
122
122
  this.ioTracer?.logProgram(program, args);
123
- return await this.execute(pvmInstance);
123
+ return await this.execute(pvmInstance, initialPc);
124
124
  }
125
125
  finally {
126
126
  this.pvmInstanceManager.releaseInstance(pvmInstance);
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../../../packages/core/utils/debug.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,YAExB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,cAA6F,CAAC;AAE9G;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CACnB,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,OAAO,EAClB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,SAAS,IAAI,IAAI,CAO3B;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAE/C;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,QAKpE;AAED,6BAA6B;AAC7B,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAqDzC;AAED,sEAAsE;AACtE,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,gBAGjC;AAED,mFAAmF;AACnF,8BAAsB,SAAS;IAC7B,QAAQ;CAGT;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;;EAMpC"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../../../packages/core/utils/debug.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,YAExB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,cAA6F,CAAC;AAE9G;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CACnB,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,OAAO,EAClB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,SAAS,IAAI,IAAI,CAO3B;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAE/C;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,QAKpE;AAED,6BAA6B;AAC7B,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAEzC;AAkED,sEAAsE;AACtE,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,gBAGjC;AAED,mFAAmF;AACnF,8BAAsB,SAAS;IAC7B,QAAQ;CAGT;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;;EAMpC"}
@@ -55,6 +55,12 @@ export function assertEmpty(value) {
55
55
  }
56
56
  /** Debug print an object. */
57
57
  export function inspect(val) {
58
+ return inspectInternal(val, new WeakSet());
59
+ }
60
+ /**
61
+ * Internal implementation of inspect with circular reference detection.
62
+ */
63
+ function inspectInternal(val, seen) {
58
64
  const nest = (v) => v
59
65
  .split("\n")
60
66
  .map((x) => ` ${x}`)
@@ -67,10 +73,10 @@ export function inspect(val) {
67
73
  return "<undefined>";
68
74
  }
69
75
  if (Array.isArray(val)) {
70
- return `[${val.map((x) => inspect(x))}]`;
76
+ return `[${val.map((x) => inspectInternal(x, seen))}]`;
71
77
  }
72
78
  if (val instanceof Map) {
73
- return inspect(Array.from(val.entries()));
79
+ return inspectInternal(Array.from(val.entries()), seen);
74
80
  }
75
81
  if (typeof val === "number") {
76
82
  return `${val} (0x${val.toString(16)})`;
@@ -78,6 +84,11 @@ export function inspect(val) {
78
84
  if (typeof val !== "object") {
79
85
  return `${val}`;
80
86
  }
87
+ // Check for circular references
88
+ if (seen.has(val)) {
89
+ return "<circular>";
90
+ }
91
+ seen.add(val);
81
92
  if ("toString" in val &&
82
93
  Object.prototype.toString !== val.toString &&
83
94
  WithDebug.prototype.toString !== val.toString) {
@@ -90,7 +101,7 @@ export function inspect(val) {
90
101
  for (const k of keys) {
91
102
  if (typeof k === "string") {
92
103
  v += oneLine ? "" : "\n ";
93
- v += `${k}: ${nest(inspect(val[k]))}`;
104
+ v += `${k}: ${nest(inspectInternal(val[k], seen))}`;
94
105
  v += oneLine ? "," : "";
95
106
  }
96
107
  }
@@ -1,13 +1,30 @@
1
1
  import type { Bytes } from "#@typeberry/bytes";
2
2
  import { type U16 } from "#@typeberry/numbers";
3
3
  import { type Opaque } from "#@typeberry/utils";
4
- /** `W_E`: The basic size of erasure-coded pieces in octets. See equation H.6. */
4
+ /**
5
+ * `W_E`: The basic size of erasure-coded pieces in octets. See equation H.6.
6
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/449600449700?v=0.7.2
7
+ */
5
8
  export declare const W_E = 684;
6
- /** `W_S`: The size of an exported segment in erasure-coded pieces in octets. */
7
- export declare const W_S = 6;
8
- /** `W_M`: The maximum number of entries in a work-package manifest. */
9
- export declare const MAX_NUMBER_OF_SEGMENTS = 2048;
10
- /** `W_E * W_S`: Exported segment size in bytes. */
9
+ /**
10
+ * `W_P`: The size of an exported segment in erasure-coded pieces in octets.
11
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/44b10044b200?v=0.7.2
12
+ */
13
+ export declare const W_P = 6;
14
+ /**
15
+ * `W_M`: The maximum number of imports in a work-package manifest.
16
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/44ad0044ae00?v=0.7.2
17
+ */
18
+ export declare const MAX_NUMBER_OF_IMPORTS_WP = 3072;
19
+ /**
20
+ * `W_X`: The maximum number of exports in a work-package manifest.
21
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/44be0044bf00?v=0.7.2
22
+ */
23
+ export declare const MAX_NUMBER_OF_EXPORTS_WP = 3072;
24
+ /**
25
+ * `W_G = W_E * W_P`: Exported segment size in bytes.
26
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/449a00449b00?v=0.7.2
27
+ */
11
28
  export declare const SEGMENT_BYTES: number;
12
29
  export type SEGMENT_BYTES = typeof SEGMENT_BYTES;
13
30
  /** Exported segment data. */
@@ -1 +1 @@
1
- {"version":3,"file":"work-item-segment.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block/work-item-segment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE7D,iFAAiF;AACjF,eAAO,MAAM,GAAG,MAAM,CAAC;AAEvB,gFAAgF;AAChF,eAAO,MAAM,GAAG,IAAI,CAAC;AAErB,uEAAuE;AACvE,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,mDAAmD;AACnD,eAAO,MAAM,aAAa,QAAY,CAAC;AACvC,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC;AAEjD,6BAA6B;AAC7B,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAE3C,2BAA2B;AAC3B,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;AAC9D,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,GAAI,GAAG,MAAM,KAAG,YAAyC,CAAC"}
1
+ {"version":3,"file":"work-item-segment.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block/work-item-segment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,GAAG,MAAM,CAAC;AAEvB;;;GAGG;AACH,eAAO,MAAM,GAAG,IAAI,CAAC;AAErB;;;GAGG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAY,CAAC;AACvC,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC;AAEjD,6BAA6B;AAC7B,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAE3C,2BAA2B;AAC3B,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;AAC9D,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,GAAI,GAAG,MAAM,KAAG,YAAyC,CAAC"}
@@ -1,12 +1,29 @@
1
1
  import { tryAsU16 } from "#@typeberry/numbers";
2
2
  import { asOpaqueType } from "#@typeberry/utils";
3
- /** `W_E`: The basic size of erasure-coded pieces in octets. See equation H.6. */
3
+ /**
4
+ * `W_E`: The basic size of erasure-coded pieces in octets. See equation H.6.
5
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/449600449700?v=0.7.2
6
+ */
4
7
  export const W_E = 684;
5
- /** `W_S`: The size of an exported segment in erasure-coded pieces in octets. */
6
- export const W_S = 6;
7
- /** `W_M`: The maximum number of entries in a work-package manifest. */
8
- export const MAX_NUMBER_OF_SEGMENTS = 2048; // 2**11
9
- /** `W_E * W_S`: Exported segment size in bytes. */
10
- export const SEGMENT_BYTES = W_E * W_S;
8
+ /**
9
+ * `W_P`: The size of an exported segment in erasure-coded pieces in octets.
10
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/44b10044b200?v=0.7.2
11
+ */
12
+ export const W_P = 6;
13
+ /**
14
+ * `W_M`: The maximum number of imports in a work-package manifest.
15
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/44ad0044ae00?v=0.7.2
16
+ */
17
+ export const MAX_NUMBER_OF_IMPORTS_WP = 3072;
18
+ /**
19
+ * `W_X`: The maximum number of exports in a work-package manifest.
20
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/44be0044bf00?v=0.7.2
21
+ */
22
+ export const MAX_NUMBER_OF_EXPORTS_WP = 3072;
23
+ /**
24
+ * `W_G = W_E * W_P`: Exported segment size in bytes.
25
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/449a00449b00?v=0.7.2
26
+ */
27
+ export const SEGMENT_BYTES = W_E * W_P;
11
28
  /** Attempt to convert a number into `SegmentIndex`. */
12
29
  export const tryAsSegmentIndex = (v) => asOpaqueType(tryAsU16(v));
@@ -6,7 +6,7 @@ import { type U16, type U32 } from "#@typeberry/numbers";
6
6
  import { type Opaque, WithDebug } from "#@typeberry/utils";
7
7
  import type { ServiceGas, ServiceId } from "./common.js";
8
8
  import type { CodeHash } from "./hash.js";
9
- import { MAX_NUMBER_OF_SEGMENTS, type SegmentIndex } from "./work-item-segment.js";
9
+ import { MAX_NUMBER_OF_IMPORTS_WP, type SegmentIndex } from "./work-item-segment.js";
10
10
  type WorkItemExtrinsicHash = Opaque<OpaqueHash, "ExtrinsicHash">;
11
11
  /**
12
12
  * An opaque piece of data that the work item brings in.
@@ -80,7 +80,7 @@ export declare class WorkItem extends WithDebug {
80
80
  /** `a`: accumulate execution gas limit */
81
81
  readonly accumulateGasLimit: ServiceGas;
82
82
  /** `i`: sequence of imported data segments, which identify a prior exported segment. */
83
- readonly importSegments: KnownSizeArray<ImportSpec, `Less than ${typeof MAX_NUMBER_OF_SEGMENTS}`>;
83
+ readonly importSegments: KnownSizeArray<ImportSpec, `Less than ${typeof MAX_NUMBER_OF_IMPORTS_WP}`>;
84
84
  /** `x`: sequence of blob hashes and lengths to be introduced in this block */
85
85
  readonly extrinsic: WorkItemExtrinsicSpec[];
86
86
  /** `e`: number of data segments exported by this work item. */
@@ -92,7 +92,7 @@ export declare class WorkItem extends WithDebug {
92
92
  accumulateGasLimit: import("@typeberry/codec").Descriptor<bigint & import("@typeberry/numbers").WithBytesRepresentation<8> & import("@typeberry/utils").WithOpaque<"ServiceGas[u64]">, Bytes<8>>;
93
93
  exportCount: import("@typeberry/codec").Descriptor<U16, Bytes<2>>;
94
94
  payload: import("@typeberry/codec").Descriptor<BytesBlob, BytesBlob>;
95
- importSegments: import("@typeberry/codec").Descriptor<readonly ImportSpec[] & import("@typeberry/utils").WithOpaque<"Less than 2048">, import("@typeberry/codec").SequenceView<ImportSpec, import("@typeberry/codec").ViewOf<ImportSpec, {
95
+ importSegments: import("@typeberry/codec").Descriptor<readonly ImportSpec[] & import("@typeberry/utils").WithOpaque<"Less than 3072">, import("@typeberry/codec").SequenceView<ImportSpec, import("@typeberry/codec").ViewOf<ImportSpec, {
96
96
  treeRoot: import("@typeberry/codec").Descriptor<Bytes<32>, Bytes<32>>;
97
97
  index: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"Segment Index [U16]">, Bytes<2>>;
98
98
  }>>>;
@@ -1 +1 @@
1
- {"version":3,"file":"work-item.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block/work-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAS,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAU,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEnF,KAAK,qBAAqB,GAAG,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAChD,KAAK,CAAC,GAAG,CAAC,EACV,6DAA6D,CAC9D,CAAC;AAEF;;;GAGG;AACH,qBAAa,UAAW,SAAQ,SAAS;IAWrC;;;OAGG;aACa,QAAQ,EAAE,UAAU;IACpC,2CAA2C;aAC3B,KAAK,EAAE,YAAY;IAhBrC,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,UAAU,CAAC;IAI1D,OAAO;CAWR;AAED,gDAAgD;AAChD,qBAAa,qBAAsB,SAAQ,SAAS;IAWhD,+FAA+F;aAC/E,IAAI,EAAE,qBAAqB;IAC3C,2DAA2D;aAC3C,GAAG,EAAE,GAAG;IAb1B,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,WAAW,CAAC,qBAAqB,CAAC;IAI/D,OAAO;CAQR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE,qSAgC5D;AAED;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,SAAS;IAuCnC,2BAA2B;aACX,OAAO,EAAE,SAAS;IAClC;;;;;OAKG;aACa,QAAQ,EAAE,QAAQ;IAClC,wBAAwB;aACR,OAAO,EAAE,SAAS;IAClC,sCAAsC;aACtB,cAAc,EAAE,UAAU;IAC1C,0CAA0C;aAC1B,kBAAkB,EAAE,UAAU;IAC9C,wFAAwF;aACxE,cAAc,EAAE,cAAc,CAAC,UAAU,EAAE,aAAa,OAAO,sBAAsB,EAAE,CAAC;IACxG,8EAA8E;aAC9D,SAAS,EAAE,qBAAqB,EAAE;IAClD,+DAA+D;aAC/C,WAAW,EAAE,GAAG;IA1DlC,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;QAaT;IAEH,MAAM,CAAC,MAAM,CAAC,EACZ,OAAO,EACP,QAAQ,EACR,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,WAAW,GACZ,EAAE,WAAW,CAAC,QAAQ,CAAC;IAaxB,OAAO;CAyBR"}
1
+ {"version":3,"file":"work-item.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block/work-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAS,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAU,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAErF,KAAK,qBAAqB,GAAG,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAChD,KAAK,CAAC,GAAG,CAAC,EACV,6DAA6D,CAC9D,CAAC;AAEF;;;GAGG;AACH,qBAAa,UAAW,SAAQ,SAAS;IAWrC;;;OAGG;aACa,QAAQ,EAAE,UAAU;IACpC,2CAA2C;aAC3B,KAAK,EAAE,YAAY;IAhBrC,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,UAAU,CAAC;IAI1D,OAAO;CAWR;AAED,gDAAgD;AAChD,qBAAa,qBAAsB,SAAQ,SAAS;IAWhD,+FAA+F;aAC/E,IAAI,EAAE,qBAAqB;IAC3C,2DAA2D;aAC3C,GAAG,EAAE,GAAG;IAb1B,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,WAAW,CAAC,qBAAqB,CAAC;IAI/D,OAAO;CAQR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE,qSAgC5D;AAED;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,SAAS;IA2CnC,2BAA2B;aACX,OAAO,EAAE,SAAS;IAClC;;;;;OAKG;aACa,QAAQ,EAAE,QAAQ;IAClC,wBAAwB;aACR,OAAO,EAAE,SAAS;IAClC,sCAAsC;aACtB,cAAc,EAAE,UAAU;IAC1C,0CAA0C;aAC1B,kBAAkB,EAAE,UAAU;IAC9C,wFAAwF;aACxE,cAAc,EAAE,cAAc,CAAC,UAAU,EAAE,aAAa,OAAO,wBAAwB,EAAE,CAAC;IAC1G,8EAA8E;aAC9D,SAAS,EAAE,qBAAqB,EAAE;IAClD,+DAA+D;aAC/C,WAAW,EAAE,GAAG;IA9DlC,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;QAiBT;IAEH,MAAM,CAAC,MAAM,CAAC,EACZ,OAAO,EACP,QAAQ,EACR,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,WAAW,GACZ,EAAE,WAAW,CAAC,QAAQ,CAAC;IAaxB,OAAO;CAyBR"}
@@ -4,7 +4,7 @@ import { HASH_SIZE } from "#@typeberry/hash";
4
4
  import { sumU32 } from "#@typeberry/numbers";
5
5
  import { WithDebug } from "#@typeberry/utils";
6
6
  import { codecKnownSizeArray } from "./codec-utils.js";
7
- import { MAX_NUMBER_OF_SEGMENTS } from "./work-item-segment.js";
7
+ import { MAX_NUMBER_OF_IMPORTS_WP } from "./work-item-segment.js";
8
8
  /**
9
9
  * Definition of data segment that was exported by some work package earlier
10
10
  * and now is being imported by another work-item.
@@ -103,13 +103,17 @@ export class WorkItem extends WithDebug {
103
103
  codeHash: codec.bytes(HASH_SIZE).asOpaque(),
104
104
  refineGasLimit: codec.u64.asOpaque(),
105
105
  accumulateGasLimit: codec.u64.asOpaque(),
106
+ // TODO: [MaSo] It should be validated to not exceed W_X
107
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/1a0b011a1c01?v=0.7.2
106
108
  exportCount: codec.u16,
107
109
  payload: codec.blob,
108
110
  importSegments: codecKnownSizeArray(ImportSpec.Codec, {
109
111
  minLength: 0,
110
- maxLength: MAX_NUMBER_OF_SEGMENTS,
111
- typicalLength: MAX_NUMBER_OF_SEGMENTS,
112
+ maxLength: MAX_NUMBER_OF_IMPORTS_WP,
113
+ typicalLength: MAX_NUMBER_OF_IMPORTS_WP,
112
114
  }),
115
+ // TODO: [MaSo] It should be validated to not exceed T = 128
116
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/1a0b011a1c01?v=0.7.2
113
117
  extrinsic: codec.sequenceVarLen(WorkItemExtrinsicSpec.Codec),
114
118
  });
115
119
  static create({ service, codeHash, payload, refineGasLimit, accumulateGasLimit, importSegments, extrinsic, exportCount, }) {
@@ -63,7 +63,7 @@ export declare class WorkPackage extends WithDebug {
63
63
  accumulateGasLimit: import("@typeberry/codec").Descriptor<bigint & import("@typeberry/numbers").WithBytesRepresentation<8> & import("@typeberry/utils").WithOpaque<"ServiceGas[u64]">, import("@typeberry/bytes").Bytes<8>>;
64
64
  exportCount: import("@typeberry/codec").Descriptor<import("@typeberry/numbers").U16, import("@typeberry/bytes").Bytes<2>>;
65
65
  payload: import("@typeberry/codec").Descriptor<BytesBlob, BytesBlob>;
66
- importSegments: import("@typeberry/codec").Descriptor<readonly import("./work-item.js").ImportSpec[] & import("@typeberry/utils").WithOpaque<"Less than 2048">, import("@typeberry/codec").SequenceView<import("./work-item.js").ImportSpec, import("@typeberry/codec").ViewOf<import("./work-item.js").ImportSpec, {
66
+ importSegments: import("@typeberry/codec").Descriptor<readonly import("./work-item.js").ImportSpec[] & import("@typeberry/utils").WithOpaque<"Less than 3072">, import("@typeberry/codec").SequenceView<import("./work-item.js").ImportSpec, import("@typeberry/codec").ViewOf<import("./work-item.js").ImportSpec, {
67
67
  treeRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
68
68
  index: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"Segment Index [U16]">, import("@typeberry/bytes").Bytes<2>>;
69
69
  }>>>;
@@ -22,6 +22,8 @@ export interface BlocksDb {
22
22
  * NOTE: this is not extrinsic hash!
23
23
  */
24
24
  getExtrinsic(hash: HeaderHash): ExtrinsicView | null;
25
+ /** Mark a block as no longer needed. Backend may remove its data. */
26
+ markUnused(hash: HeaderHash): void;
25
27
  /** Close the database and free resources. */
26
28
  close(): Promise<void>;
27
29
  }
@@ -43,6 +45,7 @@ export declare class InMemoryBlocks implements BlocksDb {
43
45
  insertBlock(block: WithHash<HeaderHash, BlockView>): Promise<void>;
44
46
  getHeader(hash: HeaderHash): HeaderView | null;
45
47
  getExtrinsic(hash: HeaderHash): ExtrinsicView | null;
48
+ markUnused(hash: HeaderHash): void;
46
49
  close(): Promise<void>;
47
50
  }
48
51
  //# sourceMappingURL=blocks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGxG,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,gDAAgD;IAChD,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,yCAAyC;IACzC,iBAAiB,IAAI,UAAU,CAAC;IAChC,wDAAwD;IACxD,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,oDAAoD;IACpD,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC;IACzD,sDAAsD;IACtD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,+BAA+B;IAC/B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;IAC/C;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC;IACrD,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,kDAAkD;AAClD,qBAAa,cAAe,YAAW,QAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgE;IAC9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAmE;IAC1G,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAmE;IAC7G,OAAO,CAAC,cAAc,CAAgD;IAEtE,8BAA8B;IAC9B,MAAM,CAAC,GAAG;IAIV,+DAA+D;IAC/D,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;IAQnE,OAAO;IAEP,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,iBAAiB,IAAI,UAAU;IAI/B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/E,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAIxD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAI9C,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAI9C,KAAK;CACZ"}
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGxG,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,gDAAgD;IAChD,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,yCAAyC;IACzC,iBAAiB,IAAI,UAAU,CAAC;IAChC,wDAAwD;IACxD,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,oDAAoD;IACpD,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC;IACzD,sDAAsD;IACtD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,+BAA+B;IAC/B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;IAC/C;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC;IACrD,qEAAqE;IACrE,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,kDAAkD;AAClD,qBAAa,cAAe,YAAW,QAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgE;IAC9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAmE;IAC1G,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAmE;IAC7G,OAAO,CAAC,cAAc,CAAgD;IAEtE,8BAA8B;IAC9B,MAAM,CAAC,GAAG;IAIV,+DAA+D;IAC/D,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;IAQnE,OAAO;IAEP,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,iBAAiB,IAAI,UAAU;IAI/B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/E,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAIxD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAI9C,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAIpD,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAM5B,KAAK;CACZ"}
@@ -45,5 +45,10 @@ export class InMemoryBlocks {
45
45
  getExtrinsic(hash) {
46
46
  return this.extrinsicsByHeaderHash.get(hash) ?? null;
47
47
  }
48
+ markUnused(hash) {
49
+ this.headersByHash.delete(hash);
50
+ this.extrinsicsByHeaderHash.delete(hash);
51
+ this.postStateRootByHeaderHash.delete(hash);
52
+ }
48
53
  async close() { }
49
54
  }
@@ -27,6 +27,7 @@ export declare class InMemorySerializedStates implements StatesDb<SerializedStat
27
27
  getStateRoot(state: SerializedState<LeafDb>): Promise<StateRootHash>;
28
28
  updateAndSetState(header: HeaderHash, state: SerializedState<LeafDb>, update: Partial<State & ServicesUpdate>): Promise<Result<OK, StateUpdateError>>;
29
29
  getState(header: HeaderHash): SerializedState<LeafDb> | null;
30
+ markUnused(header: HeaderHash): void;
30
31
  close(): Promise<void>;
31
32
  }
32
33
  //# sourceMappingURL=serialized-states-db.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serialized-states-db.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/serialized-states-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EACL,eAAe,EACf,KAAK,YAAY,EAGlB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,qCAAqC;AACrC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAEhG,sCAAsC;AACtC,qBAAa,wBAAyB,YAAW,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC;IAc1G,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAd1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAyE;IAC5F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8D;WAE1E,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,SAAS,CAAA;KAAE;IAKxD,MAAM,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAIpF,OAAO;IAKD,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAiBxG,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpE,iBAAiB,CACrB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,EAC9B,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAsBxC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI;IAkBtD,KAAK;CACZ"}
1
+ {"version":3,"file":"serialized-states-db.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/serialized-states-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EACL,eAAe,EACf,KAAK,YAAY,EAGlB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,qCAAqC;AACrC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAEhG,sCAAsC;AACtC,qBAAa,wBAAyB,YAAW,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC;IAc1G,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAd1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAyE;IAC5F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8D;WAE1E,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,SAAS,CAAA;KAAE;IAKxD,MAAM,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAIpF,OAAO;IAKD,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAiBxG,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpE,iBAAiB,CACrB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,EAC9B,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAsBxC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI;IAkB5D,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAI9B,KAAK;CACZ"}
@@ -70,5 +70,8 @@ export class InMemorySerializedStates {
70
70
  });
71
71
  return SerializedState.new(this.spec, this.blake2b, leafDb);
72
72
  }
73
+ markUnused(header) {
74
+ this.db.delete(header);
75
+ }
73
76
  async close() { }
74
77
  }
@@ -33,6 +33,8 @@ export interface StatesDb<T extends State = State> {
33
33
  updateAndSetState(header: HeaderHash, state: T, update: Partial<State & ServicesUpdate>): Promise<Result<OK, StateUpdateError>>;
34
34
  /** Retrieve posterior state of given header. */
35
35
  getState(header: HeaderHash): T | null;
36
+ /** Mark state as no longer needed. Backend may remove it asynchronously. */
37
+ markUnused(header: HeaderHash): void;
36
38
  /** Close the database and free resources. */
37
39
  close(): Promise<void>;
38
40
  }
@@ -46,6 +48,7 @@ export declare class InMemoryStates implements StatesDb<InMemoryState> {
46
48
  /** Insert a full state into the database. */
47
49
  insertInitialState(headerHash: HeaderHash, state: InMemoryState): Promise<Result<OK, StateUpdateError>>;
48
50
  getState(headerHash: HeaderHash): InMemoryState | null;
51
+ markUnused(header: HeaderHash): void;
49
52
  close(): Promise<void>;
50
53
  }
51
54
  //# sourceMappingURL=states.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/states.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,KAAK,EAAe,MAAM,kBAAkB,CAAC;AAE/F,OAAO,EAAe,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE3D,0DAA0D;AAC1D,oBAAY,gBAAgB;IAC1B,oDAAoD;IACpD,QAAQ,IAAI;IACZ,iDAAiD;IACjD,MAAM,IAAI;CACX;AAED,wFAAwF;AACxF,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,KAAK;IACrC,qEAAqE;IACrE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;CACpG;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IAC/C,4CAA4C;IAC5C,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAE/C;;;;OAIG;IACH,iBAAiB,CACf,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEzC,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC;IAEvC,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,qBAAa,cAAe,YAAW,QAAQ,CAAC,aAAa,CAAC;IAIhD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmE;IACtF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;gBAEd,IAAI,EAAE,SAAS;IAItC,iBAAiB,CACrB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAgBlC,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAKhE,6CAA6C;IACvC,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAM7G,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAShD,KAAK;CACZ"}
1
+ {"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/states.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,KAAK,EAAe,MAAM,kBAAkB,CAAC;AAE/F,OAAO,EAAe,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE3D,0DAA0D;AAC1D,oBAAY,gBAAgB;IAC1B,oDAAoD;IACpD,QAAQ,IAAI;IACZ,iDAAiD;IACjD,MAAM,IAAI;CACX;AAED,wFAAwF;AACxF,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,KAAK;IACrC,qEAAqE;IACrE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;CACpG;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IAC/C,4CAA4C;IAC5C,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAE/C;;;;OAIG;IACH,iBAAiB,CACf,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEzC,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC;IAEvC,4EAA4E;IAC5E,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAErC,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,qBAAa,cAAe,YAAW,QAAQ,CAAC,aAAa,CAAC;IAIhD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmE;IACtF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;gBAEd,IAAI,EAAE,SAAS;IAItC,iBAAiB,CACrB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAgBlC,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAKhE,6CAA6C;IACvC,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAM7G,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAStD,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAI9B,KAAK;CACZ"}
@@ -50,5 +50,8 @@ export class InMemoryStates {
50
50
  }
51
51
  return InMemoryState.copyFrom(this.spec, state, state.intoServicesData());
52
52
  }
53
+ markUnused(header) {
54
+ this.db.delete(header);
55
+ }
53
56
  async close() { }
54
57
  }
@@ -17,6 +17,7 @@ export declare class LmdbBlocks implements BlocksDb {
17
17
  getBestHeaderHash(): HeaderHash;
18
18
  getHeader(hash: HeaderHash): HeaderView | null;
19
19
  getExtrinsic(hash: HeaderHash): ExtrinsicView | null;
20
+ markUnused(hash: HeaderHash): void;
20
21
  close(): Promise<void>;
21
22
  }
22
23
  //# sourceMappingURL=blocks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-lmdb/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,aAAa,EAElB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,WAAW,CAAC;AAQjD,qBAAa,UAAW,YAAW,QAAQ;IAMvC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;gBAGpB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,QAAQ;IAa3B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAQlD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASlE,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,iBAAiB,IAAI,UAAU;IAS/B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAS9C,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAQ9C,KAAK;CAGZ"}
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-lmdb/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,aAAa,EAElB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,WAAW,CAAC;AAQjD,qBAAa,UAAW,YAAW,QAAQ;IAMvC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;gBAGpB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,QAAQ;IAa3B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAQlD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASlE,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,iBAAiB,IAAI,UAAU;IAS/B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAS9C,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAQpD,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAM5B,KAAK;CAGZ"}
@@ -68,6 +68,11 @@ export class LmdbBlocks {
68
68
  }
69
69
  return Decoder.decodeObject(Extrinsic.Codec.View, data, this.chainSpec);
70
70
  }
71
+ markUnused(hash) {
72
+ this.headers.removeSync(hash.raw);
73
+ this.extrinsics.removeSync(hash.raw);
74
+ this.postStateRoots.removeSync(hash.raw);
75
+ }
71
76
  async close() {
72
77
  await Promise.all([this.headers.close(), this.extrinsics.close(), this.postStateRoots.close()]);
73
78
  }
@@ -67,6 +67,7 @@ export declare class LmdbStates implements StatesDb<SerializedState<LeafDb>>, In
67
67
  updateAndSetState(headerHash: HeaderHash, state: SerializedState<LeafDb>, update: Partial<State & ServicesUpdate>): Promise<Result<OK, StateUpdateError>>;
68
68
  getStateRoot(state: SerializedState<LeafDb>): Promise<StateRootHash>;
69
69
  getState(root: HeaderHash): SerializedState<LeafDb> | null;
70
+ markUnused(header: HeaderHash): void;
70
71
  close(): Promise<void>;
71
72
  }
72
73
  //# sourceMappingURL=states.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-lmdb/states.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,EAAE,KAAK,QAAQ,EAAE,gBAAgB,EAAe,MAAM,qBAAqB,CAAC;AAC9G,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,iBAAiB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAgD,MAAM,gCAAgC,CAAC;AAG/G,OAAO,EAAE,EAAE,EAAE,MAAM,EAAkB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,WAAW,CAAC;AAGjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,qBAAa,UAAW,YAAW,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC;IAK5F,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAGZ,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,QAAQ;IAM3B,kBAAkB,CACtB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,YAAY,GAC5B,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAQ1B,eAAe;IA0BvB,iBAAiB,CACrB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,EAC9B,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAWlC,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAI1E,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI;IAsBpD,KAAK;CAGZ"}
1
+ {"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-lmdb/states.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,EAAE,KAAK,QAAQ,EAAE,gBAAgB,EAAe,MAAM,qBAAqB,CAAC;AAC9G,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,iBAAiB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAgD,MAAM,gCAAgC,CAAC;AAG/G,OAAO,EAAE,EAAE,EAAE,MAAM,EAAkB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,WAAW,CAAC;AAGjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,qBAAa,UAAW,YAAW,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC;IAK5F,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAGZ,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,QAAQ;IAM3B,kBAAkB,CACtB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,YAAY,GAC5B,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAQ1B,eAAe;IA0BvB,iBAAiB,CACrB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,EAC9B,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAWlC,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAI1E,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI;IAsB1D,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAI9B,KAAK;CAGZ"}
@@ -125,6 +125,9 @@ export class LmdbStates {
125
125
  }
126
126
  return SerializedState.new(this.spec, this.blake2b, leafDbResult.ok);
127
127
  }
128
+ markUnused(header) {
129
+ this.states.removeSync(header.raw);
130
+ }
128
131
  async close() {
129
132
  await Promise.all([this.states.close(), this.values.close()]);
130
133
  }
@@ -1,15 +1,36 @@
1
- import type { Segment, SegmentIndex, ServiceId } from "#@typeberry/block";
1
+ import { type Segment, type SegmentIndex, type ServiceId } from "#@typeberry/block";
2
2
  import type { BytesBlob } from "#@typeberry/bytes";
3
3
  import type { Blake2bHash } from "#@typeberry/hash";
4
- import type { MachineId, MachineResult, MemoryOperation, NoMachineError, PagesError, PeekPokeError, ProgramCounter, RefineExternalities, SegmentExportError, ZeroVoidError } from "#@typeberry/jam-host-calls";
4
+ import { type MachineId, type MachineResult, type MemoryOperation, type NoMachineError, type PagesError, type PeekPokeError, type ProgramCounter, type RefineExternalities, SegmentExportError, type ZeroVoidError } from "#@typeberry/jam-host-calls";
5
5
  import type { U64 } from "#@typeberry/numbers";
6
6
  import type { HostCallMemory, HostCallRegisters } from "#@typeberry/pvm-host-calls";
7
7
  import type { BigGas } from "#@typeberry/pvm-interface";
8
8
  import type { ProgramDecoderError } from "#@typeberry/pvm-interpreter";
9
- import type { OK, Result } from "#@typeberry/utils";
9
+ import type { State } from "#@typeberry/state";
10
+ import { type OK, Result } from "#@typeberry/utils";
11
+ /**
12
+ * Parameters required to create a RefineExternalitiesImpl.
13
+ */
14
+ export type RefineExternalitiesParams = {
15
+ /** The service currently being refined. */
16
+ currentServiceId: ServiceId;
17
+ /** State at the lookup anchor block, used for historical preimage lookups. */
18
+ lookupState: State;
19
+ /** Export offset -- sum of exports from prior work items in this package. */
20
+ exportOffset: number;
21
+ };
10
22
  export declare class RefineExternalitiesImpl implements RefineExternalities {
11
- static create(): RefineExternalitiesImpl;
23
+ /** Service being refined (used as default for historicalLookup). */
24
+ private readonly currentServiceId;
25
+ /** State at the lookup anchor for preimage lookups. */
26
+ private readonly lookupState;
27
+ /** Segments exported by this work item during refinement. */
28
+ private readonly exportedSegments;
29
+ /** Offset for segment indexing (sum of exports from prior items). */
30
+ private readonly exportOffset;
31
+ static create(params: RefineExternalitiesParams): RefineExternalitiesImpl;
12
32
  private constructor();
33
+ getExportedSegments(): readonly Segment[];
13
34
  machineExpunge(_machineIndex: MachineId): Promise<Result<ProgramCounter, NoMachineError>>;
14
35
  machinePages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64, _requestType: MemoryOperation | null): Promise<Result<OK, PagesError>>;
15
36
  machineVoidPages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
@@ -18,7 +39,7 @@ export declare class RefineExternalitiesImpl implements RefineExternalities {
18
39
  machinePokeInto(_machineIndex: MachineId, _sourceStart: U64, _destinationStart: U64, _length: U64, _source: HostCallMemory): Promise<Result<OK, PeekPokeError>>;
19
40
  machineInit(_code: BytesBlob, _programCounter: ProgramCounter): Promise<Result<MachineId, ProgramDecoderError>>;
20
41
  machineInvoke(_machineIndex: MachineId, _gas: BigGas, _registers: HostCallRegisters): Promise<Result<MachineResult, NoMachineError>>;
21
- exportSegment(_segment: Segment): Result<SegmentIndex, SegmentExportError>;
22
- historicalLookup(_serviceId: ServiceId | null, _hash: Blake2bHash): Promise<BytesBlob | null>;
42
+ exportSegment(segment: Segment): Result<SegmentIndex, SegmentExportError>;
43
+ historicalLookup(serviceId: ServiceId | null, hash: Blake2bHash): Promise<BytesBlob | null>;
23
44
  }
24
45
  //# sourceMappingURL=refine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,MAAM,CAAC,MAAM;IAIb,OAAO;IAEP,cAAc,CAAC,aAAa,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAIzF,YAAY,CACV,aAAa,EAAE,SAAS,EACxB,UAAU,EAAE,GAAG,EACf,UAAU,EAAE,GAAG,EACf,YAAY,EAAE,eAAe,GAAG,IAAI,GACnC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAIlC,gBAAgB,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAIhH,gBAAgB,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAIhH,eAAe,CACb,aAAa,EAAE,SAAS,EACxB,iBAAiB,EAAE,GAAG,EACtB,YAAY,EAAE,GAAG,EACjB,OAAO,EAAE,GAAG,EACZ,YAAY,EAAE,cAAc,GAC3B,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAIrC,eAAe,CACb,aAAa,EAAE,SAAS,EACxB,YAAY,EAAE,GAAG,EACjB,iBAAiB,EAAE,GAAG,EACtB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAIrC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAI/G,aAAa,CACX,aAAa,EAAE,SAAS,EACxB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,iBAAiB,GAC5B,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAIjD,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAI1E,gBAAgB,CAAC,UAAU,EAAE,SAAS,GAAG,IAAI,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAG9F"}
1
+ {"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,26 @@
1
+ import { MAX_NUMBER_OF_EXPORTS_WP, tryAsSegmentIndex, } from "#@typeberry/block";
2
+ import { SegmentExportError, } from "#@typeberry/jam-host-calls";
3
+ import { Result } from "#@typeberry/utils";
1
4
  export class RefineExternalitiesImpl {
2
- static create() {
3
- return new RefineExternalitiesImpl();
5
+ /** Service being refined (used as default for historicalLookup). */
6
+ currentServiceId;
7
+ /** State at the lookup anchor for preimage lookups. */
8
+ lookupState;
9
+ /** Segments exported by this work item during refinement. */
10
+ exportedSegments = [];
11
+ /** Offset for segment indexing (sum of exports from prior items). */
12
+ exportOffset;
13
+ static create(params) {
14
+ return new RefineExternalitiesImpl(params);
15
+ }
16
+ constructor(params) {
17
+ this.currentServiceId = params.currentServiceId;
18
+ this.lookupState = params.lookupState;
19
+ this.exportOffset = params.exportOffset;
20
+ }
21
+ getExportedSegments() {
22
+ return this.exportedSegments;
4
23
  }
5
- constructor() { }
6
24
  machineExpunge(_machineIndex) {
7
25
  throw new Error("Method not implemented.");
8
26
  }
@@ -27,10 +45,25 @@ export class RefineExternalitiesImpl {
27
45
  machineInvoke(_machineIndex, _gas, _registers) {
28
46
  throw new Error("Method not implemented.");
29
47
  }
30
- exportSegment(_segment) {
31
- throw new Error("Method not implemented.");
48
+ exportSegment(segment) {
49
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/335d03335d03?v=0.7.2
50
+ const currentIndex = this.exportOffset + this.exportedSegments.length;
51
+ if (currentIndex >= MAX_NUMBER_OF_EXPORTS_WP) {
52
+ return Result.error(SegmentExportError, () => `Maximum number of exported segments exceeded (offset: ${this.exportOffset}, exported: ${this.exportedSegments.length})`);
53
+ }
54
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/337303337303?v=0.7.2
55
+ this.exportedSegments.push(segment);
56
+ return Result.ok(tryAsSegmentIndex(currentIndex));
32
57
  }
33
- historicalLookup(_serviceId, _hash) {
34
- throw new Error("Method not implemented.");
58
+ historicalLookup(serviceId, hash) {
59
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/33d70133f901?v=0.7.2
60
+ const sid = serviceId ?? this.currentServiceId;
61
+ const service = this.lookupState.getService(sid);
62
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/334802334802?v=0.7.2
63
+ if (service === null) {
64
+ return Promise.resolve(null);
65
+ }
66
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/334f02334f02?v=0.7.2
67
+ return Promise.resolve(service.getPreimage(hash.asOpaque()));
35
68
  }
36
69
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=refine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refine.test.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine.test.ts"],"names":[],"mappings":""}