@typeberry/lib 0.5.10-ec38e0b → 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 (452) 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/index.test.js +1 -1
  7. package/packages/core/codec/skip.d.ts +2 -1
  8. package/packages/core/codec/skip.d.ts.map +1 -1
  9. package/packages/core/codec/skip.js +3 -0
  10. package/packages/core/codec/view.js +2 -2
  11. package/packages/core/collections/multi-map.d.ts +2 -1
  12. package/packages/core/collections/multi-map.d.ts.map +1 -1
  13. package/packages/core/collections/multi-map.js +3 -0
  14. package/packages/core/collections/multi-map.test.js +2 -2
  15. package/packages/core/concurrent/parent.js +4 -1
  16. package/packages/core/crypto/ed25519.d.ts +2 -5
  17. package/packages/core/crypto/ed25519.d.ts.map +1 -1
  18. package/packages/core/crypto/ed25519.js +4 -1
  19. package/packages/core/hash/hash.d.ts +4 -2
  20. package/packages/core/hash/hash.d.ts.map +1 -1
  21. package/packages/core/hash/hash.js +6 -1
  22. package/packages/core/networking/quic-network.d.ts +3 -2
  23. package/packages/core/networking/quic-network.d.ts.map +1 -1
  24. package/packages/core/networking/quic-network.js +3 -0
  25. package/packages/core/networking/quic-peer.d.ts +2 -1
  26. package/packages/core/networking/quic-peer.d.ts.map +1 -1
  27. package/packages/core/networking/quic-peer.js +5 -2
  28. package/packages/core/networking/quic-stream.d.ts +2 -1
  29. package/packages/core/networking/quic-stream.d.ts.map +1 -1
  30. package/packages/core/networking/quic-stream.js +3 -0
  31. package/packages/core/networking/setup.js +2 -2
  32. package/packages/core/pvm-host-calls/bin.js +2 -2
  33. package/packages/core/pvm-host-calls/ecalli-trace-logger.d.ts +5 -0
  34. package/packages/core/pvm-host-calls/ecalli-trace-logger.d.ts.map +1 -1
  35. package/packages/core/pvm-host-calls/ecalli-trace-logger.js +8 -1
  36. package/packages/core/pvm-host-calls/ecalli-trace-logger.test.js +1 -1
  37. package/packages/core/pvm-host-calls/host-call-memory.d.ts +2 -1
  38. package/packages/core/pvm-host-calls/host-call-memory.d.ts.map +1 -1
  39. package/packages/core/pvm-host-calls/host-call-memory.js +3 -0
  40. package/packages/core/pvm-host-calls/host-call-memory.test.js +1 -1
  41. package/packages/core/pvm-host-calls/host-call-registers.d.ts +5 -1
  42. package/packages/core/pvm-host-calls/host-call-registers.d.ts.map +1 -1
  43. package/packages/core/pvm-host-calls/host-call-registers.js +11 -1
  44. package/packages/core/pvm-host-calls/host-call-registers.test.js +2 -2
  45. package/packages/core/pvm-host-calls/host-calls-executor.d.ts +2 -1
  46. package/packages/core/pvm-host-calls/host-calls-executor.d.ts.map +1 -1
  47. package/packages/core/pvm-host-calls/host-calls-executor.js +5 -2
  48. package/packages/core/pvm-host-calls/host-calls.d.ts +4 -2
  49. package/packages/core/pvm-host-calls/host-calls.d.ts.map +1 -1
  50. package/packages/core/pvm-host-calls/host-calls.js +9 -4
  51. package/packages/core/pvm-host-calls/pvm-instance-manager.js +1 -1
  52. package/packages/core/pvm-interpreter/args-decoder/args-decoder.js +1 -1
  53. package/packages/core/pvm-interpreter/args-decoder/args-decoder.test.js +3 -3
  54. package/packages/core/pvm-interpreter/args-decoder/args-decoding-results.js +11 -11
  55. package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.d.ts +2 -1
  56. package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.d.ts.map +1 -1
  57. package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.js +3 -0
  58. package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.test.js +2 -2
  59. package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.d.ts +2 -1
  60. package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.d.ts.map +1 -1
  61. package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.js +3 -0
  62. package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.test.js +26 -26
  63. package/packages/core/pvm-interpreter/basic-blocks/basic-blocks.test.js +8 -8
  64. package/packages/core/pvm-interpreter/bin.js +1 -1
  65. package/packages/core/pvm-interpreter/debugger-adapter.d.ts +2 -1
  66. package/packages/core/pvm-interpreter/debugger-adapter.d.ts.map +1 -1
  67. package/packages/core/pvm-interpreter/debugger-adapter.js +6 -3
  68. package/packages/core/pvm-interpreter/gas.js +4 -1
  69. package/packages/core/pvm-interpreter/interpreter.d.ts +2 -1
  70. package/packages/core/pvm-interpreter/interpreter.d.ts.map +1 -1
  71. package/packages/core/pvm-interpreter/interpreter.js +19 -16
  72. package/packages/core/pvm-interpreter/memory/memory-builder.js +2 -2
  73. package/packages/core/pvm-interpreter/memory/memory-builder.test.js +7 -7
  74. package/packages/core/pvm-interpreter/memory/memory.d.ts +2 -1
  75. package/packages/core/pvm-interpreter/memory/memory.d.ts.map +1 -1
  76. package/packages/core/pvm-interpreter/memory/memory.js +4 -1
  77. package/packages/core/pvm-interpreter/memory/memory.test.js +31 -31
  78. package/packages/core/pvm-interpreter/memory/pages/readable-page.d.ts +2 -1
  79. package/packages/core/pvm-interpreter/memory/pages/readable-page.d.ts.map +1 -1
  80. package/packages/core/pvm-interpreter/memory/pages/readable-page.js +3 -0
  81. package/packages/core/pvm-interpreter/memory/pages/readable-page.test.js +3 -3
  82. package/packages/core/pvm-interpreter/memory/pages/writeable-page.d.ts +2 -1
  83. package/packages/core/pvm-interpreter/memory/pages/writeable-page.d.ts.map +1 -1
  84. package/packages/core/pvm-interpreter/memory/pages/writeable-page.js +3 -0
  85. package/packages/core/pvm-interpreter/memory/pages/writeable-page.test.js +4 -4
  86. package/packages/core/pvm-interpreter/ops/bit-ops.d.ts +2 -1
  87. package/packages/core/pvm-interpreter/ops/bit-ops.d.ts.map +1 -1
  88. package/packages/core/pvm-interpreter/ops/bit-ops.js +3 -0
  89. package/packages/core/pvm-interpreter/ops/bit-ops.test.js +3 -3
  90. package/packages/core/pvm-interpreter/ops/bit-rotation-ops.d.ts +2 -1
  91. package/packages/core/pvm-interpreter/ops/bit-rotation-ops.d.ts.map +1 -1
  92. package/packages/core/pvm-interpreter/ops/bit-rotation-ops.js +3 -0
  93. package/packages/core/pvm-interpreter/ops/bit-rotation-ops.test.js +5 -5
  94. package/packages/core/pvm-interpreter/ops/boolean-ops.d.ts +2 -1
  95. package/packages/core/pvm-interpreter/ops/boolean-ops.d.ts.map +1 -1
  96. package/packages/core/pvm-interpreter/ops/boolean-ops.js +3 -0
  97. package/packages/core/pvm-interpreter/ops/boolean-ops.test.js +3 -3
  98. package/packages/core/pvm-interpreter/ops/branch-ops.d.ts +2 -1
  99. package/packages/core/pvm-interpreter/ops/branch-ops.d.ts.map +1 -1
  100. package/packages/core/pvm-interpreter/ops/branch-ops.js +3 -0
  101. package/packages/core/pvm-interpreter/ops/branch-ops.test.js +4 -4
  102. package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.d.ts +2 -1
  103. package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.d.ts.map +1 -1
  104. package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.js +3 -0
  105. package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.test.js +5 -5
  106. package/packages/core/pvm-interpreter/ops/host-call-ops.d.ts +2 -1
  107. package/packages/core/pvm-interpreter/ops/host-call-ops.d.ts.map +1 -1
  108. package/packages/core/pvm-interpreter/ops/host-call-ops.js +3 -0
  109. package/packages/core/pvm-interpreter/ops/host-call-ops.test.js +2 -2
  110. package/packages/core/pvm-interpreter/ops/load-ops.d.ts +2 -1
  111. package/packages/core/pvm-interpreter/ops/load-ops.d.ts.map +1 -1
  112. package/packages/core/pvm-interpreter/ops/load-ops.js +3 -0
  113. package/packages/core/pvm-interpreter/ops/load-ops.test.js +10 -10
  114. package/packages/core/pvm-interpreter/ops/math-ops.d.ts +2 -1
  115. package/packages/core/pvm-interpreter/ops/math-ops.d.ts.map +1 -1
  116. package/packages/core/pvm-interpreter/ops/math-ops.js +3 -0
  117. package/packages/core/pvm-interpreter/ops/math-ops.test.js +3 -3
  118. package/packages/core/pvm-interpreter/ops/memory-ops.d.ts +2 -1
  119. package/packages/core/pvm-interpreter/ops/memory-ops.d.ts.map +1 -1
  120. package/packages/core/pvm-interpreter/ops/memory-ops.js +3 -0
  121. package/packages/core/pvm-interpreter/ops/memory-ops.test.js +3 -3
  122. package/packages/core/pvm-interpreter/ops/move-ops.d.ts +2 -1
  123. package/packages/core/pvm-interpreter/ops/move-ops.d.ts.map +1 -1
  124. package/packages/core/pvm-interpreter/ops/move-ops.js +3 -0
  125. package/packages/core/pvm-interpreter/ops/move-ops.test.js +3 -3
  126. package/packages/core/pvm-interpreter/ops/no-args-ops.d.ts +2 -1
  127. package/packages/core/pvm-interpreter/ops/no-args-ops.d.ts.map +1 -1
  128. package/packages/core/pvm-interpreter/ops/no-args-ops.js +3 -0
  129. package/packages/core/pvm-interpreter/ops/no-args-ops.test.js +2 -2
  130. package/packages/core/pvm-interpreter/ops/shift-ops.d.ts +2 -1
  131. package/packages/core/pvm-interpreter/ops/shift-ops.d.ts.map +1 -1
  132. package/packages/core/pvm-interpreter/ops/shift-ops.js +3 -0
  133. package/packages/core/pvm-interpreter/ops/shift-ops.test.js +3 -3
  134. package/packages/core/pvm-interpreter/ops/store-ops.d.ts +2 -1
  135. package/packages/core/pvm-interpreter/ops/store-ops.d.ts.map +1 -1
  136. package/packages/core/pvm-interpreter/ops/store-ops.js +3 -0
  137. package/packages/core/pvm-interpreter/ops/store-ops.test.js +7 -7
  138. package/packages/core/pvm-interpreter/ops-dispatchers/no-args-dispatcher.test.js +1 -1
  139. package/packages/core/pvm-interpreter/ops-dispatchers/one-imm-dispatcher.test.js +4 -4
  140. package/packages/core/pvm-interpreter/ops-dispatchers/one-offset-dispatcher.test.js +2 -2
  141. package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-one-ext-imm-dispatcher.test.js +4 -4
  142. package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-one-imm-dispatcher.test.js +7 -7
  143. package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-one-imm-one-offset-dispatcher.test.js +10 -10
  144. package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-two-imms-dispatcher.test.js +5 -5
  145. package/packages/core/pvm-interpreter/ops-dispatchers/three-regs-dispatcher.test.js +7 -7
  146. package/packages/core/pvm-interpreter/ops-dispatchers/two-imms-dispatcher.test.js +5 -5
  147. package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-dispatcher.test.js +6 -6
  148. package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-one-imm-dispatcher.test.js +11 -11
  149. package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-one-offset-dispatcher.test.js +2 -2
  150. package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-two-imms-dispatcher.test.js +14 -14
  151. package/packages/core/pvm-interpreter/program-decoder/jump-table.d.ts +5 -2
  152. package/packages/core/pvm-interpreter/program-decoder/jump-table.d.ts.map +1 -1
  153. package/packages/core/pvm-interpreter/program-decoder/jump-table.js +9 -4
  154. package/packages/core/pvm-interpreter/program-decoder/jump-table.test.js +6 -6
  155. package/packages/core/pvm-interpreter/program-decoder/mask.d.ts +2 -1
  156. package/packages/core/pvm-interpreter/program-decoder/mask.d.ts.map +1 -1
  157. package/packages/core/pvm-interpreter/program-decoder/mask.js +3 -0
  158. package/packages/core/pvm-interpreter/program-decoder/mask.test.js +10 -10
  159. package/packages/core/pvm-interpreter/program-decoder/program-decoder.d.ts +2 -1
  160. package/packages/core/pvm-interpreter/program-decoder/program-decoder.d.ts.map +1 -1
  161. package/packages/core/pvm-interpreter/program-decoder/program-decoder.js +6 -3
  162. package/packages/core/pvm-interpreter/program-decoder/program-decoder.test.js +5 -5
  163. package/packages/core/pvm-interpreter/program.js +3 -3
  164. package/packages/core/pvm-interpreter/registers.d.ts +5 -2
  165. package/packages/core/pvm-interpreter/registers.d.ts.map +1 -1
  166. package/packages/core/pvm-interpreter/registers.js +10 -6
  167. package/packages/core/pvm-interpreter/registers.test.js +10 -10
  168. package/packages/core/pvm-interpreter/spi-decoder/decode-standard-program.d.ts +6 -3
  169. package/packages/core/pvm-interpreter/spi-decoder/decode-standard-program.d.ts.map +1 -1
  170. package/packages/core/pvm-interpreter/spi-decoder/decode-standard-program.js +11 -2
  171. package/packages/core/pvm-interpreter-ananas/index.d.ts +6 -3
  172. package/packages/core/pvm-interpreter-ananas/index.d.ts.map +1 -1
  173. package/packages/core/pvm-interpreter-ananas/index.js +12 -3
  174. package/packages/core/trie/nodes.d.ts +7 -2
  175. package/packages/core/trie/nodes.d.ts.map +1 -1
  176. package/packages/core/trie/nodes.js +20 -11
  177. package/packages/core/trie/nodesDb.d.ts +3 -1
  178. package/packages/core/trie/nodesDb.d.ts.map +1 -1
  179. package/packages/core/trie/nodesDb.js +6 -0
  180. package/packages/core/trie/trie.js +2 -2
  181. package/packages/extensions/ipc/index.js +5 -2
  182. package/packages/extensions/ipc/jamnp/handler.d.ts +4 -2
  183. package/packages/extensions/ipc/jamnp/handler.d.ts.map +1 -1
  184. package/packages/extensions/ipc/jamnp/handler.js +9 -3
  185. package/packages/extensions/ipc/jamnp/server.js +3 -3
  186. package/packages/extensions/ipc/server.d.ts +2 -1
  187. package/packages/extensions/ipc/server.d.ts.map +1 -1
  188. package/packages/extensions/ipc/server.js +4 -1
  189. package/packages/jam/block/header.js +1 -1
  190. package/packages/jam/config/chain-spec.d.ts +2 -1
  191. package/packages/jam/config/chain-spec.d.ts.map +1 -1
  192. package/packages/jam/config/chain-spec.js +5 -2
  193. package/packages/jam/config/network.d.ts +2 -7
  194. package/packages/jam/config/network.d.ts.map +1 -1
  195. package/packages/jam/config/network.js +3 -0
  196. package/packages/jam/config-node/jip-chain-spec.js +1 -1
  197. package/packages/jam/database/blocks.test.js +1 -1
  198. package/packages/jam/database/states.d.ts +2 -1
  199. package/packages/jam/database/states.d.ts.map +1 -1
  200. package/packages/jam/database/states.js +3 -0
  201. package/packages/jam/database/states.test.js +1 -1
  202. package/packages/jam/database-lmdb/blocks.d.ts +2 -1
  203. package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
  204. package/packages/jam/database-lmdb/blocks.js +3 -0
  205. package/packages/jam/database-lmdb/root.d.ts +2 -1
  206. package/packages/jam/database-lmdb/root.d.ts.map +1 -1
  207. package/packages/jam/database-lmdb/root.js +3 -0
  208. package/packages/jam/database-lmdb/states.d.ts +2 -1
  209. package/packages/jam/database-lmdb/states.d.ts.map +1 -1
  210. package/packages/jam/database-lmdb/states.js +3 -0
  211. package/packages/jam/database-lmdb/states.test.js +9 -9
  212. package/packages/jam/executor/index.d.ts +1 -1
  213. package/packages/jam/executor/index.d.ts.map +1 -1
  214. package/packages/jam/executor/index.js +1 -1
  215. package/packages/jam/executor/pvm-executor.js +24 -24
  216. package/packages/jam/fuzz-proto/v1/handler.d.ts +2 -1
  217. package/packages/jam/fuzz-proto/v1/handler.d.ts.map +1 -1
  218. package/packages/jam/fuzz-proto/v1/handler.js +3 -0
  219. package/packages/jam/fuzz-proto/v1/handler.test.js +10 -10
  220. package/packages/jam/in-core/externalities/refine.d.ts +3 -3
  221. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  222. package/packages/jam/in-core/externalities/refine.js +33 -5
  223. package/packages/jam/in-core/externalities/refine.test.js +66 -1
  224. package/packages/jam/in-core/in-core.d.ts +2 -1
  225. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  226. package/packages/jam/in-core/in-core.js +3 -0
  227. package/packages/jam/in-core/in-core.test.js +6 -6
  228. package/packages/jam/in-core/is-authorized.test.js +2 -2
  229. package/packages/jam/in-core/refine.js +1 -1
  230. package/packages/jam/jam-host-calls/accumulate/assign.d.ts +2 -1
  231. package/packages/jam/jam-host-calls/accumulate/assign.d.ts.map +1 -1
  232. package/packages/jam/jam-host-calls/accumulate/assign.js +3 -0
  233. package/packages/jam/jam-host-calls/accumulate/assign.test.js +8 -9
  234. package/packages/jam/jam-host-calls/accumulate/bless.d.ts +2 -1
  235. package/packages/jam/jam-host-calls/accumulate/bless.d.ts.map +1 -1
  236. package/packages/jam/jam-host-calls/accumulate/bless.js +3 -0
  237. package/packages/jam/jam-host-calls/accumulate/bless.test.js +11 -12
  238. package/packages/jam/jam-host-calls/accumulate/checkpoint.d.ts +2 -1
  239. package/packages/jam/jam-host-calls/accumulate/checkpoint.d.ts.map +1 -1
  240. package/packages/jam/jam-host-calls/accumulate/checkpoint.js +4 -1
  241. package/packages/jam/jam-host-calls/accumulate/checkpoint.test.js +2 -3
  242. package/packages/jam/jam-host-calls/accumulate/designate.d.ts +2 -1
  243. package/packages/jam/jam-host-calls/accumulate/designate.d.ts.map +1 -1
  244. package/packages/jam/jam-host-calls/accumulate/designate.js +3 -0
  245. package/packages/jam/jam-host-calls/accumulate/designate.test.js +5 -6
  246. package/packages/jam/jam-host-calls/accumulate/eject.d.ts +2 -1
  247. package/packages/jam/jam-host-calls/accumulate/eject.d.ts.map +1 -1
  248. package/packages/jam/jam-host-calls/accumulate/eject.js +3 -0
  249. package/packages/jam/jam-host-calls/accumulate/eject.test.js +8 -9
  250. package/packages/jam/jam-host-calls/accumulate/forget.d.ts +2 -1
  251. package/packages/jam/jam-host-calls/accumulate/forget.d.ts.map +1 -1
  252. package/packages/jam/jam-host-calls/accumulate/forget.js +3 -0
  253. package/packages/jam/jam-host-calls/accumulate/forget.test.js +5 -6
  254. package/packages/jam/jam-host-calls/accumulate/new.d.ts +2 -1
  255. package/packages/jam/jam-host-calls/accumulate/new.d.ts.map +1 -1
  256. package/packages/jam/jam-host-calls/accumulate/new.js +3 -0
  257. package/packages/jam/jam-host-calls/accumulate/new.test.js +9 -10
  258. package/packages/jam/jam-host-calls/accumulate/provide.d.ts +2 -1
  259. package/packages/jam/jam-host-calls/accumulate/provide.d.ts.map +1 -1
  260. package/packages/jam/jam-host-calls/accumulate/provide.js +3 -0
  261. package/packages/jam/jam-host-calls/accumulate/provide.test.js +8 -9
  262. package/packages/jam/jam-host-calls/accumulate/query.d.ts +2 -1
  263. package/packages/jam/jam-host-calls/accumulate/query.d.ts.map +1 -1
  264. package/packages/jam/jam-host-calls/accumulate/query.js +3 -0
  265. package/packages/jam/jam-host-calls/accumulate/query.test.js +8 -9
  266. package/packages/jam/jam-host-calls/accumulate/solicit.d.ts +2 -1
  267. package/packages/jam/jam-host-calls/accumulate/solicit.d.ts.map +1 -1
  268. package/packages/jam/jam-host-calls/accumulate/solicit.js +3 -0
  269. package/packages/jam/jam-host-calls/accumulate/solicit.test.js +7 -8
  270. package/packages/jam/jam-host-calls/accumulate/transfer.d.ts +2 -1
  271. package/packages/jam/jam-host-calls/accumulate/transfer.d.ts.map +1 -1
  272. package/packages/jam/jam-host-calls/accumulate/transfer.js +3 -0
  273. package/packages/jam/jam-host-calls/accumulate/transfer.test.js +9 -10
  274. package/packages/jam/jam-host-calls/accumulate/upgrade.d.ts +2 -1
  275. package/packages/jam/jam-host-calls/accumulate/upgrade.d.ts.map +1 -1
  276. package/packages/jam/jam-host-calls/accumulate/upgrade.js +3 -0
  277. package/packages/jam/jam-host-calls/accumulate/upgrade.test.js +4 -5
  278. package/packages/jam/jam-host-calls/accumulate/yield.d.ts +2 -1
  279. package/packages/jam/jam-host-calls/accumulate/yield.d.ts.map +1 -1
  280. package/packages/jam/jam-host-calls/accumulate/yield.js +3 -0
  281. package/packages/jam/jam-host-calls/accumulate/yield.test.js +4 -5
  282. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +9 -9
  283. package/packages/jam/jam-host-calls/externalities/state-update.d.ts +2 -3
  284. package/packages/jam/jam-host-calls/externalities/state-update.d.ts.map +1 -1
  285. package/packages/jam/jam-host-calls/externalities/state-update.js +5 -2
  286. package/packages/jam/jam-host-calls/externalities/test-accounts.js +2 -2
  287. package/packages/jam/jam-host-calls/general/fetch.d.ts +2 -1
  288. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  289. package/packages/jam/jam-host-calls/general/fetch.js +3 -0
  290. package/packages/jam/jam-host-calls/general/fetch.test.js +27 -28
  291. package/packages/jam/jam-host-calls/general/gas.d.ts +2 -1
  292. package/packages/jam/jam-host-calls/general/gas.d.ts.map +1 -1
  293. package/packages/jam/jam-host-calls/general/gas.js +3 -0
  294. package/packages/jam/jam-host-calls/general/gas.test.js +4 -5
  295. package/packages/jam/jam-host-calls/general/info.d.ts +2 -1
  296. package/packages/jam/jam-host-calls/general/info.d.ts.map +1 -1
  297. package/packages/jam/jam-host-calls/general/info.js +3 -0
  298. package/packages/jam/jam-host-calls/general/info.test.js +6 -7
  299. package/packages/jam/jam-host-calls/general/log.d.ts +2 -1
  300. package/packages/jam/jam-host-calls/general/log.d.ts.map +1 -1
  301. package/packages/jam/jam-host-calls/general/log.js +3 -0
  302. package/packages/jam/jam-host-calls/general/lookup.d.ts +2 -1
  303. package/packages/jam/jam-host-calls/general/lookup.d.ts.map +1 -1
  304. package/packages/jam/jam-host-calls/general/lookup.js +3 -0
  305. package/packages/jam/jam-host-calls/general/lookup.test.js +8 -9
  306. package/packages/jam/jam-host-calls/general/read.d.ts +2 -1
  307. package/packages/jam/jam-host-calls/general/read.d.ts.map +1 -1
  308. package/packages/jam/jam-host-calls/general/read.js +3 -0
  309. package/packages/jam/jam-host-calls/general/read.test.js +11 -12
  310. package/packages/jam/jam-host-calls/general/write.d.ts +2 -1
  311. package/packages/jam/jam-host-calls/general/write.d.ts.map +1 -1
  312. package/packages/jam/jam-host-calls/general/write.js +3 -0
  313. package/packages/jam/jam-host-calls/general/write.test.js +10 -11
  314. package/packages/jam/jam-host-calls/refine/export.d.ts +2 -1
  315. package/packages/jam/jam-host-calls/refine/export.d.ts.map +1 -1
  316. package/packages/jam/jam-host-calls/refine/export.js +3 -0
  317. package/packages/jam/jam-host-calls/refine/export.test.js +6 -7
  318. package/packages/jam/jam-host-calls/refine/expunge.d.ts +2 -1
  319. package/packages/jam/jam-host-calls/refine/expunge.d.ts.map +1 -1
  320. package/packages/jam/jam-host-calls/refine/expunge.js +3 -0
  321. package/packages/jam/jam-host-calls/refine/expunge.test.js +3 -4
  322. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +2 -1
  323. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts.map +1 -1
  324. package/packages/jam/jam-host-calls/refine/historical-lookup.js +3 -0
  325. package/packages/jam/jam-host-calls/refine/historical-lookup.test.js +11 -12
  326. package/packages/jam/jam-host-calls/refine/invoke.d.ts +2 -1
  327. package/packages/jam/jam-host-calls/refine/invoke.d.ts.map +1 -1
  328. package/packages/jam/jam-host-calls/refine/invoke.js +4 -1
  329. package/packages/jam/jam-host-calls/refine/invoke.test.js +10 -11
  330. package/packages/jam/jam-host-calls/refine/machine.d.ts +2 -1
  331. package/packages/jam/jam-host-calls/refine/machine.d.ts.map +1 -1
  332. package/packages/jam/jam-host-calls/refine/machine.js +3 -0
  333. package/packages/jam/jam-host-calls/refine/machine.test.js +6 -7
  334. package/packages/jam/jam-host-calls/refine/pages.d.ts +2 -1
  335. package/packages/jam/jam-host-calls/refine/pages.d.ts.map +1 -1
  336. package/packages/jam/jam-host-calls/refine/pages.js +3 -0
  337. package/packages/jam/jam-host-calls/refine/pages.test.js +3 -4
  338. package/packages/jam/jam-host-calls/refine/peek.d.ts +2 -1
  339. package/packages/jam/jam-host-calls/refine/peek.d.ts.map +1 -1
  340. package/packages/jam/jam-host-calls/refine/peek.js +3 -0
  341. package/packages/jam/jam-host-calls/refine/peek.test.js +3 -4
  342. package/packages/jam/jam-host-calls/refine/poke.d.ts +2 -1
  343. package/packages/jam/jam-host-calls/refine/poke.d.ts.map +1 -1
  344. package/packages/jam/jam-host-calls/refine/poke.js +3 -0
  345. package/packages/jam/jam-host-calls/refine/poke.test.js +3 -4
  346. package/packages/jam/jamnp-s/network.js +1 -1
  347. package/packages/jam/jamnp-s/peers.d.ts +2 -1
  348. package/packages/jam/jamnp-s/peers.d.ts.map +1 -1
  349. package/packages/jam/jamnp-s/peers.js +3 -0
  350. package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts +4 -2
  351. package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts.map +1 -1
  352. package/packages/jam/jamnp-s/protocol/ce-128-block-request.js +6 -0
  353. package/packages/jam/jamnp-s/protocol/ce-128-block-request.test.js +2 -2
  354. package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts +4 -2
  355. package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts.map +1 -1
  356. package/packages/jam/jamnp-s/protocol/ce-129-state-request.js +6 -0
  357. package/packages/jam/jamnp-s/protocol/ce-129-state-request.test.js +4 -4
  358. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +4 -2
  359. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
  360. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +6 -0
  361. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +2 -2
  362. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +4 -1
  363. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts.map +1 -1
  364. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.js +7 -0
  365. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.test.js +2 -2
  366. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts +5 -2
  367. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts.map +1 -1
  368. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.js +7 -0
  369. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.test.js +2 -2
  370. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +4 -2
  371. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts.map +1 -1
  372. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.js +6 -0
  373. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.test.js +2 -2
  374. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +2 -1
  375. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts.map +1 -1
  376. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.js +3 -0
  377. package/packages/jam/jamnp-s/stream-manager.d.ts +2 -1
  378. package/packages/jam/jamnp-s/stream-manager.d.ts.map +1 -1
  379. package/packages/jam/jamnp-s/stream-manager.js +4 -1
  380. package/packages/jam/jamnp-s/tasks/sync.js +4 -4
  381. package/packages/jam/jamnp-s/tasks/sync.test.js +4 -4
  382. package/packages/jam/jamnp-s/tasks/ticket-distribution.js +2 -2
  383. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
  384. package/packages/jam/node/common.d.ts.map +1 -1
  385. package/packages/jam/node/common.js +3 -3
  386. package/packages/jam/rpc-client/index.d.ts +4 -2
  387. package/packages/jam/rpc-client/index.d.ts.map +1 -1
  388. package/packages/jam/rpc-client/index.js +7 -1
  389. package/packages/jam/state/in-memory-state-view.d.ts +2 -1
  390. package/packages/jam/state/in-memory-state-view.d.ts.map +1 -1
  391. package/packages/jam/state/in-memory-state-view.js +3 -0
  392. package/packages/jam/state/in-memory-state.d.ts +16 -21
  393. package/packages/jam/state/in-memory-state.d.ts.map +1 -1
  394. package/packages/jam/state/in-memory-state.js +10 -6
  395. package/packages/jam/state/in-memory-state.test.js +2 -2
  396. package/packages/jam/state/service.d.ts +2 -6
  397. package/packages/jam/state/service.d.ts.map +1 -1
  398. package/packages/jam/state/service.js +3 -0
  399. package/packages/jam/state/test.utils.js +3 -3
  400. package/packages/jam/state-json/accounts.js +5 -5
  401. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +3 -34
  402. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts.map +1 -1
  403. package/packages/jam/state-merkleization/in-memory-state-codec.js +1 -1
  404. package/packages/jam/state-merkleization/serialized-state-view.d.ts +8 -3
  405. package/packages/jam/state-merkleization/serialized-state-view.d.ts.map +1 -1
  406. package/packages/jam/state-merkleization/serialized-state-view.js +6 -3
  407. package/packages/jam/state-merkleization/serialized-state.d.ts +2 -3
  408. package/packages/jam/state-merkleization/serialized-state.d.ts.map +1 -1
  409. package/packages/jam/state-merkleization/serialized-state.js +10 -2
  410. package/packages/jam/state-merkleization/serialized-state.test.js +1 -1
  411. package/packages/jam/transition/accumulate/accumulate.d.ts.map +1 -1
  412. package/packages/jam/transition/accumulate/accumulate.js +18 -6
  413. package/packages/jam/transition/accumulate/accumulate.test.js +1 -1
  414. package/packages/jam/transition/block-verifier.d.ts +2 -1
  415. package/packages/jam/transition/block-verifier.d.ts.map +1 -1
  416. package/packages/jam/transition/block-verifier.js +3 -0
  417. package/packages/jam/transition/block-verifier.test.js +8 -8
  418. package/packages/jam/transition/chain-stf.d.ts +12 -4
  419. package/packages/jam/transition/chain-stf.d.ts.map +1 -1
  420. package/packages/jam/transition/chain-stf.js +7 -3
  421. package/packages/jam/transition/externalities/accumulate-externalities.d.ts +20 -6
  422. package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
  423. package/packages/jam/transition/externalities/accumulate-externalities.js +29 -22
  424. package/packages/jam/transition/externalities/accumulate-externalities.test.js +590 -100
  425. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +2 -1
  426. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -1
  427. package/packages/jam/transition/externalities/refine-fetch-externalities.js +3 -0
  428. package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +1 -1
  429. package/packages/jam/transition/hasher.d.ts +2 -1
  430. package/packages/jam/transition/hasher.d.ts.map +1 -1
  431. package/packages/jam/transition/hasher.js +5 -2
  432. package/packages/jam/transition/hasher.test.js +1 -1
  433. package/packages/jam/transition/preimages.test.js +4 -4
  434. package/packages/jam/transition/reports/test.utils.js +1 -1
  435. package/packages/workers/api-node/config.js +4 -4
  436. package/packages/workers/api-node/port.d.ts +2 -1
  437. package/packages/workers/api-node/port.d.ts.map +1 -1
  438. package/packages/workers/api-node/port.js +4 -1
  439. package/packages/workers/api-node/port.test.js +2 -2
  440. package/packages/workers/api-node/protocol.js +2 -2
  441. package/packages/workers/block-authorship/generator.d.ts +13 -2
  442. package/packages/workers/block-authorship/generator.d.ts.map +1 -1
  443. package/packages/workers/block-authorship/generator.js +13 -9
  444. package/packages/workers/block-authorship/generator.test.js +16 -2
  445. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  446. package/packages/workers/block-authorship/main.js +8 -1
  447. package/packages/workers/importer/finality.test.js +1 -1
  448. package/packages/workers/importer/importer.d.ts +23 -6
  449. package/packages/workers/importer/importer.d.ts.map +1 -1
  450. package/packages/workers/importer/importer.js +34 -19
  451. package/packages/workers/importer/main.d.ts.map +1 -1
  452. package/packages/workers/importer/main.js +13 -5
@@ -8,6 +8,9 @@ export class FuzzTarget {
8
8
  sender;
9
9
  spec;
10
10
  sessionFeatures = 0;
11
+ static new(msgHandler, sender, spec) {
12
+ return new FuzzTarget(msgHandler, sender, spec);
13
+ }
11
14
  constructor(msgHandler, sender, spec) {
12
15
  this.msgHandler = msgHandler;
13
16
  this.sender = sender;
@@ -70,7 +70,7 @@ describe("FuzzV1Target Handler", () => {
70
70
  value: responsePeerInfo,
71
71
  };
72
72
  mockMessageHandler.getPeerInfo.mock.mockImplementation(async () => responsePeerInfo);
73
- const fuzzTarget = new FuzzTarget(mockMessageHandler, mockSender, spec);
73
+ const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
74
74
  const testMessage = encode(incomingMessage);
75
75
  await fuzzTarget.onSocketMessage(testMessage);
76
76
  // Verify handshake completion and feature negotiation
@@ -116,7 +116,7 @@ describe("FuzzV1Target Handler", () => {
116
116
  value: expectedStateRoot,
117
117
  };
118
118
  mockMessageHandler.initialize.mock.mockImplementation(async () => expectedStateRoot);
119
- const fuzzTarget = new FuzzTarget(mockMessageHandler, mockSender, spec);
119
+ const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
120
120
  await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
121
121
  mockSender._sentData = []; // Clear handshake response
122
122
  const testMessage = encode(incomingMessage);
@@ -144,7 +144,7 @@ describe("FuzzV1Target Handler", () => {
144
144
  value: expectedStateRoot,
145
145
  };
146
146
  mockMessageHandler.importBlock.mock.mockImplementation(async () => Result.ok(expectedStateRoot));
147
- const fuzzTarget = new FuzzTarget(mockMessageHandler, mockSender, spec);
147
+ const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
148
148
  await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
149
149
  mockSender._sentData = []; // Clear handshake response
150
150
  const testMessage = encode(incomingMessage);
@@ -169,7 +169,7 @@ describe("FuzzV1Target Handler", () => {
169
169
  value: expectedError,
170
170
  };
171
171
  mockMessageHandler.importBlock.mock.mockImplementation(async () => Result.error(expectedError, () => "Test: ImportBlock error"));
172
- const fuzzTarget = new FuzzTarget(mockMessageHandler, mockSender, spec);
172
+ const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
173
173
  await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
174
174
  mockSender._sentData = []; // Clear handshake response
175
175
  const testMessage = encode(incomingMessage);
@@ -205,7 +205,7 @@ describe("FuzzV1Target Handler", () => {
205
205
  value: keyValues,
206
206
  };
207
207
  mockMessageHandler.getSerializedState.mock.mockImplementation(async () => keyValues);
208
- const fuzzTarget = new FuzzTarget(mockMessageHandler, mockSender, spec);
208
+ const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
209
209
  await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
210
210
  mockSender._sentData = []; // Clear handshake response
211
211
  const testMessage = encode(incomingMessage);
@@ -227,7 +227,7 @@ describe("FuzzV1Target Handler", () => {
227
227
  type: MessageType.StateRoot,
228
228
  value: stateRoot,
229
229
  };
230
- const fuzzTarget = new FuzzTarget(mockMessageHandler, mockSender, spec);
230
+ const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
231
231
  await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
232
232
  mockSender._sentData = []; // Clear handshake response
233
233
  const testMessage = encode(incomingMessage);
@@ -248,7 +248,7 @@ describe("FuzzV1Target Handler", () => {
248
248
  type: MessageType.State,
249
249
  value: keyValues,
250
250
  };
251
- const fuzzTarget = new FuzzTarget(mockMessageHandler, mockSender, spec);
251
+ const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
252
252
  await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
253
253
  mockSender._sentData = []; // Clear handshake response
254
254
  const testMessage = encode(incomingMessage);
@@ -264,7 +264,7 @@ describe("FuzzV1Target Handler", () => {
264
264
  type: MessageType.Error,
265
265
  value: error,
266
266
  };
267
- const fuzzTarget = new FuzzTarget(mockMessageHandler, mockSender, spec);
267
+ const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
268
268
  await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
269
269
  mockSender._sentData = []; // Clear handshake response
270
270
  const testMessage = encode(incomingMessage);
@@ -277,7 +277,7 @@ describe("FuzzV1Target Handler", () => {
277
277
  it("should handle decoding error gracefully", async () => {
278
278
  const mockMessageHandler = new MockV1MessageHandler();
279
279
  const mockSender = new MockSender();
280
- const fuzzTarget = new FuzzTarget(mockMessageHandler, mockSender, spec);
280
+ const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
281
281
  // Create malformed message with valid length prefix but invalid data
282
282
  const malformedMessage = new Uint8Array(8);
283
283
  const dataView = new DataView(malformedMessage.buffer);
@@ -300,7 +300,7 @@ describe("FuzzV1Target Handler", () => {
300
300
  return Decoder.decodeObject(messageCodec, data, spec);
301
301
  }
302
302
  async function completeHandshake(mockMessageHandler, mockSender, fuzzTarget) {
303
- const target = fuzzTarget ?? new FuzzTarget(mockMessageHandler, mockSender, spec);
303
+ const target = fuzzTarget ?? FuzzTarget.new(mockMessageHandler, mockSender, spec);
304
304
  const inputPeerInfo = PeerInfo.create({
305
305
  fuzzVersion: tryAsU8(1),
306
306
  features: tryAsU32(Features.Ancestry),
@@ -3,8 +3,8 @@ import type { BytesBlob } from "#@typeberry/bytes";
3
3
  import type { PvmBackend } from "#@typeberry/config";
4
4
  import type { Blake2bHash } from "#@typeberry/hash";
5
5
  import { type MachineId, type MachineResult, type MemoryOperation, NoMachineError, type PagesError, type PeekPokeError, type ProgramCounter, type RefineExternalities, SegmentExportError, type ZeroVoidError } from "#@typeberry/jam-host-calls";
6
- import type { U64 } from "#@typeberry/numbers";
7
- import { type HostCallMemory, type HostCallRegisters } from "#@typeberry/pvm-host-calls";
6
+ import { type U64 } from "#@typeberry/numbers";
7
+ import { type HostCallMemory, HostCallRegisters } from "#@typeberry/pvm-host-calls";
8
8
  import { type BigGas } from "#@typeberry/pvm-interface";
9
9
  import { type ProgramDecoderError } from "#@typeberry/pvm-interpreter";
10
10
  import type { State } from "#@typeberry/state";
@@ -48,7 +48,7 @@ export declare class RefineExternalitiesImpl implements RefineExternalities {
48
48
  machinePeekFrom(_machineIndex: MachineId, _destinationStart: U64, _sourceStart: U64, _length: U64, _destination: HostCallMemory): Promise<Result<OK, PeekPokeError>>;
49
49
  machinePokeInto(_machineIndex: MachineId, _sourceStart: U64, _destinationStart: U64, _length: U64, _source: HostCallMemory): Promise<Result<OK, PeekPokeError>>;
50
50
  machineInit(code: BytesBlob, programCounter: ProgramCounter): Promise<Result<MachineId, ProgramDecoderError>>;
51
- machineInvoke(_machineIndex: MachineId, _gas: BigGas, _registers: HostCallRegisters): Promise<Result<MachineResult, NoMachineError>>;
51
+ machineInvoke(machineIndex: MachineId, gas: BigGas, registers: HostCallRegisters): Promise<Result<MachineResult, NoMachineError>>;
52
52
  exportSegment(segment: Segment): Result<SegmentIndex, SegmentExportError>;
53
53
  historicalLookup(serviceId: ServiceId | null, hash: Blake2bHash): Promise<BytesBlob | null>;
54
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,14 @@
1
1
  import { MAX_NUMBER_OF_EXPORTS_WP, tryAsSegmentIndex, } from "#@typeberry/block";
2
2
  import { SortedArray } from "#@typeberry/collections";
3
3
  import { NoMachineError, SegmentExportError, tryAsMachineId, tryAsProgramCounter, } from "#@typeberry/jam-host-calls";
4
+ import { tryAsU64 } from "#@typeberry/numbers";
4
5
  import { Ordering } from "#@typeberry/ordering";
5
- import { PvmInstanceManager } from "#@typeberry/pvm-host-calls";
6
- import { tryAsGas } from "#@typeberry/pvm-interface";
6
+ import { HostCallRegisters, PvmInstanceManager } from "#@typeberry/pvm-host-calls";
7
+ import { Status, tryAsBigGas, tryAsGas } from "#@typeberry/pvm-interface";
7
8
  import { ProgramDecoder } from "#@typeberry/pvm-interpreter";
8
9
  import { Result } from "#@typeberry/utils";
10
+ /** Used when searching by MachineId only — the comparator ignores this field. */
11
+ const NULL_INTERPRETER = undefined;
9
12
  const machineComparator = (a, b) => {
10
13
  if (a[0] < b[0]) {
11
14
  return Ordering.Less;
@@ -42,7 +45,7 @@ export class RefineExternalitiesImpl {
42
45
  }
43
46
  machineExpunge(machineIndex) {
44
47
  // We just care about machineIndex
45
- const entry = this.machines.findExact([machineIndex, undefined]);
48
+ const entry = this.machines.findExact([machineIndex, NULL_INTERPRETER]);
46
49
  if (entry === undefined) {
47
50
  return Promise.resolve(Result.error(NoMachineError, () => `Machine not found (id: ${machineIndex})`));
48
51
  }
@@ -93,8 +96,33 @@ export class RefineExternalitiesImpl {
93
96
  this.machines.insert([machineId, innerPvm]);
94
97
  return Result.ok(machineId);
95
98
  }
96
- machineInvoke(_machineIndex, _gas, _registers) {
97
- throw new Error("Method not implemented.");
99
+ machineInvoke(machineIndex, gas, registers) {
100
+ const entry = this.machines.findExact([machineIndex, NULL_INTERPRETER]);
101
+ if (entry === undefined) {
102
+ return Promise.resolve(Result.error(NoMachineError, () => `Machine not found (id: ${machineIndex})`));
103
+ }
104
+ const innerPvm = entry[1];
105
+ // Prepare inner PVM
106
+ innerPvm.registers.setAllEncoded(registers.getEncoded());
107
+ innerPvm.gas.set(gas);
108
+ // Execute program
109
+ innerPvm.runProgram();
110
+ // Status
111
+ const status = innerPvm.getStatus();
112
+ const exitParam = innerPvm.getExitParam() ?? 0;
113
+ const remainingGas = tryAsBigGas(innerPvm.gas.get());
114
+ const outRegisters = HostCallRegisters.fromRaw(new Uint8Array(innerPvm.registers.getAllEncoded()));
115
+ let machineStatus;
116
+ if (status === Status.HOST) {
117
+ machineStatus = { status, hostCallIndex: tryAsU64(exitParam) };
118
+ }
119
+ else if (status === Status.FAULT) {
120
+ machineStatus = { status, address: tryAsU64(exitParam) };
121
+ }
122
+ else {
123
+ machineStatus = { status };
124
+ }
125
+ return Promise.resolve(Result.ok({ result: machineStatus, gas: remainingGas, registers: outRegisters }));
98
126
  }
99
127
  exportSegment(segment) {
100
128
  // https://graypaper.fluffylabs.dev/#/ab2cdbd/335d03335d03?v=0.7.2
@@ -7,6 +7,8 @@ import { PvmBackend, tinyChainSpec } from "#@typeberry/config";
7
7
  import { HASH_SIZE } from "#@typeberry/hash";
8
8
  import { SegmentExportError, tryAsMachineId, tryAsProgramCounter } from "#@typeberry/jam-host-calls";
9
9
  import { tryAsU32, tryAsU64 } from "#@typeberry/numbers";
10
+ import { HostCallRegisters } from "#@typeberry/pvm-host-calls";
11
+ import { Status, tryAsBigGas } from "#@typeberry/pvm-interface";
10
12
  import { InMemoryService, InMemoryState, PreimageItem, ServiceAccountInfo } from "#@typeberry/state";
11
13
  import { RefineExternalitiesImpl } from "./refine.js";
12
14
  const MINIMAL_PROGRAM = new Uint8Array([0, 1, 1, 0, 0x00]);
@@ -34,7 +36,7 @@ function createMockState(services) {
34
36
  preimages.set(hash, item);
35
37
  }
36
38
  const serviceId = tryAsServiceId(svc.id);
37
- serviceMap.set(serviceId, new InMemoryService(serviceId, {
39
+ serviceMap.set(serviceId, InMemoryService.new(serviceId, {
38
40
  info: ServiceAccountInfo.create({
39
41
  codeHash: Bytes.zero(HASH_SIZE).asOpaque(),
40
42
  balance: tryAsU64(1000000000n),
@@ -64,6 +66,9 @@ function createExt(overrides = {}) {
64
66
  ...overrides,
65
67
  });
66
68
  }
69
+ function emptyRegisters() {
70
+ return HostCallRegisters.empty();
71
+ }
67
72
  describe("RefineExternalitiesImpl", () => {
68
73
  describe("historicalLookup", () => {
69
74
  const PREIMAGE_HASH = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
@@ -260,4 +265,64 @@ describe("RefineExternalitiesImpl", () => {
260
265
  assert.strictEqual(result.ok, tryAsProgramCounter(10));
261
266
  });
262
267
  });
268
+ describe("machineInvoke", () => {
269
+ it("should return NoMachineError for non-existent machine", async () => {
270
+ const ext = createExt();
271
+ const regs = emptyRegisters();
272
+ const result = await ext.machineInvoke(tryAsMachineId(999), tryAsBigGas(1000n), regs);
273
+ assert.strictEqual(result.isError, true);
274
+ });
275
+ it("should execute inner PVM and return PANIC for TRAP instruction", async () => {
276
+ const ext = createExt();
277
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
278
+ const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
279
+ assert.strictEqual(initResult.isOk, true);
280
+ const machineId = initResult.ok;
281
+ const regs = emptyRegisters();
282
+ const result = await ext.machineInvoke(machineId, tryAsBigGas(1000n), regs);
283
+ assert.strictEqual(result.isOk, true);
284
+ assert.strictEqual(result.ok.result.status, Status.PANIC);
285
+ });
286
+ it("should return OOG when gas is exhausted", async () => {
287
+ const ext = createExt();
288
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
289
+ const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
290
+ assert.strictEqual(initResult.isOk, true);
291
+ const machineId = initResult.ok;
292
+ const regs = emptyRegisters();
293
+ // With 0 gas, should immediately OOG
294
+ const result = await ext.machineInvoke(machineId, tryAsBigGas(0n), regs);
295
+ assert.strictEqual(result.isOk, true);
296
+ assert.strictEqual(result.ok.result.status, Status.OOG);
297
+ });
298
+ it("should pass registers to inner PVM and return them back", async () => {
299
+ const ext = createExt();
300
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
301
+ const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
302
+ assert.strictEqual(initResult.isOk, true);
303
+ const machineId = initResult.ok;
304
+ const regs = emptyRegisters();
305
+ regs.set(0, tryAsU64(0xdeadbeefn));
306
+ regs.set(5, tryAsU64(0xcafebaben));
307
+ const result = await ext.machineInvoke(machineId, tryAsBigGas(1000n), regs);
308
+ assert.strictEqual(result.isOk, true);
309
+ // Registers should be returned (TRAP doesn't modify registers)
310
+ assert.strictEqual(result.ok.registers.get(0), tryAsU64(0xdeadbeefn));
311
+ assert.strictEqual(result.ok.registers.get(5), tryAsU64(0xcafebaben));
312
+ });
313
+ it("should return remaining gas after execution", async () => {
314
+ const ext = createExt();
315
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
316
+ const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
317
+ assert.strictEqual(initResult.isOk, true);
318
+ const machineId = initResult.ok;
319
+ const regs = emptyRegisters();
320
+ const result = await ext.machineInvoke(machineId, tryAsBigGas(1000n), regs);
321
+ assert.strictEqual(result.isOk, true);
322
+ // TRAP costs 1 gas, so remaining should be 999
323
+ const remaining = Number(result.ok.gas);
324
+ assert.ok(remaining < 1000);
325
+ assert.ok(remaining >= 0);
326
+ });
327
+ });
263
328
  });
@@ -28,7 +28,8 @@ export declare class InCore {
28
28
  private readonly states;
29
29
  private readonly isAuthorized;
30
30
  private readonly refineItem;
31
- constructor(chainSpec: ChainSpec, states: StatesDb, pvmBackend: PvmBackend, blake2b: Blake2b);
31
+ static new(chainSpec: ChainSpec, states: StatesDb, pvmBackend: PvmBackend, blake2b: Blake2b): InCore;
32
+ private constructor();
32
33
  /**
33
34
  * Work-report computation function.
34
35
  *
@@ -1 +1 @@
1
- {"version":3,"file":"in-core.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/in-core/in-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAsB,KAAK,eAAe,EAAmB,MAAM,oCAAoC,CAAC;AAC/G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAmB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG9E,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIzD,OAAO,EAAe,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAiC,MAAM,aAAa,CAAC;AAEpG,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;CACjC,CAAC;AAEF,oBAAY,WAAW;IACrB,8EAA8E;IAC9E,YAAY,IAAI;IAChB,qFAAqF;IACrF,iBAAiB,IAAI;IACrB,wEAAwE;IACxE,uBAAuB,IAAI;IAC3B,2BAA2B;IAC3B,kBAAkB,IAAI;CACvB;AAID,qBAAa,MAAM;aAKC,SAAS,EAAE,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGlB,SAAS,EAAE,SAAS,EACnB,MAAM,EAAE,QAAQ,EACjC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO;IAMlB;;;;;;;;;OASG;IACG,MAAM,CACV,kBAAkB,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,EAC1D,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,EACvC,UAAU,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAwF7C,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAsDpC"}
1
+ {"version":3,"file":"in-core.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/in-core/in-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAsB,KAAK,eAAe,EAAmB,MAAM,oCAAoC,CAAC;AAC/G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAmB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG9E,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIzD,OAAO,EAAe,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAiC,MAAM,aAAa,CAAC;AAEpG,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;CACjC,CAAC;AAEF,oBAAY,WAAW;IACrB,8EAA8E;IAC9E,YAAY,IAAI;IAChB,qFAAqF;IACrF,iBAAiB,IAAI;IACrB,wEAAwE;IACxE,uBAAuB,IAAI;IAC3B,2BAA2B;IAC3B,kBAAkB,IAAI;CACvB;AAID,qBAAa,MAAM;aASC,SAAS,EAAE,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO;IAI3F,OAAO;IAUP;;;;;;;;;OASG;IACG,MAAM,CACV,kBAAkB,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,EAC1D,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,EACvC,UAAU,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAwF7C,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAsDpC"}
@@ -25,6 +25,9 @@ export class InCore {
25
25
  states;
26
26
  isAuthorized;
27
27
  refineItem;
28
+ static new(chainSpec, states, pvmBackend, blake2b) {
29
+ return new InCore(chainSpec, states, pvmBackend, blake2b);
30
+ }
28
31
  constructor(chainSpec, states, pvmBackend, blake2b) {
29
32
  this.chainSpec = chainSpec;
30
33
  this.states = states;
@@ -26,7 +26,7 @@ function getAuthCodeHash() {
26
26
  return blake2b.hashBytes(AUTHORIZER_PVM).asOpaque();
27
27
  }
28
28
  function createService(serviceId, codeHash, code) {
29
- return new InMemoryService(serviceId, {
29
+ return InMemoryService.new(serviceId, {
30
30
  info: ServiceAccountInfo.create({
31
31
  codeHash: codeHash.asOpaque(),
32
32
  balance: tryAsU64(10_000_000_000),
@@ -77,13 +77,13 @@ function hashWorkPackage(spec, workPackage) {
77
77
  const workPackageHash = blake2b
78
78
  .hashBytes(Encoder.encodeObject(WorkPackage.Codec, workPackage, spec))
79
79
  .asOpaque();
80
- return new WithHash(workPackageHash, workPackage);
80
+ return WithHash.new(workPackageHash, workPackage);
81
81
  }
82
82
  describe("InCore", () => {
83
83
  it("should return StateMissing error when anchor block state is not in DB", async () => {
84
84
  const spec = tinyChainSpec;
85
- const states = new InMemoryStates(spec);
86
- const inCore = new InCore(spec, states, PvmBackend.BuiltIn, blake2b);
85
+ const states = InMemoryStates.new(spec);
86
+ const inCore = InCore.new(spec, states, PvmBackend.BuiltIn, blake2b);
87
87
  const anchorHash = Bytes.fill(HASH_SIZE, 1).asOpaque();
88
88
  const stateRoot = Bytes.zero(HASH_SIZE).asOpaque();
89
89
  const authCodeHash = getAuthCodeHash();
@@ -94,8 +94,8 @@ describe("InCore", () => {
94
94
  });
95
95
  it("should refine work package and produce a report when state is set up", async () => {
96
96
  const spec = tinyChainSpec;
97
- const states = new InMemoryStates(spec);
98
- const inCore = new InCore(spec, states, PvmBackend.BuiltIn, blake2b);
97
+ const states = InMemoryStates.new(spec);
98
+ const inCore = InCore.new(spec, states, PvmBackend.BuiltIn, blake2b);
99
99
  const authCodeHash = getAuthCodeHash();
100
100
  const anchorHash = Bytes.fill(HASH_SIZE, 1).asOpaque();
101
101
  const state = InMemoryState.partial(spec, {
@@ -20,7 +20,7 @@ before(async () => {
20
20
  const AUTHORIZER_PVM = BytesBlob.blobFrom(readFileSync(resolve(import.meta.dirname, "fixtures/authorizer.pvm")));
21
21
  const AUTH_SERVICE_ID = tryAsServiceId(42);
22
22
  function createService(serviceId, codeHash, code) {
23
- return new InMemoryService(serviceId, {
23
+ return InMemoryService.new(serviceId, {
24
24
  info: ServiceAccountInfo.create({
25
25
  codeHash: codeHash.asOpaque(),
26
26
  balance: tryAsU64(10_000_000_000),
@@ -96,7 +96,7 @@ describe("IsAuthorized", () => {
96
96
  it("should fail when auth code preimage is missing", async () => {
97
97
  const authCodeHash = getAuthCodeHash();
98
98
  // Service exists but with no preimages
99
- const emptyService = new InMemoryService(AUTH_SERVICE_ID, {
99
+ const emptyService = InMemoryService.new(AUTH_SERVICE_ID, {
100
100
  info: ServiceAccountInfo.create({
101
101
  codeHash: Bytes.zero(HASH_SIZE).asOpaque(),
102
102
  balance: tryAsU64(0),
@@ -161,7 +161,7 @@ export class Refine {
161
161
  }
162
162
  createRefineExternalities(args) {
163
163
  // TODO [ToDr] Pass all required fetch data
164
- const fetchExternalities = new RefineFetchExternalities(this.chainSpec);
164
+ const fetchExternalities = RefineFetchExternalities.new(this.chainSpec);
165
165
  const refine = RefineExternalitiesImpl.create({
166
166
  currentServiceId: args.currentServiceId,
167
167
  lookupState: args.lookupState,
@@ -16,7 +16,8 @@ export declare class Assign implements HostCallHandler {
16
16
  index: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"HostCallIndex[U32]">;
17
17
  basicGasCost: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"SmallGas[U32]">;
18
18
  tracedRegisters: (number & import("@typeberry/utils").WithOpaque<"register index">)[];
19
- constructor(currentServiceId: ServiceId, partialState: PartialState, chainSpec: ChainSpec);
19
+ static new(currentServiceId: ServiceId, partialState: PartialState, chainSpec: ChainSpec): Assign;
20
+ private constructor();
20
21
  execute(_gas: IGasCounter, regs: HostCallRegisters, memory: HostCallMemory): Promise<undefined | PvmExecution>;
21
22
  }
22
23
  //# sourceMappingURL=assign.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/accumulate/assign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,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;AAG3E,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,mCAAmC,CAAC;AAO7F;;;;GAIG;AACH,qBAAa,MAAO,YAAW,eAAe;aAM1B,gBAAgB,EAAE,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,KAAK,iIAA0B;IAC/B,YAAY,4HAAqB;IACjC,eAAe,uEAAiC;gBAG9B,gBAAgB,EAAE,SAAS,EAC1B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS;IAGjC,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CAkDrH"}
1
+ {"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/accumulate/assign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,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;AAG3E,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,mCAAmC,CAAC;AAO7F;;;;GAIG;AACH,qBAAa,MAAO,YAAW,eAAe;aAU1B,gBAAgB,EAAE,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAX5B,KAAK,iIAA0B;IAC/B,YAAY,4HAAqB;IACjC,eAAe,uEAAiC;IAEhD,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS;IAIxF,OAAO;IAMD,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CAkDrH"}
@@ -23,6 +23,9 @@ export class Assign {
23
23
  index = tryAsHostCallIndex(15);
24
24
  basicGasCost = tryAsSmallGas(10);
25
25
  tracedRegisters = traceRegisters(IN_OUT_REG, 8);
26
+ static new(currentServiceId, partialState, chainSpec) {
27
+ return new Assign(currentServiceId, partialState, chainSpec);
28
+ }
26
29
  constructor(currentServiceId, partialState, chainSpec) {
27
30
  this.currentServiceId = currentServiceId;
28
31
  this.partialState = partialState;
@@ -18,7 +18,6 @@ import { Result } from "#@typeberry/utils";
18
18
  import { UpdatePrivilegesError } from "../externalities/partial-state.js";
19
19
  import { PartialStateMock } from "../externalities/partial-state-mock.js";
20
20
  import { HostCallResult } from "../general/results.js";
21
- import { emptyRegistersBuffer } from "../utils.js";
22
21
  import { Assign } from "./assign.js";
23
22
  const gas = gasCounter(tryAsGas(0));
24
23
  const RESULT_REG = 7;
@@ -27,7 +26,7 @@ const AUTH_QUEUE_START_REG = 8;
27
26
  const AUTH_MANAGER_REG = 9;
28
27
  function prepareRegsAndMemory(coreIndex, authQueue, { skipAuthQueue = false, assigners = null } = {}) {
29
28
  const memStart = 2 ** 16;
30
- const registers = new HostCallRegisters(emptyRegistersBuffer());
29
+ const registers = HostCallRegisters.empty();
31
30
  registers.set(CORE_INDEX_REG, tryAsU64(coreIndex));
32
31
  registers.set(AUTH_QUEUE_START_REG, tryAsU64(memStart));
33
32
  if (assigners !== null) {
@@ -43,7 +42,7 @@ function prepareRegsAndMemory(coreIndex, authQueue, { skipAuthQueue = false, ass
43
42
  if (!skipAuthQueue) {
44
43
  builder.setReadablePages(tryAsMemoryIndex(memStart), tryAsMemoryIndex(memStart + PAGE_SIZE), data.raw);
45
44
  }
46
- const memory = new HostCallMemory(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
45
+ const memory = HostCallMemory.new(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
47
46
  return {
48
47
  registers,
49
48
  memory,
@@ -53,7 +52,7 @@ describe("HostCalls: Assign", () => {
53
52
  it("should assign authorization queue to a core", async () => {
54
53
  const accumulate = new PartialStateMock();
55
54
  const serviceId = tryAsServiceId(10_000);
56
- const assign = new Assign(serviceId, accumulate, tinyChainSpec);
55
+ const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
57
56
  const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(0), [
58
57
  Bytes.fill(HASH_SIZE, 1),
59
58
  Bytes.fill(HASH_SIZE, 2),
@@ -79,7 +78,7 @@ describe("HostCalls: Assign", () => {
79
78
  it("should return an error if core index is too large", async () => {
80
79
  const accumulate = new PartialStateMock();
81
80
  const serviceId = tryAsServiceId(10_000);
82
- const assign = new Assign(serviceId, accumulate, tinyChainSpec);
81
+ const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
83
82
  const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(3), []);
84
83
  // when
85
84
  const result = await assign.execute(gas, registers, memory);
@@ -91,7 +90,7 @@ describe("HostCalls: Assign", () => {
91
90
  it("should return an error if core index is waay too large", async () => {
92
91
  const accumulate = new PartialStateMock();
93
92
  const serviceId = tryAsServiceId(10_000);
94
- const assign = new Assign(serviceId, accumulate, tinyChainSpec);
93
+ const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
95
94
  const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(3), []);
96
95
  registers.set(CORE_INDEX_REG, tryAsU64(2 ** 16 + 3));
97
96
  // when
@@ -104,7 +103,7 @@ describe("HostCalls: Assign", () => {
104
103
  it("should return panic if data not readable", async () => {
105
104
  const accumulate = new PartialStateMock();
106
105
  const serviceId = tryAsServiceId(10_000);
107
- const assign = new Assign(serviceId, accumulate, tinyChainSpec);
106
+ const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
108
107
  const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(3), [], { skipAuthQueue: true });
109
108
  // when
110
109
  const result = await assign.execute(gas, registers, memory);
@@ -116,7 +115,7 @@ describe("HostCalls: Assign", () => {
116
115
  const accumulate = new PartialStateMock();
117
116
  accumulate.authQueueResponse = Result.error(UpdatePrivilegesError.UnprivilegedService, () => "Test: unprivileged service attempting assign");
118
117
  const serviceId = tryAsServiceId(10_000);
119
- const assign = new Assign(serviceId, accumulate, tinyChainSpec);
118
+ const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
120
119
  const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(0), [], { assigners: 0 });
121
120
  // when
122
121
  const result = await assign.execute(gas, registers, memory);
@@ -129,7 +128,7 @@ describe("HostCalls: Assign", () => {
129
128
  const accumulate = new PartialStateMock();
130
129
  accumulate.authQueueResponse = Result.error(UpdatePrivilegesError.InvalidServiceId, () => "Test: invalid service ID for assign");
131
130
  const serviceId = tryAsServiceId(10_000);
132
- const assign = new Assign(serviceId, accumulate, tinyChainSpec);
131
+ const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
133
132
  const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(0), [], { assigners: null });
134
133
  // when
135
134
  const result = await assign.execute(gas, registers, memory);
@@ -16,7 +16,8 @@ export declare class Bless implements HostCallHandler {
16
16
  index: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"HostCallIndex[U32]">;
17
17
  basicGasCost: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"SmallGas[U32]">;
18
18
  tracedRegisters: (number & import("@typeberry/utils").WithOpaque<"register index">)[];
19
- constructor(currentServiceId: ServiceId, partialState: PartialState, chainSpec: ChainSpec);
19
+ static new(currentServiceId: ServiceId, partialState: PartialState, chainSpec: ChainSpec): Bless;
20
+ private constructor();
20
21
  execute(_gas: IGasCounter, regs: HostCallRegisters, memory: HostCallMemory): Promise<undefined | PvmExecution>;
21
22
  }
22
23
  //# sourceMappingURL=bless.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bless.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/accumulate/bless.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAEpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,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;AAG3E,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,mCAAmC,CAAC;AAkB7F;;;;GAIG;AACH,qBAAa,KAAM,YAAW,eAAe;aAMzB,gBAAgB,EAAE,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,KAAK,iIAA0B;IAC/B,YAAY,4HAAqB;IACjC,eAAe,uEAAgD;gBAG7C,gBAAgB,EAAE,SAAS,EAC1B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS;IAGjC,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CAkFrH"}
1
+ {"version":3,"file":"bless.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/accumulate/bless.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAEpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,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;AAG3E,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,mCAAmC,CAAC;AAkB7F;;;;GAIG;AACH,qBAAa,KAAM,YAAW,eAAe;aAUzB,gBAAgB,EAAE,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAX5B,KAAK,iIAA0B;IAC/B,YAAY,4HAAqB;IACjC,eAAe,uEAAgD;IAE/D,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS;IAIxF,OAAO;IAMD,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CAkFrH"}
@@ -26,6 +26,9 @@ export class Bless {
26
26
  index = tryAsHostCallIndex(14);
27
27
  basicGasCost = tryAsSmallGas(10);
28
28
  tracedRegisters = traceRegisters(IN_OUT_REG, 8, 9, 10, 11, 12);
29
+ static new(currentServiceId, partialState, chainSpec) {
30
+ return new Bless(currentServiceId, partialState, chainSpec);
31
+ }
29
32
  constructor(currentServiceId, partialState, chainSpec) {
30
33
  this.currentServiceId = currentServiceId;
31
34
  this.partialState = partialState;
@@ -15,7 +15,6 @@ import { deepEqual, Result } from "#@typeberry/utils";
15
15
  import { UpdatePrivilegesError } from "../externalities/partial-state.js";
16
16
  import { PartialStateMock } from "../externalities/partial-state-mock.js";
17
17
  import { HostCallResult } from "../general/results.js";
18
- import { emptyRegistersBuffer } from "../utils.js";
19
18
  import { Bless } from "./bless.js";
20
19
  const gas = gasCounter(tryAsGas(0));
21
20
  const RESULT_REG = 7;
@@ -40,7 +39,7 @@ function prepareAuthorizers() {
40
39
  function prepareRegsAndMemory(entries, authorizerData, { skipDictionary = false, skipAuth = false, manager, validator, registrar, } = {}) {
41
40
  const memAuthStart = 2 ** 24;
42
41
  const memStart = 2 ** 16;
43
- const registers = new HostCallRegisters(emptyRegistersBuffer());
42
+ const registers = HostCallRegisters.empty();
44
43
  registers.set(MANAGER_REG, manager ?? tryAsU64(5));
45
44
  registers.set(AUTHORIZATION_REG, tryAsU64(memAuthStart));
46
45
  registers.set(VALIDATOR_REG, validator ?? tryAsU64(20));
@@ -61,7 +60,7 @@ function prepareRegsAndMemory(entries, authorizerData, { skipDictionary = false,
61
60
  if (!skipAuth) {
62
61
  builder.setReadablePages(tryAsMemoryIndex(memAuthStart), tryAsMemoryIndex(memAuthStart + PAGE_SIZE), dataAuth.raw);
63
62
  }
64
- const memory = new HostCallMemory(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
63
+ const memory = HostCallMemory.new(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
65
64
  return {
66
65
  registers,
67
66
  memory,
@@ -71,7 +70,7 @@ describe("HostCalls: Bless", () => {
71
70
  it("should set new privileged services and auto-accumulate services", async () => {
72
71
  const accumulate = new PartialStateMock();
73
72
  const serviceId = tryAsServiceId(10_000);
74
- const bless = new Bless(serviceId, accumulate, tinyChainSpec);
73
+ const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
75
74
  const entries = prepareServiceGasMap();
76
75
  const authorizers = prepareAuthorizers();
77
76
  const { registers, memory } = prepareRegsAndMemory(entries, authorizers);
@@ -93,7 +92,7 @@ describe("HostCalls: Bless", () => {
93
92
  it("should return panic when dictionary is not readable", async () => {
94
93
  const accumulate = new PartialStateMock();
95
94
  const serviceId = tryAsServiceId(10_000);
96
- const bless = new Bless(serviceId, accumulate, tinyChainSpec);
95
+ const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
97
96
  const entries = prepareServiceGasMap();
98
97
  const authorizers = prepareAuthorizers();
99
98
  const { registers, memory } = prepareRegsAndMemory(entries, authorizers, { skipDictionary: true });
@@ -106,7 +105,7 @@ describe("HostCalls: Bless", () => {
106
105
  it("should return panic when authorizers are not readable", async () => {
107
106
  const accumulate = new PartialStateMock();
108
107
  const serviceId = tryAsServiceId(10_000);
109
- const bless = new Bless(serviceId, accumulate, tinyChainSpec);
108
+ const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
110
109
  const entries = prepareServiceGasMap();
111
110
  const authorizers = prepareAuthorizers();
112
111
  const { registers, memory } = prepareRegsAndMemory(entries, authorizers, { skipAuth: true });
@@ -119,7 +118,7 @@ describe("HostCalls: Bless", () => {
119
118
  it("should auto-accumulate services when dictionary is out of order", async () => {
120
119
  const accumulate = new PartialStateMock();
121
120
  const serviceId = tryAsServiceId(10_000);
122
- const bless = new Bless(serviceId, accumulate, tinyChainSpec);
121
+ const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
123
122
  const entries = prepareServiceGasMap();
124
123
  entries.push([tryAsServiceId(5), tryAsServiceGas(10_000)]);
125
124
  const authorizers = prepareAuthorizers();
@@ -142,7 +141,7 @@ describe("HostCalls: Bless", () => {
142
141
  it("should auto-accumulate services when dictionary contains duplicates", async () => {
143
142
  const accumulate = new PartialStateMock();
144
143
  const serviceId = tryAsServiceId(10_000);
145
- const bless = new Bless(serviceId, accumulate, tinyChainSpec);
144
+ const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
146
145
  const entries = prepareServiceGasMap();
147
146
  entries.push(entries[entries.length - 1]);
148
147
  const authorizers = prepareAuthorizers();
@@ -166,7 +165,7 @@ describe("HostCalls: Bless", () => {
166
165
  const accumulate = new PartialStateMock();
167
166
  accumulate.privilegedServicesResponse = Result.error(UpdatePrivilegesError.UnprivilegedService, () => "Test: unprivileged service attempting bless");
168
167
  const serviceId = tryAsServiceId(11_000);
169
- const bless = new Bless(serviceId, accumulate, tinyChainSpec);
168
+ const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
170
169
  const entries = prepareServiceGasMap();
171
170
  const authorizers = prepareAuthorizers();
172
171
  const { registers, memory } = prepareRegsAndMemory(entries, authorizers);
@@ -181,7 +180,7 @@ describe("HostCalls: Bless", () => {
181
180
  const accumulate = new PartialStateMock();
182
181
  accumulate.privilegedServicesResponse = Result.error(UpdatePrivilegesError.InvalidServiceId, () => "Test: invalid manager service ID for bless");
183
182
  const serviceId = tryAsServiceId(11_000);
184
- const bless = new Bless(serviceId, accumulate, tinyChainSpec);
183
+ const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
185
184
  const entries = prepareServiceGasMap();
186
185
  const authorizers = prepareAuthorizers();
187
186
  const { registers, memory } = prepareRegsAndMemory(entries, authorizers, { manager: tryAsU64(MAX_VALUE_U64) });
@@ -196,7 +195,7 @@ describe("HostCalls: Bless", () => {
196
195
  const accumulate = new PartialStateMock();
197
196
  accumulate.privilegedServicesResponse = Result.error(UpdatePrivilegesError.InvalidServiceId, () => "Test: invalid validator service ID for bless");
198
197
  const serviceId = tryAsServiceId(11_000);
199
- const bless = new Bless(serviceId, accumulate, tinyChainSpec);
198
+ const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
200
199
  const entries = prepareServiceGasMap();
201
200
  const authorizers = prepareAuthorizers();
202
201
  const { registers, memory } = prepareRegsAndMemory(entries, authorizers, { validator: tryAsU64(MAX_VALUE_U64) });
@@ -211,7 +210,7 @@ describe("HostCalls: Bless", () => {
211
210
  const accumulate = new PartialStateMock();
212
211
  accumulate.privilegedServicesResponse = Result.error(UpdatePrivilegesError.InvalidServiceId, () => "Test: invalid registrar service ID for bless");
213
212
  const serviceId = tryAsServiceId(11_000);
214
- const bless = new Bless(serviceId, accumulate, tinyChainSpec);
213
+ const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
215
214
  const entries = prepareServiceGasMap();
216
215
  const authorizers = prepareAuthorizers();
217
216
  const { registers, memory } = prepareRegsAndMemory(entries, authorizers, { registrar: tryAsU64(MAX_VALUE_U64) });