@typeberry/lib 0.5.10 → 0.5.11-10b197e

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 (496) hide show
  1. package/README.md +2 -2
  2. package/bin/lib/examples/pvm-usage.test.js +2 -2
  3. package/package.json +1 -1
  4. package/packages/core/codec/descriptor.js +1 -1
  5. package/packages/core/codec/descriptors.js +7 -4
  6. package/packages/core/codec/encoder.d.ts +1 -1
  7. package/packages/core/codec/encoder.d.ts.map +1 -1
  8. package/packages/core/codec/encoder.js +3 -2
  9. package/packages/core/codec/index.test.js +1 -1
  10. package/packages/core/codec/skip.d.ts +2 -1
  11. package/packages/core/codec/skip.d.ts.map +1 -1
  12. package/packages/core/codec/skip.js +3 -0
  13. package/packages/core/codec/view.js +2 -2
  14. package/packages/core/collections/multi-map.d.ts +2 -1
  15. package/packages/core/collections/multi-map.d.ts.map +1 -1
  16. package/packages/core/collections/multi-map.js +3 -0
  17. package/packages/core/collections/multi-map.test.js +2 -2
  18. package/packages/core/concurrent/parent.js +4 -1
  19. package/packages/core/crypto/ed25519.d.ts +2 -5
  20. package/packages/core/crypto/ed25519.d.ts.map +1 -1
  21. package/packages/core/crypto/ed25519.js +4 -1
  22. package/packages/core/hash/hash.d.ts +4 -2
  23. package/packages/core/hash/hash.d.ts.map +1 -1
  24. package/packages/core/hash/hash.js +6 -1
  25. package/packages/core/networking/quic-network.d.ts +3 -2
  26. package/packages/core/networking/quic-network.d.ts.map +1 -1
  27. package/packages/core/networking/quic-network.js +3 -0
  28. package/packages/core/networking/quic-peer.d.ts +2 -1
  29. package/packages/core/networking/quic-peer.d.ts.map +1 -1
  30. package/packages/core/networking/quic-peer.js +5 -2
  31. package/packages/core/networking/quic-stream.d.ts +2 -1
  32. package/packages/core/networking/quic-stream.d.ts.map +1 -1
  33. package/packages/core/networking/quic-stream.js +3 -0
  34. package/packages/core/networking/setup.js +2 -2
  35. package/packages/core/pvm-host-calls/bin.js +2 -2
  36. package/packages/core/pvm-host-calls/ecalli-trace-logger.d.ts +5 -0
  37. package/packages/core/pvm-host-calls/ecalli-trace-logger.d.ts.map +1 -1
  38. package/packages/core/pvm-host-calls/ecalli-trace-logger.js +8 -1
  39. package/packages/core/pvm-host-calls/ecalli-trace-logger.test.js +1 -1
  40. package/packages/core/pvm-host-calls/host-call-memory.d.ts +2 -1
  41. package/packages/core/pvm-host-calls/host-call-memory.d.ts.map +1 -1
  42. package/packages/core/pvm-host-calls/host-call-memory.js +3 -0
  43. package/packages/core/pvm-host-calls/host-call-memory.test.js +1 -1
  44. package/packages/core/pvm-host-calls/host-call-registers.d.ts +5 -1
  45. package/packages/core/pvm-host-calls/host-call-registers.d.ts.map +1 -1
  46. package/packages/core/pvm-host-calls/host-call-registers.js +11 -1
  47. package/packages/core/pvm-host-calls/host-call-registers.test.js +2 -2
  48. package/packages/core/pvm-host-calls/host-calls-executor.d.ts +2 -1
  49. package/packages/core/pvm-host-calls/host-calls-executor.d.ts.map +1 -1
  50. package/packages/core/pvm-host-calls/host-calls-executor.js +5 -2
  51. package/packages/core/pvm-host-calls/host-calls.d.ts +4 -2
  52. package/packages/core/pvm-host-calls/host-calls.d.ts.map +1 -1
  53. package/packages/core/pvm-host-calls/host-calls.js +9 -4
  54. package/packages/core/pvm-host-calls/pvm-instance-manager.js +1 -1
  55. package/packages/core/pvm-interface/pvm.d.ts +2 -0
  56. package/packages/core/pvm-interface/pvm.d.ts.map +1 -1
  57. package/packages/core/pvm-interpreter/args-decoder/args-decoder.js +1 -1
  58. package/packages/core/pvm-interpreter/args-decoder/args-decoder.test.js +3 -3
  59. package/packages/core/pvm-interpreter/args-decoder/args-decoding-results.js +11 -11
  60. package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.d.ts +2 -1
  61. package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.d.ts.map +1 -1
  62. package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.js +3 -0
  63. package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.test.js +2 -2
  64. package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.d.ts +2 -1
  65. package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.d.ts.map +1 -1
  66. package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.js +3 -0
  67. package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.test.js +26 -26
  68. package/packages/core/pvm-interpreter/basic-blocks/basic-blocks.test.js +8 -8
  69. package/packages/core/pvm-interpreter/bin.js +1 -1
  70. package/packages/core/pvm-interpreter/debugger-adapter.d.ts +2 -1
  71. package/packages/core/pvm-interpreter/debugger-adapter.d.ts.map +1 -1
  72. package/packages/core/pvm-interpreter/debugger-adapter.js +6 -3
  73. package/packages/core/pvm-interpreter/gas.js +4 -1
  74. package/packages/core/pvm-interpreter/interpreter.d.ts +2 -1
  75. package/packages/core/pvm-interpreter/interpreter.d.ts.map +1 -1
  76. package/packages/core/pvm-interpreter/interpreter.js +19 -16
  77. package/packages/core/pvm-interpreter/memory/memory-builder.js +2 -2
  78. package/packages/core/pvm-interpreter/memory/memory-builder.test.js +7 -7
  79. package/packages/core/pvm-interpreter/memory/memory.d.ts +2 -1
  80. package/packages/core/pvm-interpreter/memory/memory.d.ts.map +1 -1
  81. package/packages/core/pvm-interpreter/memory/memory.js +4 -1
  82. package/packages/core/pvm-interpreter/memory/memory.test.js +31 -31
  83. package/packages/core/pvm-interpreter/memory/pages/readable-page.d.ts +2 -1
  84. package/packages/core/pvm-interpreter/memory/pages/readable-page.d.ts.map +1 -1
  85. package/packages/core/pvm-interpreter/memory/pages/readable-page.js +3 -0
  86. package/packages/core/pvm-interpreter/memory/pages/readable-page.test.js +3 -3
  87. package/packages/core/pvm-interpreter/memory/pages/writeable-page.d.ts +2 -1
  88. package/packages/core/pvm-interpreter/memory/pages/writeable-page.d.ts.map +1 -1
  89. package/packages/core/pvm-interpreter/memory/pages/writeable-page.js +3 -0
  90. package/packages/core/pvm-interpreter/memory/pages/writeable-page.test.js +4 -4
  91. package/packages/core/pvm-interpreter/ops/bit-ops.d.ts +2 -1
  92. package/packages/core/pvm-interpreter/ops/bit-ops.d.ts.map +1 -1
  93. package/packages/core/pvm-interpreter/ops/bit-ops.js +3 -0
  94. package/packages/core/pvm-interpreter/ops/bit-ops.test.js +3 -3
  95. package/packages/core/pvm-interpreter/ops/bit-rotation-ops.d.ts +2 -1
  96. package/packages/core/pvm-interpreter/ops/bit-rotation-ops.d.ts.map +1 -1
  97. package/packages/core/pvm-interpreter/ops/bit-rotation-ops.js +3 -0
  98. package/packages/core/pvm-interpreter/ops/bit-rotation-ops.test.js +5 -5
  99. package/packages/core/pvm-interpreter/ops/boolean-ops.d.ts +2 -1
  100. package/packages/core/pvm-interpreter/ops/boolean-ops.d.ts.map +1 -1
  101. package/packages/core/pvm-interpreter/ops/boolean-ops.js +3 -0
  102. package/packages/core/pvm-interpreter/ops/boolean-ops.test.js +3 -3
  103. package/packages/core/pvm-interpreter/ops/branch-ops.d.ts +2 -1
  104. package/packages/core/pvm-interpreter/ops/branch-ops.d.ts.map +1 -1
  105. package/packages/core/pvm-interpreter/ops/branch-ops.js +3 -0
  106. package/packages/core/pvm-interpreter/ops/branch-ops.test.js +4 -4
  107. package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.d.ts +2 -1
  108. package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.d.ts.map +1 -1
  109. package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.js +3 -0
  110. package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.test.js +5 -5
  111. package/packages/core/pvm-interpreter/ops/host-call-ops.d.ts +2 -1
  112. package/packages/core/pvm-interpreter/ops/host-call-ops.d.ts.map +1 -1
  113. package/packages/core/pvm-interpreter/ops/host-call-ops.js +3 -0
  114. package/packages/core/pvm-interpreter/ops/host-call-ops.test.js +2 -2
  115. package/packages/core/pvm-interpreter/ops/load-ops.d.ts +2 -1
  116. package/packages/core/pvm-interpreter/ops/load-ops.d.ts.map +1 -1
  117. package/packages/core/pvm-interpreter/ops/load-ops.js +3 -0
  118. package/packages/core/pvm-interpreter/ops/load-ops.test.js +10 -10
  119. package/packages/core/pvm-interpreter/ops/math-ops.d.ts +2 -1
  120. package/packages/core/pvm-interpreter/ops/math-ops.d.ts.map +1 -1
  121. package/packages/core/pvm-interpreter/ops/math-ops.js +3 -0
  122. package/packages/core/pvm-interpreter/ops/math-ops.test.js +3 -3
  123. package/packages/core/pvm-interpreter/ops/memory-ops.d.ts +2 -1
  124. package/packages/core/pvm-interpreter/ops/memory-ops.d.ts.map +1 -1
  125. package/packages/core/pvm-interpreter/ops/memory-ops.js +3 -0
  126. package/packages/core/pvm-interpreter/ops/memory-ops.test.js +3 -3
  127. package/packages/core/pvm-interpreter/ops/move-ops.d.ts +2 -1
  128. package/packages/core/pvm-interpreter/ops/move-ops.d.ts.map +1 -1
  129. package/packages/core/pvm-interpreter/ops/move-ops.js +3 -0
  130. package/packages/core/pvm-interpreter/ops/move-ops.test.js +3 -3
  131. package/packages/core/pvm-interpreter/ops/no-args-ops.d.ts +2 -1
  132. package/packages/core/pvm-interpreter/ops/no-args-ops.d.ts.map +1 -1
  133. package/packages/core/pvm-interpreter/ops/no-args-ops.js +3 -0
  134. package/packages/core/pvm-interpreter/ops/no-args-ops.test.js +2 -2
  135. package/packages/core/pvm-interpreter/ops/shift-ops.d.ts +2 -1
  136. package/packages/core/pvm-interpreter/ops/shift-ops.d.ts.map +1 -1
  137. package/packages/core/pvm-interpreter/ops/shift-ops.js +3 -0
  138. package/packages/core/pvm-interpreter/ops/shift-ops.test.js +3 -3
  139. package/packages/core/pvm-interpreter/ops/store-ops.d.ts +2 -1
  140. package/packages/core/pvm-interpreter/ops/store-ops.d.ts.map +1 -1
  141. package/packages/core/pvm-interpreter/ops/store-ops.js +3 -0
  142. package/packages/core/pvm-interpreter/ops/store-ops.test.js +7 -7
  143. package/packages/core/pvm-interpreter/ops-dispatchers/no-args-dispatcher.test.js +1 -1
  144. package/packages/core/pvm-interpreter/ops-dispatchers/one-imm-dispatcher.test.js +4 -4
  145. package/packages/core/pvm-interpreter/ops-dispatchers/one-offset-dispatcher.test.js +2 -2
  146. package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-one-ext-imm-dispatcher.test.js +4 -4
  147. package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-one-imm-dispatcher.test.js +7 -7
  148. package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-one-imm-one-offset-dispatcher.test.js +10 -10
  149. package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-two-imms-dispatcher.test.js +5 -5
  150. package/packages/core/pvm-interpreter/ops-dispatchers/three-regs-dispatcher.test.js +7 -7
  151. package/packages/core/pvm-interpreter/ops-dispatchers/two-imms-dispatcher.test.js +5 -5
  152. package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-dispatcher.test.js +6 -6
  153. package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-one-imm-dispatcher.test.js +11 -11
  154. package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-one-offset-dispatcher.test.js +2 -2
  155. package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-two-imms-dispatcher.test.js +14 -14
  156. package/packages/core/pvm-interpreter/program-decoder/jump-table.d.ts +5 -2
  157. package/packages/core/pvm-interpreter/program-decoder/jump-table.d.ts.map +1 -1
  158. package/packages/core/pvm-interpreter/program-decoder/jump-table.js +9 -4
  159. package/packages/core/pvm-interpreter/program-decoder/jump-table.test.js +6 -6
  160. package/packages/core/pvm-interpreter/program-decoder/mask.d.ts +2 -1
  161. package/packages/core/pvm-interpreter/program-decoder/mask.d.ts.map +1 -1
  162. package/packages/core/pvm-interpreter/program-decoder/mask.js +3 -0
  163. package/packages/core/pvm-interpreter/program-decoder/mask.test.js +10 -10
  164. package/packages/core/pvm-interpreter/program-decoder/program-decoder.d.ts +2 -1
  165. package/packages/core/pvm-interpreter/program-decoder/program-decoder.d.ts.map +1 -1
  166. package/packages/core/pvm-interpreter/program-decoder/program-decoder.js +6 -3
  167. package/packages/core/pvm-interpreter/program-decoder/program-decoder.test.js +5 -5
  168. package/packages/core/pvm-interpreter/program.js +3 -3
  169. package/packages/core/pvm-interpreter/registers.d.ts +5 -2
  170. package/packages/core/pvm-interpreter/registers.d.ts.map +1 -1
  171. package/packages/core/pvm-interpreter/registers.js +10 -6
  172. package/packages/core/pvm-interpreter/registers.test.js +10 -10
  173. package/packages/core/pvm-interpreter/spi-decoder/decode-standard-program.d.ts +6 -3
  174. package/packages/core/pvm-interpreter/spi-decoder/decode-standard-program.d.ts.map +1 -1
  175. package/packages/core/pvm-interpreter/spi-decoder/decode-standard-program.js +11 -2
  176. package/packages/core/pvm-interpreter-ananas/index.d.ts +6 -3
  177. package/packages/core/pvm-interpreter-ananas/index.d.ts.map +1 -1
  178. package/packages/core/pvm-interpreter-ananas/index.js +12 -3
  179. package/packages/core/trie/nodes.d.ts +7 -2
  180. package/packages/core/trie/nodes.d.ts.map +1 -1
  181. package/packages/core/trie/nodes.js +20 -11
  182. package/packages/core/trie/nodesDb.d.ts +3 -1
  183. package/packages/core/trie/nodesDb.d.ts.map +1 -1
  184. package/packages/core/trie/nodesDb.js +6 -0
  185. package/packages/core/trie/trie.js +2 -2
  186. package/packages/extensions/ipc/index.js +5 -2
  187. package/packages/extensions/ipc/jamnp/handler.d.ts +4 -2
  188. package/packages/extensions/ipc/jamnp/handler.d.ts.map +1 -1
  189. package/packages/extensions/ipc/jamnp/handler.js +9 -3
  190. package/packages/extensions/ipc/jamnp/server.js +3 -3
  191. package/packages/extensions/ipc/server.d.ts +2 -1
  192. package/packages/extensions/ipc/server.d.ts.map +1 -1
  193. package/packages/extensions/ipc/server.js +4 -1
  194. package/packages/jam/block/header.js +1 -1
  195. package/packages/jam/block/work-package.d.ts +7 -7
  196. package/packages/jam/block/work-package.d.ts.map +1 -1
  197. package/packages/jam/block/work-package.js +12 -12
  198. package/packages/jam/config/chain-spec.d.ts +2 -1
  199. package/packages/jam/config/chain-spec.d.ts.map +1 -1
  200. package/packages/jam/config/chain-spec.js +5 -2
  201. package/packages/jam/config/network.d.ts +2 -7
  202. package/packages/jam/config/network.d.ts.map +1 -1
  203. package/packages/jam/config/network.js +3 -0
  204. package/packages/jam/config-node/jip-chain-spec.js +1 -1
  205. package/packages/jam/database/blocks.test.js +1 -1
  206. package/packages/jam/database/states.d.ts +2 -1
  207. package/packages/jam/database/states.d.ts.map +1 -1
  208. package/packages/jam/database/states.js +3 -0
  209. package/packages/jam/database/states.test.js +1 -1
  210. package/packages/jam/database-lmdb/blocks.d.ts +2 -1
  211. package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
  212. package/packages/jam/database-lmdb/blocks.js +3 -0
  213. package/packages/jam/database-lmdb/root.d.ts +2 -1
  214. package/packages/jam/database-lmdb/root.d.ts.map +1 -1
  215. package/packages/jam/database-lmdb/root.js +3 -0
  216. package/packages/jam/database-lmdb/states.d.ts +2 -1
  217. package/packages/jam/database-lmdb/states.d.ts.map +1 -1
  218. package/packages/jam/database-lmdb/states.js +3 -0
  219. package/packages/jam/database-lmdb/states.test.js +9 -9
  220. package/packages/jam/executor/index.d.ts +1 -1
  221. package/packages/jam/executor/index.d.ts.map +1 -1
  222. package/packages/jam/executor/index.js +1 -1
  223. package/packages/jam/executor/pvm-executor.d.ts +9 -2
  224. package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
  225. package/packages/jam/executor/pvm-executor.js +36 -21
  226. package/packages/jam/fuzz-proto/v1/handler.d.ts +2 -1
  227. package/packages/jam/fuzz-proto/v1/handler.d.ts.map +1 -1
  228. package/packages/jam/fuzz-proto/v1/handler.js +3 -0
  229. package/packages/jam/fuzz-proto/v1/handler.test.js +10 -10
  230. package/packages/jam/in-core/externalities/refine.d.ts +18 -8
  231. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  232. package/packages/jam/in-core/externalities/refine.js +86 -7
  233. package/packages/jam/in-core/externalities/refine.test.js +168 -3
  234. package/packages/jam/in-core/in-core.d.ts +9 -23
  235. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  236. package/packages/jam/in-core/in-core.js +19 -186
  237. package/packages/jam/in-core/in-core.test.js +52 -20
  238. package/packages/jam/in-core/is-authorized.d.ts +33 -0
  239. package/packages/jam/in-core/is-authorized.d.ts.map +1 -0
  240. package/packages/jam/in-core/is-authorized.js +72 -0
  241. package/packages/jam/in-core/is-authorized.test.d.ts +2 -0
  242. package/packages/jam/in-core/is-authorized.test.d.ts.map +1 -0
  243. package/packages/jam/in-core/is-authorized.test.js +125 -0
  244. package/packages/jam/in-core/refine.d.ts +34 -0
  245. package/packages/jam/in-core/refine.d.ts.map +1 -0
  246. package/packages/jam/in-core/refine.js +176 -0
  247. package/packages/jam/in-core/refine.test.d.ts +2 -0
  248. package/packages/jam/in-core/refine.test.d.ts.map +1 -0
  249. package/packages/jam/in-core/refine.test.js +6 -0
  250. package/packages/jam/jam-host-calls/accumulate/assign.d.ts +2 -1
  251. package/packages/jam/jam-host-calls/accumulate/assign.d.ts.map +1 -1
  252. package/packages/jam/jam-host-calls/accumulate/assign.js +3 -0
  253. package/packages/jam/jam-host-calls/accumulate/assign.test.js +8 -9
  254. package/packages/jam/jam-host-calls/accumulate/bless.d.ts +2 -1
  255. package/packages/jam/jam-host-calls/accumulate/bless.d.ts.map +1 -1
  256. package/packages/jam/jam-host-calls/accumulate/bless.js +12 -9
  257. package/packages/jam/jam-host-calls/accumulate/bless.test.js +11 -12
  258. package/packages/jam/jam-host-calls/accumulate/checkpoint.d.ts +2 -1
  259. package/packages/jam/jam-host-calls/accumulate/checkpoint.d.ts.map +1 -1
  260. package/packages/jam/jam-host-calls/accumulate/checkpoint.js +4 -1
  261. package/packages/jam/jam-host-calls/accumulate/checkpoint.test.js +2 -3
  262. package/packages/jam/jam-host-calls/accumulate/designate.d.ts +2 -1
  263. package/packages/jam/jam-host-calls/accumulate/designate.d.ts.map +1 -1
  264. package/packages/jam/jam-host-calls/accumulate/designate.js +3 -0
  265. package/packages/jam/jam-host-calls/accumulate/designate.test.js +5 -6
  266. package/packages/jam/jam-host-calls/accumulate/eject.d.ts +2 -1
  267. package/packages/jam/jam-host-calls/accumulate/eject.d.ts.map +1 -1
  268. package/packages/jam/jam-host-calls/accumulate/eject.js +3 -0
  269. package/packages/jam/jam-host-calls/accumulate/eject.test.js +8 -9
  270. package/packages/jam/jam-host-calls/accumulate/forget.d.ts +2 -1
  271. package/packages/jam/jam-host-calls/accumulate/forget.d.ts.map +1 -1
  272. package/packages/jam/jam-host-calls/accumulate/forget.js +3 -0
  273. package/packages/jam/jam-host-calls/accumulate/forget.test.js +5 -6
  274. package/packages/jam/jam-host-calls/accumulate/new.d.ts +2 -1
  275. package/packages/jam/jam-host-calls/accumulate/new.d.ts.map +1 -1
  276. package/packages/jam/jam-host-calls/accumulate/new.js +3 -0
  277. package/packages/jam/jam-host-calls/accumulate/new.test.js +9 -10
  278. package/packages/jam/jam-host-calls/accumulate/provide.d.ts +2 -1
  279. package/packages/jam/jam-host-calls/accumulate/provide.d.ts.map +1 -1
  280. package/packages/jam/jam-host-calls/accumulate/provide.js +3 -0
  281. package/packages/jam/jam-host-calls/accumulate/provide.test.js +8 -9
  282. package/packages/jam/jam-host-calls/accumulate/query.d.ts +2 -1
  283. package/packages/jam/jam-host-calls/accumulate/query.d.ts.map +1 -1
  284. package/packages/jam/jam-host-calls/accumulate/query.js +3 -0
  285. package/packages/jam/jam-host-calls/accumulate/query.test.js +8 -9
  286. package/packages/jam/jam-host-calls/accumulate/solicit.d.ts +2 -1
  287. package/packages/jam/jam-host-calls/accumulate/solicit.d.ts.map +1 -1
  288. package/packages/jam/jam-host-calls/accumulate/solicit.js +3 -0
  289. package/packages/jam/jam-host-calls/accumulate/solicit.test.js +7 -8
  290. package/packages/jam/jam-host-calls/accumulate/transfer.d.ts +2 -1
  291. package/packages/jam/jam-host-calls/accumulate/transfer.d.ts.map +1 -1
  292. package/packages/jam/jam-host-calls/accumulate/transfer.js +3 -0
  293. package/packages/jam/jam-host-calls/accumulate/transfer.test.js +9 -10
  294. package/packages/jam/jam-host-calls/accumulate/upgrade.d.ts +2 -1
  295. package/packages/jam/jam-host-calls/accumulate/upgrade.d.ts.map +1 -1
  296. package/packages/jam/jam-host-calls/accumulate/upgrade.js +3 -0
  297. package/packages/jam/jam-host-calls/accumulate/upgrade.test.js +4 -5
  298. package/packages/jam/jam-host-calls/accumulate/yield.d.ts +2 -1
  299. package/packages/jam/jam-host-calls/accumulate/yield.d.ts.map +1 -1
  300. package/packages/jam/jam-host-calls/accumulate/yield.js +3 -0
  301. package/packages/jam/jam-host-calls/accumulate/yield.test.js +4 -5
  302. package/packages/jam/jam-host-calls/externalities/partial-state.d.ts +1 -1
  303. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +1 -1
  304. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  305. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +9 -9
  306. package/packages/jam/jam-host-calls/externalities/state-update.d.ts +2 -3
  307. package/packages/jam/jam-host-calls/externalities/state-update.d.ts.map +1 -1
  308. package/packages/jam/jam-host-calls/externalities/state-update.js +5 -2
  309. package/packages/jam/jam-host-calls/externalities/test-accounts.js +2 -2
  310. package/packages/jam/jam-host-calls/general/fetch.d.ts +166 -104
  311. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  312. package/packages/jam/jam-host-calls/general/fetch.js +120 -23
  313. package/packages/jam/jam-host-calls/general/fetch.test.js +125 -92
  314. package/packages/jam/jam-host-calls/general/gas.d.ts +2 -1
  315. package/packages/jam/jam-host-calls/general/gas.d.ts.map +1 -1
  316. package/packages/jam/jam-host-calls/general/gas.js +3 -0
  317. package/packages/jam/jam-host-calls/general/gas.test.js +4 -5
  318. package/packages/jam/jam-host-calls/general/info.d.ts +2 -1
  319. package/packages/jam/jam-host-calls/general/info.d.ts.map +1 -1
  320. package/packages/jam/jam-host-calls/general/info.js +3 -0
  321. package/packages/jam/jam-host-calls/general/info.test.js +6 -7
  322. package/packages/jam/jam-host-calls/general/log.d.ts +2 -1
  323. package/packages/jam/jam-host-calls/general/log.d.ts.map +1 -1
  324. package/packages/jam/jam-host-calls/general/log.js +3 -0
  325. package/packages/jam/jam-host-calls/general/lookup.d.ts +2 -1
  326. package/packages/jam/jam-host-calls/general/lookup.d.ts.map +1 -1
  327. package/packages/jam/jam-host-calls/general/lookup.js +3 -0
  328. package/packages/jam/jam-host-calls/general/lookup.test.js +8 -9
  329. package/packages/jam/jam-host-calls/general/read.d.ts +2 -1
  330. package/packages/jam/jam-host-calls/general/read.d.ts.map +1 -1
  331. package/packages/jam/jam-host-calls/general/read.js +3 -0
  332. package/packages/jam/jam-host-calls/general/read.test.js +11 -12
  333. package/packages/jam/jam-host-calls/general/write.d.ts +2 -1
  334. package/packages/jam/jam-host-calls/general/write.d.ts.map +1 -1
  335. package/packages/jam/jam-host-calls/general/write.js +3 -0
  336. package/packages/jam/jam-host-calls/general/write.test.js +10 -11
  337. package/packages/jam/jam-host-calls/refine/export.d.ts +2 -1
  338. package/packages/jam/jam-host-calls/refine/export.d.ts.map +1 -1
  339. package/packages/jam/jam-host-calls/refine/export.js +3 -0
  340. package/packages/jam/jam-host-calls/refine/export.test.js +6 -7
  341. package/packages/jam/jam-host-calls/refine/expunge.d.ts +2 -1
  342. package/packages/jam/jam-host-calls/refine/expunge.d.ts.map +1 -1
  343. package/packages/jam/jam-host-calls/refine/expunge.js +3 -0
  344. package/packages/jam/jam-host-calls/refine/expunge.test.js +3 -4
  345. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +2 -1
  346. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts.map +1 -1
  347. package/packages/jam/jam-host-calls/refine/historical-lookup.js +3 -0
  348. package/packages/jam/jam-host-calls/refine/historical-lookup.test.js +11 -12
  349. package/packages/jam/jam-host-calls/refine/invoke.d.ts +2 -1
  350. package/packages/jam/jam-host-calls/refine/invoke.d.ts.map +1 -1
  351. package/packages/jam/jam-host-calls/refine/invoke.js +4 -1
  352. package/packages/jam/jam-host-calls/refine/invoke.test.js +10 -11
  353. package/packages/jam/jam-host-calls/refine/machine.d.ts +2 -1
  354. package/packages/jam/jam-host-calls/refine/machine.d.ts.map +1 -1
  355. package/packages/jam/jam-host-calls/refine/machine.js +3 -0
  356. package/packages/jam/jam-host-calls/refine/machine.test.js +6 -7
  357. package/packages/jam/jam-host-calls/refine/pages.d.ts +2 -1
  358. package/packages/jam/jam-host-calls/refine/pages.d.ts.map +1 -1
  359. package/packages/jam/jam-host-calls/refine/pages.js +3 -0
  360. package/packages/jam/jam-host-calls/refine/pages.test.js +3 -4
  361. package/packages/jam/jam-host-calls/refine/peek.d.ts +2 -1
  362. package/packages/jam/jam-host-calls/refine/peek.d.ts.map +1 -1
  363. package/packages/jam/jam-host-calls/refine/peek.js +3 -0
  364. package/packages/jam/jam-host-calls/refine/peek.test.js +3 -4
  365. package/packages/jam/jam-host-calls/refine/poke.d.ts +2 -1
  366. package/packages/jam/jam-host-calls/refine/poke.d.ts.map +1 -1
  367. package/packages/jam/jam-host-calls/refine/poke.js +3 -0
  368. package/packages/jam/jam-host-calls/refine/poke.test.js +3 -4
  369. package/packages/jam/jamnp-s/network.js +1 -1
  370. package/packages/jam/jamnp-s/peers.d.ts +2 -1
  371. package/packages/jam/jamnp-s/peers.d.ts.map +1 -1
  372. package/packages/jam/jamnp-s/peers.js +3 -0
  373. package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts +4 -2
  374. package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts.map +1 -1
  375. package/packages/jam/jamnp-s/protocol/ce-128-block-request.js +6 -0
  376. package/packages/jam/jamnp-s/protocol/ce-128-block-request.test.js +2 -2
  377. package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts +4 -2
  378. package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts.map +1 -1
  379. package/packages/jam/jamnp-s/protocol/ce-129-state-request.js +6 -0
  380. package/packages/jam/jamnp-s/protocol/ce-129-state-request.test.js +4 -4
  381. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +4 -2
  382. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
  383. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +6 -0
  384. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +2 -2
  385. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +6 -3
  386. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts.map +1 -1
  387. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.js +7 -0
  388. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.test.js +2 -2
  389. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts +5 -2
  390. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts.map +1 -1
  391. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.js +7 -0
  392. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.test.js +2 -2
  393. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +4 -2
  394. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts.map +1 -1
  395. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.js +6 -0
  396. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.test.js +2 -2
  397. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +2 -1
  398. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts.map +1 -1
  399. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.js +3 -0
  400. package/packages/jam/jamnp-s/stream-manager.d.ts +2 -1
  401. package/packages/jam/jamnp-s/stream-manager.d.ts.map +1 -1
  402. package/packages/jam/jamnp-s/stream-manager.js +4 -1
  403. package/packages/jam/jamnp-s/tasks/sync.js +4 -4
  404. package/packages/jam/jamnp-s/tasks/sync.test.js +4 -4
  405. package/packages/jam/jamnp-s/tasks/ticket-distribution.js +2 -2
  406. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
  407. package/packages/jam/node/common.d.ts.map +1 -1
  408. package/packages/jam/node/common.js +3 -3
  409. package/packages/jam/rpc-client/index.d.ts +4 -2
  410. package/packages/jam/rpc-client/index.d.ts.map +1 -1
  411. package/packages/jam/rpc-client/index.js +7 -1
  412. package/packages/jam/state/in-memory-state-view.d.ts +2 -1
  413. package/packages/jam/state/in-memory-state-view.d.ts.map +1 -1
  414. package/packages/jam/state/in-memory-state-view.js +3 -0
  415. package/packages/jam/state/in-memory-state.d.ts +16 -21
  416. package/packages/jam/state/in-memory-state.d.ts.map +1 -1
  417. package/packages/jam/state/in-memory-state.js +10 -6
  418. package/packages/jam/state/in-memory-state.test.js +2 -2
  419. package/packages/jam/state/service.d.ts +2 -6
  420. package/packages/jam/state/service.d.ts.map +1 -1
  421. package/packages/jam/state/service.js +3 -0
  422. package/packages/jam/state/test.utils.js +3 -3
  423. package/packages/jam/state-json/accounts.js +5 -5
  424. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +3 -34
  425. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts.map +1 -1
  426. package/packages/jam/state-merkleization/in-memory-state-codec.js +1 -1
  427. package/packages/jam/state-merkleization/serialized-state-view.d.ts +8 -3
  428. package/packages/jam/state-merkleization/serialized-state-view.d.ts.map +1 -1
  429. package/packages/jam/state-merkleization/serialized-state-view.js +6 -3
  430. package/packages/jam/state-merkleization/serialized-state.d.ts +2 -3
  431. package/packages/jam/state-merkleization/serialized-state.d.ts.map +1 -1
  432. package/packages/jam/state-merkleization/serialized-state.js +10 -2
  433. package/packages/jam/state-merkleization/serialized-state.test.js +1 -1
  434. package/packages/jam/transition/accumulate/accumulate.d.ts.map +1 -1
  435. package/packages/jam/transition/accumulate/accumulate.js +20 -8
  436. package/packages/jam/transition/accumulate/accumulate.test.js +1 -1
  437. package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +48 -39
  438. package/packages/jam/transition/block-verifier.d.ts +2 -1
  439. package/packages/jam/transition/block-verifier.d.ts.map +1 -1
  440. package/packages/jam/transition/block-verifier.js +3 -0
  441. package/packages/jam/transition/block-verifier.test.js +8 -8
  442. package/packages/jam/transition/chain-stf.d.ts +12 -4
  443. package/packages/jam/transition/chain-stf.d.ts.map +1 -1
  444. package/packages/jam/transition/chain-stf.js +7 -3
  445. package/packages/jam/transition/externalities/accumulate-externalities.d.ts +22 -8
  446. package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
  447. package/packages/jam/transition/externalities/accumulate-externalities.js +49 -29
  448. package/packages/jam/transition/externalities/accumulate-externalities.test.js +661 -101
  449. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
  450. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
  451. package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
  452. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
  453. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
  454. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
  455. package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
  456. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  457. package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
  458. package/packages/jam/transition/externalities/index.d.ts +3 -0
  459. package/packages/jam/transition/externalities/index.d.ts.map +1 -1
  460. package/packages/jam/transition/externalities/index.js +3 -0
  461. package/packages/jam/transition/externalities/is-authorized-fetch-externalities.d.ts +22 -0
  462. package/packages/jam/transition/externalities/is-authorized-fetch-externalities.d.ts.map +1 -0
  463. package/packages/jam/transition/externalities/is-authorized-fetch-externalities.js +41 -0
  464. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +24 -0
  465. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
  466. package/packages/jam/transition/externalities/refine-fetch-externalities.js +59 -0
  467. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
  468. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
  469. package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
  470. package/packages/jam/transition/hasher.d.ts +2 -1
  471. package/packages/jam/transition/hasher.d.ts.map +1 -1
  472. package/packages/jam/transition/hasher.js +5 -2
  473. package/packages/jam/transition/hasher.test.js +1 -1
  474. package/packages/jam/transition/preimages.test.js +4 -4
  475. package/packages/jam/transition/reports/test.utils.js +1 -1
  476. package/packages/workers/api-node/config.js +4 -4
  477. package/packages/workers/api-node/port.d.ts +2 -1
  478. package/packages/workers/api-node/port.d.ts.map +1 -1
  479. package/packages/workers/api-node/port.js +4 -1
  480. package/packages/workers/api-node/port.test.js +2 -2
  481. package/packages/workers/api-node/protocol.js +2 -2
  482. package/packages/workers/block-authorship/generator.d.ts +13 -2
  483. package/packages/workers/block-authorship/generator.d.ts.map +1 -1
  484. package/packages/workers/block-authorship/generator.js +13 -9
  485. package/packages/workers/block-authorship/generator.test.js +16 -2
  486. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  487. package/packages/workers/block-authorship/main.js +8 -1
  488. package/packages/workers/importer/finality.test.js +1 -1
  489. package/packages/workers/importer/importer.d.ts +23 -6
  490. package/packages/workers/importer/importer.d.ts.map +1 -1
  491. package/packages/workers/importer/importer.js +34 -19
  492. package/packages/workers/importer/main.d.ts.map +1 -1
  493. package/packages/workers/importer/main.js +13 -5
  494. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
  495. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
  496. package/packages/jam/transition/externalities/fetch-externalities.test.js +0 -254
@@ -1,14 +1,14 @@
1
1
  import assert from "node:assert";
2
2
  import { describe, it } from "node:test";
3
3
  import { tryAsServiceId } from "#@typeberry/block";
4
- import { BytesBlob } from "#@typeberry/bytes";
4
+ import { Bytes, BytesBlob } from "#@typeberry/bytes";
5
+ import { HASH_SIZE } from "#@typeberry/hash";
5
6
  import { tryAsU64 } from "#@typeberry/numbers";
6
7
  import { HostCallMemory, HostCallRegisters, PvmExecution } from "#@typeberry/pvm-host-calls";
7
8
  import { tryAsGas } from "#@typeberry/pvm-interface";
8
9
  import { gasCounter, MemoryBuilder, tryAsMemoryIndex, tryAsSbrkIndex } from "#@typeberry/pvm-interpreter";
9
10
  import { PAGE_SIZE } from "#@typeberry/pvm-interpreter/memory/memory-consts.js";
10
- import { emptyRegistersBuffer } from "../utils.js";
11
- import { Fetch, FetchKind } from "./fetch.js";
11
+ import { Fetch, FetchContext, FetchKind } from "./fetch.js";
12
12
  import { HostCallResult } from "./results.js";
13
13
  describe("Fetch", () => {
14
14
  const IN_OUT_REG = 7;
@@ -16,28 +16,31 @@ describe("Fetch", () => {
16
16
  it("should return PvmExecution.Panic if memory write fails", async () => {
17
17
  const currentServiceId = tryAsServiceId(10_000);
18
18
  const blob = BytesBlob.blobFromNumbers([1, 2, 3]);
19
- const fetchMock = new FetchMock();
19
+ const fetchMock = new RefineFetchMock();
20
20
  fetchMock.constantsResponse = blob;
21
21
  const badOffset = tryAsU64(0xfffff);
22
- const registers = new HostCallRegisters(emptyRegistersBuffer());
22
+ const registers = HostCallRegisters.empty();
23
23
  registers.set(IN_OUT_REG, badOffset);
24
24
  registers.set(8, tryAsU64(0));
25
25
  registers.set(9, tryAsU64(blob.length));
26
26
  registers.set(10, tryAsU64(FetchKind.Constants));
27
27
  const builder = new MemoryBuilder();
28
28
  // do not define any writable memory!
29
- const memory = new HostCallMemory(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
30
- const fetch = new Fetch(currentServiceId, fetchMock);
29
+ const memory = HostCallMemory.new(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
30
+ const fetch = Fetch.new(currentServiceId, fetchMock);
31
31
  const result = await fetch.execute(gas, registers, memory);
32
32
  assert.strictEqual(result, PvmExecution.Panic);
33
33
  });
34
34
  it("should write empty result and set IN_OUT_REG to NONE if fetch returns null", async () => {
35
35
  const currentServiceId = tryAsServiceId(10_000);
36
- const fetchMock = new FetchMock();
37
- fetchMock.entropyResponse = null;
36
+ const fetchMock = new RefineFetchMock();
37
+ // oneWorkItem returns null when the work item index has no mock response registered
38
38
  const blob = BytesBlob.blobFromNumbers([]);
39
- const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Entropy);
40
- const fetch = new Fetch(currentServiceId, fetchMock);
39
+ const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.OneWorkItem);
40
+ // set work item index to one that has no response → oneWorkItem returns null
41
+ registers.set(11, tryAsU64(999));
42
+ fetchMock.oneWorkItemResponses.set("999", null);
43
+ const fetch = Fetch.new(currentServiceId, fetchMock);
41
44
  const result = await fetch.execute(gas, registers, memory);
42
45
  assert.strictEqual(result, undefined);
43
46
  assert.strictEqual(registers.get(IN_OUT_REG), HostCallResult.NONE);
@@ -47,10 +50,10 @@ describe("Fetch", () => {
47
50
  it("should write nothing if offset >= blob length", async () => {
48
51
  const currentServiceId = tryAsServiceId(10_000);
49
52
  const blob = BytesBlob.blobFromNumbers([1, 2, 3]);
50
- const fetchMock = new FetchMock();
53
+ const fetchMock = new RefineFetchMock();
51
54
  fetchMock.constantsResponse = blob;
52
55
  const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Constants, 5, 2);
53
- const fetch = new Fetch(currentServiceId, fetchMock);
56
+ const fetch = Fetch.new(currentServiceId, fetchMock);
54
57
  const result = await fetch.execute(gas, registers, memory);
55
58
  assert.strictEqual(result, undefined);
56
59
  assert.deepStrictEqual(registers.get(IN_OUT_REG), tryAsU64(blob.length));
@@ -59,10 +62,10 @@ describe("Fetch", () => {
59
62
  it("should clamp offset + length to blob end", async () => {
60
63
  const currentServiceId = tryAsServiceId(10_000);
61
64
  const blob = BytesBlob.blobFromNumbers([9, 8, 7, 6, 5]);
62
- const fetchMock = new FetchMock();
65
+ const fetchMock = new RefineFetchMock();
63
66
  fetchMock.constantsResponse = blob;
64
67
  const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Constants, 3, 10);
65
- const fetch = new Fetch(currentServiceId, fetchMock);
68
+ const fetch = Fetch.new(currentServiceId, fetchMock);
66
69
  const result = await fetch.execute(gas, registers, memory);
67
70
  assert.strictEqual(result, undefined);
68
71
  assert.deepStrictEqual(registers.get(IN_OUT_REG), tryAsU64(blob.length));
@@ -71,11 +74,11 @@ describe("Fetch", () => {
71
74
  it("should return NONE and write nothing if fetch kind is unknown", async () => {
72
75
  const currentServiceId = tryAsServiceId(10_000);
73
76
  const blob = BytesBlob.empty();
74
- const fetchMock = new FetchMock();
77
+ const fetchMock = new RefineFetchMock();
75
78
  fetchMock.constantsResponse = blob;
76
79
  const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Constants);
77
80
  registers.set(10, tryAsU64(999));
78
- const fetch = new Fetch(currentServiceId, fetchMock);
81
+ const fetch = Fetch.new(currentServiceId, fetchMock);
79
82
  const result = await fetch.execute(gas, registers, memory);
80
83
  assert.strictEqual(result, undefined);
81
84
  assert.strictEqual(registers.get(IN_OUT_REG), HostCallResult.NONE);
@@ -84,10 +87,10 @@ describe("Fetch", () => {
84
87
  it("should fetch constants and write result to memory", async () => {
85
88
  const currentServiceId = tryAsServiceId(10_000);
86
89
  const blob = BytesBlob.blobFromNumbers([1, 2, 3, 4, 5]);
87
- const fetchMock = new FetchMock();
90
+ const fetchMock = new RefineFetchMock();
88
91
  fetchMock.constantsResponse = blob;
89
92
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.Constants);
90
- const fetch = new Fetch(currentServiceId, fetchMock);
93
+ const fetch = Fetch.new(currentServiceId, fetchMock);
91
94
  const result = await fetch.execute(gas, registers, memory);
92
95
  assert.strictEqual(result, undefined);
93
96
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -95,11 +98,11 @@ describe("Fetch", () => {
95
98
  });
96
99
  it("should fetch entropy and write result to memory", async () => {
97
100
  const currentServiceId = tryAsServiceId(10_000);
98
- const blob = BytesBlob.blobFromNumbers([10, 20, 30, 40]);
99
- const fetchMock = new FetchMock();
101
+ const blob = Bytes.fill(HASH_SIZE, 10).asOpaque();
102
+ const fetchMock = new RefineFetchMock();
100
103
  fetchMock.entropyResponse = blob;
101
104
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.Entropy);
102
- const fetch = new Fetch(currentServiceId, fetchMock);
105
+ const fetch = Fetch.new(currentServiceId, fetchMock);
103
106
  const result = await fetch.execute(gas, registers, memory);
104
107
  assert.strictEqual(result, undefined);
105
108
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -108,10 +111,10 @@ describe("Fetch", () => {
108
111
  it("should fetch authorizer trace and write result to memory", async () => {
109
112
  const currentServiceId = tryAsServiceId(10_000);
110
113
  const blob = BytesBlob.blobFromNumbers([9, 9, 9]);
111
- const fetchMock = new FetchMock();
114
+ const fetchMock = new RefineFetchMock();
112
115
  fetchMock.authorizerTraceResponse = blob;
113
116
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AuthorizerTrace);
114
- const fetch = new Fetch(currentServiceId, fetchMock);
117
+ const fetch = Fetch.new(currentServiceId, fetchMock);
115
118
  const result = await fetch.execute(gas, registers, memory);
116
119
  assert.strictEqual(result, undefined);
117
120
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -120,7 +123,7 @@ describe("Fetch", () => {
120
123
  it("should fetch other work item extrinsics and write result to memory", async () => {
121
124
  const currentServiceId = tryAsServiceId(10_000);
122
125
  const blob = BytesBlob.blobFromNumbers([42, 43, 44]);
123
- const fetchMock = new FetchMock();
126
+ const fetchMock = new RefineFetchMock();
124
127
  const workItem = tryAsU64(123);
125
128
  const index = tryAsU64(7);
126
129
  const key = `${workItem}:${index}`;
@@ -128,7 +131,7 @@ describe("Fetch", () => {
128
131
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.OtherWorkItemExtrinsics);
129
132
  registers.set(11, workItem);
130
133
  registers.set(12, index);
131
- const fetch = new Fetch(currentServiceId, fetchMock);
134
+ const fetch = Fetch.new(currentServiceId, fetchMock);
132
135
  const result = await fetch.execute(gas, registers, memory);
133
136
  assert.strictEqual(result, undefined);
134
137
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -138,13 +141,13 @@ describe("Fetch", () => {
138
141
  it("should fetch my extrinsics and write result to memory", async () => {
139
142
  const currentServiceId = tryAsServiceId(10_000);
140
143
  const blob = BytesBlob.blobFromNumbers([11, 12, 13]);
141
- const fetchMock = new FetchMock();
144
+ const fetchMock = new RefineFetchMock();
142
145
  const index = tryAsU64(5);
143
146
  const key = `null:${index}`;
144
147
  fetchMock.workItemExtrinsicResponses.set(key, blob);
145
148
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.MyExtrinsics);
146
149
  registers.set(11, index); // only index; workItem is null
147
- const fetch = new Fetch(currentServiceId, fetchMock);
150
+ const fetch = Fetch.new(currentServiceId, fetchMock);
148
151
  const result = await fetch.execute(gas, registers, memory);
149
152
  assert.strictEqual(result, undefined);
150
153
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -154,7 +157,7 @@ describe("Fetch", () => {
154
157
  it("should fetch other work item imports and write result to memory", async () => {
155
158
  const currentServiceId = tryAsServiceId(10_000);
156
159
  const blob = BytesBlob.blobFromNumbers([21, 22, 23]);
157
- const fetchMock = new FetchMock();
160
+ const fetchMock = new RefineFetchMock();
158
161
  const workItem = tryAsU64(42);
159
162
  const index = tryAsU64(3);
160
163
  const key = `${workItem}:${index}`;
@@ -162,7 +165,7 @@ describe("Fetch", () => {
162
165
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.OtherWorkItemImports);
163
166
  registers.set(11, workItem);
164
167
  registers.set(12, index);
165
- const fetch = new Fetch(currentServiceId, fetchMock);
168
+ const fetch = Fetch.new(currentServiceId, fetchMock);
166
169
  const result = await fetch.execute(gas, registers, memory);
167
170
  assert.strictEqual(result, undefined);
168
171
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -172,13 +175,13 @@ describe("Fetch", () => {
172
175
  it("should fetch my imports and write result to memory", async () => {
173
176
  const currentServiceId = tryAsServiceId(10_000);
174
177
  const blob = BytesBlob.blobFromNumbers([31, 32, 33]);
175
- const fetchMock = new FetchMock();
178
+ const fetchMock = new RefineFetchMock();
176
179
  const index = tryAsU64(8);
177
180
  const key = `null:${index}`;
178
181
  fetchMock.workItemImportResponses.set(key, blob);
179
182
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.MyImports);
180
183
  registers.set(11, index); // workItem is implicitly null
181
- const fetch = new Fetch(currentServiceId, fetchMock);
184
+ const fetch = Fetch.new(currentServiceId, fetchMock);
182
185
  const result = await fetch.execute(gas, registers, memory);
183
186
  assert.strictEqual(result, undefined);
184
187
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -188,10 +191,10 @@ describe("Fetch", () => {
188
191
  it("should fetch work package and write result to memory", async () => {
189
192
  const currentServiceId = tryAsServiceId(10_000);
190
193
  const blob = BytesBlob.blobFromNumbers([100, 101, 102]);
191
- const fetchMock = new FetchMock();
194
+ const fetchMock = new RefineFetchMock();
192
195
  fetchMock.workPackageResponse = blob;
193
196
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.WorkPackage);
194
- const fetch = new Fetch(currentServiceId, fetchMock);
197
+ const fetch = Fetch.new(currentServiceId, fetchMock);
195
198
  const result = await fetch.execute(gas, registers, memory);
196
199
  assert.strictEqual(result, undefined);
197
200
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -200,10 +203,10 @@ describe("Fetch", () => {
200
203
  it("should fetch authorizer and write result to memory", async () => {
201
204
  const currentServiceId = tryAsServiceId(10_000);
202
205
  const blob = BytesBlob.blobFromNumbers([201, 202, 203]);
203
- const fetchMock = new FetchMock();
206
+ const fetchMock = new RefineFetchMock();
204
207
  fetchMock.authorizerResponse = blob;
205
- const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.Authorizer);
206
- const fetch = new Fetch(currentServiceId, fetchMock);
208
+ const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AuthConfiguration);
209
+ const fetch = Fetch.new(currentServiceId, fetchMock);
207
210
  const result = await fetch.execute(gas, registers, memory);
208
211
  assert.strictEqual(result, undefined);
209
212
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -212,10 +215,10 @@ describe("Fetch", () => {
212
215
  it("should fetch authorization token and write result to memory", async () => {
213
216
  const currentServiceId = tryAsServiceId(10_000);
214
217
  const blob = BytesBlob.blobFromNumbers([210, 211, 212]);
215
- const fetchMock = new FetchMock();
218
+ const fetchMock = new RefineFetchMock();
216
219
  fetchMock.authorizationTokenResponse = blob;
217
- const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AuthorizationToken);
218
- const fetch = new Fetch(currentServiceId, fetchMock);
220
+ const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AuthToken);
221
+ const fetch = Fetch.new(currentServiceId, fetchMock);
219
222
  const result = await fetch.execute(gas, registers, memory);
220
223
  assert.strictEqual(result, undefined);
221
224
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -224,10 +227,10 @@ describe("Fetch", () => {
224
227
  it("should fetch refine context and write result to memory", async () => {
225
228
  const currentServiceId = tryAsServiceId(10_000);
226
229
  const blob = BytesBlob.blobFromNumbers([88, 89, 90]);
227
- const fetchMock = new FetchMock();
230
+ const fetchMock = new RefineFetchMock();
228
231
  fetchMock.refineContextResponse = blob;
229
232
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.RefineContext);
230
- const fetch = new Fetch(currentServiceId, fetchMock);
233
+ const fetch = Fetch.new(currentServiceId, fetchMock);
231
234
  const result = await fetch.execute(gas, registers, memory);
232
235
  assert.strictEqual(result, undefined);
233
236
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -236,10 +239,10 @@ describe("Fetch", () => {
236
239
  it("should fetch all work items and write result to memory", async () => {
237
240
  const currentServiceId = tryAsServiceId(10_000);
238
241
  const blob = BytesBlob.blobFromNumbers([70, 71, 72]);
239
- const fetchMock = new FetchMock();
242
+ const fetchMock = new RefineFetchMock();
240
243
  fetchMock.allWorkItemsResponse = blob;
241
244
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AllWorkItems);
242
- const fetch = new Fetch(currentServiceId, fetchMock);
245
+ const fetch = Fetch.new(currentServiceId, fetchMock);
243
246
  const result = await fetch.execute(gas, registers, memory);
244
247
  assert.strictEqual(result, undefined);
245
248
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -248,12 +251,12 @@ describe("Fetch", () => {
248
251
  it("should fetch one work item and write result to memory", async () => {
249
252
  const currentServiceId = tryAsServiceId(10_000);
250
253
  const blob = BytesBlob.blobFromNumbers([33, 34, 35]);
251
- const fetchMock = new FetchMock();
254
+ const fetchMock = new RefineFetchMock();
252
255
  const workItem = tryAsU64(55);
253
256
  fetchMock.oneWorkItemResponses.set(workItem.toString(), blob);
254
257
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.OneWorkItem);
255
258
  registers.set(11, workItem);
256
- const fetch = new Fetch(currentServiceId, fetchMock);
259
+ const fetch = Fetch.new(currentServiceId, fetchMock);
257
260
  const result = await fetch.execute(gas, registers, memory);
258
261
  assert.strictEqual(result, undefined);
259
262
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -263,12 +266,12 @@ describe("Fetch", () => {
263
266
  it("should fetch work item payload and write result to memory", async () => {
264
267
  const currentServiceId = tryAsServiceId(10_000);
265
268
  const blob = BytesBlob.blobFromNumbers([60, 61, 62]);
266
- const fetchMock = new FetchMock();
269
+ const fetchMock = new RefineFetchMock();
267
270
  const workItem = tryAsU64(77);
268
271
  fetchMock.workItemPayloadResponses.set(workItem.toString(), blob);
269
272
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.WorkItemPayload);
270
273
  registers.set(11, workItem);
271
- const fetch = new Fetch(currentServiceId, fetchMock);
274
+ const fetch = Fetch.new(currentServiceId, fetchMock);
272
275
  const result = await fetch.execute(gas, registers, memory);
273
276
  assert.strictEqual(result, undefined);
274
277
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -278,10 +281,10 @@ describe("Fetch", () => {
278
281
  it("should fetch all transfers and operands and write result to memory", async () => {
279
282
  const currentServiceId = tryAsServiceId(10_000);
280
283
  const blob = BytesBlob.blobFromNumbers([101, 102, 103]);
281
- const fetchMock = new FetchMock();
282
- fetchMock.allTransfersAndOperandsResponses = blob;
284
+ const fetchMock = new AccumulateFetchMock();
285
+ fetchMock.allTransfersAndOperandsResponse = blob;
283
286
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AllTransfersAndOperands);
284
- const fetch = new Fetch(currentServiceId, fetchMock);
287
+ const fetch = Fetch.new(currentServiceId, fetchMock);
285
288
  const result = await fetch.execute(gas, registers, memory);
286
289
  assert.strictEqual(result, undefined);
287
290
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
@@ -290,30 +293,67 @@ describe("Fetch", () => {
290
293
  it("should fetch one operand or transfer and write result to memory", async () => {
291
294
  const currentServiceId = tryAsServiceId(10_000);
292
295
  const blob = BytesBlob.blobFromNumbers([115, 116, 117]);
293
- const fetchMock = new FetchMock();
296
+ const fetchMock = new AccumulateFetchMock();
294
297
  const index = tryAsU64(9);
295
298
  fetchMock.oneTransferOrOperandResponses.set(index.toString(), blob);
296
299
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.OneTransferOrOperand);
297
300
  registers.set(11, index);
298
- const fetch = new Fetch(currentServiceId, fetchMock);
301
+ const fetch = Fetch.new(currentServiceId, fetchMock);
299
302
  const result = await fetch.execute(gas, registers, memory);
300
303
  assert.strictEqual(result, undefined);
301
304
  assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
302
305
  assert.deepStrictEqual(readBack(), blob.raw);
303
306
  assert.deepStrictEqual(fetchMock.oneTransferOrOperandData, [[index]]);
304
307
  });
308
+ it("should return NONE for refine-only kinds in accumulate context", async () => {
309
+ const currentServiceId = tryAsServiceId(10_000);
310
+ const fetchMock = new AccumulateFetchMock();
311
+ const blob = BytesBlob.empty();
312
+ for (const kind of [
313
+ FetchKind.AuthorizerTrace,
314
+ FetchKind.OtherWorkItemExtrinsics,
315
+ FetchKind.MyExtrinsics,
316
+ FetchKind.OtherWorkItemImports,
317
+ FetchKind.MyImports,
318
+ FetchKind.WorkPackage,
319
+ FetchKind.AuthConfiguration,
320
+ FetchKind.AuthToken,
321
+ FetchKind.RefineContext,
322
+ FetchKind.AllWorkItems,
323
+ FetchKind.OneWorkItem,
324
+ FetchKind.WorkItemPayload,
325
+ ]) {
326
+ const { registers, memory } = prepareRegsAndMemory(blob, kind);
327
+ const fetch = Fetch.new(currentServiceId, fetchMock);
328
+ const result = await fetch.execute(gas, registers, memory);
329
+ assert.strictEqual(result, undefined, `Expected undefined for kind ${kind}`);
330
+ assert.strictEqual(registers.get(IN_OUT_REG), HostCallResult.NONE, `Expected NONE for kind ${kind}`);
331
+ }
332
+ });
333
+ it("should return NONE for accumulate-only kinds in refine context", async () => {
334
+ const currentServiceId = tryAsServiceId(10_000);
335
+ const fetchMock = new RefineFetchMock();
336
+ const blob = BytesBlob.empty();
337
+ for (const kind of [FetchKind.AllTransfersAndOperands, FetchKind.OneTransferOrOperand]) {
338
+ const { registers, memory } = prepareRegsAndMemory(blob, kind);
339
+ const fetch = Fetch.new(currentServiceId, fetchMock);
340
+ const result = await fetch.execute(gas, registers, memory);
341
+ assert.strictEqual(result, undefined, `Expected undefined for kind ${kind}`);
342
+ assert.strictEqual(registers.get(IN_OUT_REG), HostCallResult.NONE, `Expected NONE for kind ${kind}`);
343
+ }
344
+ });
305
345
  function prepareRegsAndMemory(blob, fetchKind, offset = 0, length = blob.length) {
306
346
  const pageStart = 2 ** 16;
307
347
  const memOffset = tryAsU64(pageStart + 1234);
308
348
  const blobLength = tryAsU64(blob.length);
309
- const registers = new HostCallRegisters(emptyRegistersBuffer());
349
+ const registers = HostCallRegisters.empty();
310
350
  registers.set(IN_OUT_REG, memOffset);
311
351
  registers.set(8, tryAsU64(offset));
312
352
  registers.set(9, tryAsU64(length));
313
353
  registers.set(10, tryAsU64(fetchKind));
314
354
  const builder = new MemoryBuilder();
315
355
  builder.setWriteablePages(tryAsMemoryIndex(pageStart), tryAsMemoryIndex(pageStart + PAGE_SIZE));
316
- const memory = new HostCallMemory(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
356
+ const memory = HostCallMemory.new(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
317
357
  const readBack = () => {
318
358
  const result = new Uint8Array(blob.length);
319
359
  assert.strictEqual(memory.loadInto(result, memOffset).isOk, true);
@@ -327,32 +367,24 @@ describe("Fetch", () => {
327
367
  };
328
368
  }
329
369
  });
330
- class FetchMock {
370
+ class RefineFetchMock {
371
+ context = FetchContext.Refine;
331
372
  workItemExtrinsicData = [];
332
373
  workItemImportData = [];
333
374
  oneWorkItemData = [];
334
375
  workItemPayloadData = [];
335
- oneOperandData = [];
336
- oneTransferData = [];
337
- oneTransferOrOperandData = [];
338
376
  constantsResponse = null;
339
377
  entropyResponse = null;
340
- authorizerTraceResponse = null;
378
+ authorizerTraceResponse = BytesBlob.empty();
341
379
  workItemExtrinsicResponses = new Map();
342
380
  workItemImportResponses = new Map();
343
- workPackageResponse = null;
344
- authorizerResponse = null;
345
- authorizationTokenResponse = null;
346
- refineContextResponse = null;
347
- allWorkItemsResponse = null;
381
+ workPackageResponse = BytesBlob.empty();
382
+ authorizerResponse = BytesBlob.empty();
383
+ authorizationTokenResponse = BytesBlob.empty();
384
+ refineContextResponse = BytesBlob.empty();
385
+ allWorkItemsResponse = BytesBlob.empty();
348
386
  oneWorkItemResponses = new Map();
349
387
  workItemPayloadResponses = new Map();
350
- allOperandsResponse = null;
351
- oneOperandResponses = new Map();
352
- allTransfersResponse = null;
353
- oneTransferResponses = new Map();
354
- allTransfersAndOperandsResponses = null;
355
- oneTransferOrOperandResponses = new Map();
356
388
  constants() {
357
389
  if (this.constantsResponse === null) {
358
390
  throw new Error("Unexpected call to constants.");
@@ -360,6 +392,9 @@ class FetchMock {
360
392
  return this.constantsResponse;
361
393
  }
362
394
  entropy() {
395
+ if (this.entropyResponse === null) {
396
+ throw new Error("Unexpected call to entropy.");
397
+ }
363
398
  return this.entropyResponse;
364
399
  }
365
400
  authorizerTrace() {
@@ -384,10 +419,10 @@ class FetchMock {
384
419
  workPackage() {
385
420
  return this.workPackageResponse;
386
421
  }
387
- authorizer() {
422
+ authConfiguration() {
388
423
  return this.authorizerResponse;
389
424
  }
390
- authorizationToken() {
425
+ authToken() {
391
426
  return this.authorizationTokenResponse;
392
427
  }
393
428
  refineContext() {
@@ -412,30 +447,28 @@ class FetchMock {
412
447
  }
413
448
  return this.workItemPayloadResponses.get(key) ?? null;
414
449
  }
415
- allOperands() {
416
- return this.allOperandsResponse;
417
- }
418
- oneOperand(operandIndex) {
419
- this.oneOperandData.push([operandIndex]);
420
- const key = operandIndex.toString();
421
- if (!this.oneOperandResponses.has(key)) {
422
- throw new Error(`Missing mock response for oneOperand(${key})`);
450
+ }
451
+ class AccumulateFetchMock {
452
+ context = FetchContext.Accumulate;
453
+ oneTransferOrOperandData = [];
454
+ constantsResponse = null;
455
+ entropyResponse = null;
456
+ allTransfersAndOperandsResponse = null;
457
+ oneTransferOrOperandResponses = new Map();
458
+ constants() {
459
+ if (this.constantsResponse === null) {
460
+ throw new Error("Unexpected call to constants.");
423
461
  }
424
- return this.oneOperandResponses.get(key) ?? null;
425
- }
426
- allTransfers() {
427
- return this.allTransfersResponse;
462
+ return this.constantsResponse;
428
463
  }
429
- oneTransfer(transferIndex) {
430
- this.oneTransferData.push([transferIndex]);
431
- const key = transferIndex.toString();
432
- if (!this.oneTransferResponses.has(key)) {
433
- throw new Error(`Missing mock response for oneTransfer(${key})`);
464
+ entropy() {
465
+ if (this.entropyResponse === null) {
466
+ throw new Error("Unexpected call to entropy.");
434
467
  }
435
- return this.oneTransferResponses.get(key) ?? null;
468
+ return this.entropyResponse;
436
469
  }
437
470
  allTransfersAndOperands() {
438
- return this.allTransfersAndOperandsResponses;
471
+ return this.allTransfersAndOperandsResponse;
439
472
  }
440
473
  oneTransferOrOperand(index) {
441
474
  this.oneTransferOrOperandData.push([index]);
@@ -14,7 +14,8 @@ export declare class GasHostCall implements HostCallHandler {
14
14
  index: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"HostCallIndex[U32]">;
15
15
  basicGasCost: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"SmallGas[U32]">;
16
16
  tracedRegisters: (number & import("@typeberry/utils").WithOpaque<"register index">)[];
17
- constructor(currentServiceId: ServiceId);
17
+ static new(currentServiceId: ServiceId): GasHostCall;
18
+ private constructor();
18
19
  execute(gas: IGasCounter, regs: HostCallRegisters): Promise<undefined | PvmExecution>;
19
20
  }
20
21
  //# sourceMappingURL=gas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gas.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/general/gas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,KAAK,YAAY,EAAsC,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AAG3E;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,eAAe;aAKrB,gBAAgB,EAAE,SAAS;IAJvD,KAAK,iIAAyB;IAC9B,YAAY,4HAAqB;IACjC,eAAe,uEAAqB;gBAER,gBAAgB,EAAE,SAAS;IAEvD,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CAMtF"}
1
+ {"version":3,"file":"gas.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/general/gas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,KAAK,YAAY,EAAsC,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AAG3E;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,eAAe;aASb,gBAAgB,EAAE,SAAS;IAR/D,KAAK,iIAAyB;IAC9B,YAAY,4HAAqB;IACjC,eAAe,uEAAqB;IAEpC,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS;IAItC,OAAO;IAEP,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CAMtF"}
@@ -14,6 +14,9 @@ export class GasHostCall {
14
14
  index = tryAsHostCallIndex(0);
15
15
  basicGasCost = tryAsSmallGas(10);
16
16
  tracedRegisters = traceRegisters(7);
17
+ static new(currentServiceId) {
18
+ return new GasHostCall(currentServiceId);
19
+ }
17
20
  constructor(currentServiceId) {
18
21
  this.currentServiceId = currentServiceId;
19
22
  }
@@ -4,15 +4,14 @@ import { tryAsServiceId } from "#@typeberry/block";
4
4
  import { HostCallRegisters } from "#@typeberry/pvm-host-calls";
5
5
  import { tryAsGas } from "#@typeberry/pvm-interface";
6
6
  import { gasCounter } from "#@typeberry/pvm-interpreter";
7
- import { emptyRegistersBuffer } from "../utils.js";
8
7
  import { GasHostCall } from "./gas.js";
9
8
  const REGISTER = 7;
10
9
  describe("HostCalls: Gas", () => {
11
10
  it("should write U32 gas to register", () => {
12
11
  const currentServiceId = tryAsServiceId(10_000);
13
- const gas = new GasHostCall(currentServiceId);
12
+ const gas = GasHostCall.new(currentServiceId);
14
13
  const counter = gasCounter(tryAsGas(10_000));
15
- const regs = new HostCallRegisters(emptyRegistersBuffer());
14
+ const regs = HostCallRegisters.empty();
16
15
  assert.deepStrictEqual(regs.get(REGISTER), 0n);
17
16
  // when
18
17
  gas.execute(counter, regs);
@@ -21,9 +20,9 @@ describe("HostCalls: Gas", () => {
21
20
  });
22
21
  it("should write U64 gas to register", () => {
23
22
  const currentServiceId = tryAsServiceId(10_000);
24
- const gas = new GasHostCall(currentServiceId);
23
+ const gas = GasHostCall.new(currentServiceId);
25
24
  const counter = gasCounter(tryAsGas(2n ** 64n - 1n));
26
- const regs = new HostCallRegisters(emptyRegistersBuffer());
25
+ const regs = HostCallRegisters.empty();
27
26
  assert.deepStrictEqual(regs.get(REGISTER), 0n);
28
27
  // when
29
28
  gas.execute(counter, regs);
@@ -33,7 +33,8 @@ export declare class Info implements HostCallHandler {
33
33
  index: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"HostCallIndex[U32]">;
34
34
  basicGasCost: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"SmallGas[U32]">;
35
35
  tracedRegisters: (number & import("@typeberry/utils").WithOpaque<"register index">)[];
36
- constructor(currentServiceId: ServiceId, account: AccountsInfo);
36
+ static new(currentServiceId: ServiceId, account: AccountsInfo): Info;
37
+ private constructor();
37
38
  execute(_gas: IGasCounter, regs: HostCallRegisters, memory: HostCallMemory): Promise<undefined | PvmExecution>;
38
39
  }
39
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/general/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkD,MAAM,kBAAkB,CAAC;AAKlG,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;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMtD,kDAAkD;AAClD,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,kBAAkB,GAAG,IAAI,CAAC;CACxE;AAMD,eAAO,MAAM,OAAO,QACsF,CAAC;AAE3G;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,IAAK,YAAW,eAAe;aAMxB,gBAAgB,EAAE,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,KAAK,iIAAyB;IAC9B,YAAY,4HAAqB;IACjC,eAAe,uEAAsD;gBAGnD,gBAAgB,EAAE,SAAS,EAC1B,OAAO,EAAE,YAAY;IAGlC,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CA8CrH;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2CAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAevD,CAAC"}
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/general/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkD,MAAM,kBAAkB,CAAC;AAKlG,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;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMtD,kDAAkD;AAClD,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,kBAAkB,GAAG,IAAI,CAAC;CACxE;AAMD,eAAO,MAAM,OAAO,QACsF,CAAC;AAE3G;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,IAAK,YAAW,eAAe;aAUxB,gBAAgB,EAAE,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAV1B,KAAK,iIAAyB;IAC9B,YAAY,4HAAqB;IACjC,eAAe,uEAAsD;IAErE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY;IAI7D,OAAO;IAKD,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CA8CrH;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2CAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAevD,CAAC"}
@@ -37,6 +37,9 @@ export class Info {
37
37
  index = tryAsHostCallIndex(5);
38
38
  basicGasCost = tryAsSmallGas(10);
39
39
  tracedRegisters = traceRegisters(IN_OUT_REG, 8, OFFSET_REG, LEN_REG);
40
+ static new(currentServiceId, account) {
41
+ return new Info(currentServiceId, account);
42
+ }
40
43
  constructor(currentServiceId, account) {
41
44
  this.currentServiceId = currentServiceId;
42
45
  this.account = account;
@@ -12,7 +12,6 @@ import { tryAsSbrkIndex } from "#@typeberry/pvm-interpreter/memory/memory-index.
12
12
  import { PAGE_SIZE } from "#@typeberry/pvm-interpreter/spi-decoder/memory-conts.js";
13
13
  import { ServiceAccountInfo } from "#@typeberry/state";
14
14
  import { TestAccounts } from "../externalities/test-accounts.js";
15
- import { emptyRegistersBuffer } from "../utils.js";
16
15
  import { codecServiceAccountInfoWithThresholdBalance, Info, LEN_REG } from "./info.js";
17
16
  import { HostCallResult } from "./results.js";
18
17
  const SERVICE_ID_REG = 7;
@@ -23,13 +22,13 @@ const serviceAccountInfoSize = tryAsExactBytes(codecServiceAccountInfoWithThresh
23
22
  function prepareRegsAndMemory(serviceId, accountInfoLength = serviceAccountInfoSize) {
24
23
  const pageStart = 2 ** 16;
25
24
  const memStart = pageStart + PAGE_SIZE - accountInfoLength - 1;
26
- const registers = new HostCallRegisters(emptyRegistersBuffer());
25
+ const registers = HostCallRegisters.empty();
27
26
  registers.set(SERVICE_ID_REG, tryAsU64(serviceId));
28
27
  registers.set(DEST_START_REG, tryAsU64(memStart));
29
28
  registers.set(LEN_REG, tryAsU64(serviceAccountInfoSize));
30
29
  const builder = new MemoryBuilder();
31
30
  builder.setWriteablePages(tryAsMemoryIndex(pageStart), tryAsMemoryIndex(pageStart + PAGE_SIZE));
32
- const memory = new HostCallMemory(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
31
+ const memory = HostCallMemory.new(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
33
32
  const readRaw = () => {
34
33
  const result = new Uint8Array(Number(registers.get(LEN_REG)));
35
34
  assert.strictEqual(memory.loadInto(result, tryAsU64(memStart)).isOk, true);
@@ -56,7 +55,7 @@ describe("HostCalls: Info", () => {
56
55
  const serviceId = tryAsServiceId(10_000);
57
56
  const currentServiceId = serviceId;
58
57
  const accounts = new TestAccounts(currentServiceId);
59
- const info = new Info(currentServiceId, accounts);
58
+ const info = Info.new(currentServiceId, accounts);
60
59
  const { registers, memory, readInfo } = prepareRegsAndMemory(serviceId);
61
60
  const storageUtilisationBytes = tryAsU64(10_000);
62
61
  const storageUtilisationCount = tryAsU32(1_000);
@@ -84,7 +83,7 @@ describe("HostCalls: Info", () => {
84
83
  const serviceId = tryAsServiceId(10_000);
85
84
  const currentServiceId = serviceId;
86
85
  const accounts = new TestAccounts(currentServiceId);
87
- const info = new Info(currentServiceId, accounts);
86
+ const info = Info.new(currentServiceId, accounts);
88
87
  const { registers, memory, readRaw } = prepareRegsAndMemory(serviceId);
89
88
  registers.set(LEN_REG, tryAsU64(10));
90
89
  const storageUtilisationBytes = tryAsU64(10_000);
@@ -108,7 +107,7 @@ describe("HostCalls: Info", () => {
108
107
  it("should write none if account info is missing", async () => {
109
108
  const currentServiceId = tryAsServiceId(15_000);
110
109
  const accounts = new TestAccounts(currentServiceId);
111
- const info = new Info(currentServiceId, accounts);
110
+ const info = Info.new(currentServiceId, accounts);
112
111
  const serviceId = tryAsServiceId(10_000);
113
112
  const { registers, memory } = prepareRegsAndMemory(serviceId);
114
113
  // when
@@ -121,7 +120,7 @@ describe("HostCalls: Info", () => {
121
120
  const serviceId = tryAsServiceId(10_000);
122
121
  const currentServiceId = serviceId;
123
122
  const accounts = new TestAccounts(currentServiceId);
124
- const info = new Info(serviceId, accounts);
123
+ const info = Info.new(serviceId, accounts);
125
124
  const { registers, memory } = prepareRegsAndMemory(serviceId, 10);
126
125
  const storageUtilisationBytes = tryAsU64(10_000);
127
126
  const storageUtilisationCount = tryAsU32(1_000);