@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.
- package/package.json +8 -4
- package/packages/core/hash/hash.d.ts.map +1 -1
- package/packages/core/hash/hash.js +1 -0
- package/packages/core/networking/certificate.d.ts.map +1 -1
- package/packages/core/networking/certificate.js +1 -0
- package/packages/core/networking/package.json +1 -1
- package/packages/core/networking/setup.d.ts.map +1 -1
- package/packages/core/networking/setup.js +16 -12
- package/packages/core/numbers/index.d.ts +4 -0
- package/packages/core/numbers/index.d.ts.map +1 -1
- package/packages/core/numbers/index.js +4 -4
- package/packages/core/pvm-host-calls/host-calls-executor.d.ts +23 -17
- package/packages/core/pvm-host-calls/host-calls-executor.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/host-calls-executor.js +23 -31
- package/packages/core/pvm-interpreter/ops/math-consts.d.ts +2 -3
- package/packages/core/pvm-interpreter/ops/math-consts.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/math-consts.js +2 -3
- package/packages/core/pvm-interpreter/ops/math-ops.js +3 -3
- package/packages/core/pvm-interpreter/ops/math-utils.js +13 -13
- package/packages/core/pvm-interpreter/ops/math-utils.test.js +17 -16
- package/packages/core/telemetry/package.json +1 -1
- package/packages/core/utils/compatibility.d.ts +0 -1
- package/packages/core/utils/compatibility.d.ts.map +1 -1
- package/packages/core/utils/compatibility.js +1 -2
- package/packages/core/utils/compatibility.test.js +6 -10
- package/packages/extensions/ipc/jamnp/handler.d.ts +5 -4
- package/packages/extensions/ipc/jamnp/handler.d.ts.map +1 -1
- package/packages/extensions/ipc/jamnp/handler.js +59 -34
- package/packages/extensions/ipc/jamnp/stream.d.ts +6 -4
- package/packages/extensions/ipc/jamnp/stream.d.ts.map +1 -1
- package/packages/jam/block/work-item.d.ts +13 -4
- package/packages/jam/block/work-item.d.ts.map +1 -1
- package/packages/jam/block/work-package.d.ts +3 -1
- package/packages/jam/block/work-package.d.ts.map +1 -1
- package/packages/jam/block/work-package.js +6 -2
- package/packages/jam/block/work-result.d.ts +3 -5
- package/packages/jam/block/work-result.d.ts.map +1 -1
- package/packages/jam/block/work-result.js +6 -0
- package/packages/jam/block-json/block.d.ts +125 -0
- package/packages/jam/block-json/block.d.ts.map +1 -1
- package/packages/jam/block-json/block.js +9 -2
- package/packages/jam/block-json/work-result.d.ts.map +1 -1
- package/packages/jam/block-json/work-result.js +6 -6
- package/packages/jam/database-lmdb/states.test.js +2 -3
- package/packages/jam/executor/index.d.ts +4 -0
- package/packages/jam/executor/index.d.ts.map +1 -0
- package/packages/jam/executor/index.js +2 -0
- package/packages/jam/{transition/accumulate → executor}/pvm-executor.d.ts +19 -16
- package/packages/jam/executor/pvm-executor.d.ts.map +1 -0
- package/packages/jam/{transition/accumulate → executor}/pvm-executor.js +46 -3
- package/packages/jam/fuzz-proto/v1/handler.d.ts +1 -1
- package/packages/jam/fuzz-proto/v1/handler.d.ts.map +1 -1
- package/packages/jam/fuzz-proto/v1/handler.js +43 -19
- package/packages/jam/in-core/externalities/refine.d.ts +24 -0
- package/packages/jam/in-core/externalities/refine.d.ts.map +1 -0
- package/packages/jam/in-core/externalities/refine.js +36 -0
- package/packages/jam/in-core/in-core.d.ts +60 -0
- package/packages/jam/in-core/in-core.d.ts.map +1 -0
- package/packages/jam/in-core/in-core.js +294 -0
- package/packages/jam/in-core/in-core.test.d.ts +2 -0
- package/packages/jam/in-core/in-core.test.d.ts.map +1 -0
- package/packages/jam/in-core/in-core.test.js +81 -0
- package/packages/jam/in-core/index.d.ts +2 -0
- package/packages/jam/in-core/index.d.ts.map +1 -0
- package/packages/jam/in-core/index.js +1 -0
- package/packages/jam/jam-host-calls/accumulate/bless.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/bless.js +6 -10
- package/packages/jam/jam-host-calls/accumulate/bless.test.js +32 -73
- package/packages/jam/jam-host-calls/accumulate/new.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/new.js +2 -4
- package/packages/jam/jam-host-calls/accumulate/new.test.js +4 -5
- package/packages/jam/jam-host-calls/general/fetch.d.ts +1 -57
- package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/fetch.js +6 -29
- package/packages/jam/jam-host-calls/general/fetch.test.js +2 -58
- package/packages/jam/jamnp-s/peers.d.ts.map +1 -1
- package/packages/jam/jamnp-s/peers.js +10 -0
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.js +10 -8
- package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-129-state-request.js +11 -9
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +3 -3
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +2 -2
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +5 -5
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.js +2 -2
- package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.js +8 -6
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +3 -3
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.js +2 -2
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.test.js +2 -2
- package/packages/jam/jamnp-s/protocol/stream.d.ts +13 -7
- package/packages/jam/jamnp-s/protocol/stream.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/stream.js +5 -4
- package/packages/jam/jamnp-s/protocol/test-utils.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/test-utils.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/test-utils.js +9 -12
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.js +1 -1
- package/packages/jam/jamnp-s/stream-manager.d.ts.map +1 -1
- package/packages/jam/jamnp-s/stream-manager.js +7 -5
- package/packages/jam/jamnp-s/stream-manager.test.js +8 -5
- package/packages/jam/jamnp-s/tasks/sync.js +1 -1
- package/packages/jam/node/jam-config.d.ts +4 -1
- package/packages/jam/node/jam-config.d.ts.map +1 -1
- package/packages/jam/node/jam-config.js +6 -2
- package/packages/jam/node/main.d.ts.map +1 -1
- package/packages/jam/node/main.js +5 -4
- package/packages/jam/node/package.json +1 -1
- package/packages/jam/rpc-validation/types.d.ts +7 -3
- package/packages/jam/rpc-validation/types.d.ts.map +1 -1
- package/packages/jam/rpc-validation/validation.d.ts +254 -36
- package/packages/jam/rpc-validation/validation.d.ts.map +1 -1
- package/packages/jam/rpc-validation/validation.js +20 -2
- package/packages/jam/state/in-memory-state.d.ts.map +1 -1
- package/packages/jam/state/in-memory-state.js +2 -3
- package/packages/jam/state/privileged-services.d.ts +1 -1
- package/packages/jam/state/privileged-services.d.ts.map +1 -1
- package/packages/jam/state/privileged-services.js +1 -6
- package/packages/jam/state/service.d.ts +1 -1
- package/packages/jam/state/service.d.ts.map +1 -1
- package/packages/jam/state/statistics.d.ts +0 -8
- package/packages/jam/state/statistics.d.ts.map +1 -1
- package/packages/jam/state/statistics.js +14 -44
- package/packages/jam/state/statistics.test.js +1 -8
- package/packages/jam/state/test.utils.d.ts +1 -1
- package/packages/jam/state/test.utils.d.ts.map +1 -1
- package/packages/jam/state/test.utils.js +6 -25
- package/packages/jam/state-json/accounts.d.ts +10 -0
- package/packages/jam/state-json/accounts.d.ts.map +1 -1
- package/packages/jam/state-json/accounts.js +47 -19
- package/packages/jam/state-json/dump.d.ts.map +1 -1
- package/packages/jam/state-json/dump.js +5 -9
- package/packages/jam/state-json/dump.test.js +2 -10
- package/packages/jam/state-json/statistics.d.ts +1 -1
- package/packages/jam/state-json/statistics.d.ts.map +1 -1
- package/packages/jam/state-json/statistics.js +1 -13
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +0 -2
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts.map +1 -1
- package/packages/jam/state-merkleization/serialize.d.ts +4 -4
- package/packages/jam/state-merkleization/serialize.d.ts.map +1 -1
- package/packages/jam/state-merkleization/serialize.js +5 -8
- package/packages/jam/state-merkleization/serialized-state-view.d.ts.map +1 -1
- package/packages/jam/state-merkleization/state-entries.test.js +1 -7
- package/packages/jam/state-vectors/index.d.ts +377 -5
- package/packages/jam/state-vectors/index.d.ts.map +1 -1
- package/packages/jam/state-vectors/index.js +3 -3
- package/packages/jam/transition/accumulate/accumulate-data.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate-data.js +1 -2
- package/packages/jam/transition/accumulate/accumulate-queue.test.js +2 -2
- package/packages/jam/transition/accumulate/accumulate-state.d.ts +1 -2
- package/packages/jam/transition/accumulate/accumulate-state.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate-utils.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate-utils.js +2 -6
- package/packages/jam/transition/accumulate/accumulate-utils.test.js +4 -6
- package/packages/jam/transition/accumulate/accumulate.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate.js +19 -33
- package/packages/jam/transition/accumulate/accumulate.test.js +2 -2
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +1 -2
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.test.js +1 -2
- package/packages/jam/transition/accumulate/index.d.ts +0 -1
- package/packages/jam/transition/accumulate/index.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/index.js +0 -1
- package/packages/jam/transition/chain-stf.d.ts +3 -5
- package/packages/jam/transition/chain-stf.d.ts.map +1 -1
- package/packages/jam/transition/chain-stf.js +5 -29
- package/packages/jam/transition/disputes/disputes.test.data2.js +2 -2
- package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/accumulate-externalities.js +22 -49
- package/packages/jam/transition/externalities/accumulate-externalities.test.js +8 -72
- package/packages/jam/transition/externalities/fetch-externalities.d.ts +8 -21
- package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/fetch-externalities.js +5 -53
- package/packages/jam/transition/externalities/fetch-externalities.test.js +201 -114
- package/packages/jam/transition/hasher.test.js +2 -2
- package/packages/jam/transition/reports/error.d.ts +3 -1
- package/packages/jam/transition/reports/error.d.ts.map +1 -1
- package/packages/jam/transition/reports/error.js +2 -0
- package/packages/jam/transition/reports/test.utils.d.ts.map +1 -1
- package/packages/jam/transition/reports/test.utils.js +2 -2
- package/packages/jam/transition/reports/verify-basic.d.ts.map +1 -1
- package/packages/jam/transition/reports/verify-basic.js +10 -0
- package/packages/jam/transition/reports/verify-basic.test.js +29 -0
- package/packages/jam/transition/statistics.d.ts +0 -7
- package/packages/jam/transition/statistics.d.ts.map +1 -1
- package/packages/jam/transition/statistics.js +2 -11
- package/packages/jam/transition/statistics.test.js +0 -40
- package/packages/workers/block-authorship/main.d.ts.map +1 -1
- package/packages/workers/block-authorship/main.js +23 -4
- package/packages/workers/block-authorship/package.json +1 -1
- package/packages/workers/block-authorship/protocol.d.ts +3 -1
- package/packages/workers/block-authorship/protocol.d.ts.map +1 -1
- package/packages/workers/block-authorship/protocol.js +6 -3
- package/packages/workers/importer/importer.d.ts.map +1 -1
- package/packages/workers/importer/importer.js +0 -1
- package/packages/workers/importer/package.json +1 -1
- package/packages/jam/transition/accumulate/deferred-transfers.d.ts +0 -36
- package/packages/jam/transition/accumulate/deferred-transfers.d.ts.map +0 -1
- package/packages/jam/transition/accumulate/deferred-transfers.js +0 -95
- 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,
|
|
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
|
-
|
|
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();
|
|
@@ -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;
|
|
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;
|
|
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"}
|
|
@@ -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"}
|