@typeberry/lib 0.5.3 → 0.5.4-61ca416

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 (224) hide show
  1. package/package.json +8 -4
  2. package/packages/core/hash/hash.d.ts.map +1 -1
  3. package/packages/core/hash/hash.js +1 -0
  4. package/packages/core/json-parser/descriptors.d.ts.map +1 -1
  5. package/packages/core/json-parser/descriptors.js +3 -0
  6. package/packages/core/json-parser/index.test.js +30 -0
  7. package/packages/core/networking/certificate.d.ts.map +1 -1
  8. package/packages/core/networking/certificate.js +1 -0
  9. package/packages/core/networking/package.json +1 -1
  10. package/packages/core/networking/setup.d.ts.map +1 -1
  11. package/packages/core/networking/setup.js +16 -12
  12. package/packages/core/numbers/index.d.ts +4 -0
  13. package/packages/core/numbers/index.d.ts.map +1 -1
  14. package/packages/core/numbers/index.js +4 -4
  15. package/packages/core/pvm-host-calls/host-calls-executor.d.ts +23 -17
  16. package/packages/core/pvm-host-calls/host-calls-executor.d.ts.map +1 -1
  17. package/packages/core/pvm-host-calls/host-calls-executor.js +23 -31
  18. package/packages/core/pvm-interpreter/ops/math-consts.d.ts +2 -3
  19. package/packages/core/pvm-interpreter/ops/math-consts.d.ts.map +1 -1
  20. package/packages/core/pvm-interpreter/ops/math-consts.js +2 -3
  21. package/packages/core/pvm-interpreter/ops/math-ops.js +3 -3
  22. package/packages/core/pvm-interpreter/ops/math-utils.js +13 -13
  23. package/packages/core/pvm-interpreter/ops/math-utils.test.js +17 -16
  24. package/packages/core/telemetry/package.json +1 -1
  25. package/packages/core/utils/compatibility.d.ts +0 -1
  26. package/packages/core/utils/compatibility.d.ts.map +1 -1
  27. package/packages/core/utils/compatibility.js +1 -2
  28. package/packages/core/utils/compatibility.test.js +6 -10
  29. package/packages/extensions/ipc/jamnp/handler.d.ts +5 -4
  30. package/packages/extensions/ipc/jamnp/handler.d.ts.map +1 -1
  31. package/packages/extensions/ipc/jamnp/handler.js +59 -34
  32. package/packages/extensions/ipc/jamnp/stream.d.ts +6 -4
  33. package/packages/extensions/ipc/jamnp/stream.d.ts.map +1 -1
  34. package/packages/jam/block/index.d.ts +11 -11
  35. package/packages/jam/block/index.d.ts.map +1 -1
  36. package/packages/jam/block/index.js +11 -11
  37. package/packages/jam/block/work-item.d.ts +13 -4
  38. package/packages/jam/block/work-item.d.ts.map +1 -1
  39. package/packages/jam/block/work-package.d.ts +3 -1
  40. package/packages/jam/block/work-package.d.ts.map +1 -1
  41. package/packages/jam/block/work-package.js +6 -2
  42. package/packages/jam/block/work-result.d.ts +3 -5
  43. package/packages/jam/block/work-result.d.ts.map +1 -1
  44. package/packages/jam/block/work-result.js +6 -0
  45. package/packages/jam/block-json/block.d.ts +125 -0
  46. package/packages/jam/block-json/block.d.ts.map +1 -1
  47. package/packages/jam/block-json/block.js +9 -2
  48. package/packages/jam/block-json/work-result.d.ts.map +1 -1
  49. package/packages/jam/block-json/work-result.js +6 -6
  50. package/packages/jam/database-lmdb/states.test.js +2 -3
  51. package/packages/jam/executor/index.d.ts +4 -0
  52. package/packages/jam/executor/index.d.ts.map +1 -0
  53. package/packages/jam/executor/index.js +2 -0
  54. package/packages/jam/{transition/accumulate → executor}/pvm-executor.d.ts +19 -16
  55. package/packages/jam/executor/pvm-executor.d.ts.map +1 -0
  56. package/packages/jam/{transition/accumulate → executor}/pvm-executor.js +46 -3
  57. package/packages/jam/fuzz-proto/v1/handler.d.ts +1 -1
  58. package/packages/jam/fuzz-proto/v1/handler.d.ts.map +1 -1
  59. package/packages/jam/fuzz-proto/v1/handler.js +43 -19
  60. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  61. package/packages/jam/in-core/externalities/refine.d.ts +24 -0
  62. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -0
  63. package/packages/jam/in-core/externalities/refine.js +36 -0
  64. package/packages/jam/in-core/in-core.d.ts +60 -0
  65. package/packages/jam/in-core/in-core.d.ts.map +1 -0
  66. package/packages/jam/in-core/in-core.js +294 -0
  67. package/packages/jam/in-core/in-core.test.d.ts +2 -0
  68. package/packages/jam/in-core/in-core.test.d.ts.map +1 -0
  69. package/packages/jam/in-core/in-core.test.js +81 -0
  70. package/packages/jam/in-core/index.d.ts +2 -0
  71. package/packages/jam/in-core/index.d.ts.map +1 -0
  72. package/packages/jam/in-core/index.js +1 -0
  73. package/packages/jam/jam-host-calls/accumulate/bless.d.ts.map +1 -1
  74. package/packages/jam/jam-host-calls/accumulate/bless.js +6 -10
  75. package/packages/jam/jam-host-calls/accumulate/bless.test.js +32 -73
  76. package/packages/jam/jam-host-calls/accumulate/new.d.ts.map +1 -1
  77. package/packages/jam/jam-host-calls/accumulate/new.js +2 -4
  78. package/packages/jam/jam-host-calls/accumulate/new.test.js +4 -5
  79. package/packages/jam/jam-host-calls/general/fetch.d.ts +1 -57
  80. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  81. package/packages/jam/jam-host-calls/general/fetch.js +6 -29
  82. package/packages/jam/jam-host-calls/general/fetch.test.js +2 -58
  83. package/packages/jam/jamnp-s/peers.d.ts.map +1 -1
  84. package/packages/jam/jamnp-s/peers.js +10 -0
  85. package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts +1 -1
  86. package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts.map +1 -1
  87. package/packages/jam/jamnp-s/protocol/ce-128-block-request.js +10 -8
  88. package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts.map +1 -1
  89. package/packages/jam/jamnp-s/protocol/ce-129-state-request.js +11 -9
  90. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +3 -3
  91. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
  92. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +2 -2
  93. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +9 -9
  94. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts.map +1 -1
  95. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.js +2 -2
  96. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts.map +1 -1
  97. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.js +8 -6
  98. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +16 -16
  99. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts.map +1 -1
  100. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.js +2 -2
  101. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.test.js +2 -2
  102. package/packages/jam/jamnp-s/protocol/stream.d.ts +13 -7
  103. package/packages/jam/jamnp-s/protocol/stream.d.ts.map +1 -1
  104. package/packages/jam/jamnp-s/protocol/stream.js +5 -4
  105. package/packages/jam/jamnp-s/protocol/test-utils.d.ts +1 -1
  106. package/packages/jam/jamnp-s/protocol/test-utils.d.ts.map +1 -1
  107. package/packages/jam/jamnp-s/protocol/test-utils.js +9 -12
  108. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +2 -2
  109. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts.map +1 -1
  110. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.js +1 -1
  111. package/packages/jam/jamnp-s/stream-manager.d.ts.map +1 -1
  112. package/packages/jam/jamnp-s/stream-manager.js +7 -5
  113. package/packages/jam/jamnp-s/stream-manager.test.js +8 -5
  114. package/packages/jam/jamnp-s/tasks/sync.js +1 -1
  115. package/packages/jam/node/jam-config.d.ts +4 -1
  116. package/packages/jam/node/jam-config.d.ts.map +1 -1
  117. package/packages/jam/node/jam-config.js +6 -2
  118. package/packages/jam/node/main.d.ts.map +1 -1
  119. package/packages/jam/node/main.js +5 -4
  120. package/packages/jam/node/package.json +1 -1
  121. package/packages/jam/node/reader.d.ts +25 -25
  122. package/packages/jam/node/workers.d.ts +183 -183
  123. package/packages/jam/rpc-validation/types.d.ts +7 -3
  124. package/packages/jam/rpc-validation/types.d.ts.map +1 -1
  125. package/packages/jam/rpc-validation/validation.d.ts +254 -36
  126. package/packages/jam/rpc-validation/validation.d.ts.map +1 -1
  127. package/packages/jam/rpc-validation/validation.js +20 -2
  128. package/packages/jam/state/accumulation-queue.d.ts +26 -26
  129. package/packages/jam/state/assurances.d.ts +26 -26
  130. package/packages/jam/state/in-memory-state.d.ts.map +1 -1
  131. package/packages/jam/state/in-memory-state.js +2 -3
  132. package/packages/jam/state/privileged-services.d.ts +1 -1
  133. package/packages/jam/state/privileged-services.d.ts.map +1 -1
  134. package/packages/jam/state/privileged-services.js +1 -6
  135. package/packages/jam/state/service.d.ts +1 -1
  136. package/packages/jam/state/service.d.ts.map +1 -1
  137. package/packages/jam/state/statistics.d.ts +0 -8
  138. package/packages/jam/state/statistics.d.ts.map +1 -1
  139. package/packages/jam/state/statistics.js +14 -44
  140. package/packages/jam/state/statistics.test.js +1 -8
  141. package/packages/jam/state/test.utils.d.ts +1 -1
  142. package/packages/jam/state/test.utils.d.ts.map +1 -1
  143. package/packages/jam/state/test.utils.js +6 -25
  144. package/packages/jam/state-json/accounts.d.ts +10 -0
  145. package/packages/jam/state-json/accounts.d.ts.map +1 -1
  146. package/packages/jam/state-json/accounts.js +47 -19
  147. package/packages/jam/state-json/dump.d.ts.map +1 -1
  148. package/packages/jam/state-json/dump.js +5 -9
  149. package/packages/jam/state-json/dump.test.js +2 -10
  150. package/packages/jam/state-json/statistics.d.ts +1 -1
  151. package/packages/jam/state-json/statistics.d.ts.map +1 -1
  152. package/packages/jam/state-json/statistics.js +1 -13
  153. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +29 -31
  154. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts.map +1 -1
  155. package/packages/jam/state-merkleization/serialize.d.ts +4 -4
  156. package/packages/jam/state-merkleization/serialize.d.ts.map +1 -1
  157. package/packages/jam/state-merkleization/serialize.js +5 -8
  158. package/packages/jam/state-merkleization/serialized-state-view.d.ts.map +1 -1
  159. package/packages/jam/state-merkleization/state-entries.test.js +1 -7
  160. package/packages/jam/state-vectors/index.d.ts +377 -5
  161. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  162. package/packages/jam/state-vectors/index.js +3 -3
  163. package/packages/jam/transition/accumulate/accumulate-data.d.ts.map +1 -1
  164. package/packages/jam/transition/accumulate/accumulate-data.js +1 -2
  165. package/packages/jam/transition/accumulate/accumulate-queue.test.js +2 -2
  166. package/packages/jam/transition/accumulate/accumulate-state.d.ts +1 -2
  167. package/packages/jam/transition/accumulate/accumulate-state.d.ts.map +1 -1
  168. package/packages/jam/transition/accumulate/accumulate-utils.d.ts.map +1 -1
  169. package/packages/jam/transition/accumulate/accumulate-utils.js +2 -6
  170. package/packages/jam/transition/accumulate/accumulate-utils.test.js +4 -6
  171. package/packages/jam/transition/accumulate/accumulate.d.ts.map +1 -1
  172. package/packages/jam/transition/accumulate/accumulate.js +19 -33
  173. package/packages/jam/transition/accumulate/accumulate.test.js +2 -2
  174. package/packages/jam/transition/accumulate/accumulation-result-merge-utils.d.ts.map +1 -1
  175. package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +1 -2
  176. package/packages/jam/transition/accumulate/accumulation-result-merge-utils.test.js +1 -2
  177. package/packages/jam/transition/accumulate/index.d.ts +0 -1
  178. package/packages/jam/transition/accumulate/index.d.ts.map +1 -1
  179. package/packages/jam/transition/accumulate/index.js +0 -1
  180. package/packages/jam/transition/accumulate/operand.d.ts +7 -7
  181. package/packages/jam/transition/chain-stf.d.ts +3 -5
  182. package/packages/jam/transition/chain-stf.d.ts.map +1 -1
  183. package/packages/jam/transition/chain-stf.js +5 -29
  184. package/packages/jam/transition/disputes/disputes.test.data2.d.ts +3 -3
  185. package/packages/jam/transition/disputes/disputes.test.data2.d.ts.map +1 -1
  186. package/packages/jam/transition/disputes/disputes.test.data2.js +2 -2
  187. package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
  188. package/packages/jam/transition/externalities/accumulate-externalities.js +22 -49
  189. package/packages/jam/transition/externalities/accumulate-externalities.test.js +8 -72
  190. package/packages/jam/transition/externalities/fetch-externalities.d.ts +8 -21
  191. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  192. package/packages/jam/transition/externalities/fetch-externalities.js +5 -53
  193. package/packages/jam/transition/externalities/fetch-externalities.test.js +201 -114
  194. package/packages/jam/transition/hasher.test.js +2 -2
  195. package/packages/jam/transition/reports/error.d.ts +3 -1
  196. package/packages/jam/transition/reports/error.d.ts.map +1 -1
  197. package/packages/jam/transition/reports/error.js +2 -0
  198. package/packages/jam/transition/reports/test.utils.d.ts.map +1 -1
  199. package/packages/jam/transition/reports/test.utils.js +2 -2
  200. package/packages/jam/transition/reports/verify-basic.d.ts.map +1 -1
  201. package/packages/jam/transition/reports/verify-basic.js +10 -0
  202. package/packages/jam/transition/reports/verify-basic.test.js +29 -0
  203. package/packages/jam/transition/statistics.d.ts +0 -7
  204. package/packages/jam/transition/statistics.d.ts.map +1 -1
  205. package/packages/jam/transition/statistics.js +2 -11
  206. package/packages/jam/transition/statistics.test.js +0 -40
  207. package/packages/workers/block-authorship/generator.test.d.ts +2 -0
  208. package/packages/workers/block-authorship/generator.test.d.ts.map +1 -0
  209. package/packages/workers/block-authorship/generator.test.js +200 -0
  210. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  211. package/packages/workers/block-authorship/main.js +23 -4
  212. package/packages/workers/block-authorship/package.json +1 -1
  213. package/packages/workers/block-authorship/protocol.d.ts +53 -51
  214. package/packages/workers/block-authorship/protocol.d.ts.map +1 -1
  215. package/packages/workers/block-authorship/protocol.js +6 -3
  216. package/packages/workers/importer/importer.d.ts.map +1 -1
  217. package/packages/workers/importer/importer.js +0 -1
  218. package/packages/workers/importer/package.json +1 -1
  219. package/packages/workers/importer/protocol.d.ts +54 -54
  220. package/packages/workers/jam-network/protocol.d.ts +79 -79
  221. package/packages/jam/transition/accumulate/deferred-transfers.d.ts +0 -36
  222. package/packages/jam/transition/accumulate/deferred-transfers.d.ts.map +0 -1
  223. package/packages/jam/transition/accumulate/deferred-transfers.js +0 -95
  224. package/packages/jam/transition/accumulate/pvm-executor.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/lib",
3
- "version": "0.5.3",
3
+ "version": "0.5.4-61ca416",
4
4
  "description": "Typeberry Library",
5
5
  "main": "./bin/lib/index.js",
6
6
  "types": "./bin/lib/index.d.ts",
@@ -218,8 +218,12 @@
218
218
  "#@typeberry/database/*": "./packages/jam/database/*",
219
219
  "#@typeberry/database-lmdb": "./packages/jam/database-lmdb/index.js",
220
220
  "#@typeberry/database-lmdb/*": "./packages/jam/database-lmdb/*",
221
+ "#@typeberry/executor": "./packages/jam/executor/index.js",
222
+ "#@typeberry/executor/*": "./packages/jam/executor/*",
221
223
  "#@typeberry/fuzz-proto": "./packages/jam/fuzz-proto/index.js",
222
224
  "#@typeberry/fuzz-proto/*": "./packages/jam/fuzz-proto/*",
225
+ "#@typeberry/in-core": "./packages/jam/in-core/index.js",
226
+ "#@typeberry/in-core/*": "./packages/jam/in-core/*",
223
227
  "#@typeberry/jam-host-calls": "./packages/jam/jam-host-calls/index.js",
224
228
  "#@typeberry/jam-host-calls/*": "./packages/jam/jam-host-calls/*",
225
229
  "#@typeberry/jamnp-s": "./packages/jam/jamnp-s/index.js",
@@ -238,6 +242,8 @@
238
242
  "#@typeberry/state-json/*": "./packages/jam/state-json/*",
239
243
  "#@typeberry/state-merkleization": "./packages/jam/state-merkleization/index.js",
240
244
  "#@typeberry/state-merkleization/*": "./packages/jam/state-merkleization/*",
245
+ "#@typeberry/state-vectors": "./packages/jam/state-vectors/index.js",
246
+ "#@typeberry/state-vectors/*": "./packages/jam/state-vectors/*",
241
247
  "#@typeberry/transition": "./packages/jam/transition/index.js",
242
248
  "#@typeberry/transition/*": "./packages/jam/transition/*",
243
249
  "#@typeberry/disputes": "./packages/jam/transition/disputes/index.js",
@@ -253,9 +259,7 @@
253
259
  "#@typeberry/importer": "./packages/workers/importer/index.js",
254
260
  "#@typeberry/importer/*": "./packages/workers/importer/*",
255
261
  "#@typeberry/jam-network": "./packages/workers/jam-network/index.js",
256
- "#@typeberry/jam-network/*": "./packages/workers/jam-network/*",
257
- "#@typeberry/state-vectors": "./packages/jam/state-vectors/index.js",
258
- "#@typeberry/state-vectors/*": "./packages/jam/state-vectors/*"
262
+ "#@typeberry/jam-network/*": "./packages/workers/jam-network/*"
259
263
  },
260
264
  "dependencies": {
261
265
  "@fluffylabs/anan-as": "^1.1.5",
@@ -1 +1 @@
1
- {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../../packages/core/hash/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC;AAE7D,4BAA4B;AAC5B,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE1C,sBAAsB;AACtB,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE3C,yBAAyB;AACzB,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE1C,sBAAsB;AACtB,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAEvD,eAAO,MAAM,SAAS,WAAwB,CAAC;AAE/C;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,KAAK,SAAS,UAAU,EAAE,KAAK,CAAE,SAAQ,SAAS;aAEpD,IAAI,EAAE,KAAK;aACX,IAAI,EAAE,KAAK;gBADX,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,KAAK;CAI9B;AAED;;GAEG;AACH,qBAAa,gBAAgB,CAAC,KAAK,SAAS,UAAU,EAAE,KAAK,CAAE,SAAQ,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;aAIzE,OAAO,EAAE,SAAS;gBAFlC,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,KAAK,EACK,OAAO,EAAE,SAAS;CAIrC"}
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../../packages/core/hash/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC;AAE7D,4BAA4B;AAC5B,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE1C,sBAAsB;AACtB,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE3C,yBAAyB;AACzB,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE1C,sBAAsB;AACtB,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAEvD,eAAO,MAAM,SAAS,WAAwB,CAAC;AAE/C;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,KAAK,SAAS,UAAU,EAAE,KAAK,CAAE,SAAQ,SAAS;aAGpD,IAAI,EAAE,KAAK;aACX,IAAI,EAAE,KAAK;gBADX,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,KAAK;CAI9B;AAED;;GAEG;AACH,qBAAa,gBAAgB,CAAC,KAAK,SAAS,UAAU,EAAE,KAAK,CAAE,SAAQ,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;aAIzE,OAAO,EAAE,SAAS;gBAFlC,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,KAAK,EACK,OAAO,EAAE,SAAS;CAIrC"}
@@ -19,6 +19,7 @@ export const ZERO_HASH = Bytes.zero(HASH_SIZE);
19
19
  export class WithHash extends WithDebug {
20
20
  hash;
21
21
  data;
22
+ // TODO [ToDr] use static method and make constructor private
22
23
  constructor(hash, data) {
23
24
  super();
24
25
  this.hash = hash;
@@ -1 +1 @@
1
- {"version":3,"file":"descriptors.d.ts","sourceRoot":"","sources":["../../../../../packages/core/json-parser/descriptors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEhF,yBAAiB,IAAI,CAAC;IACpB,kDAAkD;IAClD,SAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAElG;IAED,kDAAkD;IAClD,SAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAElG;IAED,4DAA4D;IAC5D,SAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAUnG;IAED,mDAAmD;IACnD,SAAgB,UAAU,CAAC,KAAK,SAAS,MAAM,uCAE9C;IAED,+DAA+D;IAC/D,SAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAEjG;IAED,wFAAwF;IACxF,SAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAEtE;IAED,sEAAsE;IACtE,SAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAEjE;IAED,6CAA6C;IAC7C,SAAgB,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAErE;IAED,kDAAkD;IAClD,SAAgB,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAWpF;IAED,uCAAuC;IACvC,SAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAWrG;IAED,0FAA0F;IAC1F,SAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EACzC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EACrB,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAC7B,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAKpC;CACF"}
1
+ {"version":3,"file":"descriptors.d.ts","sourceRoot":"","sources":["../../../../../packages/core/json-parser/descriptors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEhF,yBAAiB,IAAI,CAAC;IACpB,kDAAkD;IAClD,SAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAElG;IAED,kDAAkD;IAClD,SAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAElG;IAED,4DAA4D;IAC5D,SAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAUnG;IAED,mDAAmD;IACnD,SAAgB,UAAU,CAAC,KAAK,SAAS,MAAM,uCAE9C;IAED,+DAA+D;IAC/D,SAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAEjG;IAED,wFAAwF;IACxF,SAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAEtE;IAED,sEAAsE;IACtE,SAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAEjE;IAED,6CAA6C;IAC7C,SAAgB,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAErE;IAED,kDAAkD;IAClD,SAAgB,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAWpF;IAED,uCAAuC;IACvC,SAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAcrG;IAED,0FAA0F;IAC1F,SAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EACzC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EACrB,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAC7B,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAKpC;CACF"}
@@ -69,6 +69,9 @@ export var json;
69
69
  if (typeof inJson !== "object" || inJson === null) {
70
70
  throw new Error("Expected map for parsing");
71
71
  }
72
+ if (Array.isArray(inJson)) {
73
+ throw new Error("Expected map, got array");
74
+ }
72
75
  const result = new Map();
73
76
  for (const [key, value] of Object.entries(inJson)) {
74
77
  result.set(parseFromJson(key, K, `${context}.key`), parseFromJson(value, V, `${context}.value`));
@@ -135,4 +135,34 @@ test("JSON parser", async (t) => {
135
135
  assert.strictEqual(result.k, undefined);
136
136
  assert.strictEqual(result.v, true);
137
137
  });
138
+ await t.test("map", () => {
139
+ const j = `{"k": { "a": "b", "c": "d" } }`;
140
+ class TestClass {
141
+ static fromJson = {
142
+ k: json.map("string", "string"),
143
+ };
144
+ k = new Map();
145
+ }
146
+ const result = parseFromJson(JSON.parse(j), TestClass.fromJson);
147
+ assert.deepStrictEqual(result.k, new Map([
148
+ ["a", "b"],
149
+ ["c", "d"],
150
+ ]));
151
+ });
152
+ await t.test("map type mismatch", () => {
153
+ const j = `{"k": [["a", "b"], ["c", "d"]]}`;
154
+ class TestClass {
155
+ static fromJson = {
156
+ k: json.map("string", "string"),
157
+ };
158
+ k = new Map();
159
+ }
160
+ try {
161
+ parseFromJson(JSON.parse(j), TestClass.fromJson);
162
+ assert.fail("Expected error to be thrown");
163
+ }
164
+ catch (e) {
165
+ assert.strictEqual(`${e}`, "Error: [<root>.k] Error while parsing the value: Error: Expected map, got array");
166
+ }
167
+ });
138
168
  });
@@ -1 +1 @@
1
- {"version":3,"file":"certificate.d.ts","sourceRoot":"","sources":["../../../../../packages/core/networking/certificate.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAGtD,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAqB,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAErF,OAAO,EAAgB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAezC,oBAAY,eAAe;IACzB,aAAa,IAAI;IACjB,UAAU,IAAI;IACd,qBAAqB,IAAI;IACzB,eAAe,IAAI;IACnB,kBAAkB,IAAI;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,UAAU,CAAC;CACjB,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAwDvG;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC,CAcD;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,mBAQ5D;AAED,wFAAwF;AACxF,wBAAsB,mBAAmB,CAAC,EACxC,MAAM,EACN,cAAc,EACd,aAAa,EACb,iBAAsB,EACtB,gBAAqB,EACrB,GAAgB,GACjB,EAAE;IACD,MAAM,EAAE,SAAS,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,cAAc,CAAC;IAC9B,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACvD,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACtD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CA6EhC;AAED,wBAAgB,UAAU,CAAC,aAAa,EAAE,SAAS,UAElD;AACD,wBAAgB,UAAU,CAAC,aAAa,EAAE,UAAU,UAGnD;AA4BD,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,UAEnD;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,GAAG,cAAc,CAkBpF"}
1
+ {"version":3,"file":"certificate.d.ts","sourceRoot":"","sources":["../../../../../packages/core/networking/certificate.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAGtD,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAqB,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAErF,OAAO,EAAgB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAezC,oBAAY,eAAe;IACzB,aAAa,IAAI;IACjB,UAAU,IAAI;IACd,qBAAqB,IAAI;IACzB,eAAe,IAAI;IACnB,kBAAkB,IAAI;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,UAAU,CAAC;CACjB,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAyDvG;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC,CAcD;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,mBAQ5D;AAED,wFAAwF;AACxF,wBAAsB,mBAAmB,CAAC,EACxC,MAAM,EACN,cAAc,EACd,aAAa,EACb,iBAAsB,EACtB,gBAAqB,EACrB,GAAgB,GACjB,EAAE;IACD,MAAM,EAAE,SAAS,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,cAAc,CAAC;IAC9B,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACvD,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACtD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CA6EhC;AAED,wBAAgB,UAAU,CAAC,aAAa,EAAE,SAAS,UAElD;AACD,wBAAgB,UAAU,CAAC,aAAa,EAAE,UAAU,UAGnD;AA4BD,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,UAEnD;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,GAAG,cAAc,CAkBpF"}
@@ -54,6 +54,7 @@ export async function verifyCertificate(certs) {
54
54
  }
55
55
  const key = Buffer.from(jwk.x ?? "", "base64url");
56
56
  if (!xc.verify(xc.publicKey)) {
57
+ logger.log `Certificate validation failed: incorrect signature`;
57
58
  return Result.error(VerifyCertError.IncorrectSignature, () => "Certificate validation failed: incorrect signature");
58
59
  }
59
60
  const publicKey = Bytes.fromBlob(new Uint8Array(key), ED25519_KEY_BYTES);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/networking",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "QUIC-based p2p networking.",
5
5
  "license": "MPL-2.0",
6
6
  "author": "Fluffy Labs",
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../../packages/core/networking/setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAgBhE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,sCAAsC;AACtC,MAAM,MAAM,OAAO,GAAG;IACpB,yBAAyB;IACzB,GAAG,EAAE,WAAW,CAAC;IACjB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAQF,qBAAa,IAAI;IACf,6DAA6D;WAChD,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;CAkKlF"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../../packages/core/networking/setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAiBhE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,sCAAsC;AACtC,MAAM,MAAM,OAAO,GAAG;IACpB,yBAAyB;IACzB,GAAG,EAAE,WAAW,CAAC;IACjB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAQF,qBAAa,IAAI;IACf,6DAA6D;WAChD,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;CAsKlF"}
@@ -3,7 +3,7 @@ import { events, QUICClient, QUICServer, QUICSocket } from "@matrixai/quic";
3
3
  import { BytesBlob } from "#@typeberry/bytes";
4
4
  import { Level, Logger } from "#@typeberry/logger";
5
5
  import { now } from "#@typeberry/utils";
6
- import { altNameRaw, certToPEM, ed25519AsJsonWebKeyPair, generateCertificate, privateKeyToPEM, } from "./certificate.js";
6
+ import { altNameRaw, certToPEM, ed25519AsJsonWebKeyPair, generateCertificate, privateKeyToPEM, verifyCertificate, } from "./certificate.js";
7
7
  import { getQuicClientCrypto, getQuicServerCrypto } from "./crypto.js";
8
8
  import * as metrics from "./metrics.js";
9
9
  import { peerVerification } from "./peer-verification.js";
@@ -34,7 +34,6 @@ export class Quic {
34
34
  subjectKeyPair: keyPair,
35
35
  issuerKeyPair: keyPair,
36
36
  });
37
- const lastConnectedPeer = peerVerification();
38
37
  // QUICConfig
39
38
  const config = {
40
39
  keepAliveIntervalTime: 3000,
@@ -43,7 +42,9 @@ export class Quic {
43
42
  cert: certToPEM(cert),
44
43
  key: privKeyPEM,
45
44
  verifyPeer: true,
46
- verifyCallback: lastConnectedPeer.verifyCallback,
45
+ // Server accepts TLS and verifies the certificate in the connection handler
46
+ // (EventQUICServerConnection). Client overrides this with peerVerification() per dial.
47
+ verifyCallback: async () => undefined,
47
48
  };
48
49
  logger.info `🆔 Peer id: ** ${altNameRaw(key.pubKey)}@${host}:${port} ** (pubkey: ${key.pubKey})`;
49
50
  // Shared injected UDP socket
@@ -67,27 +68,30 @@ export class Quic {
67
68
  const conn = ev.detail;
68
69
  const peerAddress = `${conn.remoteHost}:${conn.remotePort}`;
69
70
  networkMetrics.recordConnectingIn(peerAddress);
70
- if (lastConnectedPeer.info === null) {
71
- networkMetrics.recordConnectInFailed("no_peer_info");
71
+ // Verify the peer's certificate and extract peer info.
72
+ const remoteCerts = conn.getRemoteCertsChain();
73
+ const verification = await verifyCertificate(remoteCerts);
74
+ if (verification.isError) {
75
+ networkMetrics.recordConnectInFailed("cert_verification_failed");
72
76
  await conn.stop();
73
77
  return;
74
78
  }
75
- if (lastConnectedPeer.info.key.isEqualTo(key.pubKey)) {
79
+ const peerInfo = verification.ok;
80
+ if (peerInfo.key.isEqualTo(key.pubKey)) {
76
81
  logger.log `🛜 Rejecting connection from ourself from ${conn.remoteHost}:${conn.remotePort}`;
77
82
  networkMetrics.recordConnectionRefused(peerAddress);
78
83
  await conn.stop({ isApp: true, errorCode: CloseReason.ConnectionFromOurself });
79
84
  return;
80
85
  }
81
- if (peers.isConnected(lastConnectedPeer.info.id)) {
82
- logger.log `🛜 Rejecting duplicate connection with peer ${lastConnectedPeer.info.id} from ${conn.remoteHost}:${conn.remotePort}`;
86
+ if (peers.isConnected(peerInfo.id)) {
87
+ logger.log `🛜 Rejecting duplicate connection with peer ${peerInfo.id} from ${conn.remoteHost}:${conn.remotePort}`;
83
88
  networkMetrics.recordConnectionRefused(peerAddress);
84
- await conn.stop({ isApp: true, errorCode: CloseReason.DuplicateConnection });
89
+ await conn.stop({ isApp: true, errorCode: CloseReason.DuplicateConnection, force: false });
85
90
  return;
86
91
  }
87
92
  logger.log `🛜 Server handshake with ${conn.remoteHost}:${conn.remotePort}`;
88
- newPeer(conn, lastConnectedPeer.info, "in");
89
- networkMetrics.recordConnectedIn(lastConnectedPeer.info.id);
90
- lastConnectedPeer.info = null;
93
+ newPeer(conn, peerInfo, "in");
94
+ networkMetrics.recordConnectedIn(peerInfo.id);
91
95
  await conn.start();
92
96
  });
93
97
  // connecting to a peer
@@ -5,12 +5,16 @@ export type WithBytesRepresentation<Bytes extends number> = {
5
5
  export type FixedSizeNumber<Bytes extends number> = number & WithBytesRepresentation<Bytes>;
6
6
  /** Unsigned integer that can be represented as one byte. */
7
7
  export type U8 = FixedSizeNumber<1>;
8
+ export declare const MAX_VALUE_U8 = 255;
8
9
  /** Unsigned integer that can be represented as two bytes. */
9
10
  export type U16 = FixedSizeNumber<2>;
11
+ export declare const MAX_VALUE_U16 = 65535;
10
12
  /** Unsigned integer that can be represented as 4 bytes. */
11
13
  export type U32 = FixedSizeNumber<4>;
14
+ export declare const MAX_VALUE_U32 = 4294967295;
12
15
  /** Unsigned integer that can be represented as 8 bytes. */
13
16
  export type U64 = bigint & WithBytesRepresentation<8>;
17
+ export declare const MAX_VALUE_U64 = 18446744073709551615n;
14
18
  /** Attempt to cast an input number into U8. */
15
19
  export declare const tryAsU8: (v: number) => U8;
16
20
  /** Check if given number is a valid U8 number. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/core/numbers/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,CAAC,MAAM,wBAAwB,EAAE,OAAO,MAAM,CAAC;AAE7D,MAAM,MAAM,uBAAuB,CAAC,KAAK,SAAS,MAAM,IAAI;IAC1D,QAAQ,CAAC,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC;CAC5C,CAAC;AAKF,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,MAAM,IAAI,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAE5F,4DAA4D;AAC5D,MAAM,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AAEpC,6DAA6D;AAC7D,MAAM,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AAErC,2DAA2D;AAC3D,MAAM,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AAErC,2DAA2D;AAC3D,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAGtD,+CAA+C;AAC/C,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,KAAG,EAGnC,CAAC;AACF,kDAAkD;AAClD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,EAA8B,CAAC;AAErE,gDAAgD;AAChD,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,GAGpC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,GAAgC,CAAC;AAExE,gDAAgD;AAChD,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,GAGpC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,GAAsC,CAAC;AAE9E,gDAAgD;AAChD,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,GAAG,MAAM,KAAG,GAI7C,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,GAAgC,CAAC;AAExE,0CAA0C;AAC1C,eAAO,MAAM,YAAY,GAAI,kBAAkB;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,KAAG,GAG3E,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,YAAY,GAAI,GAAG,GAAG,KAAG;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAS7D,CAAC;AAEF,qCAAqC;AACrC,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI;IACtB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE;;;EAWtC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE;;;EAWtC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,UAAU,CAEnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,GAAG,CAGxD;AAED,iFAAiF;AACjF,eAAO,MAAM,MAAM,GAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,KAAG,GAAoE,CAAC;AAEvH,gFAAgF;AAChF,eAAO,MAAM,MAAM,GAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,KAAG,GAAoE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/core/numbers/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,CAAC,MAAM,wBAAwB,EAAE,OAAO,MAAM,CAAC;AAE7D,MAAM,MAAM,uBAAuB,CAAC,KAAK,SAAS,MAAM,IAAI;IAC1D,QAAQ,CAAC,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC;CAC5C,CAAC;AAKF,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,MAAM,IAAI,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAE5F,4DAA4D;AAC5D,MAAM,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AACpC,eAAO,MAAM,YAAY,MAAO,CAAC;AACjC,6DAA6D;AAC7D,MAAM,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AACrC,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,2DAA2D;AAC3D,MAAM,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AACrC,eAAO,MAAM,aAAa,aAAc,CAAC;AACzC,2DAA2D;AAC3D,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;AACtD,eAAO,MAAM,aAAa,wBAAyB,CAAC;AAEpD,+CAA+C;AAC/C,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,KAAG,EAGnC,CAAC;AACF,kDAAkD;AAClD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,EAA8B,CAAC;AAErE,gDAAgD;AAChD,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,GAGpC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,GAAgC,CAAC;AAExE,gDAAgD;AAChD,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,GAGpC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,GAAsC,CAAC;AAE9E,gDAAgD;AAChD,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,GAAG,MAAM,KAAG,GAI7C,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,GAAgC,CAAC;AAExE,0CAA0C;AAC1C,eAAO,MAAM,YAAY,GAAI,kBAAkB;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,KAAG,GAG3E,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,YAAY,GAAI,GAAG,GAAG,KAAG;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAS7D,CAAC;AAEF,qCAAqC;AACrC,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI;IACtB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE;;;EAWtC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE;;;EAWtC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,UAAU,CAEnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,GAAG,CAGxD;AAED,iFAAiF;AACjF,eAAO,MAAM,MAAM,GAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,KAAG,GAAoE,CAAC;AAEvH,gFAAgF;AAChF,eAAO,MAAM,MAAM,GAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,KAAG,GAAoE,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { check } from "#@typeberry/utils";
2
2
  const asTypedNumber = (v) => v;
3
- const MAX_VALUE_U8 = 0xff;
4
- const MAX_VALUE_U16 = 0xffff;
5
- const MAX_VALUE_U32 = 0xffff_ffff;
6
- const MAX_VALUE_U64 = 0xffffffffffffffffn;
3
+ export const MAX_VALUE_U8 = 0xff;
4
+ export const MAX_VALUE_U16 = 0xffff;
5
+ export const MAX_VALUE_U32 = 0xffff_ffff;
6
+ export const MAX_VALUE_U64 = 0xffffffffffffffffn;
7
7
  /** Attempt to cast an input number into U8. */
8
8
  export const tryAsU8 = (v) => {
9
9
  check `${isU8(v)} input must have one-byte representation, got ${v}`;
@@ -1,23 +1,30 @@
1
- import { type Gas, Status } from "#@typeberry/pvm-interface";
1
+ import { type Gas } from "#@typeberry/pvm-interface";
2
2
  import { EcalliTraceLogger } from "./ecalli-trace-logger.js";
3
3
  import type { HostCalls } from "./host-calls.js";
4
4
  import type { PvmInstanceManager } from "./pvm-instance-manager.js";
5
- declare class ReturnValue {
6
- consumedGas: Gas;
7
- status: Status | null;
8
- memorySlice: Uint8Array | null;
9
- private constructor();
10
- static fromStatus(consumedGas: Gas, status: Status): ReturnValue;
11
- static fromMemorySlice(consumedGas: Gas, memorySlice: Uint8Array): ReturnValue;
12
- hasMemorySlice(): this is this & {
13
- status: null;
14
- memorySlice: Uint8Array;
15
- };
16
- hasStatus(): this is this & {
17
- status: Status;
18
- memorySlice: null;
19
- };
5
+ /**
6
+ * Outer VM return status.
7
+ *
8
+ * This is a limited status returned by outer VM.
9
+ *
10
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/24a10124a101?v=0.7.2
11
+ */
12
+ export declare enum ReturnStatus {
13
+ /** Execution succesful. */
14
+ OK = 0,
15
+ /** Execution went out of gas. */
16
+ OOG = 1,
17
+ /** Execution trapped or panicked. */
18
+ PANIC = 2
20
19
  }
20
+ export type ReturnValue<TGas = Gas> = {
21
+ consumedGas: TGas;
22
+ } & ({
23
+ status: ReturnStatus.OK;
24
+ memorySlice: Uint8Array;
25
+ } | {
26
+ status: ReturnStatus.OOG | ReturnStatus.PANIC;
27
+ });
21
28
  export declare class HostCallsExecutor {
22
29
  private pvmInstanceManager;
23
30
  private hostCalls;
@@ -27,5 +34,4 @@ export declare class HostCallsExecutor {
27
34
  private execute;
28
35
  runProgram(program: Uint8Array, args: Uint8Array, initialPc: number, initialGas: Gas): Promise<ReturnValue>;
29
36
  }
30
- export {};
31
37
  //# sourceMappingURL=host-calls-executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"host-calls-executor.d.ts","sourceRoot":"","sources":["../../../../../packages/core/pvm-host-calls/host-calls-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAwB,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,cAAM,WAAW;IAEN,WAAW,EAAE,GAAG;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI;IACrB,WAAW,EAAE,UAAU,GAAG,IAAI;IAHvC,OAAO;IAWP,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;IAIlD,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU;IAIhE,cAAc,IAAI,IAAI,IAAI,IAAI,GAAG;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,WAAW,EAAE,UAAU,CAAA;KAAE;IAI1E,SAAS,IAAI,IAAI,IAAI,IAAI,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,IAAI,CAAA;KAAE;CAGlE;AAED,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;gBAFR,kBAAkB,EAAE,kBAAkB,EACtC,SAAS,EAAE,SAAS,EACpB,QAAQ,GAAE,iBAAiB,GAAG,IAAiC;IAGzE,OAAO,CAAC,cAAc;YAoCR,OAAO;IAiFf,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;CAWlH"}
1
+ {"version":3,"file":"host-calls-executor.d.ts","sourceRoot":"","sources":["../../../../../packages/core/pvm-host-calls/host-calls-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAgC,MAAM,0BAA0B,CAAC;AAElF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;;;GAMG;AACH,oBAAY,YAAY;IACtB,2BAA2B;IAC3B,EAAE,IAAI;IACN,iCAAiC;IACjC,GAAG,IAAI;IACP,qCAAqC;IACrC,KAAK,IAAI;CACV;AAED,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,GAAG,IAAI;IACpC,WAAW,EAAE,IAAI,CAAC;CACnB,GAAG,CACA;IACE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;IACxB,WAAW,EAAE,UAAU,CAAC;CACzB,GACD;IACE,MAAM,EAAE,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC;CAC/C,CACJ,CAAC;AAEF,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;gBAFR,kBAAkB,EAAE,kBAAkB,EACtC,SAAS,EAAE,SAAS,EACpB,QAAQ,GAAE,iBAAiB,GAAG,IAAiC;IAGzE,OAAO,CAAC,cAAc;YAqCR,OAAO;IAkFf,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;CAWlH"}
@@ -4,32 +4,22 @@ import { EcalliTraceLogger } from "./ecalli-trace-logger.js";
4
4
  import { PvmExecution, tryAsHostCallIndex } from "./host-call-handler.js";
5
5
  import { HostCallMemory } from "./host-call-memory.js";
6
6
  import { HostCallRegisters } from "./host-call-registers.js";
7
- class ReturnValue {
8
- consumedGas;
9
- status;
10
- memorySlice;
11
- constructor(consumedGas, status, memorySlice) {
12
- this.consumedGas = consumedGas;
13
- this.status = status;
14
- this.memorySlice = memorySlice;
15
- check `
16
- ${(status === null && memorySlice !== null) || (status !== null && memorySlice === null)}
17
- 'status' and 'memorySlice' must not both be null or both be non-null — exactly one must be provided
18
- `;
19
- }
20
- static fromStatus(consumedGas, status) {
21
- return new ReturnValue(consumedGas, status, null);
22
- }
23
- static fromMemorySlice(consumedGas, memorySlice) {
24
- return new ReturnValue(consumedGas, null, memorySlice);
25
- }
26
- hasMemorySlice() {
27
- return this.memorySlice instanceof Uint8Array && this.status === null;
28
- }
29
- hasStatus() {
30
- return !this.hasMemorySlice();
31
- }
32
- }
7
+ /**
8
+ * Outer VM return status.
9
+ *
10
+ * This is a limited status returned by outer VM.
11
+ *
12
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/24a10124a101?v=0.7.2
13
+ */
14
+ export var ReturnStatus;
15
+ (function (ReturnStatus) {
16
+ /** Execution succesful. */
17
+ ReturnStatus[ReturnStatus["OK"] = 0] = "OK";
18
+ /** Execution went out of gas. */
19
+ ReturnStatus[ReturnStatus["OOG"] = 1] = "OOG";
20
+ /** Execution trapped or panicked. */
21
+ ReturnStatus[ReturnStatus["PANIC"] = 2] = "PANIC";
22
+ })(ReturnStatus || (ReturnStatus = {}));
33
23
  export class HostCallsExecutor {
34
24
  pvmInstanceManager;
35
25
  hostCalls;
@@ -40,26 +30,27 @@ export class HostCallsExecutor {
40
30
  this.ioTracer = ioTracer;
41
31
  }
42
32
  getReturnValue(status, pvmInstance, registers, memory) {
43
- const gasConsumed = pvmInstance.gas.used();
33
+ const consumedGas = pvmInstance.gas.used();
44
34
  const pc = pvmInstance.getPC();
45
35
  const gas = pvmInstance.gas.get();
46
36
  if (status === Status.OOG) {
47
37
  this.ioTracer?.logOog(pc, gas, registers);
48
- return ReturnValue.fromStatus(gasConsumed, status);
38
+ return { consumedGas, status: ReturnStatus.OOG };
49
39
  }
50
40
  if (status === Status.HALT) {
51
41
  this.ioTracer?.logHalt(pc, gas, registers);
52
42
  const address = registers.get(7);
43
+ // NOTE we are taking the the lower U32 part of the register, hence it's safe.
53
44
  const length = Number(registers.get(8) & 0xffffffffn);
54
45
  const result = safeAllocUint8Array(length);
55
46
  const loadResult = memory.loadInto(result, address);
56
47
  if (loadResult.isError) {
57
- return ReturnValue.fromMemorySlice(gasConsumed, new Uint8Array());
48
+ return { consumedGas, status: ReturnStatus.OK, memorySlice: new Uint8Array() };
58
49
  }
59
- return ReturnValue.fromMemorySlice(gasConsumed, result);
50
+ return { consumedGas, status: ReturnStatus.OK, memorySlice: result };
60
51
  }
61
52
  this.ioTracer?.logPanic(pvmInstance.getExitParam() ?? 0, pc, gas, registers);
62
- return ReturnValue.fromStatus(gasConsumed, Status.PANIC);
53
+ return { consumedGas, status: ReturnStatus.PANIC };
63
54
  }
64
55
  async execute(pvmInstance) {
65
56
  const ioTracker = this.ioTracer?.tracker() ?? null;
@@ -89,6 +80,7 @@ export class HostCallsExecutor {
89
80
  const hostCallIndex = tryAsHostCallIndex(exitParam);
90
81
  // retrieve the host call
91
82
  const hostCall = this.hostCalls.get(hostCallIndex);
83
+ // NOTE: `basicGasCost(regs)` function is for compatibility reasons: pre GP 0.7.2
92
84
  const basicGasCost = typeof hostCall.basicGasCost === "number" ? hostCall.basicGasCost : hostCall.basicGasCost(registers);
93
85
  // calculate gas
94
86
  const gasBefore = gas.get();
@@ -1,6 +1,5 @@
1
- export declare const MAX_VALUE = 4294967295;
2
- export declare const MAX_VALUE_U64: bigint;
3
- export declare const MIN_VALUE: number;
1
+ export declare const MAX_VALUE_I64: bigint;
2
+ export declare const MIN_VALUE_I32: number;
4
3
  export declare const MAX_SHIFT_U32 = 32;
5
4
  export declare const MAX_SHIFT_U64 = 64n;
6
5
  //# sourceMappingURL=math-consts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"math-consts.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/pvm-interpreter/ops/math-consts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,aAAa,CAAC;AACpC,eAAO,MAAM,aAAa,QAAY,CAAC;AACvC,eAAO,MAAM,SAAS,QAAa,CAAC;AACpC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,aAAa,MAAM,CAAC"}
1
+ {"version":3,"file":"math-consts.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/pvm-interpreter/ops/math-consts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,QAAY,CAAC;AACvC,eAAO,MAAM,aAAa,QAAa,CAAC;AACxC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,aAAa,MAAM,CAAC"}
@@ -1,5 +1,4 @@
1
- export const MAX_VALUE = 4294967295;
2
- export const MAX_VALUE_U64 = 2n ** 63n;
3
- export const MIN_VALUE = -(2 ** 31);
1
+ export const MAX_VALUE_I64 = 2n ** 63n;
2
+ export const MIN_VALUE_I32 = -(2 ** 31);
4
3
  export const MAX_SHIFT_U32 = 32;
5
4
  export const MAX_SHIFT_U64 = 64n;
@@ -1,5 +1,5 @@
1
1
  import { signExtend32To64 } from "../registers.js";
2
- import { MIN_VALUE } from "./math-consts.js";
2
+ import { MIN_VALUE_I32 } from "./math-consts.js";
3
3
  import { addWithOverflowU32, addWithOverflowU64, maxBigInt, minBigInt, mulLowerUnsignedU32, mulU64, mulUpperSS, mulUpperSU, mulUpperUU, subU32, subU64, } from "./math-utils.js";
4
4
  export class MathOps {
5
5
  regs;
@@ -61,7 +61,7 @@ export class MathOps {
61
61
  if (this.regs.getLowerU32(secondIndex) === 0) {
62
62
  this.regs.setU64(resultIndex, 2n ** 64n - 1n);
63
63
  }
64
- else if (this.regs.getLowerI32(secondIndex) === -1 && this.regs.getLowerI32(firstIndex) === MIN_VALUE) {
64
+ else if (this.regs.getLowerI32(secondIndex) === -1 && this.regs.getLowerI32(firstIndex) === MIN_VALUE_I32) {
65
65
  this.regs.setU64(resultIndex, signExtend32To64(this.regs.getLowerU32(firstIndex)));
66
66
  }
67
67
  else {
@@ -99,7 +99,7 @@ export class MathOps {
99
99
  if (this.regs.getLowerU32(secondIndex) === 0) {
100
100
  this.regs.setU64(resultIndex, BigInt(this.regs.getLowerI32(firstIndex)));
101
101
  }
102
- else if (this.regs.getLowerI32(secondIndex) === -1 && this.regs.getLowerI32(firstIndex) === MIN_VALUE) {
102
+ else if (this.regs.getLowerI32(secondIndex) === -1 && this.regs.getLowerI32(firstIndex) === MIN_VALUE_I32) {
103
103
  this.regs.setU64(resultIndex, 0n);
104
104
  }
105
105
  else {
@@ -1,25 +1,25 @@
1
+ import { MAX_VALUE_U32 } from "#@typeberry/numbers";
1
2
  import { check } from "#@typeberry/utils";
2
- import { MAX_VALUE } from "./math-consts.js";
3
3
  /**
4
4
  * Overflowing addition for two-complement representation of 32-bit signed numbers.
5
5
  */
6
6
  export function addWithOverflowU32(a, b) {
7
- if (a > MAX_VALUE - b) {
7
+ if (a > MAX_VALUE_U32 - b) {
8
8
  /**
9
- * MAX_VALUE is equal to 2 ** 32 - 1
10
- * MAX_VALUE - ( (MAX_VALUE - a) + (MAX_VALUE - b) ) - 1
11
- * = MAX_VALUE - (2MAX_VALUE - a - b) -1
12
- * = MAX_VALUE - 2MAX_VALUE + a + b - 1
13
- * = a + b - MAX_VALUE - 1
9
+ * MAX_VALUE_U32 is equal to 2 ** 32 - 1
10
+ * MAX_VALUE_U32 - ( (MAX_VALUE_U32 - a) + (MAX_VALUE_U32 - b) ) - 1
11
+ * = MAX_VALUE_U32 - (2MAX_VALUE_U32 - a - b) -1
12
+ * = MAX_VALUE_U32 - 2MAX_VALUE_U32 + a + b - 1
13
+ * = a + b - MAX_VALUE_U32 - 1
14
14
  * = a + b - 2 ** 32
15
- * but we know that 2MAX_VALUE > a + b > MAX_VALUE so in this case:
15
+ * but we know that 2MAX_VALUE_U32 > a + b > MAX_VALUE_U32 so in this case:
16
16
  * a + b - 2 ** 32 <=> (a + b) % 2 ** 32
17
- * = (a + b) % (MAX_VALUE + 1)
17
+ * = (a + b) % (MAX_VALUE_U32 + 1)
18
18
  */
19
- const spaceToMaxA = MAX_VALUE - a;
20
- const spaceToMaxB = MAX_VALUE - b;
19
+ const spaceToMaxA = MAX_VALUE_U32 - a;
20
+ const spaceToMaxB = MAX_VALUE_U32 - b;
21
21
  const overflowSum = spaceToMaxA + spaceToMaxB;
22
- return MAX_VALUE - overflowSum - 1;
22
+ return MAX_VALUE_U32 - overflowSum - 1;
23
23
  }
24
24
  return a + b;
25
25
  }
@@ -34,7 +34,7 @@ export function addWithOverflowU64(a, b) {
34
34
  */
35
35
  export function subU32(a, b) {
36
36
  if (b > a) {
37
- return MAX_VALUE - b + a + 1;
37
+ return MAX_VALUE_U32 - b + a + 1;
38
38
  }
39
39
  return a - b;
40
40
  }
@@ -1,6 +1,7 @@
1
1
  import assert from "node:assert";
2
2
  import { describe, it } from "node:test";
3
- import { MAX_VALUE, MAX_VALUE_U64 } from "./math-consts.js";
3
+ import { MAX_VALUE_U32 } from "#@typeberry/numbers";
4
+ import { MAX_VALUE_I64 } from "./math-consts.js";
4
5
  import { addWithOverflowU32, addWithOverflowU64, maxBigInt, minBigInt, mulLowerUnsignedU32, mulU64, mulUpperSS, mulUpperSU, mulUpperUU, subU32, subU64, unsignedRightShiftBigInt, } from "./math-utils.js";
5
6
  describe("math-utils", () => {
6
7
  describe("addWithOverflow", () => {
@@ -12,7 +13,7 @@ describe("math-utils", () => {
12
13
  assert.strictEqual(result, expectedResult);
13
14
  });
14
15
  it("should add two numbers (big and small) without overflow", () => {
15
- const a = MAX_VALUE;
16
+ const a = MAX_VALUE_U32;
16
17
  const b = 6;
17
18
  const expectedResult = 5;
18
19
  const result = addWithOverflowU32(a, b);
@@ -26,9 +27,9 @@ describe("math-utils", () => {
26
27
  assert.strictEqual(result, expectedResult);
27
28
  });
28
29
  it("should add max values with overflow", () => {
29
- const a = MAX_VALUE;
30
- const b = MAX_VALUE;
31
- const expectedResult = MAX_VALUE - 1;
30
+ const a = MAX_VALUE_U32;
31
+ const b = MAX_VALUE_U32;
32
+ const expectedResult = MAX_VALUE_U32 - 1;
32
33
  const result = addWithOverflowU32(a, b);
33
34
  assert.strictEqual(result, expectedResult);
34
35
  });
@@ -44,7 +45,7 @@ describe("math-utils", () => {
44
45
  it("should subtract two numbers with overflow", () => {
45
46
  const a = 5;
46
47
  const b = 6;
47
- const expectedResult = MAX_VALUE;
48
+ const expectedResult = MAX_VALUE_U32;
48
49
  const result = subU32(a, b);
49
50
  assert.strictEqual(result, expectedResult);
50
51
  });
@@ -95,29 +96,29 @@ describe("math-utils", () => {
95
96
  assert.strictEqual(result, expectedResult);
96
97
  });
97
98
  it("should multiply two big positive numbers", () => {
98
- const a = MAX_VALUE_U64;
99
- const b = MAX_VALUE_U64;
99
+ const a = MAX_VALUE_I64;
100
+ const b = MAX_VALUE_I64;
100
101
  const expectedResult = 0x4000000000000000n;
101
102
  const result = mulUpperUU(a, b);
102
103
  assert.strictEqual(result, expectedResult);
103
104
  });
104
105
  it("should multiply two big positive and negative numbers", () => {
105
- const a = MAX_VALUE_U64;
106
- const b = -MAX_VALUE_U64;
106
+ const a = MAX_VALUE_I64;
107
+ const b = -MAX_VALUE_I64;
107
108
  const expectedResult = 4611686018427387904n;
108
109
  const result = mulUpperUU(a, b);
109
110
  assert.strictEqual(result, expectedResult);
110
111
  });
111
112
  it("should multiply two big negative and positive numbers", () => {
112
- const a = -MAX_VALUE_U64;
113
- const b = MAX_VALUE_U64;
113
+ const a = -MAX_VALUE_I64;
114
+ const b = MAX_VALUE_I64;
114
115
  const expectedResult = 4611686018427387904n;
115
116
  const result = mulUpperUU(a, b);
116
117
  assert.strictEqual(result, expectedResult);
117
118
  });
118
119
  it("should multiply two big negative numbers", () => {
119
- const a = -MAX_VALUE_U64;
120
- const b = -MAX_VALUE_U64;
120
+ const a = -MAX_VALUE_I64;
121
+ const b = -MAX_VALUE_I64;
121
122
  const expectedResult = 0x4000000000000000n;
122
123
  const result = mulUpperUU(a, b);
123
124
  assert.strictEqual(result, expectedResult);
@@ -153,8 +154,8 @@ describe("math-utils", () => {
153
154
  assert.strictEqual(result, expectedResult);
154
155
  });
155
156
  it("should multiply two big positive numbers", () => {
156
- const a = MAX_VALUE_U64;
157
- const b = MAX_VALUE_U64;
157
+ const a = MAX_VALUE_I64;
158
+ const b = MAX_VALUE_I64;
158
159
  const expectedResult = 0x4000000000000000n;
159
160
  const result = mulUpperSU(a, b);
160
161
  assert.strictEqual(result, expectedResult);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/telemetry",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "OpenTelemetry initialization utilities for Typeberry",
5
5
  "license": "MPL-2.0",
6
6
  "author": "Fluffy Labs",
@@ -1,5 +1,4 @@
1
1
  export declare enum GpVersion {
2
- V0_7_0 = "0.7.0",
3
2
  V0_7_1 = "0.7.1",
4
3
  V0_7_2 = "0.7.2"
5
4
  }