@typeberry/lib 0.5.3 → 0.5.4-b101fe6

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 (205) 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/networking/certificate.d.ts.map +1 -1
  5. package/packages/core/networking/certificate.js +1 -0
  6. package/packages/core/networking/package.json +1 -1
  7. package/packages/core/networking/setup.d.ts.map +1 -1
  8. package/packages/core/networking/setup.js +16 -12
  9. package/packages/core/numbers/index.d.ts +4 -0
  10. package/packages/core/numbers/index.d.ts.map +1 -1
  11. package/packages/core/numbers/index.js +4 -4
  12. package/packages/core/pvm-host-calls/host-calls-executor.d.ts +23 -17
  13. package/packages/core/pvm-host-calls/host-calls-executor.d.ts.map +1 -1
  14. package/packages/core/pvm-host-calls/host-calls-executor.js +23 -31
  15. package/packages/core/pvm-interpreter/ops/math-consts.d.ts +2 -3
  16. package/packages/core/pvm-interpreter/ops/math-consts.d.ts.map +1 -1
  17. package/packages/core/pvm-interpreter/ops/math-consts.js +2 -3
  18. package/packages/core/pvm-interpreter/ops/math-ops.js +3 -3
  19. package/packages/core/pvm-interpreter/ops/math-utils.js +13 -13
  20. package/packages/core/pvm-interpreter/ops/math-utils.test.js +17 -16
  21. package/packages/core/telemetry/package.json +1 -1
  22. package/packages/core/utils/compatibility.d.ts +0 -1
  23. package/packages/core/utils/compatibility.d.ts.map +1 -1
  24. package/packages/core/utils/compatibility.js +1 -2
  25. package/packages/core/utils/compatibility.test.js +6 -10
  26. package/packages/extensions/ipc/jamnp/handler.d.ts +5 -4
  27. package/packages/extensions/ipc/jamnp/handler.d.ts.map +1 -1
  28. package/packages/extensions/ipc/jamnp/handler.js +59 -34
  29. package/packages/extensions/ipc/jamnp/stream.d.ts +6 -4
  30. package/packages/extensions/ipc/jamnp/stream.d.ts.map +1 -1
  31. package/packages/jam/block/work-item.d.ts +13 -4
  32. package/packages/jam/block/work-item.d.ts.map +1 -1
  33. package/packages/jam/block/work-package.d.ts +3 -1
  34. package/packages/jam/block/work-package.d.ts.map +1 -1
  35. package/packages/jam/block/work-package.js +6 -2
  36. package/packages/jam/block/work-result.d.ts +3 -5
  37. package/packages/jam/block/work-result.d.ts.map +1 -1
  38. package/packages/jam/block/work-result.js +6 -0
  39. package/packages/jam/block-json/block.d.ts +125 -0
  40. package/packages/jam/block-json/block.d.ts.map +1 -1
  41. package/packages/jam/block-json/block.js +9 -2
  42. package/packages/jam/block-json/work-result.d.ts.map +1 -1
  43. package/packages/jam/block-json/work-result.js +6 -6
  44. package/packages/jam/database-lmdb/states.test.js +2 -3
  45. package/packages/jam/executor/index.d.ts +4 -0
  46. package/packages/jam/executor/index.d.ts.map +1 -0
  47. package/packages/jam/executor/index.js +2 -0
  48. package/packages/jam/{transition/accumulate → executor}/pvm-executor.d.ts +19 -16
  49. package/packages/jam/executor/pvm-executor.d.ts.map +1 -0
  50. package/packages/jam/{transition/accumulate → executor}/pvm-executor.js +46 -3
  51. package/packages/jam/fuzz-proto/v1/handler.d.ts +1 -1
  52. package/packages/jam/fuzz-proto/v1/handler.d.ts.map +1 -1
  53. package/packages/jam/fuzz-proto/v1/handler.js +43 -19
  54. package/packages/jam/in-core/externalities/refine.d.ts +24 -0
  55. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -0
  56. package/packages/jam/in-core/externalities/refine.js +36 -0
  57. package/packages/jam/in-core/in-core.d.ts +60 -0
  58. package/packages/jam/in-core/in-core.d.ts.map +1 -0
  59. package/packages/jam/in-core/in-core.js +294 -0
  60. package/packages/jam/in-core/in-core.test.d.ts +2 -0
  61. package/packages/jam/in-core/in-core.test.d.ts.map +1 -0
  62. package/packages/jam/in-core/in-core.test.js +81 -0
  63. package/packages/jam/in-core/index.d.ts +2 -0
  64. package/packages/jam/in-core/index.d.ts.map +1 -0
  65. package/packages/jam/in-core/index.js +1 -0
  66. package/packages/jam/jam-host-calls/accumulate/bless.d.ts.map +1 -1
  67. package/packages/jam/jam-host-calls/accumulate/bless.js +6 -10
  68. package/packages/jam/jam-host-calls/accumulate/bless.test.js +32 -73
  69. package/packages/jam/jam-host-calls/accumulate/new.d.ts.map +1 -1
  70. package/packages/jam/jam-host-calls/accumulate/new.js +2 -4
  71. package/packages/jam/jam-host-calls/accumulate/new.test.js +4 -5
  72. package/packages/jam/jam-host-calls/general/fetch.d.ts +1 -57
  73. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  74. package/packages/jam/jam-host-calls/general/fetch.js +6 -29
  75. package/packages/jam/jam-host-calls/general/fetch.test.js +2 -58
  76. package/packages/jam/jamnp-s/peers.d.ts.map +1 -1
  77. package/packages/jam/jamnp-s/peers.js +10 -0
  78. package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts +1 -1
  79. package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts.map +1 -1
  80. package/packages/jam/jamnp-s/protocol/ce-128-block-request.js +10 -8
  81. package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts.map +1 -1
  82. package/packages/jam/jamnp-s/protocol/ce-129-state-request.js +11 -9
  83. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +3 -3
  84. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
  85. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +2 -2
  86. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +5 -5
  87. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts.map +1 -1
  88. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.js +2 -2
  89. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts.map +1 -1
  90. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.js +8 -6
  91. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +3 -3
  92. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts.map +1 -1
  93. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.js +2 -2
  94. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.test.js +2 -2
  95. package/packages/jam/jamnp-s/protocol/stream.d.ts +13 -7
  96. package/packages/jam/jamnp-s/protocol/stream.d.ts.map +1 -1
  97. package/packages/jam/jamnp-s/protocol/stream.js +5 -4
  98. package/packages/jam/jamnp-s/protocol/test-utils.d.ts +1 -1
  99. package/packages/jam/jamnp-s/protocol/test-utils.d.ts.map +1 -1
  100. package/packages/jam/jamnp-s/protocol/test-utils.js +9 -12
  101. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  102. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts.map +1 -1
  103. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.js +1 -1
  104. package/packages/jam/jamnp-s/stream-manager.d.ts.map +1 -1
  105. package/packages/jam/jamnp-s/stream-manager.js +7 -5
  106. package/packages/jam/jamnp-s/stream-manager.test.js +8 -5
  107. package/packages/jam/jamnp-s/tasks/sync.js +1 -1
  108. package/packages/jam/node/jam-config.d.ts +4 -1
  109. package/packages/jam/node/jam-config.d.ts.map +1 -1
  110. package/packages/jam/node/jam-config.js +6 -2
  111. package/packages/jam/node/main.d.ts.map +1 -1
  112. package/packages/jam/node/main.js +5 -4
  113. package/packages/jam/node/package.json +1 -1
  114. package/packages/jam/rpc-validation/types.d.ts +7 -3
  115. package/packages/jam/rpc-validation/types.d.ts.map +1 -1
  116. package/packages/jam/rpc-validation/validation.d.ts +254 -36
  117. package/packages/jam/rpc-validation/validation.d.ts.map +1 -1
  118. package/packages/jam/rpc-validation/validation.js +20 -2
  119. package/packages/jam/state/in-memory-state.d.ts.map +1 -1
  120. package/packages/jam/state/in-memory-state.js +2 -3
  121. package/packages/jam/state/privileged-services.d.ts +1 -1
  122. package/packages/jam/state/privileged-services.d.ts.map +1 -1
  123. package/packages/jam/state/privileged-services.js +1 -6
  124. package/packages/jam/state/service.d.ts +1 -1
  125. package/packages/jam/state/service.d.ts.map +1 -1
  126. package/packages/jam/state/statistics.d.ts +0 -8
  127. package/packages/jam/state/statistics.d.ts.map +1 -1
  128. package/packages/jam/state/statistics.js +14 -44
  129. package/packages/jam/state/statistics.test.js +1 -8
  130. package/packages/jam/state/test.utils.d.ts +1 -1
  131. package/packages/jam/state/test.utils.d.ts.map +1 -1
  132. package/packages/jam/state/test.utils.js +6 -25
  133. package/packages/jam/state-json/accounts.d.ts +10 -0
  134. package/packages/jam/state-json/accounts.d.ts.map +1 -1
  135. package/packages/jam/state-json/accounts.js +47 -19
  136. package/packages/jam/state-json/dump.d.ts.map +1 -1
  137. package/packages/jam/state-json/dump.js +5 -9
  138. package/packages/jam/state-json/dump.test.js +2 -10
  139. package/packages/jam/state-json/statistics.d.ts +1 -1
  140. package/packages/jam/state-json/statistics.d.ts.map +1 -1
  141. package/packages/jam/state-json/statistics.js +1 -13
  142. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +0 -2
  143. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts.map +1 -1
  144. package/packages/jam/state-merkleization/serialize.d.ts +4 -4
  145. package/packages/jam/state-merkleization/serialize.d.ts.map +1 -1
  146. package/packages/jam/state-merkleization/serialize.js +5 -8
  147. package/packages/jam/state-merkleization/serialized-state-view.d.ts.map +1 -1
  148. package/packages/jam/state-merkleization/state-entries.test.js +1 -7
  149. package/packages/jam/state-vectors/index.d.ts +377 -5
  150. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  151. package/packages/jam/state-vectors/index.js +3 -3
  152. package/packages/jam/transition/accumulate/accumulate-data.d.ts.map +1 -1
  153. package/packages/jam/transition/accumulate/accumulate-data.js +1 -2
  154. package/packages/jam/transition/accumulate/accumulate-queue.test.js +2 -2
  155. package/packages/jam/transition/accumulate/accumulate-state.d.ts +1 -2
  156. package/packages/jam/transition/accumulate/accumulate-state.d.ts.map +1 -1
  157. package/packages/jam/transition/accumulate/accumulate-utils.d.ts.map +1 -1
  158. package/packages/jam/transition/accumulate/accumulate-utils.js +2 -6
  159. package/packages/jam/transition/accumulate/accumulate-utils.test.js +4 -6
  160. package/packages/jam/transition/accumulate/accumulate.d.ts.map +1 -1
  161. package/packages/jam/transition/accumulate/accumulate.js +19 -33
  162. package/packages/jam/transition/accumulate/accumulate.test.js +2 -2
  163. package/packages/jam/transition/accumulate/accumulation-result-merge-utils.d.ts.map +1 -1
  164. package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +1 -2
  165. package/packages/jam/transition/accumulate/accumulation-result-merge-utils.test.js +1 -2
  166. package/packages/jam/transition/accumulate/index.d.ts +0 -1
  167. package/packages/jam/transition/accumulate/index.d.ts.map +1 -1
  168. package/packages/jam/transition/accumulate/index.js +0 -1
  169. package/packages/jam/transition/chain-stf.d.ts +3 -5
  170. package/packages/jam/transition/chain-stf.d.ts.map +1 -1
  171. package/packages/jam/transition/chain-stf.js +5 -29
  172. package/packages/jam/transition/disputes/disputes.test.data2.js +2 -2
  173. package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
  174. package/packages/jam/transition/externalities/accumulate-externalities.js +22 -49
  175. package/packages/jam/transition/externalities/accumulate-externalities.test.js +8 -72
  176. package/packages/jam/transition/externalities/fetch-externalities.d.ts +8 -21
  177. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  178. package/packages/jam/transition/externalities/fetch-externalities.js +5 -53
  179. package/packages/jam/transition/externalities/fetch-externalities.test.js +201 -114
  180. package/packages/jam/transition/hasher.test.js +2 -2
  181. package/packages/jam/transition/reports/error.d.ts +3 -1
  182. package/packages/jam/transition/reports/error.d.ts.map +1 -1
  183. package/packages/jam/transition/reports/error.js +2 -0
  184. package/packages/jam/transition/reports/test.utils.d.ts.map +1 -1
  185. package/packages/jam/transition/reports/test.utils.js +2 -2
  186. package/packages/jam/transition/reports/verify-basic.d.ts.map +1 -1
  187. package/packages/jam/transition/reports/verify-basic.js +10 -0
  188. package/packages/jam/transition/reports/verify-basic.test.js +29 -0
  189. package/packages/jam/transition/statistics.d.ts +0 -7
  190. package/packages/jam/transition/statistics.d.ts.map +1 -1
  191. package/packages/jam/transition/statistics.js +2 -11
  192. package/packages/jam/transition/statistics.test.js +0 -40
  193. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  194. package/packages/workers/block-authorship/main.js +23 -4
  195. package/packages/workers/block-authorship/package.json +1 -1
  196. package/packages/workers/block-authorship/protocol.d.ts +3 -1
  197. package/packages/workers/block-authorship/protocol.d.ts.map +1 -1
  198. package/packages/workers/block-authorship/protocol.js +6 -3
  199. package/packages/workers/importer/importer.d.ts.map +1 -1
  200. package/packages/workers/importer/importer.js +0 -1
  201. package/packages/workers/importer/package.json +1 -1
  202. package/packages/jam/transition/accumulate/deferred-transfers.d.ts +0 -36
  203. package/packages/jam/transition/accumulate/deferred-transfers.d.ts.map +0 -1
  204. package/packages/jam/transition/accumulate/deferred-transfers.js +0 -95
  205. package/packages/jam/transition/accumulate/pvm-executor.d.ts.map +0 -1
@@ -93,7 +93,6 @@ describe("Statistics", () => {
93
93
  incomingReports: [],
94
94
  availableReports: [],
95
95
  accumulationStatistics: new Map(),
96
- transferStatistics: new Map(),
97
96
  currentValidatorData,
98
97
  reporters,
99
98
  });
@@ -116,7 +115,6 @@ describe("Statistics", () => {
116
115
  incomingReports: [],
117
116
  availableReports: [],
118
117
  accumulationStatistics: new Map(),
119
- transferStatistics: new Map(),
120
118
  currentValidatorData,
121
119
  reporters,
122
120
  });
@@ -137,7 +135,6 @@ describe("Statistics", () => {
137
135
  incomingReports: [],
138
136
  availableReports: [],
139
137
  accumulationStatistics: new Map(),
140
- transferStatistics: new Map(),
141
138
  currentValidatorData,
142
139
  reporters,
143
140
  });
@@ -217,7 +214,6 @@ describe("Statistics", () => {
217
214
  incomingReports: [],
218
215
  availableReports: [],
219
216
  accumulationStatistics: new Map(),
220
- transferStatistics: new Map(),
221
217
  currentValidatorData,
222
218
  reporters,
223
219
  });
@@ -240,7 +236,6 @@ describe("Statistics", () => {
240
236
  incomingReports: [],
241
237
  availableReports: [],
242
238
  accumulationStatistics: new Map(),
243
- transferStatistics: new Map(),
244
239
  currentValidatorData,
245
240
  reporters,
246
241
  });
@@ -264,7 +259,6 @@ describe("Statistics", () => {
264
259
  incomingReports: [],
265
260
  availableReports: [],
266
261
  accumulationStatistics: new Map(),
267
- transferStatistics: new Map(),
268
262
  currentValidatorData,
269
263
  reporters,
270
264
  });
@@ -292,7 +286,6 @@ describe("Statistics", () => {
292
286
  incomingReports: [],
293
287
  availableReports: [],
294
288
  accumulationStatistics: new Map(),
295
- transferStatistics: new Map(),
296
289
  currentValidatorData,
297
290
  reporters,
298
291
  });
@@ -330,7 +323,6 @@ describe("Statistics", () => {
330
323
  incomingReports: [],
331
324
  availableReports: [],
332
325
  accumulationStatistics: new Map(),
333
- transferStatistics: new Map(),
334
326
  currentValidatorData,
335
327
  reporters,
336
328
  });
@@ -355,7 +347,6 @@ describe("Statistics", () => {
355
347
  incomingReports: [],
356
348
  availableReports: [],
357
349
  accumulationStatistics: new Map(),
358
- transferStatistics: new Map(),
359
350
  currentValidatorData,
360
351
  reporters,
361
352
  });
@@ -380,7 +371,6 @@ describe("Statistics", () => {
380
371
  incomingReports,
381
372
  availableReports: [],
382
373
  accumulationStatistics: new Map(),
383
- transferStatistics: new Map(),
384
374
  currentValidatorData,
385
375
  reporters,
386
376
  });
@@ -405,7 +395,6 @@ describe("Statistics", () => {
405
395
  incomingReports: [],
406
396
  availableReports: [],
407
397
  accumulationStatistics: new Map(),
408
- transferStatistics: new Map(),
409
398
  currentValidatorData,
410
399
  reporters,
411
400
  });
@@ -430,7 +419,6 @@ describe("Statistics", () => {
430
419
  incomingReports: asKnownSize([]),
431
420
  availableReports,
432
421
  accumulationStatistics: new Map(),
433
- transferStatistics: new Map(),
434
422
  currentValidatorData,
435
423
  reporters,
436
424
  });
@@ -460,7 +448,6 @@ describe("Statistics", () => {
460
448
  incomingReports: [],
461
449
  availableReports: [],
462
450
  accumulationStatistics: new Map(),
463
- transferStatistics: new Map(),
464
451
  currentValidatorData,
465
452
  reporters,
466
453
  });
@@ -486,33 +473,6 @@ describe("Statistics", () => {
486
473
  incomingReports: [],
487
474
  availableReports: [],
488
475
  accumulationStatistics,
489
- transferStatistics: new Map(),
490
- currentValidatorData,
491
- reporters,
492
- });
493
- const state = copyAndUpdateState(statistics.state, update);
494
- assert.deepEqual(state.statistics.services.get(serviceIndex), expectedStatistics);
495
- });
496
- it("should update on transfer score of service statistics based on on transfer statistics", () => {
497
- const { statistics, currentSlot, validatorIndex, serviceIndex, serviceStatistics, currentValidatorData, reporters, } = prepareData({
498
- previousSlot: 0,
499
- currentSlot: 1,
500
- });
501
- const transferStatistics = new Map([[tryAsServiceId(0), countGasUsed(3, 7n)]]);
502
- const expectedStatistics = {
503
- ...serviceStatistics.get(serviceIndex),
504
- onTransfersCount: 3,
505
- onTransfersGasUsed: 7n,
506
- };
507
- assert.deepEqual(statistics.state.statistics.services.get(serviceIndex), serviceStatistics.get(serviceIndex));
508
- const update = statistics.transition({
509
- slot: currentSlot,
510
- authorIndex: validatorIndex,
511
- extrinsic: getExtrinsic(),
512
- incomingReports: [],
513
- availableReports: [],
514
- accumulationStatistics: new Map(),
515
- transferStatistics,
516
476
  currentValidatorData,
517
477
  reporters,
518
478
  });
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/main.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAI9E,KAAK,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAkBlD,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,iBAyIlE"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/main.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAI9E,KAAK,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAkBlD,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,iBAgKlE"}
@@ -86,6 +86,8 @@ export async function main(config, comms) {
86
86
  }
87
87
  return Result.ok(state.sealingKeySeries);
88
88
  }
89
+ const isFastForward = config.workerParams.isFastForward;
90
+ let lastGeneratedSlot = startTimeSlot;
89
91
  while (!isFinished) {
90
92
  const hash = blocks.getBestHeaderHash();
91
93
  const state = states.getState(hash);
@@ -93,10 +95,20 @@ export async function main(config, comms) {
93
95
  if (state === null) {
94
96
  continue;
95
97
  }
96
- const time = getTime();
97
- /** Assuming `slotDuration` is 6 sec it is safe till year 2786. If `slotDuration` is 1 sec then it is safe till 2106 */
98
- const timeSlot = tryAsTimeSlot(Number(time / 1000n / BigInt(chainSpec.slotDuration)));
99
98
  const lastTimeSlot = state.timeslot;
99
+ /**
100
+ * In fastForward mode, use simulated time (next slot after current state).
101
+ * In normal mode, use wall clock time.
102
+ * Assuming `slotDuration` is 6 sec it is safe till year 2786.
103
+ * If `slotDuration` is 1 sec then it is safe till 2106.
104
+ */
105
+ const timeSlot = isFastForward === true
106
+ ? tryAsTimeSlot(lastTimeSlot + 1)
107
+ : tryAsTimeSlot(Number(getTime() / 1000n / BigInt(chainSpec.slotDuration)));
108
+ // In fastForward mode, skip if we already generated for this slot (waiting for import)
109
+ if (isFastForward === true && timeSlot <= lastGeneratedSlot) {
110
+ continue;
111
+ }
100
112
  const isNewEpoch = isEpochChanged(lastTimeSlot, timeSlot);
101
113
  const selingKeySeriesResult = await getSealingKeySeries(isNewEpoch, timeSlot, state);
102
114
  if (selingKeySeriesResult.isError) {
@@ -113,10 +125,17 @@ export async function main(config, comms) {
113
125
  const sealPayload = getSealPayload(selingKeySeriesResult.ok, entropy);
114
126
  const newBlock = await generator.nextBlockView(validatorIndex, key.bandersnatchSecret, sealPayload, timeSlot);
115
127
  counter += 1;
128
+ lastGeneratedSlot = timeSlot;
116
129
  logger.trace `Sending block ${counter}`;
117
130
  await comms.sendBlock(newBlock);
118
131
  }
119
- await setTimeout(chainSpec.slotDuration * 1000);
132
+ else if (isFastForward === true) {
133
+ // In fast-forward mode, if this slot is not ours, wait briefly for other validators to produce blocks
134
+ await setTimeout(10);
135
+ }
136
+ if (isFastForward === false) {
137
+ await setTimeout(chainSpec.slotDuration * 1000);
138
+ }
120
139
  }
121
140
  logger.info `🎁 Block Authorship finished. Closing channel.`;
122
141
  await db.close();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/block-authorship",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "A test block generator simulating blocks received over the network.",
5
5
  "main": "index.ts",
6
6
  "dependencies": {
@@ -275,13 +275,15 @@ export declare class ValidatorSecrets {
275
275
  }
276
276
  export declare class BlockAuthorshipConfig {
277
277
  readonly keys: ValidatorSecrets[];
278
+ readonly isFastForward: boolean;
278
279
  static Codec: import("@typeberry/codec").Descriptor<BlockAuthorshipConfig, import("@typeberry/codec").ViewOf<BlockAuthorshipConfig, {
279
280
  keys: import("@typeberry/codec").Descriptor<ValidatorSecrets[], import("@typeberry/codec").SequenceView<ValidatorSecrets, import("@typeberry/codec").ViewOf<ValidatorSecrets, {
280
281
  bandersnatch: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"BandersnatchSecretSeed">, import("@typeberry/bytes").Bytes<32>>;
281
282
  ed25519: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"Ed25519SecretSeed">, import("@typeberry/bytes").Bytes<32>>;
282
283
  }>>>;
284
+ isFastForward: import("@typeberry/codec").Descriptor<boolean, boolean>;
283
285
  }>>;
284
- static create({ keys }: CodecRecord<BlockAuthorshipConfig>): BlockAuthorshipConfig;
286
+ static create({ keys, isFastForward }: CodecRecord<BlockAuthorshipConfig>): BlockAuthorshipConfig;
285
287
  private constructor();
286
288
  }
287
289
  //# sourceMappingURL=protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,WAAW,EAAS,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,GAAG,EAAkB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAanB,CAAC;AAEH,qBAAa,gBAAgB;aAWT,YAAY,EAAE,sBAAsB;aACpC,OAAO,EAAE,iBAAiB;IAX5C,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,WAAW,CAAC,gBAAgB,CAAC;IAItE,OAAO;CAIR;AAED,qBAAa,qBAAqB;aASI,IAAI,EAAE,gBAAgB,EAAE;IAR5D,MAAM,CAAC,KAAK;;;;;QAET;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,qBAAqB,CAAC;IAI1D,OAAO;CACR"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,WAAW,EAAS,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,GAAG,EAAkB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAanB,CAAC;AAEH,qBAAa,gBAAgB;aAWT,YAAY,EAAE,sBAAsB;aACpC,OAAO,EAAE,iBAAiB;IAX5C,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,WAAW,CAAC,gBAAgB,CAAC;IAItE,OAAO;CAIR;AAED,qBAAa,qBAAqB;aAWd,IAAI,EAAE,gBAAgB,EAAE;aACxB,aAAa,EAAE,OAAO;IAXxC,MAAM,CAAC,KAAK;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,WAAW,CAAC,qBAAqB,CAAC;IAIzE,OAAO;CAIR"}
@@ -33,13 +33,16 @@ export class ValidatorSecrets {
33
33
  }
34
34
  export class BlockAuthorshipConfig {
35
35
  keys;
36
+ isFastForward;
36
37
  static Codec = codec.Class(BlockAuthorshipConfig, {
37
38
  keys: codec.sequenceVarLen(ValidatorSecrets.Codec),
39
+ isFastForward: codec.bool,
38
40
  });
39
- static create({ keys }) {
40
- return new BlockAuthorshipConfig(keys);
41
+ static create({ keys, isFastForward }) {
42
+ return new BlockAuthorshipConfig(keys, isFastForward);
41
43
  }
42
- constructor(keys) {
44
+ constructor(keys, isFastForward) {
43
45
  this.keys = keys;
46
+ this.isFastForward = isFastForward;
44
47
  }
45
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/importer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AACvH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAiB,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAkC,MAAM,EAAkB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG5G,oBAAY,iBAAiB;IAC3B,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,MAAM,IAAI;CACX;AAED,MAAM,MAAM,aAAa,GACrB,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAC3D,WAAW,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAC5C,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAO5D,MAAM,MAAM,eAAe,GAAG;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,qBAAa,QAAQ;IAajB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAG9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;gBAGjE,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,UAAU,EACE,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EACzC,OAAO,GAAE,eAAoB;IAkBhD,6DAA6D;IAChD,mBAAmB;IASnB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAQzF,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;YAwB9F,mBAAmB;IAkFjC,oBAAoB;IAMpB,gBAAgB;IAIhB,eAAe,CAAC,UAAU,EAAE,UAAU;IAKhC,KAAK;CAIZ"}
1
+ {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/importer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AACvH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAiB,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAkC,MAAM,EAAkB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG5G,oBAAY,iBAAiB;IAC3B,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,MAAM,IAAI;CACX;AAED,MAAM,MAAM,aAAa,GACrB,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAC3D,WAAW,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAC5C,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAO5D,MAAM,MAAM,eAAe,GAAG;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,qBAAa,QAAQ;IAajB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAG9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;gBAGjE,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,UAAU,EACE,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EACzC,OAAO,GAAE,eAAoB;IAkBhD,6DAA6D;IAChD,mBAAmB;IAQnB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAQzF,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;YAwB9F,mBAAmB;IAkFjC,oBAAoB;IAMpB,gBAAgB;IAIhB,eAAe,CAAC,UAAU,EAAE,UAAU;IAKhC,KAAK;CAIZ"}
@@ -52,7 +52,6 @@ export class Importer {
52
52
  this.logger.error `Unable to prepare for next epoch: ${e}`;
53
53
  }
54
54
  }
55
- // TODO [ToDr] import block and get state root
56
55
  async importBlockWithStateRoot(block) {
57
56
  const res = await this.importBlock(block);
58
57
  if (res.isOk) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/importer",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "A JAM block importer queue.",
5
5
  "main": "index.ts",
6
6
  "dependencies": {
@@ -1,36 +0,0 @@
1
- import { type EntropyHash, type ServiceId, type TimeSlot } from "#@typeberry/block";
2
- import type { ChainSpec, PvmBackend } from "#@typeberry/config";
3
- import type { Blake2b } from "#@typeberry/hash";
4
- import type { PendingTransfer } from "#@typeberry/jam-host-calls/externalities/pending-transfer.js";
5
- import { type ServicesUpdate, type State } from "#@typeberry/state";
6
- import { Result } from "#@typeberry/utils";
7
- import type { CountAndGasUsed } from "../statistics.js";
8
- type DeferredTransfersInput = {
9
- pendingTransfers: PendingTransfer[];
10
- timeslot: TimeSlot;
11
- servicesUpdate: ServicesUpdate;
12
- /** eta0' (after Safrole STF) - it is not eta0 from state! */
13
- entropy: EntropyHash;
14
- };
15
- export type DeferredTransfersState = Pick<State, "timeslot" | "getService" | "privilegedServices">;
16
- export type DeferredTransfersResult = {
17
- servicesUpdate: ServicesUpdate;
18
- transferStatistics: Map<ServiceId, CountAndGasUsed>;
19
- };
20
- export declare enum DeferredTransfersErrorCode {
21
- ServiceBalanceOverflow = 1,
22
- ServiceInfoNotExist = 2
23
- }
24
- /**
25
- * https://graypaper.fluffylabs.dev/#/7e6ff6a/18df0118df01?v=0.6.7
26
- */
27
- export declare class DeferredTransfers {
28
- readonly chainSpec: ChainSpec;
29
- readonly blake2b: Blake2b;
30
- private readonly state;
31
- private readonly pvm;
32
- constructor(chainSpec: ChainSpec, blake2b: Blake2b, state: DeferredTransfersState, pvm: PvmBackend);
33
- transition({ pendingTransfers, timeslot, servicesUpdate: inputServicesUpdate, entropy, }: DeferredTransfersInput): Promise<Result<DeferredTransfersResult, DeferredTransfersErrorCode>>;
34
- }
35
- export {};
36
- //# sourceMappingURL=deferred-transfers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deferred-transfers.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/accumulate/deferred-transfers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAmB,MAAM,kBAAkB,CAAC;AAGpG,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAQnG,OAAO,EAAsB,KAAK,cAAc,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIxD,KAAK,sBAAsB,GAAG;IAC5B,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,6DAA6D;IAC7D,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,oBAAoB,CAAC,CAAC;AAEnG,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;CACrD,CAAC;AAQF,oBAAY,0BAA0B;IACpC,sBAAsB,IAAI;IAC1B,mBAAmB,IAAI;CACxB;AAGD;;GAEG;AACH,qBAAa,iBAAiB;aAEV,SAAS,EAAE,SAAS;aACpB,OAAO,EAAE,OAAO;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAHJ,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EACf,KAAK,EAAE,sBAAsB,EAC7B,GAAG,EAAE,UAAU;IAG5B,UAAU,CAAC,EACf,gBAAgB,EAChB,QAAQ,EACR,cAAc,EAAE,mBAAmB,EACnC,OAAO,GACR,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,CAAC;CAuFjG"}
@@ -1,95 +0,0 @@
1
- import { tryAsServiceGas } from "#@typeberry/block";
2
- import { W_C } from "#@typeberry/block/gp-constants.js";
3
- import { codec, Encoder } from "#@typeberry/codec";
4
- import { AccumulationStateUpdate, PartiallyUpdatedState, } from "#@typeberry/jam-host-calls/externalities/state-update.js";
5
- import { Logger } from "#@typeberry/logger";
6
- import { sumU64, tryAsU32 } from "#@typeberry/numbers";
7
- import { tryAsGas } from "#@typeberry/pvm-interface";
8
- import { ServiceAccountInfo } from "#@typeberry/state";
9
- import { Result } from "#@typeberry/utils";
10
- import { AccumulateExternalities } from "../externalities/accumulate-externalities.js";
11
- import { FetchExternalities } from "../externalities/fetch-externalities.js";
12
- import { uniquePreserveOrder } from "./accumulate-utils.js";
13
- import { PvmExecutor } from "./pvm-executor.js";
14
- const ARGS_CODEC = codec.object({
15
- timeslot: codec.varU32.asOpaque(),
16
- serviceId: codec.varU32.asOpaque(),
17
- transfersLength: codec.varU32,
18
- });
19
- export var DeferredTransfersErrorCode;
20
- (function (DeferredTransfersErrorCode) {
21
- DeferredTransfersErrorCode[DeferredTransfersErrorCode["ServiceBalanceOverflow"] = 1] = "ServiceBalanceOverflow";
22
- DeferredTransfersErrorCode[DeferredTransfersErrorCode["ServiceInfoNotExist"] = 2] = "ServiceInfoNotExist";
23
- })(DeferredTransfersErrorCode || (DeferredTransfersErrorCode = {}));
24
- const logger = Logger.new(import.meta.filename, "deferred-transfers");
25
- /**
26
- * https://graypaper.fluffylabs.dev/#/7e6ff6a/18df0118df01?v=0.6.7
27
- */
28
- export class DeferredTransfers {
29
- chainSpec;
30
- blake2b;
31
- state;
32
- pvm;
33
- constructor(chainSpec, blake2b, state, pvm) {
34
- this.chainSpec = chainSpec;
35
- this.blake2b = blake2b;
36
- this.state = state;
37
- this.pvm = pvm;
38
- }
39
- async transition({ pendingTransfers, timeslot, servicesUpdate: inputServicesUpdate, entropy, }) {
40
- // https://graypaper.fluffylabs.dev/#/7e6ff6a/187a03187a03?v=0.6.7
41
- const transferStatistics = new Map();
42
- const services = uniquePreserveOrder(pendingTransfers.map((x) => x.destination));
43
- let currentStateUpdate = AccumulationStateUpdate.new(inputServicesUpdate);
44
- for (const serviceId of services) {
45
- const partiallyUpdatedState = new PartiallyUpdatedState(this.state, currentStateUpdate);
46
- // https://graypaper.fluffylabs.dev/#/38c4e62/18750318ae03?v=0.7.0
47
- const transfers = pendingTransfers
48
- .filter((pendingTransfer) => pendingTransfer.destination === serviceId)
49
- .toSorted((a, b) => a.source - b.source);
50
- const info = partiallyUpdatedState.getServiceInfo(serviceId);
51
- if (info === null) {
52
- return Result.error(DeferredTransfersErrorCode.ServiceInfoNotExist, () => `Deferred transfers: service info not found for ${serviceId}`);
53
- }
54
- const codeHash = info.codeHash;
55
- const code = partiallyUpdatedState.getPreimage(serviceId, codeHash.asOpaque());
56
- const newBalance = sumU64(info.balance, ...transfers.map((item) => item.amount));
57
- if (newBalance.overflow) {
58
- return Result.error(DeferredTransfersErrorCode.ServiceBalanceOverflow, () => `Deferred transfers: balance overflow for service ${serviceId}`);
59
- }
60
- const newInfo = ServiceAccountInfo.create({ ...info, balance: newBalance.value });
61
- partiallyUpdatedState.updateServiceInfo(serviceId, newInfo);
62
- const partialState = new AccumulateExternalities(this.chainSpec, this.blake2b, partiallyUpdatedState, serviceId, serviceId, timeslot);
63
- const fetchExternalities = FetchExternalities.createForOnTransfer({ entropy, transfers }, this.chainSpec);
64
- let consumedGas = tryAsGas(0);
65
- const hasTransfers = transfers.length > 0;
66
- const isCodeCorrect = code !== null && code.length <= W_C;
67
- if (!hasTransfers || !isCodeCorrect) {
68
- if (code === null) {
69
- logger.trace `Skipping ON_TRANSFER execution for service ${serviceId} because code is null`;
70
- }
71
- else if (!hasTransfers) {
72
- logger.trace `Skipping ON_TRANSFER execution for service ${serviceId} because there are no transfers`;
73
- }
74
- else {
75
- logger.trace `Skipping ON_TRANSFER execution for service ${serviceId} because code is too long`;
76
- }
77
- }
78
- else {
79
- const executor = await PvmExecutor.createOnTransferExecutor(serviceId, code, { partialState, fetchExternalities }, this.pvm);
80
- const args = Encoder.encodeObject(ARGS_CODEC, { timeslot, serviceId, transfersLength: tryAsU32(transfers.length) }, this.chainSpec);
81
- const gas = transfers.reduce((acc, item) => acc + item.gas, 0n);
82
- consumedGas = (await executor.run(args, tryAsGas(gas))).consumedGas;
83
- }
84
- transferStatistics.set(serviceId, { count: tryAsU32(transfers.length), gasUsed: tryAsServiceGas(consumedGas) });
85
- const [updatedState] = partialState.getStateUpdates();
86
- currentStateUpdate = updatedState;
87
- }
88
- return Result.ok({
89
- // NOTE: we return only services, since it's impossible to update
90
- // anything else during `on_transfer` call.
91
- servicesUpdate: currentStateUpdate.services,
92
- transferStatistics,
93
- });
94
- }
95
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"pvm-executor.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/accumulate/pvm-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAc,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0DAA0D,CAAC;AAM7F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAkBpD,KAAK,+BAA+B,GAAG;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAChD,oBAAoB,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CACpH,CAAC;AAEF,KAAK,+BAA+B,GAAG;IACrC,YAAY,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3G,kBAAkB,EAAE,OAAO,CAAC,mBAAmB,CAAC;CACjD,CAAC;AASF;;GAEG;AACH,qBAAa,WAAW;IAKpB,OAAO,CAAC,WAAW;IAEnB,OAAO,CAAC,UAAU;IANpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO;mBAac,cAAc;IAInC,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAsBzC,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAazC;;;;;;OAMG;IACG,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG;;;;;;;;;;;;;IAInC,yEAAyE;WAC5D,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,+BAA+B,EAC9C,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,UAAU;IAOjB,0EAA0E;WAC7D,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,+BAA+B,EAC9C,GAAG,EAAE,UAAU;CAMlB"}