@typeberry/lib 0.5.9 → 0.5.10-47fe638

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 (132) 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/executor/pvm-executor.d.ts +2 -2
  38. package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
  39. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  40. package/packages/jam/in-core/externalities/refine.d.ts +27 -6
  41. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  42. package/packages/jam/in-core/externalities/refine.js +40 -7
  43. package/packages/jam/in-core/externalities/refine.test.d.ts +2 -0
  44. package/packages/jam/in-core/externalities/refine.test.d.ts.map +1 -0
  45. package/packages/jam/in-core/externalities/refine.test.js +163 -0
  46. package/packages/jam/in-core/in-core.d.ts +1 -1
  47. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  48. package/packages/jam/in-core/in-core.js +16 -10
  49. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +2 -0
  50. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  51. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
  52. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
  53. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
  54. package/packages/jam/jam-host-calls/general/fetch.d.ts +159 -98
  55. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  56. package/packages/jam/jam-host-calls/general/fetch.js +110 -16
  57. package/packages/jam/jam-host-calls/general/fetch.test.js +87 -56
  58. package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
  59. package/packages/jam/jam-host-calls/refine/export.js +1 -1
  60. package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
  61. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
  62. package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
  63. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +1 -1
  64. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +1 -1
  65. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
  66. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  67. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
  68. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  69. package/packages/jam/node/main-fuzz.js +1 -0
  70. package/packages/jam/node/main-importer.d.ts +1 -0
  71. package/packages/jam/node/main-importer.d.ts.map +1 -1
  72. package/packages/jam/node/main-importer.js +1 -0
  73. package/packages/jam/node/main.d.ts.map +1 -1
  74. package/packages/jam/node/main.js +1 -0
  75. package/packages/jam/node/reader.d.ts +2 -2
  76. package/packages/jam/node/workers.d.ts +22 -22
  77. package/packages/jam/safrole/bandersnatch-vrf.d.ts +1 -2
  78. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  79. package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
  80. package/packages/jam/safrole/bandersnatch-vrf.test.js +2 -3
  81. package/packages/jam/safrole/safrole.test.js +72 -80
  82. package/packages/jam/state/safrole-data.d.ts +1 -1
  83. package/packages/jam/state/test.utils.js +1 -1
  84. package/packages/jam/state-json/dump.js +2 -2
  85. package/packages/jam/state-json/safrole.d.ts +2 -2
  86. package/packages/jam/state-json/safrole.d.ts.map +1 -1
  87. package/packages/jam/state-json/safrole.js +4 -4
  88. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
  89. package/packages/jam/state-vectors/index.d.ts +7 -8
  90. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  91. package/packages/jam/state-vectors/index.js +4 -6
  92. package/packages/jam/transition/accumulate/accumulate.js +2 -2
  93. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
  94. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
  95. package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
  96. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
  97. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
  98. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
  99. package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
  100. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  101. package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
  102. package/packages/jam/transition/externalities/index.d.ts +2 -0
  103. package/packages/jam/transition/externalities/index.d.ts.map +1 -1
  104. package/packages/jam/transition/externalities/index.js +2 -0
  105. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +23 -0
  106. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
  107. package/packages/jam/transition/externalities/refine-fetch-externalities.js +48 -0
  108. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
  109. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
  110. package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
  111. package/packages/jam/transition/hasher.test.js +1 -1
  112. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  113. package/packages/workers/block-authorship/main.js +1 -1
  114. package/packages/workers/block-authorship/protocol.d.ts +4 -4
  115. package/packages/workers/block-authorship/ticket-generator.d.ts +1 -2
  116. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
  117. package/packages/workers/block-authorship/ticket-generator.js +2 -2
  118. package/packages/workers/block-authorship/ticket-generator.test.js +10 -11
  119. package/packages/workers/comms-authorship-network/protocol.d.ts +1 -1
  120. package/packages/workers/comms-authorship-network/tickets-message.d.ts +1 -1
  121. package/packages/workers/importer/importer.d.ts +1 -0
  122. package/packages/workers/importer/importer.d.ts.map +1 -1
  123. package/packages/workers/importer/importer.js +7 -2
  124. package/packages/workers/importer/main.d.ts.map +1 -1
  125. package/packages/workers/importer/main.js +2 -0
  126. package/packages/workers/importer/protocol.d.ts +12 -9
  127. package/packages/workers/importer/protocol.d.ts.map +1 -1
  128. package/packages/workers/importer/protocol.js +8 -3
  129. package/packages/workers/jam-network/protocol.d.ts +10 -10
  130. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
  131. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
  132. package/packages/jam/transition/externalities/fetch-externalities.test.js +0 -254
@@ -1,168 +1,229 @@
1
- import type { ServiceId } from "#@typeberry/block";
1
+ import type { EntropyHash, ServiceId } from "#@typeberry/block";
2
2
  import type { BytesBlob } from "#@typeberry/bytes";
3
3
  import { type U64 } from "#@typeberry/numbers";
4
4
  import type { HostCallHandler, HostCallMemory, HostCallRegisters } from "#@typeberry/pvm-host-calls";
5
5
  import { PvmExecution } from "#@typeberry/pvm-host-calls";
6
6
  import { type IGasCounter } from "#@typeberry/pvm-interface";
7
- /** Fetchable data. */
8
- export interface IFetchExternalities {
7
+ /**
8
+ * Fetchable data contexts.
9
+ *
10
+ * The fetch host call (ecalli 1) returns context-dependent data based on
11
+ * ω₁₀ (the kind selector). Each invocation context passes different
12
+ * parameters to Ω_Y, which determines which kinds return data vs NONE.
13
+ *
14
+ * Ω_Y signature: Ω_Y(ρ, φ, μ, p, n, r, i, ī, x̄, 𝐢, ...)
15
+ *
16
+ * Context parameter mapping
17
+ * Is-Authorized: Ω_Y(ρ, φ, μ, 𝐩, ∅, ∅, ∅, ∅, ∅, ∅, ∅)
18
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/2e43012e4301?v=0.7.2
19
+ * Refine: Ω_Y(ρ, φ, μ, p, H₀, r, i, ī, x̄, ∅, (m,e))
20
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/2fe0012fe001?v=0.7.2
21
+ * Accumulate: Ω_Y(ρ, φ, μ, ∅, η'₀, ∅, ∅, ∅, ∅, 𝐢, (x,y))
22
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/30c00030c000?v=0.7.2
23
+ *
24
+ * Kind availability per context:
25
+ * Kind 0 (constants) — all contexts
26
+ * Kind 1 (n) — Refine (H₀), Accumulate (η'₀)
27
+ * Kind 2 (r) — Refine only
28
+ * Kind 3-4 (x̄ extrinsics) — Refine only
29
+ * Kind 5-6 (ī imports) — Refine only
30
+ * Kind 7-13 (p work pkg) — Is-Authorized, Refine
31
+ * Kind 14-15 (𝐢 acc items) — Accumulate only
32
+ */
33
+ export declare enum FetchContext {
34
+ IsAuthorized = "isAuthorized",
35
+ Refine = "refine",
36
+ Accumulate = "accumulate"
37
+ }
38
+ /**
39
+ * Fetch externalities for the Is-Authorized context.
40
+ *
41
+ * Ω_Y(ρ, φ, μ, 𝐩, ∅, ∅, ∅, ∅, ∅, ∅, ∅)
42
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/2e43012e4301?v=0.7.2
43
+ *
44
+ * Available kinds: 0 (constants), 7-13 (work package)
45
+ */
46
+ export interface IIsAuthorizedFetch {
47
+ readonly context: FetchContext.IsAuthorized;
9
48
  /**
10
- * Encoded constants info.
49
+ * Kind 0: Encoded constants info (𝐜).
11
50
  *
12
- * https://graypaper.fluffylabs.dev/#/9a08063/32de0032e100?v=0.6.6
51
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/315001315001?v=0.7.2
13
52
  */
14
53
  constants(): BytesBlob;
15
54
  /**
16
- * Entropy.
55
+ * Kind 7: Encoded work package — E(𝐩).
56
+ *
57
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31c10231c102?v=0.7.2
58
+ */
59
+ workPackage(): BytesBlob | null;
60
+ /**
61
+ * Kind 8: Authorizer code hash and config — p_f.
62
+ *
63
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31c80231c802?v=0.7.2
64
+ */
65
+ authorizer(): BytesBlob | null;
66
+ /**
67
+ * Kind 9: Authorization token — p_j.
68
+ *
69
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31cf0231cf02?v=0.7.2
70
+ */
71
+ authorizationToken(): BytesBlob | null;
72
+ /**
73
+ * Kind 10: Refinement context — E(p_x).
74
+ *
75
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31da0231da02?v=0.7.2
76
+ */
77
+ refineContext(): BytesBlob | null;
78
+ /**
79
+ * Kind 11: All work-item summaries — E(↕[S(w) | w ← p_w]).
17
80
  *
18
- * Is Authorized: `p` (work package?)
19
- * Refine: `H_0` (might change in the future)
20
- * Accumulate: `eta_0 prime`
21
- * On Transfer: `eta_0 prime`
81
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31f40231f402?v=0.7.2
82
+ */
83
+ allWorkItems(): BytesBlob | null;
84
+ /**
85
+ * Kind 12: Single work-item summary — S(p_w[φ₁₁]).
86
+ *
87
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31fc0231fc02?v=0.7.2
88
+ */
89
+ oneWorkItem(workItem: U64): BytesBlob | null;
90
+ /**
91
+ * Kind 13: Work-item payload — p_w[φ₁₁]_y.
22
92
  *
23
- * https://graypaper.fluffylabs.dev/#/9a08063/325501325501?v=0.6.6
93
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/313b03313b03?v=0.7.2
24
94
  */
25
- entropy(): BytesBlob | null;
95
+ workItemPayload(workItem: U64): BytesBlob | null;
96
+ }
97
+ /**
98
+ * Fetch externalities for the Refine context.
99
+ *
100
+ * Ω_Y(ρ, φ, μ, p, H₀, r, i, ī, x̄, ∅, (m,e))
101
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/2fe0012fe001?v=0.7.2
102
+ *
103
+ * Available kinds: 0-13 (all except accumulation items)
104
+ */
105
+ export interface IRefineFetch {
106
+ readonly context: FetchContext.Refine;
26
107
  /**
108
+ * Kind 0: Encoded constants info (𝐜).
27
109
  *
28
- * Authorizer trace.
110
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/315001315001?v=0.7.2
111
+ */
112
+ constants(): BytesBlob;
113
+ /**
114
+ * Kind 1: Entropy pool — H₀ (zero hash).
29
115
  *
30
- * Is Authorized: <empty>
31
- * Refine: `r` - authorizer trace?
32
- * Accumulate: <empty>
33
- * On Transfer: <empty>
116
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/2fe0012fe201?v=0.7.2
117
+ */
118
+ entropy(): EntropyHash;
119
+ /**
120
+ * Kind 2: Authorizer trace (𝐫).
34
121
  *
35
- * https://graypaper.fluffylabs.dev/#/9a08063/325b01325b01?v=0.6.6
122
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/314902314902?v=0.7.2
36
123
  */
37
124
  authorizerTrace(): BytesBlob | null;
38
125
  /**
39
- * Inspect currently refined or other work item's extrinsics.
126
+ * Kind 3 (other) / Kind 4 (my): Work-item extrinsics (x̄).
40
127
  *
41
- * Is Authorized: <empty>
42
- * Refine: `\over(x)[*]`
43
- * https://graypaper.fluffylabs.dev/#/9a08063/2fd8002fd800?v=0.6.6
44
- * Accumulate: <empty>
45
- * On Transfer: <empty>
128
+ * When workItem is null, uses Kind 4 (current work item's extrinsics).
129
+ * When workItem is provided, uses Kind 3 (other work item's extrinsics).
46
130
  *
47
- * Other: https://graypaper.fluffylabs.dev/#/9a08063/326801326801?v=0.6.6
48
- * My: https://graypaper.fluffylabs.dev/#/9a08063/327701327701?v=0.6.6
131
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/315402315402?v=0.7.2
132
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/317302317302?v=0.7.2
49
133
  */
50
134
  workItemExtrinsic(workItem: U64 | null, index: U64): BytesBlob | null;
51
135
  /**
52
- * Inspect import segments from current or other work items.
136
+ * Kind 5 (other) / Kind 6 (my): Import segments (ī).
53
137
  *
54
- * Is Authorized: <empty>
55
- * Refine: `\over(i)[*]`
56
- * https://graypaper.fluffylabs.dev/#/9a08063/2e15012e1501?v=0.6.6
57
- * Accumulate: <empty>
58
- * On Transfer: <empty>
138
+ * When workItem is null, uses Kind 6 (current work item's imports).
139
+ * When workItem is provided, uses Kind 5 (other work item's imports).
59
140
  *
60
- * Other: https://graypaper.fluffylabs.dev/#/9a08063/328501328501?v=0.6.6
61
- * My: https://graypaper.fluffylabs.dev/#/9a08063/329601329601?v=0.6.6
141
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/318b02318b02?v=0.7.2
142
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31aa0231aa02?v=0.7.2
62
143
  */
63
144
  workItemImport(workItem: U64 | null, index: U64): BytesBlob | null;
64
145
  /**
65
- * Inspect encoding of the entire work package.
146
+ * Kind 7: Encoded work package E(p).
66
147
  *
67
- * Is Authorized: <empty>
68
- * Refine: `E(p)`
69
- * Accumulate: <empty>
70
- * On Transfer: <empty>
71
- *
72
- * https://graypaper.fluffylabs.dev/#/9a08063/329f0132a201?v=0.6.6
148
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31c10231c102?v=0.7.2
73
149
  */
74
150
  workPackage(): BytesBlob | null;
75
151
  /**
76
- * Inspect current work package's authorizer:
77
- * authorizer code hash (`u`) and parametrization (`p`).
78
- *
79
- * Is Authorized: <empty>
80
- * Refine: `E(p_u, ↕p_p)`
81
- * Accumulate: <empty>
82
- * On Transfer: <empty>
152
+ * Kind 8: Authorizer code hash and config — p_f.
83
153
  *
84
- * https://graypaper.fluffylabs.dev/#/9a08063/32aa0132aa01?v=0.6.6
154
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31c80231c802?v=0.7.2
85
155
  */
86
156
  authorizer(): BytesBlob | null;
87
157
  /**
88
- * Inspect authorization token.
158
+ * Kind 9: Authorization token — p_j.
89
159
  *
90
- * Is Authorized: <empty>
91
- * Refine: `p_j`
92
- * Accumulate: <empty>
93
- * On Transfer: <empty>
94
- *
95
- * https://graypaper.fluffylabs.dev/#/9a08063/32b10132b101?v=0.6.6
160
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31cf0231cf02?v=0.7.2
96
161
  */
97
162
  authorizationToken(): BytesBlob | null;
98
163
  /**
99
- * Inspect refine context.
100
- *
101
- * Is Authorized: <empty>
102
- * Refine: `p_x`
103
- * Accumulate: <empty>
104
- * On Transfer: <empty>
164
+ * Kind 10: Refinement context — E(p_x).
105
165
  *
106
- * https://graypaper.fluffylabs.dev/#/9a08063/32b80132b801?v=0.6.6
166
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31da0231da02?v=0.7.2
107
167
  */
108
168
  refineContext(): BytesBlob | null;
109
169
  /**
110
- * Encoding (varlen sequence) of all work items.
111
- *
112
- * Is Authorized: <empty>
113
- * Refine: `E(↕[S(w): w <- p_w ]))`
114
- * `S(w)`: https://graypaper.fluffylabs.dev/#/9a08063/32db0132ea01?v=0.6.6
115
- * Accumulate: <empty>
116
- * On Transfer: <empty>
170
+ * Kind 11: All work-item summaries — E(↕[S(w) | w p_w]).
117
171
  *
118
- * https://graypaper.fluffylabs.dev/#/9a08063/32cd0132d001?v=0.6.6
172
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31f40231f402?v=0.7.2
119
173
  */
120
174
  allWorkItems(): BytesBlob | null;
121
175
  /**
122
- * Encoding of a single (selected) work item.
123
- * `S(w)`: https://graypaper.fluffylabs.dev/#/9a08063/32db0132ea01?v=0.6.6
176
+ * Kind 12: Single work-item summary — S(p_w[φ₁₁]).
124
177
  *
125
- * Is Authorized: <empty>
126
- * Refine: `S(w)`
127
- * `S(w)`: https://graypaper.fluffylabs.dev/#/9a08063/32db0132ea01?v=0.6.6
128
- * Accumulate: <empty>
129
- * On Transfer: <empty>
130
- *
131
- * https://graypaper.fluffylabs.dev/#/9a08063/32d50132d501?v=0.6.6
178
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/31fc0231fc02?v=0.7.2
132
179
  */
133
180
  oneWorkItem(workItem: U64): BytesBlob | null;
134
181
  /**
135
- * Retrieve work item payload.
136
- *
137
- * Is Authorized: <empty>
138
- * Refine: `p_w[omega_11]_y`
139
- * Accumulate: <empty>
140
- * On Transfer: <empty>
182
+ * Kind 13: Work-item payload — p_w[φ₁₁]_y.
141
183
  *
142
- * https://graypaper.fluffylabs.dev/#/9a08063/32f00132f001?v=0.6.6
184
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/313b03313b03?v=0.7.2
143
185
  */
144
186
  workItemPayload(workItem: U64): BytesBlob | null;
187
+ }
188
+ /**
189
+ * Fetch externalities for the Accumulate context.
190
+ *
191
+ * Ω_Y(ρ, φ, μ, ∅, η'₀, ∅, ∅, ∅, ∅, 𝐢, (x,y))
192
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/30c00030c000?v=0.7.2
193
+ *
194
+ * Available kinds: 0 (constants), 1 (entropy), 14-15 (accumulation items)
195
+ */
196
+ export interface IAccumulateFetch {
197
+ readonly context: FetchContext.Accumulate;
198
+ /**
199
+ * Kind 0: Encoded constants info (𝐜).
200
+ *
201
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/315001315001?v=0.7.2
202
+ */
203
+ constants(): BytesBlob;
145
204
  /**
146
- * Get all accumulation operands (work results?) and transfers.
205
+ * Kind 1: Entropy pool — η'₀ (posterior entropy).
147
206
  *
148
- * Is Authorized: <empty>
149
- * Refine: <empty>
150
- * Accumulate: `E(↕i)`
207
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/314302314602?v=0.7.2
208
+ */
209
+ entropy(): EntropyHash;
210
+ /**
211
+ * Kind 14: All accumulation operands and transfers — E(↕𝐢).
151
212
  *
152
- * https://graypaper.fluffylabs.dev/#/ab2cdbd/314c03314c03?v=0.7.2
213
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/314e03314e03?v=0.7.2
153
214
  */
154
215
  allTransfersAndOperands(): BytesBlob | null;
155
216
  /**
156
- * Get one selected accumulation operand or transfer.
217
+ * Kind 15: Single accumulation operand or transfer — E(𝐢[φ₁₁]).
157
218
  *
158
- * Is Authorized: <empty>
159
- * Refine: <empty>
160
- * Accumulate: `E(i[omega_11])`
161
- *
162
- * https://graypaper.fluffylabs.dev/#/ab2cdbd/315503315503?v=0.7.2
219
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/315903315903?v=0.7.2
163
220
  */
164
221
  oneTransferOrOperand(index: U64): BytesBlob | null;
165
222
  }
223
+ /**
224
+ * Union of all context-specific fetch externality interfaces.
225
+ */
226
+ export type IFetchExternalities = IIsAuthorizedFetch | IRefineFetch | IAccumulateFetch;
166
227
  /**
167
228
  * https://graypaper.fluffylabs.dev/#/7e6ff6a/324000324000?v=0.6.7
168
229
  */
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/general/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAA8B,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,YAAY,EAAsC,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AAK3E,sBAAsB;AACtB,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,SAAS,IAAI,SAAS,CAAC;IAEvB;;;;;;;;;OASG;IACH,OAAO,IAAI,SAAS,GAAG,IAAI,CAAC;IAE5B;;;;;;;;;;OAUG;IACH,eAAe,IAAI,SAAS,GAAG,IAAI,CAAC;IAEpC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC;IAEtE;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC;IAEnE;;;;;;;;;OASG;IACH,WAAW,IAAI,SAAS,GAAG,IAAI,CAAC;IAEhC;;;;;;;;;;OAUG;IACH,UAAU,IAAI,SAAS,GAAG,IAAI,CAAC;IAE/B;;;;;;;;;OASG;IACH,kBAAkB,IAAI,SAAS,GAAG,IAAI,CAAC;IAEvC;;;;;;;;;OASG;IACH,aAAa,IAAI,SAAS,GAAG,IAAI,CAAC;IAElC;;;;;;;;;;OAUG;IACH,YAAY,IAAI,SAAS,GAAG,IAAI,CAAC;IAEjC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC;IAE7C;;;;;;;;;OASG;IACH,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC;IAEjD;;;;;;;;OAQG;IACH,uBAAuB,IAAI,SAAS,GAAG,IAAI,CAAC;IAE5C;;;;;;;;OAQG;IACH,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC;CACpD;AAID;;GAEG;AACH,qBAAa,KAAM,YAAW,eAAe;aAMzB,gBAAgB,EAAE,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK;IANxB,KAAK,iIAAyB;IAC9B,YAAY,4HAAqB;IACjC,eAAe,uEAAgD;gBAG7C,gBAAgB,EAAE,SAAS,EAC1B,KAAK,EAAE,mBAAmB;IAGvC,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;IA6BpH,OAAO,CAAC,QAAQ;CA4EjB;AAED,oBAAY,SAAS;IACnB,SAAS,IAAI;IACb,OAAO,IAAI;IACX,eAAe,IAAI;IACnB,uBAAuB,IAAI;IAC3B,YAAY,IAAI;IAChB,oBAAoB,IAAI;IACxB,SAAS,IAAI;IACb,WAAW,IAAI;IACf,UAAU,IAAI;IACd,kBAAkB,IAAI;IACtB,aAAa,KAAK;IAClB,YAAY,KAAK;IACjB,WAAW,KAAK;IAChB,eAAe,KAAK;IACpB,uBAAuB,KAAK;IAC5B,oBAAoB,KAAK;CAC1B"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/general/fetch.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,38 @@ import { tryAsSmallGas } from "#@typeberry/pvm-interface";
4
4
  import { logger } from "../logger.js";
5
5
  import { clampU64ToU32 } from "../utils.js";
6
6
  import { HostCallResult } from "./results.js";
7
+ /**
8
+ * Fetchable data contexts.
9
+ *
10
+ * The fetch host call (ecalli 1) returns context-dependent data based on
11
+ * ω₁₀ (the kind selector). Each invocation context passes different
12
+ * parameters to Ω_Y, which determines which kinds return data vs NONE.
13
+ *
14
+ * Ω_Y signature: Ω_Y(ρ, φ, μ, p, n, r, i, ī, x̄, 𝐢, ...)
15
+ *
16
+ * Context parameter mapping
17
+ * Is-Authorized: Ω_Y(ρ, φ, μ, 𝐩, ∅, ∅, ∅, ∅, ∅, ∅, ∅)
18
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/2e43012e4301?v=0.7.2
19
+ * Refine: Ω_Y(ρ, φ, μ, p, H₀, r, i, ī, x̄, ∅, (m,e))
20
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/2fe0012fe001?v=0.7.2
21
+ * Accumulate: Ω_Y(ρ, φ, μ, ∅, η'₀, ∅, ∅, ∅, ∅, 𝐢, (x,y))
22
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/30c00030c000?v=0.7.2
23
+ *
24
+ * Kind availability per context:
25
+ * Kind 0 (constants) — all contexts
26
+ * Kind 1 (n) — Refine (H₀), Accumulate (η'₀)
27
+ * Kind 2 (r) — Refine only
28
+ * Kind 3-4 (x̄ extrinsics) — Refine only
29
+ * Kind 5-6 (ī imports) — Refine only
30
+ * Kind 7-13 (p work pkg) — Is-Authorized, Refine
31
+ * Kind 14-15 (𝐢 acc items) — Accumulate only
32
+ */
33
+ export var FetchContext;
34
+ (function (FetchContext) {
35
+ FetchContext["IsAuthorized"] = "isAuthorized";
36
+ FetchContext["Refine"] = "refine";
37
+ FetchContext["Accumulate"] = "accumulate";
38
+ })(FetchContext || (FetchContext = {}));
7
39
  const IN_OUT_REG = 7;
8
40
  /**
9
41
  * https://graypaper.fluffylabs.dev/#/7e6ff6a/324000324000?v=0.6.7
@@ -43,62 +75,124 @@ export class Fetch {
43
75
  regs.set(IN_OUT_REG, value === null ? HostCallResult.NONE : valueLength);
44
76
  }
45
77
  getValue(kind, regs) {
78
+ const ext = this.fetch;
79
+ // Kind 0: constants — all contexts
46
80
  if (kind === FetchKind.Constants) {
47
- return this.fetch.constants();
81
+ return ext.constants();
48
82
  }
83
+ // Kind 1: entropy — Refine, Accumulate
49
84
  if (kind === FetchKind.Entropy) {
50
- return this.fetch.entropy();
85
+ if (ext.context === FetchContext.IsAuthorized) {
86
+ return null;
87
+ }
88
+ return ext.entropy();
51
89
  }
90
+ // Kind 2: authorizer trace — Refine only
52
91
  if (kind === FetchKind.AuthorizerTrace) {
53
- return this.fetch.authorizerTrace();
92
+ if (ext.context !== FetchContext.Refine) {
93
+ return null;
94
+ }
95
+ return ext.authorizerTrace();
54
96
  }
97
+ // Kind 3: other work item extrinsics — Refine only
55
98
  if (kind === FetchKind.OtherWorkItemExtrinsics) {
99
+ if (ext.context !== FetchContext.Refine) {
100
+ return null;
101
+ }
56
102
  const workItem = regs.get(11);
57
103
  const index = regs.get(12);
58
- return this.fetch.workItemExtrinsic(workItem, index);
104
+ return ext.workItemExtrinsic(workItem, index);
59
105
  }
106
+ // Kind 4: my extrinsics — Refine only
60
107
  if (kind === FetchKind.MyExtrinsics) {
108
+ if (ext.context !== FetchContext.Refine) {
109
+ return null;
110
+ }
61
111
  const index = regs.get(11);
62
- return this.fetch.workItemExtrinsic(null, index);
112
+ return ext.workItemExtrinsic(null, index);
63
113
  }
114
+ // Kind 5: other work item imports — Refine only
64
115
  if (kind === FetchKind.OtherWorkItemImports) {
116
+ if (ext.context !== FetchContext.Refine) {
117
+ return null;
118
+ }
65
119
  const workItem = regs.get(11);
66
120
  const index = regs.get(12);
67
- return this.fetch.workItemImport(workItem, index);
121
+ return ext.workItemImport(workItem, index);
68
122
  }
123
+ // Kind 6: my imports — Refine only
69
124
  if (kind === FetchKind.MyImports) {
125
+ if (ext.context !== FetchContext.Refine) {
126
+ return null;
127
+ }
70
128
  const index = regs.get(11);
71
- return this.fetch.workItemImport(null, index);
129
+ return ext.workItemImport(null, index);
72
130
  }
131
+ // Kind 7: work package — Is-Authorized, Refine
73
132
  if (kind === FetchKind.WorkPackage) {
74
- return this.fetch.workPackage();
133
+ if (ext.context === FetchContext.Accumulate) {
134
+ return null;
135
+ }
136
+ return ext.workPackage();
75
137
  }
138
+ // Kind 8: authorizer — Is-Authorized, Refine
76
139
  if (kind === FetchKind.Authorizer) {
77
- return this.fetch.authorizer();
140
+ if (ext.context === FetchContext.Accumulate) {
141
+ return null;
142
+ }
143
+ return ext.authorizer();
78
144
  }
145
+ // Kind 9: authorization token — Is-Authorized, Refine
79
146
  if (kind === FetchKind.AuthorizationToken) {
80
- return this.fetch.authorizationToken();
147
+ if (ext.context === FetchContext.Accumulate) {
148
+ return null;
149
+ }
150
+ return ext.authorizationToken();
81
151
  }
152
+ // Kind 10: refine context — Is-Authorized, Refine
82
153
  if (kind === FetchKind.RefineContext) {
83
- return this.fetch.refineContext();
154
+ if (ext.context === FetchContext.Accumulate) {
155
+ return null;
156
+ }
157
+ return ext.refineContext();
84
158
  }
159
+ // Kind 11: all work items — Is-Authorized, Refine
85
160
  if (kind === FetchKind.AllWorkItems) {
86
- return this.fetch.allWorkItems();
161
+ if (ext.context === FetchContext.Accumulate) {
162
+ return null;
163
+ }
164
+ return ext.allWorkItems();
87
165
  }
166
+ // Kind 12: one work item — Is-Authorized, Refine
88
167
  if (kind === FetchKind.OneWorkItem) {
168
+ if (ext.context === FetchContext.Accumulate) {
169
+ return null;
170
+ }
89
171
  const workItem = regs.get(11);
90
- return this.fetch.oneWorkItem(workItem);
172
+ return ext.oneWorkItem(workItem);
91
173
  }
174
+ // Kind 13: work item payload — Is-Authorized, Refine
92
175
  if (kind === FetchKind.WorkItemPayload) {
176
+ if (ext.context === FetchContext.Accumulate) {
177
+ return null;
178
+ }
93
179
  const workItem = regs.get(11);
94
- return this.fetch.workItemPayload(workItem);
180
+ return ext.workItemPayload(workItem);
95
181
  }
182
+ // Kind 14: all transfers and operands — Accumulate only
96
183
  if (kind === FetchKind.AllTransfersAndOperands) {
97
- return this.fetch.allTransfersAndOperands();
184
+ if (ext.context !== FetchContext.Accumulate) {
185
+ return null;
186
+ }
187
+ return ext.allTransfersAndOperands();
98
188
  }
189
+ // Kind 15: one transfer or operand — Accumulate only
99
190
  if (kind === FetchKind.OneTransferOrOperand) {
191
+ if (ext.context !== FetchContext.Accumulate) {
192
+ return null;
193
+ }
100
194
  const index = regs.get(11);
101
- return this.fetch.oneTransferOrOperand(index);
195
+ return ext.oneTransferOrOperand(index);
102
196
  }
103
197
  return null;
104
198
  }