@typeberry/lib 0.5.9 → 0.5.10-6923c44

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 (137) 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/externalities/refine-externalities.d.ts +3 -1
  55. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  56. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
  57. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
  58. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
  59. package/packages/jam/jam-host-calls/general/fetch.d.ts +159 -98
  60. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  61. package/packages/jam/jam-host-calls/general/fetch.js +110 -16
  62. package/packages/jam/jam-host-calls/general/fetch.test.js +87 -56
  63. package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
  64. package/packages/jam/jam-host-calls/refine/export.js +1 -1
  65. package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
  66. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
  67. package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
  68. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +1 -1
  69. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +1 -1
  70. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
  71. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  72. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
  73. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  74. package/packages/jam/node/main-fuzz.js +1 -0
  75. package/packages/jam/node/main-importer.d.ts +1 -0
  76. package/packages/jam/node/main-importer.d.ts.map +1 -1
  77. package/packages/jam/node/main-importer.js +1 -0
  78. package/packages/jam/node/main.d.ts.map +1 -1
  79. package/packages/jam/node/main.js +1 -0
  80. package/packages/jam/node/reader.d.ts +2 -2
  81. package/packages/jam/node/workers.d.ts +22 -22
  82. package/packages/jam/safrole/bandersnatch-vrf.d.ts +1 -2
  83. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  84. package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
  85. package/packages/jam/safrole/bandersnatch-vrf.test.js +2 -3
  86. package/packages/jam/safrole/safrole.test.js +72 -80
  87. package/packages/jam/state/safrole-data.d.ts +1 -1
  88. package/packages/jam/state/test.utils.js +1 -1
  89. package/packages/jam/state-json/dump.js +2 -2
  90. package/packages/jam/state-json/safrole.d.ts +2 -2
  91. package/packages/jam/state-json/safrole.d.ts.map +1 -1
  92. package/packages/jam/state-json/safrole.js +4 -4
  93. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
  94. package/packages/jam/state-vectors/index.d.ts +7 -8
  95. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  96. package/packages/jam/state-vectors/index.js +4 -6
  97. package/packages/jam/transition/accumulate/accumulate.js +2 -2
  98. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
  99. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
  100. package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
  101. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
  102. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
  103. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
  104. package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
  105. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  106. package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
  107. package/packages/jam/transition/externalities/index.d.ts +2 -0
  108. package/packages/jam/transition/externalities/index.d.ts.map +1 -1
  109. package/packages/jam/transition/externalities/index.js +2 -0
  110. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +23 -0
  111. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
  112. package/packages/jam/transition/externalities/refine-fetch-externalities.js +48 -0
  113. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
  114. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
  115. package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
  116. package/packages/jam/transition/hasher.test.js +1 -1
  117. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  118. package/packages/workers/block-authorship/main.js +1 -1
  119. package/packages/workers/block-authorship/protocol.d.ts +4 -4
  120. package/packages/workers/block-authorship/ticket-generator.d.ts +1 -2
  121. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
  122. package/packages/workers/block-authorship/ticket-generator.js +2 -2
  123. package/packages/workers/block-authorship/ticket-generator.test.js +10 -11
  124. package/packages/workers/comms-authorship-network/protocol.d.ts +1 -1
  125. package/packages/workers/comms-authorship-network/tickets-message.d.ts +1 -1
  126. package/packages/workers/importer/importer.d.ts +1 -0
  127. package/packages/workers/importer/importer.d.ts.map +1 -1
  128. package/packages/workers/importer/importer.js +7 -2
  129. package/packages/workers/importer/main.d.ts.map +1 -1
  130. package/packages/workers/importer/main.js +2 -0
  131. package/packages/workers/importer/protocol.d.ts +12 -9
  132. package/packages/workers/importer/protocol.d.ts.map +1 -1
  133. package/packages/workers/importer/protocol.js +8 -3
  134. package/packages/workers/jam-network/protocol.d.ts +10 -10
  135. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
  136. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
  137. 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":""}