@typeberry/lib 0.5.9 → 0.5.10-6cb1bd5

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 (104) hide show
  1. package/package.json +1 -1
  2. package/packages/jam/block/block.d.ts +3 -3
  3. package/packages/jam/block/header.d.ts +6 -6
  4. package/packages/jam/block/test-helpers.d.ts +2 -2
  5. package/packages/jam/block/tickets.d.ts +5 -6
  6. package/packages/jam/block/tickets.d.ts.map +1 -1
  7. package/packages/jam/block/tickets.js +2 -10
  8. package/packages/jam/block/work-item-segment.d.ts +23 -6
  9. package/packages/jam/block/work-item-segment.d.ts.map +1 -1
  10. package/packages/jam/block/work-item-segment.js +24 -7
  11. package/packages/jam/block/work-item.d.ts +3 -3
  12. package/packages/jam/block/work-item.d.ts.map +1 -1
  13. package/packages/jam/block/work-item.js +7 -3
  14. package/packages/jam/block/work-package.d.ts +2 -2
  15. package/packages/jam/block/work-package.d.ts.map +1 -1
  16. package/packages/jam/block/work-package.js +2 -6
  17. package/packages/jam/block-json/block.d.ts +2 -2
  18. package/packages/jam/block-json/block.js +1 -1
  19. package/packages/jam/block-json/common.d.ts +1 -2
  20. package/packages/jam/block-json/common.d.ts.map +1 -1
  21. package/packages/jam/block-json/common.js +2 -2
  22. package/packages/jam/block-json/extrinsic.js +1 -1
  23. package/packages/jam/block-json/header.d.ts +1 -2
  24. package/packages/jam/block-json/header.d.ts.map +1 -1
  25. package/packages/jam/block-json/header.js +32 -34
  26. package/packages/jam/block-json/tickets-extrinsic.d.ts +1 -2
  27. package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
  28. package/packages/jam/block-json/tickets-extrinsic.js +5 -7
  29. package/packages/jam/block-json/work-result.js +2 -2
  30. package/packages/jam/database/blocks.d.ts +3 -0
  31. package/packages/jam/database/blocks.d.ts.map +1 -1
  32. package/packages/jam/database/blocks.js +5 -0
  33. package/packages/jam/database-lmdb/blocks.d.ts +1 -0
  34. package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
  35. package/packages/jam/database-lmdb/blocks.js +5 -0
  36. package/packages/jam/database-lmdb/states.js +1 -1
  37. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  38. package/packages/jam/in-core/externalities/refine.d.ts +27 -6
  39. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  40. package/packages/jam/in-core/externalities/refine.js +40 -7
  41. package/packages/jam/in-core/externalities/refine.test.d.ts +2 -0
  42. package/packages/jam/in-core/externalities/refine.test.d.ts.map +1 -0
  43. package/packages/jam/in-core/externalities/refine.test.js +163 -0
  44. package/packages/jam/in-core/in-core.d.ts +1 -1
  45. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  46. package/packages/jam/in-core/in-core.js +14 -5
  47. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +2 -0
  48. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  49. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
  50. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
  51. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
  52. package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
  53. package/packages/jam/jam-host-calls/refine/export.js +1 -1
  54. package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
  55. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
  56. package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
  57. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +1 -1
  58. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +1 -1
  59. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
  60. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  61. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
  62. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  63. package/packages/jam/node/main-fuzz.js +1 -0
  64. package/packages/jam/node/main-importer.d.ts +1 -0
  65. package/packages/jam/node/main-importer.d.ts.map +1 -1
  66. package/packages/jam/node/main-importer.js +1 -0
  67. package/packages/jam/node/main.d.ts.map +1 -1
  68. package/packages/jam/node/main.js +1 -0
  69. package/packages/jam/node/reader.d.ts +2 -2
  70. package/packages/jam/node/workers.d.ts +22 -22
  71. package/packages/jam/safrole/bandersnatch-vrf.d.ts +1 -2
  72. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  73. package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
  74. package/packages/jam/safrole/bandersnatch-vrf.test.js +2 -3
  75. package/packages/jam/safrole/safrole.test.js +72 -80
  76. package/packages/jam/state/safrole-data.d.ts +1 -1
  77. package/packages/jam/state/test.utils.js +1 -1
  78. package/packages/jam/state-json/dump.js +2 -2
  79. package/packages/jam/state-json/safrole.d.ts +2 -2
  80. package/packages/jam/state-json/safrole.d.ts.map +1 -1
  81. package/packages/jam/state-json/safrole.js +4 -4
  82. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
  83. package/packages/jam/state-vectors/index.d.ts +7 -8
  84. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  85. package/packages/jam/state-vectors/index.js +4 -6
  86. package/packages/jam/transition/hasher.test.js +1 -1
  87. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  88. package/packages/workers/block-authorship/main.js +1 -1
  89. package/packages/workers/block-authorship/protocol.d.ts +4 -4
  90. package/packages/workers/block-authorship/ticket-generator.d.ts +1 -2
  91. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
  92. package/packages/workers/block-authorship/ticket-generator.js +2 -2
  93. package/packages/workers/block-authorship/ticket-generator.test.js +10 -11
  94. package/packages/workers/comms-authorship-network/protocol.d.ts +1 -1
  95. package/packages/workers/comms-authorship-network/tickets-message.d.ts +1 -1
  96. package/packages/workers/importer/importer.d.ts +1 -0
  97. package/packages/workers/importer/importer.d.ts.map +1 -1
  98. package/packages/workers/importer/importer.js +7 -2
  99. package/packages/workers/importer/main.d.ts.map +1 -1
  100. package/packages/workers/importer/main.js +2 -0
  101. package/packages/workers/importer/protocol.d.ts +12 -9
  102. package/packages/workers/importer/protocol.d.ts.map +1 -1
  103. package/packages/workers/importer/protocol.js +8 -3
  104. package/packages/workers/jam-network/protocol.d.ts +10 -10
@@ -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()]);
@@ -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,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":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,KAAK,aAAa,EACnB,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,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,2CAA2C;IAC3C,gBAAgB,EAAE,SAAS,CAAC;IAC5B,8EAA8E;IAC9E,WAAW,EAAE,KAAK,CAAC;IACnB,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAY;IAC7C,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAClD,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB;IAI/C,OAAO;IAMP,mBAAmB,IAAI,SAAS,OAAO,EAAE;IAIzC,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,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAezE,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAW5F"}
@@ -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":""}
@@ -0,0 +1,163 @@
1
+ import assert from "node:assert";
2
+ import { describe, it } from "node:test";
3
+ import { MAX_NUMBER_OF_EXPORTS_WP, SEGMENT_BYTES, tryAsServiceGas, tryAsServiceId, tryAsTimeSlot, } from "#@typeberry/block";
4
+ import { Bytes, BytesBlob } from "#@typeberry/bytes";
5
+ import { HashDictionary } from "#@typeberry/collections";
6
+ import { tinyChainSpec } from "#@typeberry/config";
7
+ import { HASH_SIZE } from "#@typeberry/hash";
8
+ import { SegmentExportError } from "#@typeberry/jam-host-calls";
9
+ import { tryAsU32, tryAsU64 } from "#@typeberry/numbers";
10
+ import { InMemoryService, InMemoryState, PreimageItem, ServiceAccountInfo } from "#@typeberry/state";
11
+ import { RefineExternalitiesImpl } from "./refine.js";
12
+ function createSegment(byte = 0xab) {
13
+ return Bytes.fill(SEGMENT_BYTES, byte);
14
+ }
15
+ function createSmallSegment(bytes) {
16
+ const data = new Uint8Array(SEGMENT_BYTES);
17
+ data.set(bytes);
18
+ return Bytes.fromBlob(data, SEGMENT_BYTES);
19
+ }
20
+ /**
21
+ * Create a mock State that has specified services with preimages.
22
+ */
23
+ function createMockState(services) {
24
+ const serviceMap = new Map();
25
+ for (const svc of services) {
26
+ const preimages = HashDictionary.new();
27
+ for (const p of svc.preimages ?? []) {
28
+ const hash = Bytes.parseBytes(p.hash, HASH_SIZE).asOpaque();
29
+ const item = PreimageItem.create({
30
+ hash,
31
+ blob: BytesBlob.parseBlob(p.blob),
32
+ });
33
+ preimages.set(hash, item);
34
+ }
35
+ const serviceId = tryAsServiceId(svc.id);
36
+ serviceMap.set(serviceId, new InMemoryService(serviceId, {
37
+ info: ServiceAccountInfo.create({
38
+ codeHash: Bytes.zero(HASH_SIZE).asOpaque(),
39
+ balance: tryAsU64(1000000000n),
40
+ accumulateMinGas: tryAsServiceGas(100),
41
+ onTransferMinGas: tryAsServiceGas(100),
42
+ storageUtilisationBytes: tryAsU64(0),
43
+ storageUtilisationCount: tryAsU32(0),
44
+ gratisStorage: tryAsU64(0),
45
+ created: tryAsTimeSlot(0),
46
+ lastAccumulation: tryAsTimeSlot(0),
47
+ parentService: tryAsServiceId(0),
48
+ }),
49
+ preimages,
50
+ lookupHistory: HashDictionary.new(),
51
+ storage: new Map(),
52
+ }));
53
+ }
54
+ return InMemoryState.partial(tinyChainSpec, { services: serviceMap });
55
+ }
56
+ function createExt(overrides = {}) {
57
+ const defaultState = createMockState([]);
58
+ return RefineExternalitiesImpl.create({
59
+ currentServiceId: tryAsServiceId(42),
60
+ lookupState: overrides.lookupState ?? defaultState,
61
+ exportOffset: overrides.exportOffset ?? 0,
62
+ ...overrides,
63
+ });
64
+ }
65
+ describe("RefineExternalitiesImpl", () => {
66
+ describe("historicalLookup", () => {
67
+ const PREIMAGE_HASH = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
68
+ const PREIMAGE_DATA = "0xdeadbeef";
69
+ it("should return preimage data for existing service and hash", async () => {
70
+ const lookupState = createMockState([{ id: 42, preimages: [{ hash: PREIMAGE_HASH, blob: PREIMAGE_DATA }] }]);
71
+ const ext = createExt({ lookupState });
72
+ const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
73
+ const result = await ext.historicalLookup(tryAsServiceId(42), hash);
74
+ assert.strictEqual(result?.toString(), BytesBlob.parseBlob(PREIMAGE_DATA).toString());
75
+ });
76
+ it("should use currentServiceId when serviceId is null", async () => {
77
+ const lookupState = createMockState([{ id: 42, preimages: [{ hash: PREIMAGE_HASH, blob: PREIMAGE_DATA }] }]);
78
+ const ext = createExt({ lookupState });
79
+ const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
80
+ const result = await ext.historicalLookup(null, hash);
81
+ assert.notStrictEqual(result, null);
82
+ });
83
+ it("should return null for non-existent service", async () => {
84
+ const ext = createExt();
85
+ const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
86
+ const result = await ext.historicalLookup(tryAsServiceId(999), hash);
87
+ assert.strictEqual(result, null);
88
+ });
89
+ it("should return null for non-existent preimage hash", async () => {
90
+ const lookupState = createMockState([{ id: 42 }]);
91
+ const ext = createExt({ lookupState });
92
+ const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
93
+ const result = await ext.historicalLookup(tryAsServiceId(42), hash);
94
+ assert.strictEqual(result, null);
95
+ });
96
+ it("should look up from the correct service when multiple exist", async () => {
97
+ const lookupState = createMockState([
98
+ { id: 1, preimages: [{ hash: PREIMAGE_HASH, blob: "0x01" }] },
99
+ { id: 2, preimages: [{ hash: PREIMAGE_HASH, blob: "0x02" }] },
100
+ ]);
101
+ const ext = createExt({ lookupState });
102
+ const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
103
+ const r1 = await ext.historicalLookup(tryAsServiceId(1), hash);
104
+ const r2 = await ext.historicalLookup(tryAsServiceId(2), hash);
105
+ assert.strictEqual(r1?.raw[0], 0x01);
106
+ assert.strictEqual(r2?.raw[0], 0x02);
107
+ });
108
+ });
109
+ describe("exportSegment", () => {
110
+ it("should export a segment and return its index", () => {
111
+ const ext = createExt();
112
+ const segment = createSegment(0x01);
113
+ const result = ext.exportSegment(segment);
114
+ assert.strictEqual(result.isOk, true);
115
+ assert.strictEqual(result.ok, 0); // first export at offset 0
116
+ assert.strictEqual(ext.getExportedSegments().length, 1);
117
+ });
118
+ it("should return sequential indices for multiple exports", () => {
119
+ const ext = createExt();
120
+ const r1 = ext.exportSegment(createSegment(0x01));
121
+ const r2 = ext.exportSegment(createSegment(0x02));
122
+ const r3 = ext.exportSegment(createSegment(0x03));
123
+ assert.strictEqual(r1.isOk, true);
124
+ assert.strictEqual(r1.ok, 0);
125
+ assert.strictEqual(r2.isOk, true);
126
+ assert.strictEqual(r2.ok, 1);
127
+ assert.strictEqual(r3.isOk, true);
128
+ assert.strictEqual(r3.ok, 2);
129
+ assert.strictEqual(ext.getExportedSegments().length, 3);
130
+ });
131
+ it("should apply exportOffset to segment indices", () => {
132
+ const ext = createExt({ exportOffset: 100 });
133
+ const result = ext.exportSegment(createSegment());
134
+ assert.strictEqual(result.isOk, true);
135
+ assert.strictEqual(result.ok, 100);
136
+ });
137
+ it("should return SegmentExportError when MAX_NUMBER_OF_EXPORTS_WP exceeded", () => {
138
+ const ext = createExt({ exportOffset: MAX_NUMBER_OF_EXPORTS_WP });
139
+ const result = ext.exportSegment(createSegment());
140
+ assert.strictEqual(result.isError, true);
141
+ assert.strictEqual(result.error, SegmentExportError);
142
+ });
143
+ it("should return SegmentExportError at exactly MAX_NUMBER_OF_EXPORTS_WP - 1 + 1", () => {
144
+ const ext = createExt({ exportOffset: MAX_NUMBER_OF_EXPORTS_WP - 1 });
145
+ // This one should succeed (index = MAX_NUMBER_OF_EXPORTS_WP - 1)
146
+ const r1 = ext.exportSegment(createSegment(0x01));
147
+ assert.strictEqual(r1.isOk, true);
148
+ assert.strictEqual(r1.ok, MAX_NUMBER_OF_EXPORTS_WP - 1);
149
+ // This one should fail
150
+ const r2 = ext.exportSegment(createSegment(0x02));
151
+ assert.strictEqual(r2.isError, true);
152
+ assert.strictEqual(r2.error, SegmentExportError);
153
+ });
154
+ it("should store exact segment data", () => {
155
+ const ext = createExt();
156
+ const segment = createSmallSegment([1, 2, 3, 4, 5]);
157
+ ext.exportSegment(segment);
158
+ const exported = ext.getExportedSegments();
159
+ assert.strictEqual(exported.length, 1);
160
+ assert.deepStrictEqual(exported[0].raw.subarray(0, 5), new Uint8Array([1, 2, 3, 4, 5]));
161
+ });
162
+ });
163
+ });
@@ -16,7 +16,7 @@ export type RefineResult = {
16
16
  };
17
17
  export type RefineItemResult = {
18
18
  result: WorkResult;
19
- exports: Segment[];
19
+ exports: readonly Segment[];
20
20
  };
21
21
  export declare enum RefineError {
22
22
  /** State for context anchor block or lookup anchor is not found in the DB. */
@@ -1 +1 @@
1
- {"version":3,"file":"in-core.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/in-core/in-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EAIhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAY,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAmB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAsC,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGjH,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAA+D,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpH,OAAO,EAAE,KAAK,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAKzE,OAAO,EAA4B,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGpE,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB,CAAC;AAEF,oBAAY,WAAW;IACrB,8EAA8E;IAC9E,YAAY,IAAI;IAChB,qFAAqF;IACrF,iBAAiB,IAAI;IACrB,wEAAwE;IACxE,uBAAuB,IAAI;IAC3B,2BAA2B;IAC3B,kBAAkB,IAAI;CACvB;AAqBD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAgBF,qBAAa,MAAM;aAEC,SAAS,EAAE,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHR,SAAS,EAAE,SAAS,EACnB,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO;IAGnC;;;;;;;;;OASG;IACG,MAAM,CACV,kBAAkB,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,EAC1D,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,EACvC,UAAU,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAmE7C,OAAO,CAAC,oBAAoB;YAuDd,gBAAgB;YAkBhB,UAAU;IAgGxB,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;IAiBrD,OAAO,CAAC,cAAc;IAyCtB,OAAO,CAAC,yBAAyB;CAoBlC"}
1
+ {"version":3,"file":"in-core.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/in-core/in-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EAIhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAY,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAmB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAsC,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGjH,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAA+D,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpH,OAAO,EAAE,KAAK,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAKzE,OAAO,EAA4B,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGpE,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;CAC7B,CAAC;AAEF,oBAAY,WAAW;IACrB,8EAA8E;IAC9E,YAAY,IAAI;IAChB,qFAAqF;IACrF,iBAAiB,IAAI;IACrB,wEAAwE;IACxE,uBAAuB,IAAI;IAC3B,2BAA2B;IAC3B,kBAAkB,IAAI;CACvB;AAqBD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAgBF,qBAAa,MAAM;aAEC,SAAS,EAAE,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHR,SAAS,EAAE,SAAS,EACnB,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO;IAGnC;;;;;;;;;OASG;IACG,MAAM,CACV,kBAAkB,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,EAC1D,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,EACvC,UAAU,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAgF7C,OAAO,CAAC,oBAAoB;YAuDd,gBAAgB;YAkBhB,UAAU;IAoGxB,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;IAiBrD,OAAO,CAAC,cAAc;IAyCtB,OAAO,CAAC,yBAAyB;CA2BlC"}
@@ -102,10 +102,13 @@ export class InCore {
102
102
  }
103
103
  logger.log `[core:${core}] Authorized. Proceeding with work items verification. Anchor=${context.anchor}`;
104
104
  // Verify the work items
105
+ let exportOffset = 0;
105
106
  const refineResults = [];
106
107
  for (const [idx, item] of items.entries()) {
107
108
  logger.info `[core:${core}][i:${idx}] Refining item for service ${item.service}.`;
108
- refineResults.push(await this.refineItem(state, idx, item, imports, extrinsics, core, workPackageHash));
109
+ const result = await this.refineItem(state, lookupState, idx, item, imports, extrinsics, core, workPackageHash, exportOffset);
110
+ refineResults.push(result);
111
+ exportOffset += result.exports.length;
109
112
  }
110
113
  // amalgamate the work report now
111
114
  return Result.ok(this.amalgamateWorkReport(asKnownSize(refineResults), authResult.ok, workPackageHash, context, core));
@@ -164,7 +167,7 @@ export class InCore {
164
167
  authorizationOutput,
165
168
  });
166
169
  }
167
- async refineItem(state, idx, item, allImports, allExtrinsics, coreIndex, workPackageHash) {
170
+ async refineItem(state, lookupState, idx, item, allImports, allExtrinsics, coreIndex, workPackageHash, exportOffset) {
168
171
  const payloadHash = this.blake2b.hashBytes(item.payload);
169
172
  const baseResult = {
170
173
  serviceId: item.service,
@@ -202,6 +205,9 @@ export class InCore {
202
205
  payload: item.payload,
203
206
  imports: allImports,
204
207
  extrinsics: allExtrinsics,
208
+ currentServiceId: item.service,
209
+ lookupState,
210
+ exportOffset,
205
211
  });
206
212
  const executor = await PvmExecutor.createRefineExecutor(item.service, code, externalities, this.pvmBackend);
207
213
  const args = Encoder.encodeObject(ARGS_CODEC, {
@@ -212,8 +218,7 @@ export class InCore {
212
218
  packageHash: workPackageHash,
213
219
  });
214
220
  const execResult = await executor.run(args, item.refineGasLimit);
215
- // TODO [ToDr] get exports from externalities
216
- const exports = [];
221
+ const exports = externalities.refine.getExportedSegments();
217
222
  if (exports.length !== item.exportCount) {
218
223
  return {
219
224
  exports,
@@ -285,7 +290,11 @@ export class InCore {
285
290
  entropy: undefined,
286
291
  ...args,
287
292
  }, this.chainSpec);
288
- const refine = RefineExternalitiesImpl.create();
293
+ const refine = RefineExternalitiesImpl.create({
294
+ currentServiceId: args.currentServiceId,
295
+ lookupState: args.lookupState,
296
+ exportOffset: args.exportOffset,
297
+ });
289
298
  return {
290
299
  fetchExternalities,
291
300
  refine,
@@ -82,6 +82,8 @@ export declare const SegmentExportError: unique symbol;
82
82
  export type SegmentExportError = typeof SegmentExportError;
83
83
  /** Host functions external invocations available during refine phase. */
84
84
  export interface RefineExternalities {
85
+ /** Get the segments exported during this work item's refinement. */
86
+ getExportedSegments(): readonly Segment[];
85
87
  /** Forget a previously started nested VM. */
86
88
  machineExpunge(machineIndex: MachineId): Promise<Result<ProgramCounter, NoMachineError>>;
87
89
  /** Set given range of pages as non-accessible and re-initialize them with zeros. */
@@ -1 +1 @@
1
- {"version":3,"file":"refine-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/externalities/refine-externalities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"refine-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/externalities/refine-externalities.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@ export declare class TestRefineExt implements RefineExternalities {
20
20
  readonly machineZeroPagesData: MultiMap<Parameters<TestRefineExt["machineZeroPages"]>, Result<OK, ZeroVoidError>>;
21
21
  readonly machinePagesData: MultiMap<Parameters<TestRefineExt["machinePages"]>, Result<OK, PagesError>>;
22
22
  machineInvokeStatus: MachineStatus;
23
+ private readonly exportSegments;
24
+ getExportedSegments(): readonly Segment[];
23
25
  machineExpunge(machineIndex: MachineId): Promise<Result<ProgramCounter, NoMachineError>>;
24
26
  machineVoidPages(machineIndex: MachineId, pageStart: U64, pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
25
27
  machineZeroPages(machineIndex: MachineId, pageStart: U64, pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
@@ -1 +1 @@
1
- {"version":3,"file":"refine-externalities.test.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/externalities/refine-externalities.test.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,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,KAAK,MAAM,EAAU,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,+DAA+D,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,cAAc,EACd,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,2BAA2B,CAAC;AAEnC,qBAAa,aAAc,YAAW,mBAAmB;IACvD,SAAgB,iBAAiB,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAE7F;IACH,SAAgB,oBAAoB,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,CAGvF;IAEH,SAAgB,iBAAiB,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAa;IAC/E,SAAgB,gBAAgB,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,CAG/E;IACH,SAAgB,kBAAkB,EAAE,QAAQ,CAC1C,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,EAC3C,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CACvC,CAAmB;IACpB,SAAgB,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAChG;IAClB,SAAgB,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAChG;IAClB,SAAgB,oBAAoB,EAAE,QAAQ,CAC5C,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,EAC7C,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAC1B,CAAmB;IACpB,SAAgB,oBAAoB,EAAE,QAAQ,CAC5C,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,EAC7C,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAC1B,CAAmB;IACpB,SAAgB,gBAAgB,EAAE,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAC3F;IAEX,mBAAmB,EAAE,aAAa,CAAyB;IAElE,cAAc,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAQxF,gBAAgB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAQ7G,gBAAgB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAQ7G,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAc7G,eAAe,CACb,YAAY,EAAE,SAAS,EACvB,gBAAgB,EAAE,GAAG,EACrB,WAAW,EAAE,GAAG,EAChB,MAAM,EAAE,GAAG,EACX,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAUrC,eAAe,CACb,YAAY,EAAE,SAAS,EACvB,WAAW,EAAE,GAAG,EAChB,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAU/B,aAAa,CACjB,YAAY,EAAE,SAAS,EACvB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAYjD,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAQzE,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAW3F,YAAY,CACV,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,EACd,WAAW,EAAE,eAAe,GAAG,IAAI,GAClC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;CASnC"}
1
+ {"version":3,"file":"refine-externalities.test.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/externalities/refine-externalities.test.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,10 @@ export class TestRefineExt {
23
23
  machineZeroPagesData = new MultiMap(3);
24
24
  machinePagesData = new MultiMap(4);
25
25
  machineInvokeStatus = { status: Status.OK };
26
+ exportSegments = [];
27
+ getExportedSegments() {
28
+ return this.exportSegments;
29
+ }
26
30
  machineExpunge(machineIndex) {
27
31
  const val = this.machineExpungeData.get(machineIndex);
28
32
  if (val === undefined) {
@@ -86,6 +90,7 @@ export class TestRefineExt {
86
90
  if (result === undefined) {
87
91
  throw new Error(`Unexpected call to exportSegment with: ${segment}`);
88
92
  }
93
+ this.exportSegments.push(segment);
89
94
  return result;
90
95
  }
91
96
  historicalLookup(serviceId, hash) {
@@ -4,7 +4,7 @@ import type { RefineExternalities } from "../externalities/refine-externalities.
4
4
  /**
5
5
  * Export a segment to be imported by some future `refine` invokation.
6
6
  *
7
- * https://graypaper.fluffylabs.dev/#/7e6ff6a/341d01341d01?v=0.6.7
7
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/33db0233db02?v=0.7.2
8
8
  */
9
9
  export declare class Export implements HostCallHandler {
10
10
  private readonly refine;
@@ -11,7 +11,7 @@ const IN_OUT_REG = 7;
11
11
  /**
12
12
  * Export a segment to be imported by some future `refine` invokation.
13
13
  *
14
- * https://graypaper.fluffylabs.dev/#/7e6ff6a/341d01341d01?v=0.6.7
14
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/33db0233db02?v=0.7.2
15
15
  */
16
16
  export class Export {
17
17
  refine;
@@ -47,6 +47,7 @@ describe("HostCalls: Export", () => {
47
47
  // then
48
48
  assert.deepStrictEqual(result, undefined);
49
49
  assert.deepStrictEqual(registers.get(RESULT_REG), 15n);
50
+ assert.strictEqual(refine.getExportedSegments().length, 1);
50
51
  });
51
52
  it("should zero-pad when exported value is small", async () => {
52
53
  const refine = new TestRefineExt();
@@ -63,6 +64,7 @@ describe("HostCalls: Export", () => {
63
64
  // then
64
65
  assert.deepStrictEqual(result, undefined);
65
66
  assert.deepStrictEqual(registers.get(RESULT_REG), 5n);
67
+ assert.strictEqual(refine.getExportedSegments().length, 1);
66
68
  });
67
69
  it("should panic if memory is not readable", async () => {
68
70
  const refine = new TestRefineExt();
@@ -74,6 +76,7 @@ describe("HostCalls: Export", () => {
74
76
  const result = await exp.execute(gas, registers, memory);
75
77
  // then
76
78
  assert.deepStrictEqual(result, PvmExecution.Panic);
79
+ assert.strictEqual(refine.getExportedSegments().length, 0);
77
80
  });
78
81
  it("should fail with FULL if export limit is reached", async () => {
79
82
  const refine = new TestRefineExt();