@typeberry/lib 0.5.9 → 0.5.10-44bf91a

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 (144) hide show
  1. package/package.json +1 -1
  2. package/packages/core/codec/encoder.d.ts +1 -1
  3. package/packages/core/codec/encoder.d.ts.map +1 -1
  4. package/packages/core/codec/encoder.js +3 -2
  5. package/packages/core/pvm-interface/pvm.d.ts +2 -0
  6. package/packages/core/pvm-interface/pvm.d.ts.map +1 -1
  7. package/packages/jam/block/block.d.ts +3 -3
  8. package/packages/jam/block/header.d.ts +6 -6
  9. package/packages/jam/block/test-helpers.d.ts +2 -2
  10. package/packages/jam/block/tickets.d.ts +5 -6
  11. package/packages/jam/block/tickets.d.ts.map +1 -1
  12. package/packages/jam/block/tickets.js +2 -10
  13. package/packages/jam/block/work-item-segment.d.ts +23 -6
  14. package/packages/jam/block/work-item-segment.d.ts.map +1 -1
  15. package/packages/jam/block/work-item-segment.js +24 -7
  16. package/packages/jam/block/work-item.d.ts +3 -3
  17. package/packages/jam/block/work-item.d.ts.map +1 -1
  18. package/packages/jam/block/work-item.js +7 -3
  19. package/packages/jam/block/work-package.d.ts +2 -2
  20. package/packages/jam/block/work-package.d.ts.map +1 -1
  21. package/packages/jam/block/work-package.js +2 -6
  22. package/packages/jam/block-json/block.d.ts +2 -2
  23. package/packages/jam/block-json/block.js +1 -1
  24. package/packages/jam/block-json/common.d.ts +1 -2
  25. package/packages/jam/block-json/common.d.ts.map +1 -1
  26. package/packages/jam/block-json/common.js +2 -2
  27. package/packages/jam/block-json/extrinsic.js +1 -1
  28. package/packages/jam/block-json/header.d.ts +1 -2
  29. package/packages/jam/block-json/header.d.ts.map +1 -1
  30. package/packages/jam/block-json/header.js +32 -34
  31. package/packages/jam/block-json/tickets-extrinsic.d.ts +1 -2
  32. package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
  33. package/packages/jam/block-json/tickets-extrinsic.js +5 -7
  34. package/packages/jam/block-json/work-result.js +2 -2
  35. package/packages/jam/database/blocks.d.ts +3 -0
  36. package/packages/jam/database/blocks.d.ts.map +1 -1
  37. package/packages/jam/database/blocks.js +5 -0
  38. package/packages/jam/database-lmdb/blocks.d.ts +1 -0
  39. package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
  40. package/packages/jam/database-lmdb/blocks.js +5 -0
  41. package/packages/jam/database-lmdb/states.js +1 -1
  42. package/packages/jam/executor/pvm-executor.d.ts +2 -2
  43. package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
  44. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  45. package/packages/jam/in-core/externalities/refine.d.ts +42 -11
  46. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  47. package/packages/jam/in-core/externalities/refine.js +95 -11
  48. package/packages/jam/in-core/externalities/refine.test.d.ts +2 -0
  49. package/packages/jam/in-core/externalities/refine.test.d.ts.map +1 -0
  50. package/packages/jam/in-core/externalities/refine.test.js +263 -0
  51. package/packages/jam/in-core/in-core.d.ts +1 -1
  52. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  53. package/packages/jam/in-core/in-core.js +17 -10
  54. package/packages/jam/jam-host-calls/accumulate/bless.js +9 -9
  55. package/packages/jam/jam-host-calls/externalities/partial-state.d.ts +1 -1
  56. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +3 -1
  57. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  58. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
  59. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
  60. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
  61. package/packages/jam/jam-host-calls/general/fetch.d.ts +159 -98
  62. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  63. package/packages/jam/jam-host-calls/general/fetch.js +110 -16
  64. package/packages/jam/jam-host-calls/general/fetch.test.js +87 -56
  65. package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
  66. package/packages/jam/jam-host-calls/refine/export.js +1 -1
  67. package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
  68. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
  69. package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
  70. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +1 -1
  71. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +1 -1
  72. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
  73. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  74. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
  75. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  76. package/packages/jam/node/main-fuzz.js +1 -0
  77. package/packages/jam/node/main-importer.d.ts +1 -0
  78. package/packages/jam/node/main-importer.d.ts.map +1 -1
  79. package/packages/jam/node/main-importer.js +1 -0
  80. package/packages/jam/node/main.d.ts.map +1 -1
  81. package/packages/jam/node/main.js +1 -0
  82. package/packages/jam/node/reader.d.ts +2 -2
  83. package/packages/jam/node/workers.d.ts +22 -22
  84. package/packages/jam/safrole/bandersnatch-vrf.d.ts +1 -2
  85. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  86. package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
  87. package/packages/jam/safrole/bandersnatch-vrf.test.js +2 -3
  88. package/packages/jam/safrole/safrole.test.js +72 -80
  89. package/packages/jam/state/safrole-data.d.ts +1 -1
  90. package/packages/jam/state/test.utils.js +1 -1
  91. package/packages/jam/state-json/dump.js +2 -2
  92. package/packages/jam/state-json/safrole.d.ts +2 -2
  93. package/packages/jam/state-json/safrole.d.ts.map +1 -1
  94. package/packages/jam/state-json/safrole.js +4 -4
  95. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
  96. package/packages/jam/state-vectors/index.d.ts +7 -8
  97. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  98. package/packages/jam/state-vectors/index.js +4 -6
  99. package/packages/jam/transition/accumulate/accumulate.js +2 -2
  100. package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +48 -39
  101. package/packages/jam/transition/externalities/accumulate-externalities.d.ts +2 -2
  102. package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
  103. package/packages/jam/transition/externalities/accumulate-externalities.js +20 -7
  104. package/packages/jam/transition/externalities/accumulate-externalities.test.js +74 -4
  105. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
  106. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
  107. package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
  108. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
  109. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
  110. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
  111. package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
  112. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  113. package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
  114. package/packages/jam/transition/externalities/index.d.ts +2 -0
  115. package/packages/jam/transition/externalities/index.d.ts.map +1 -1
  116. package/packages/jam/transition/externalities/index.js +2 -0
  117. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +23 -0
  118. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
  119. package/packages/jam/transition/externalities/refine-fetch-externalities.js +48 -0
  120. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
  121. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
  122. package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
  123. package/packages/jam/transition/hasher.test.js +1 -1
  124. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  125. package/packages/workers/block-authorship/main.js +1 -1
  126. package/packages/workers/block-authorship/protocol.d.ts +4 -4
  127. package/packages/workers/block-authorship/ticket-generator.d.ts +1 -2
  128. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
  129. package/packages/workers/block-authorship/ticket-generator.js +2 -2
  130. package/packages/workers/block-authorship/ticket-generator.test.js +10 -11
  131. package/packages/workers/comms-authorship-network/protocol.d.ts +1 -1
  132. package/packages/workers/comms-authorship-network/tickets-message.d.ts +1 -1
  133. package/packages/workers/importer/importer.d.ts +1 -0
  134. package/packages/workers/importer/importer.d.ts.map +1 -1
  135. package/packages/workers/importer/importer.js +7 -2
  136. package/packages/workers/importer/main.d.ts.map +1 -1
  137. package/packages/workers/importer/main.js +2 -0
  138. package/packages/workers/importer/protocol.d.ts +12 -9
  139. package/packages/workers/importer/protocol.d.ts.map +1 -1
  140. package/packages/workers/importer/protocol.js +8 -3
  141. package/packages/workers/jam-network/protocol.d.ts +10 -10
  142. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
  143. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
  144. package/packages/jam/transition/externalities/fetch-externalities.test.js +0 -254
@@ -14,38 +14,36 @@ const epochMark = json.object({
14
14
  tickets_entropy: fromJson.bytes32(),
15
15
  validators: json.array(validatorKeysFromJson),
16
16
  }, (x) => EpochMarker.create({ entropy: x.entropy, ticketsEntropy: x.tickets_entropy, validators: x.validators }));
17
- export const headerFromJson = (spec) => {
18
- const ticket = json.object({
19
- id: fromJson.bytes32(),
20
- attempt: fromJson.ticketAttempt(spec),
21
- }, (x) => Ticket.create({ id: x.id, attempt: x.attempt }));
22
- return json.object({
23
- parent: fromJson.bytes32(),
24
- parent_state_root: fromJson.bytes32(),
25
- extrinsic_hash: fromJson.bytes32(),
26
- slot: "number",
27
- epoch_mark: json.optional(epochMark),
28
- tickets_mark: json.optional(json.array(ticket)),
29
- offenders_mark: json.array(fromJson.bytes32()),
30
- author_index: "number",
31
- entropy_source: bandersnatchVrfSignature,
32
- seal: bandersnatchVrfSignature,
33
- }, ({ parent, parent_state_root, extrinsic_hash, slot, epoch_mark, tickets_mark, offenders_mark, author_index, entropy_source, seal, }) => {
34
- const epochMarker = epoch_mark ?? null;
35
- const ticketsMarker = tickets_mark === undefined || tickets_mark === null
36
- ? null
37
- : TicketsMarker.create({ tickets: asOpaqueType(tickets_mark) });
38
- return Header.create({
39
- parentHeaderHash: parent,
40
- priorStateRoot: parent_state_root,
41
- extrinsicHash: extrinsic_hash,
42
- timeSlotIndex: slot,
43
- epochMarker,
44
- ticketsMarker,
45
- offendersMarker: offenders_mark,
46
- bandersnatchBlockAuthorIndex: author_index,
47
- entropySource: entropy_source,
48
- seal,
49
- });
17
+ const ticket = json.object({
18
+ id: fromJson.bytes32(),
19
+ attempt: fromJson.ticketAttempt,
20
+ }, (x) => Ticket.create({ id: x.id, attempt: x.attempt }));
21
+ export const headerFromJson = json.object({
22
+ parent: fromJson.bytes32(),
23
+ parent_state_root: fromJson.bytes32(),
24
+ extrinsic_hash: fromJson.bytes32(),
25
+ slot: "number",
26
+ epoch_mark: json.optional(epochMark),
27
+ tickets_mark: json.optional(json.array(ticket)),
28
+ offenders_mark: json.array(fromJson.bytes32()),
29
+ author_index: "number",
30
+ entropy_source: bandersnatchVrfSignature,
31
+ seal: bandersnatchVrfSignature,
32
+ }, ({ parent, parent_state_root, extrinsic_hash, slot, epoch_mark, tickets_mark, offenders_mark, author_index, entropy_source, seal, }) => {
33
+ const epochMarker = epoch_mark ?? null;
34
+ const ticketsMarker = tickets_mark === undefined || tickets_mark === null
35
+ ? null
36
+ : TicketsMarker.create({ tickets: asOpaqueType(tickets_mark) });
37
+ return Header.create({
38
+ parentHeaderHash: parent,
39
+ priorStateRoot: parent_state_root,
40
+ extrinsicHash: extrinsic_hash,
41
+ timeSlotIndex: slot,
42
+ epochMarker,
43
+ ticketsMarker,
44
+ offendersMarker: offenders_mark,
45
+ bandersnatchBlockAuthorIndex: author_index,
46
+ entropySource: entropy_source,
47
+ seal,
50
48
  });
51
- };
49
+ });
@@ -1,4 +1,3 @@
1
1
  import { SignedTicket } from "#@typeberry/block/tickets.js";
2
- import type { ChainSpec } from "#@typeberry/config";
3
- export declare const ticketsExtrinsicFromJson: (spec: ChainSpec) => ["array", import("@typeberry/json-parser").FromJsonWithParser<string, SignedTicket> | import("@typeberry/json-parser").FromJsonWithParser<number, SignedTicket> | import("@typeberry/json-parser").FromJsonWithParser<unknown, SignedTicket> | import("@typeberry/json-parser").ObjectFromJson<SignedTicket> | import("@typeberry/json-parser").FromJsonOptional<SignedTicket> | import("@typeberry/json-parser").Parser<unknown, SignedTicket[]>];
2
+ export declare const ticketsExtrinsicFromJson: ["array", import("@typeberry/json-parser").FromJsonWithParser<string, SignedTicket> | import("@typeberry/json-parser").FromJsonWithParser<number, SignedTicket> | import("@typeberry/json-parser").FromJsonWithParser<unknown, SignedTicket> | import("@typeberry/json-parser").ObjectFromJson<SignedTicket> | import("@typeberry/json-parser").FromJsonOptional<SignedTicket> | import("@typeberry/json-parser").Parser<unknown, SignedTicket[]>];
4
3
  //# sourceMappingURL=tickets-extrinsic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tickets-extrinsic.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block-json/tickets-extrinsic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAKnD,eAAO,MAAM,wBAAwB,GAAI,MAAM,SAAS,ubAUvD,CAAC"}
1
+ {"version":3,"file":"tickets-extrinsic.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block-json/tickets-extrinsic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAc3D,eAAO,MAAM,wBAAwB,obAAqC,CAAC"}
@@ -3,10 +3,8 @@ import { Bytes } from "#@typeberry/bytes";
3
3
  import { BANDERSNATCH_PROOF_BYTES } from "#@typeberry/crypto/bandersnatch.js";
4
4
  import { json } from "#@typeberry/json-parser";
5
5
  import { fromJson } from "./common.js";
6
- export const ticketsExtrinsicFromJson = (spec) => {
7
- const ticketEnvelopeFromJson = json.object({
8
- attempt: fromJson.ticketAttempt(spec),
9
- signature: json.fromString((v) => Bytes.parseBytes(v, BANDERSNATCH_PROOF_BYTES).asOpaque()),
10
- }, (x) => SignedTicket.create({ attempt: x.attempt, signature: x.signature }));
11
- return json.array(ticketEnvelopeFromJson);
12
- };
6
+ const ticketEnvelopeFromJson = json.object({
7
+ attempt: fromJson.ticketAttempt,
8
+ signature: json.fromString((v) => Bytes.parseBytes(v, BANDERSNATCH_PROOF_BYTES).asOpaque()),
9
+ }, (x) => SignedTicket.create({ attempt: x.attempt, signature: x.signature }));
10
+ export const ticketsExtrinsicFromJson = json.array(ticketEnvelopeFromJson);
@@ -35,13 +35,13 @@ const workExecResultFromJson = json.object({
35
35
  throw new Error("Invalid WorkExecResult");
36
36
  });
37
37
  const workRefineLoadFromJson = json.object({
38
- gas_used: json.fromNumber((x) => tryAsServiceGas(x)),
38
+ gas_used: json.fromBigInt((x) => tryAsServiceGas(x)),
39
39
  imports: "number",
40
40
  extrinsic_count: "number",
41
41
  extrinsic_size: "number",
42
42
  exports: "number",
43
43
  }, ({ gas_used, imports, extrinsic_count, extrinsic_size, exports }) => WorkRefineLoad.create({
44
- gasUsed: tryAsServiceGas(gas_used),
44
+ gasUsed: gas_used,
45
45
  importedSegments: tryAsU32(imports),
46
46
  extrinsicCount: tryAsU32(extrinsic_count),
47
47
  extrinsicSize: tryAsU32(extrinsic_size),
@@ -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
  }
@@ -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
  }
@@ -126,7 +126,7 @@ export class LmdbStates {
126
126
  return SerializedState.new(this.spec, this.blake2b, leafDbResult.ok);
127
127
  }
128
128
  markUnused(header) {
129
- this.states.remove(header.raw);
129
+ this.states.removeSync(header.raw);
130
130
  }
131
131
  async close() {
132
132
  await Promise.all([this.states.close(), this.values.close()]);
@@ -6,11 +6,11 @@ import type { PartialState } from "#@typeberry/jam-host-calls/externalities/part
6
6
  import { type RefineExternalities } from "#@typeberry/jam-host-calls/externalities/refine-externalities.js";
7
7
  export type RefineHostCallExternalities = {
8
8
  refine: RefineExternalities;
9
- fetchExternalities: general.IFetchExternalities;
9
+ fetchExternalities: general.IRefineFetch;
10
10
  };
11
11
  export type AccumulateHostCallExternalities = {
12
12
  partialState: PartialState;
13
- fetchExternalities: general.IFetchExternalities;
13
+ fetchExternalities: general.IAccumulateFetch;
14
14
  serviceExternalities: general.AccountsInfo & general.AccountsLookup & general.AccountsWrite & general.AccountsRead;
15
15
  };
16
16
  type OnTransferHostCallExternalities = {
@@ -1 +1 @@
1
- {"version":3,"file":"pvm-executor.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/executor/pvm-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAc,OAAO,EAAU,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0DAA0D,CAAC;AAC7F,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,iEAAiE,CAAC;AAuCzE,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC,mBAAmB,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAChD,oBAAoB,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CACpH,CAAC;AAEF,KAAK,+BAA+B,GAAG;IACrC,YAAY,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3G,kBAAkB,EAAE,OAAO,CAAC,mBAAmB,CAAC;CACjD,CAAC;AAUF;;GAEG;AACH,qBAAa,WAAW;IAKpB,OAAO,CAAC,WAAW;IAEnB,OAAO,CAAC,UAAU;IANpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO;mBAac,cAAc;IAInC,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAerC,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAuBzC,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAazC;;;;;;OAMG;IACG,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU;;;;;;;;IAQ1C,qEAAqE;WACxD,oBAAoB,CAC/B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,2BAA2B,EAC1C,GAAG,EAAE,UAAU;IAOjB,yEAAyE;WAC5D,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,+BAA+B,EAC9C,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,UAAU;IAQjB,0EAA0E;WAC7D,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,+BAA+B,EAC9C,GAAG,EAAE,UAAU;CAMlB"}
1
+ {"version":3,"file":"pvm-executor.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/executor/pvm-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAc,OAAO,EAAU,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0DAA0D,CAAC;AAC7F,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,iEAAiE,CAAC;AAuCzE,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC,YAAY,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAC7C,oBAAoB,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CACpH,CAAC;AAEF,KAAK,+BAA+B,GAAG;IACrC,YAAY,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3G,kBAAkB,EAAE,OAAO,CAAC,mBAAmB,CAAC;CACjD,CAAC;AAUF;;GAEG;AACH,qBAAa,WAAW;IAKpB,OAAO,CAAC,WAAW;IAEnB,OAAO,CAAC,UAAU;IANpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO;mBAac,cAAc;IAInC,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAerC,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAuBzC,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAazC;;;;;;OAMG;IACG,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU;;;;;;;;IAQ1C,qEAAqE;WACxD,oBAAoB,CAC/B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,2BAA2B,EAC1C,GAAG,EAAE,UAAU;IAOjB,yEAAyE;WAC5D,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,+BAA+B,EAC9C,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,UAAU;IAQjB,0EAA0E;WAC7D,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,+BAA+B,EAC9C,GAAG,EAAE,UAAU;CAMlB"}
@@ -140,7 +140,7 @@ export declare class Initialize extends WithDebug {
140
140
  ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
141
141
  tickets: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<import("@typeberry/block").Ticket, import("@typeberry/codec").ViewOf<import("@typeberry/block").Ticket, {
142
142
  id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
143
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, U32>;
143
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, U32>;
144
144
  }>>>;
145
145
  }> | null>;
146
146
  bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
@@ -1,24 +1,55 @@
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
+ import type { PvmBackend } from "#@typeberry/config";
3
4
  import type { Blake2bHash } from "#@typeberry/hash";
4
- import type { MachineId, MachineResult, MemoryOperation, NoMachineError, PagesError, PeekPokeError, ProgramCounter, RefineExternalities, SegmentExportError, ZeroVoidError } from "#@typeberry/jam-host-calls";
5
+ import { type MachineId, type MachineResult, type MemoryOperation, NoMachineError, type PagesError, type PeekPokeError, type ProgramCounter, type RefineExternalities, SegmentExportError, type ZeroVoidError } from "#@typeberry/jam-host-calls";
5
6
  import type { U64 } from "#@typeberry/numbers";
6
- import type { HostCallMemory, HostCallRegisters } from "#@typeberry/pvm-host-calls";
7
- import type { BigGas } from "#@typeberry/pvm-interface";
8
- import type { ProgramDecoderError } from "#@typeberry/pvm-interpreter";
9
- import type { OK, Result } from "#@typeberry/utils";
7
+ import { type HostCallMemory, type HostCallRegisters } from "#@typeberry/pvm-host-calls";
8
+ import { type BigGas } from "#@typeberry/pvm-interface";
9
+ import { type ProgramDecoderError } from "#@typeberry/pvm-interpreter";
10
+ import type { State } from "#@typeberry/state";
11
+ import { type OK, Result } from "#@typeberry/utils";
12
+ /**
13
+ * Parameters required to create a RefineExternalitiesImpl.
14
+ */
15
+ export type RefineExternalitiesParams = {
16
+ /** The service currently being refined. */
17
+ currentServiceId: ServiceId;
18
+ /** State at the lookup anchor block, used for historical preimage lookups. */
19
+ lookupState: State;
20
+ /** Export offset -- sum of exports from prior work items in this package. */
21
+ exportOffset: number;
22
+ /**
23
+ * PVM backend to use for creating inner PVM instances.
24
+ * NIT: Could accept PVMInstanceManager
25
+ */
26
+ pvmBackend: PvmBackend;
27
+ };
10
28
  export declare class RefineExternalitiesImpl implements RefineExternalities {
11
- static create(): RefineExternalitiesImpl;
29
+ /** Inner PVM instances sorted by MachineId. */
30
+ private machines;
31
+ /** Service being refined (used as default for historicalLookup). */
32
+ private readonly currentServiceId;
33
+ /** State at the lookup anchor for preimage lookups. */
34
+ private readonly lookupState;
35
+ /** Segments exported by this work item during refinement. */
36
+ private readonly exportedSegments;
37
+ /** Offset for segment indexing (sum of exports from prior items). */
38
+ private readonly exportOffset;
39
+ /** PVM backend for creating inner machines. */
40
+ private readonly pvmBackend;
41
+ static create(params: RefineExternalitiesParams): RefineExternalitiesImpl;
12
42
  private constructor();
13
- machineExpunge(_machineIndex: MachineId): Promise<Result<ProgramCounter, NoMachineError>>;
43
+ getExportedSegments(): readonly Segment[];
44
+ machineExpunge(machineIndex: MachineId): Promise<Result<ProgramCounter, NoMachineError>>;
14
45
  machinePages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64, _requestType: MemoryOperation | null): Promise<Result<OK, PagesError>>;
15
46
  machineVoidPages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
16
47
  machineZeroPages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
17
48
  machinePeekFrom(_machineIndex: MachineId, _destinationStart: U64, _sourceStart: U64, _length: U64, _destination: HostCallMemory): Promise<Result<OK, PeekPokeError>>;
18
49
  machinePokeInto(_machineIndex: MachineId, _sourceStart: U64, _destinationStart: U64, _length: U64, _source: HostCallMemory): Promise<Result<OK, PeekPokeError>>;
19
- machineInit(_code: BytesBlob, _programCounter: ProgramCounter): Promise<Result<MachineId, ProgramDecoderError>>;
50
+ machineInit(code: BytesBlob, programCounter: ProgramCounter): Promise<Result<MachineId, ProgramDecoderError>>;
20
51
  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>;
52
+ exportSegment(segment: Segment): Result<SegmentIndex, SegmentExportError>;
53
+ historicalLookup(serviceId: ServiceId | null, hash: Blake2bHash): Promise<BytesBlob | null>;
23
54
  }
24
55
  //# 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,10 +1,54 @@
1
+ import { MAX_NUMBER_OF_EXPORTS_WP, tryAsSegmentIndex, } from "#@typeberry/block";
2
+ import { SortedArray } from "#@typeberry/collections";
3
+ import { NoMachineError, SegmentExportError, tryAsMachineId, tryAsProgramCounter, } from "#@typeberry/jam-host-calls";
4
+ import { Ordering } from "#@typeberry/ordering";
5
+ import { PvmInstanceManager } from "#@typeberry/pvm-host-calls";
6
+ import { tryAsGas } from "#@typeberry/pvm-interface";
7
+ import { ProgramDecoder } from "#@typeberry/pvm-interpreter";
8
+ import { Result } from "#@typeberry/utils";
9
+ const machineComparator = (a, b) => {
10
+ if (a[0] < b[0]) {
11
+ return Ordering.Less;
12
+ }
13
+ if (a[0] > b[0]) {
14
+ return Ordering.Greater;
15
+ }
16
+ return Ordering.Equal;
17
+ };
1
18
  export class RefineExternalitiesImpl {
2
- static create() {
3
- return new RefineExternalitiesImpl();
19
+ /** Inner PVM instances sorted by MachineId. */
20
+ machines = SortedArray.fromSortedArray(machineComparator);
21
+ /** Service being refined (used as default for historicalLookup). */
22
+ currentServiceId;
23
+ /** State at the lookup anchor for preimage lookups. */
24
+ lookupState;
25
+ /** Segments exported by this work item during refinement. */
26
+ exportedSegments = [];
27
+ /** Offset for segment indexing (sum of exports from prior items). */
28
+ exportOffset;
29
+ /** PVM backend for creating inner machines. */
30
+ pvmBackend;
31
+ static create(params) {
32
+ return new RefineExternalitiesImpl(params);
4
33
  }
5
- constructor() { }
6
- machineExpunge(_machineIndex) {
7
- throw new Error("Method not implemented.");
34
+ constructor(params) {
35
+ this.currentServiceId = params.currentServiceId;
36
+ this.lookupState = params.lookupState;
37
+ this.exportOffset = params.exportOffset;
38
+ this.pvmBackend = params.pvmBackend;
39
+ }
40
+ getExportedSegments() {
41
+ return this.exportedSegments;
42
+ }
43
+ machineExpunge(machineIndex) {
44
+ // We just care about machineIndex
45
+ const entry = this.machines.findExact([machineIndex, undefined]);
46
+ if (entry === undefined) {
47
+ return Promise.resolve(Result.error(NoMachineError, () => `Machine not found (id: ${machineIndex})`));
48
+ }
49
+ const pc = tryAsProgramCounter(entry[1].getPC());
50
+ this.machines.removeOne(entry);
51
+ return Promise.resolve(Result.ok(pc));
8
52
  }
9
53
  machinePages(_machineIndex, _pageStart, _pageCount, _requestType) {
10
54
  throw new Error("Method not implemented.");
@@ -21,16 +65,56 @@ export class RefineExternalitiesImpl {
21
65
  machinePokeInto(_machineIndex, _sourceStart, _destinationStart, _length, _source) {
22
66
  throw new Error("Method not implemented.");
23
67
  }
24
- machineInit(_code, _programCounter) {
25
- throw new Error("Method not implemented.");
68
+ async machineInit(code, programCounter) {
69
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/346400346400?v=0.7.2
70
+ const deblobResult = ProgramDecoder.deblob(code.raw);
71
+ if (deblobResult.isError) {
72
+ return Result.error(deblobResult.error, deblobResult.details);
73
+ }
74
+ const manager = await PvmInstanceManager.new(this.pvmBackend);
75
+ const innerPvm = await manager.getInstance();
76
+ innerPvm.resetGeneric(code.raw, Number(programCounter), tryAsGas(0));
77
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/348c00348c00?v=0.7.2
78
+ // Binary search for the minimal free MachineId
79
+ const arr = this.machines.array;
80
+ let low = 0;
81
+ let high = arr.length;
82
+ while (low < high) {
83
+ const mid = (low + high) >> 1;
84
+ if (arr[mid][0] > BigInt(mid)) {
85
+ high = mid;
86
+ }
87
+ else {
88
+ low = mid + 1;
89
+ }
90
+ }
91
+ const machineId = tryAsMachineId(low);
92
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/340501340b01?v=0.7.2
93
+ this.machines.insert([machineId, innerPvm]);
94
+ return Result.ok(machineId);
26
95
  }
27
96
  machineInvoke(_machineIndex, _gas, _registers) {
28
97
  throw new Error("Method not implemented.");
29
98
  }
30
- exportSegment(_segment) {
31
- throw new Error("Method not implemented.");
99
+ exportSegment(segment) {
100
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/335d03335d03?v=0.7.2
101
+ const currentIndex = this.exportOffset + this.exportedSegments.length;
102
+ if (currentIndex >= MAX_NUMBER_OF_EXPORTS_WP) {
103
+ return Result.error(SegmentExportError, () => `Maximum number of exported segments exceeded (offset: ${this.exportOffset}, exported: ${this.exportedSegments.length})`);
104
+ }
105
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/337303337303?v=0.7.2
106
+ this.exportedSegments.push(segment);
107
+ return Result.ok(tryAsSegmentIndex(currentIndex));
32
108
  }
33
- historicalLookup(_serviceId, _hash) {
34
- throw new Error("Method not implemented.");
109
+ historicalLookup(serviceId, hash) {
110
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/33d70133f901?v=0.7.2
111
+ const sid = serviceId ?? this.currentServiceId;
112
+ const service = this.lookupState.getService(sid);
113
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/334802334802?v=0.7.2
114
+ if (service === null) {
115
+ return Promise.resolve(null);
116
+ }
117
+ // https://graypaper.fluffylabs.dev/#/ab2cdbd/334f02334f02?v=0.7.2
118
+ return Promise.resolve(service.getPreimage(hash.asOpaque()));
35
119
  }
36
120
  }
@@ -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":""}