@aztec/sequencer-client 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
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/dest/client/index.js +0 -1
- package/dest/client/sequencer-client.js +52 -57
- package/dest/config.js +40 -42
- package/dest/global_variable_builder/global_builder.js +39 -26
- package/dest/global_variable_builder/index.js +0 -1
- package/dest/index.js +0 -1
- package/dest/publisher/config.js +49 -50
- package/dest/publisher/index.js +0 -1
- package/dest/publisher/sequencer-publisher-metrics.js +32 -23
- package/dest/publisher/sequencer-publisher.js +216 -191
- package/dest/sequencer/allowed.js +5 -12
- package/dest/sequencer/config.js +1 -2
- package/dest/sequencer/index.js +0 -1
- package/dest/sequencer/metrics.js +26 -18
- package/dest/sequencer/sequencer.js +648 -607
- package/dest/sequencer/timetable.js +33 -19
- package/dest/sequencer/utils.js +22 -32
- package/dest/slasher/factory.js +5 -4
- package/dest/slasher/index.js +0 -1
- package/dest/slasher/slasher_client.js +107 -110
- package/dest/test/index.js +4 -1
- package/dest/tx_validator/archive_cache.js +7 -7
- package/dest/tx_validator/gas_validator.js +76 -64
- package/dest/tx_validator/nullifier_cache.js +8 -8
- package/dest/tx_validator/phases_validator.js +27 -19
- package/dest/tx_validator/test_utils.js +1 -2
- package/dest/tx_validator/tx_validator_factory.js +5 -5
- package/package.json +23 -22
- package/src/config.ts +1 -1
- package/src/publisher/sequencer-publisher.ts +1 -1
- package/src/sequencer/sequencer.ts +29 -13
- package/dest/client/index.d.ts +0 -2
- package/dest/client/index.d.ts.map +0 -1
- package/dest/client/sequencer-client.d.ts +0 -68
- package/dest/client/sequencer-client.d.ts.map +0 -1
- package/dest/config.d.ts +0 -37
- package/dest/config.d.ts.map +0 -1
- package/dest/global_variable_builder/global_builder.d.ts +0 -29
- package/dest/global_variable_builder/global_builder.d.ts.map +0 -1
- package/dest/global_variable_builder/index.d.ts +0 -2
- package/dest/global_variable_builder/index.d.ts.map +0 -1
- package/dest/index.d.ts +0 -8
- package/dest/index.d.ts.map +0 -1
- package/dest/publisher/config.d.ts +0 -38
- package/dest/publisher/config.d.ts.map +0 -1
- package/dest/publisher/index.d.ts +0 -2
- package/dest/publisher/index.d.ts.map +0 -1
- package/dest/publisher/sequencer-publisher-metrics.d.ts +0 -24
- package/dest/publisher/sequencer-publisher-metrics.d.ts.map +0 -1
- package/dest/publisher/sequencer-publisher.d.ts +0 -163
- package/dest/publisher/sequencer-publisher.d.ts.map +0 -1
- package/dest/sequencer/allowed.d.ts +0 -3
- package/dest/sequencer/allowed.d.ts.map +0 -1
- package/dest/sequencer/config.d.ts +0 -2
- package/dest/sequencer/config.d.ts.map +0 -1
- package/dest/sequencer/index.d.ts +0 -4
- package/dest/sequencer/index.d.ts.map +0 -1
- package/dest/sequencer/metrics.d.ts +0 -24
- package/dest/sequencer/metrics.d.ts.map +0 -1
- package/dest/sequencer/sequencer.d.ts +0 -172
- package/dest/sequencer/sequencer.d.ts.map +0 -1
- package/dest/sequencer/timetable.d.ts +0 -38
- package/dest/sequencer/timetable.d.ts.map +0 -1
- package/dest/sequencer/utils.d.ts +0 -47
- package/dest/sequencer/utils.d.ts.map +0 -1
- package/dest/slasher/factory.d.ts +0 -11
- package/dest/slasher/factory.d.ts.map +0 -1
- package/dest/slasher/index.d.ts +0 -3
- package/dest/slasher/index.d.ts.map +0 -1
- package/dest/slasher/slasher_client.d.ts +0 -127
- package/dest/slasher/slasher_client.d.ts.map +0 -1
- package/dest/test/index.d.ts +0 -17
- package/dest/test/index.d.ts.map +0 -1
- package/dest/tx_validator/archive_cache.d.ts +0 -14
- package/dest/tx_validator/archive_cache.d.ts.map +0 -1
- package/dest/tx_validator/gas_validator.d.ts +0 -12
- package/dest/tx_validator/gas_validator.d.ts.map +0 -1
- package/dest/tx_validator/nullifier_cache.d.ts +0 -16
- package/dest/tx_validator/nullifier_cache.d.ts.map +0 -1
- package/dest/tx_validator/phases_validator.d.ts +0 -11
- package/dest/tx_validator/phases_validator.d.ts.map +0 -1
- package/dest/tx_validator/test_utils.d.ts +0 -21
- package/dest/tx_validator/test_utils.d.ts.map +0 -1
- package/dest/tx_validator/tx_validator_factory.d.ts +0 -16
- package/dest/tx_validator/tx_validator_factory.d.ts.map +0 -1
|
@@ -1,20 +1,31 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/aztec.js';
|
|
2
2
|
import { SequencerState } from './utils.js';
|
|
3
3
|
export class SequencerTimetable {
|
|
4
|
-
|
|
4
|
+
ethereumSlotDuration;
|
|
5
|
+
aztecSlotDuration;
|
|
6
|
+
maxL1TxInclusionTimeIntoSlot;
|
|
7
|
+
enforce;
|
|
8
|
+
metrics;
|
|
9
|
+
log;
|
|
10
|
+
/** How late into the slot can we be to start working */ initialTime;
|
|
11
|
+
/** How long it takes to get ready to start building */ blockPrepareTime;
|
|
12
|
+
/** How long it takes to for proposals and attestations to travel across the p2p layer (one-way) */ attestationPropagationTime;
|
|
13
|
+
/** How much time we spend validating and processing a block after building it, and assembling the proposal to send to attestors */ blockValidationTime;
|
|
14
|
+
/**
|
|
15
|
+
* How long it takes to get a published block into L1. L1 builders typically accept txs up to 4 seconds into their slot,
|
|
16
|
+
* but we'll timeout sooner to give it more time to propagate (remember we also have blobs!). Still, when working in anvil,
|
|
17
|
+
* we can just post in the very last second of the L1 slot and still expect the tx to be accepted.
|
|
18
|
+
*/ l1PublishingTime;
|
|
19
|
+
constructor(ethereumSlotDuration, aztecSlotDuration, maxL1TxInclusionTimeIntoSlot, enforce = true, metrics, log = createLogger('sequencer:timetable')){
|
|
5
20
|
this.ethereumSlotDuration = ethereumSlotDuration;
|
|
6
21
|
this.aztecSlotDuration = aztecSlotDuration;
|
|
7
22
|
this.maxL1TxInclusionTimeIntoSlot = maxL1TxInclusionTimeIntoSlot;
|
|
8
23
|
this.enforce = enforce;
|
|
9
24
|
this.metrics = metrics;
|
|
10
25
|
this.log = log;
|
|
11
|
-
/** How late into the slot can we be to start working */
|
|
12
26
|
this.initialTime = 3;
|
|
13
|
-
/** How long it takes to get ready to start building */
|
|
14
27
|
this.blockPrepareTime = 1;
|
|
15
|
-
/** How long it takes to for proposals and attestations to travel across the p2p layer (one-way) */
|
|
16
28
|
this.attestationPropagationTime = 2;
|
|
17
|
-
/** How much time we spend validating and processing a block after building it, and assembling the proposal to send to attestors */
|
|
18
29
|
this.blockValidationTime = 1;
|
|
19
30
|
this.l1PublishingTime = this.ethereumSlotDuration - this.maxL1TxInclusionTimeIntoSlot;
|
|
20
31
|
}
|
|
@@ -31,7 +42,7 @@ export class SequencerTimetable {
|
|
|
31
42
|
secondsIntoSlot,
|
|
32
43
|
maxAllowed,
|
|
33
44
|
available,
|
|
34
|
-
executionTimeEnd
|
|
45
|
+
executionTimeEnd
|
|
35
46
|
});
|
|
36
47
|
return executionTimeEnd;
|
|
37
48
|
}
|
|
@@ -43,12 +54,12 @@ export class SequencerTimetable {
|
|
|
43
54
|
const validationTimeEnd = this.aztecSlotDuration - this.afterBlockReexecTimeNeeded;
|
|
44
55
|
this.log.debug(`Validator re-execution time deadline is ${validationTimeEnd}`, {
|
|
45
56
|
secondsIntoSlot,
|
|
46
|
-
validationTimeEnd
|
|
57
|
+
validationTimeEnd
|
|
47
58
|
});
|
|
48
59
|
return validationTimeEnd;
|
|
49
60
|
}
|
|
50
61
|
getMaxAllowedTime(state) {
|
|
51
|
-
switch
|
|
62
|
+
switch(state){
|
|
52
63
|
case SequencerState.STOPPED:
|
|
53
64
|
case SequencerState.IDLE:
|
|
54
65
|
case SequencerState.SYNCHRONIZING:
|
|
@@ -62,10 +73,11 @@ export class SequencerTimetable {
|
|
|
62
73
|
return this.aztecSlotDuration - this.l1PublishingTime - 2 * this.attestationPropagationTime;
|
|
63
74
|
case SequencerState.PUBLISHING_BLOCK:
|
|
64
75
|
return this.aztecSlotDuration - this.l1PublishingTime;
|
|
65
|
-
default:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
76
|
+
default:
|
|
77
|
+
{
|
|
78
|
+
const _exhaustiveCheck = state;
|
|
79
|
+
throw new Error(`Unexpected state: ${state}`);
|
|
80
|
+
}
|
|
69
81
|
}
|
|
70
82
|
}
|
|
71
83
|
assertTimeLeft(newState, secondsIntoSlot) {
|
|
@@ -81,16 +93,18 @@ export class SequencerTimetable {
|
|
|
81
93
|
throw new SequencerTooSlowError(newState, maxAllowedTime, secondsIntoSlot);
|
|
82
94
|
}
|
|
83
95
|
this.metrics?.recordStateTransitionBufferMs(Math.floor(bufferSeconds * 1000), newState);
|
|
84
|
-
this.log.trace(`Enough time to transition to ${newState}`, {
|
|
96
|
+
this.log.trace(`Enough time to transition to ${newState}`, {
|
|
97
|
+
maxAllowedTime,
|
|
98
|
+
secondsIntoSlot
|
|
99
|
+
});
|
|
85
100
|
}
|
|
86
101
|
}
|
|
87
102
|
export class SequencerTooSlowError extends Error {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
this.currentTime = currentTime;
|
|
103
|
+
proposedState;
|
|
104
|
+
maxAllowedTime;
|
|
105
|
+
currentTime;
|
|
106
|
+
constructor(proposedState, maxAllowedTime, currentTime){
|
|
107
|
+
super(`Too far into slot for ${proposedState} (time into slot ${currentTime}s greater than ${maxAllowedTime}s allowance)`), this.proposedState = proposedState, this.maxAllowedTime = maxAllowedTime, this.currentTime = currentTime;
|
|
93
108
|
this.name = 'SequencerTooSlowError';
|
|
94
109
|
}
|
|
95
110
|
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci90aW1ldGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFNUMsTUFBTSxPQUFPLGtCQUFrQjtJQW9CN0IsWUFDbUIsb0JBQTRCLEVBQzVCLGlCQUF5QixFQUN6Qiw0QkFBb0MsRUFDcEMsVUFBbUIsSUFBSSxFQUN2QixPQUEwQixFQUMxQixNQUFNLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztRQUx6Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVE7UUFDNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBQ3pCLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBUTtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixRQUFHLEdBQUgsR0FBRyxDQUFzQztRQXpCNUQsd0RBQXdEO1FBQ3hDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRWhDLHVEQUF1RDtRQUN2QyxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFFckMsbUdBQW1HO1FBQ25GLCtCQUEwQixHQUFHLENBQUMsQ0FBQztRQUUvQyxtSUFBbUk7UUFDbkgsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBaUJ0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztJQUN4RixDQUFDO0lBRUQsSUFBWSx5Q0FBeUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDaEcsQ0FBQztJQUVNLDJCQUEyQixDQUFDLGVBQXVCO1FBQ3hE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
|
package/dest/sequencer/utils.js
CHANGED
|
@@ -1,39 +1,31 @@
|
|
|
1
1
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
2
|
-
export var SequencerState
|
|
3
|
-
(function (SequencerState) {
|
|
2
|
+
export var SequencerState = /*#__PURE__*/ function(SequencerState) {
|
|
4
3
|
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
SequencerState["STOPPED"] = "STOPPED";
|
|
4
|
+
* Sequencer is stopped and not processing any txs from the pool.
|
|
5
|
+
*/ SequencerState["STOPPED"] = "STOPPED";
|
|
8
6
|
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
SequencerState["IDLE"] = "IDLE";
|
|
7
|
+
* Sequencer is awaiting the next call to work().
|
|
8
|
+
*/ SequencerState["IDLE"] = "IDLE";
|
|
12
9
|
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
SequencerState["SYNCHRONIZING"] = "SYNCHRONIZING";
|
|
10
|
+
* Synchronizing with the L2 chain.
|
|
11
|
+
*/ SequencerState["SYNCHRONIZING"] = "SYNCHRONIZING";
|
|
16
12
|
/**
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
SequencerState["PROPOSER_CHECK"] = "PROPOSER_CHECK";
|
|
13
|
+
* Checking if we are the proposer for the current slot.
|
|
14
|
+
*/ SequencerState["PROPOSER_CHECK"] = "PROPOSER_CHECK";
|
|
20
15
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
SequencerState["INITIALIZING_PROPOSAL"] = "INITIALIZING_PROPOSAL";
|
|
16
|
+
* Initializing the block proposal. Will move to CREATING_BLOCK if there are valid txs to include, or back to SYNCHRONIZING otherwise.
|
|
17
|
+
*/ SequencerState["INITIALIZING_PROPOSAL"] = "INITIALIZING_PROPOSAL";
|
|
24
18
|
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
SequencerState["CREATING_BLOCK"] = "CREATING_BLOCK";
|
|
19
|
+
* Creating a new L2 block. Includes processing public function calls and running rollup circuits. Will move to PUBLISHING_CONTRACT_DATA.
|
|
20
|
+
*/ SequencerState["CREATING_BLOCK"] = "CREATING_BLOCK";
|
|
28
21
|
/**
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
SequencerState["COLLECTING_ATTESTATIONS"] = "COLLECTING_ATTESTATIONS";
|
|
22
|
+
* Collecting attestations from its peers. Will move to PUBLISHING_BLOCK.
|
|
23
|
+
*/ SequencerState["COLLECTING_ATTESTATIONS"] = "COLLECTING_ATTESTATIONS";
|
|
32
24
|
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
SequencerState
|
|
36
|
-
}
|
|
25
|
+
* Sending the tx to L1 with the L2 block data and awaiting it to be mined. Will move to SYNCHRONIZING.
|
|
26
|
+
*/ SequencerState["PUBLISHING_BLOCK"] = "PUBLISHING_BLOCK";
|
|
27
|
+
return SequencerState;
|
|
28
|
+
}({});
|
|
37
29
|
export function sequencerStateToNumber(state) {
|
|
38
30
|
return Object.values(SequencerState).indexOf(state);
|
|
39
31
|
}
|
|
@@ -43,21 +35,19 @@ export function sequencerStateToNumber(state) {
|
|
|
43
35
|
* The rollup smart contract expects attestations to appear in the order of the committee
|
|
44
36
|
*
|
|
45
37
|
* @todo: perform this logic within the memory attestation store instead?
|
|
46
|
-
*/
|
|
47
|
-
export async function orderAttestations(attestations, orderAddresses) {
|
|
38
|
+
*/ export async function orderAttestations(attestations, orderAddresses) {
|
|
48
39
|
// Create a map of sender addresses to BlockAttestations
|
|
49
40
|
const attestationMap = new Map();
|
|
50
|
-
for (const attestation of attestations)
|
|
41
|
+
for (const attestation of attestations){
|
|
51
42
|
const sender = await attestation.getSender();
|
|
52
43
|
if (sender) {
|
|
53
44
|
attestationMap.set(sender.toString(), attestation);
|
|
54
45
|
}
|
|
55
46
|
}
|
|
56
47
|
// Create the ordered array based on the orderAddresses, else return an empty signature
|
|
57
|
-
const orderedAttestations = orderAddresses.map(address
|
|
48
|
+
const orderedAttestations = orderAddresses.map((address)=>{
|
|
58
49
|
const addressString = address.toString();
|
|
59
50
|
return attestationMap.get(addressString)?.signature || Signature.empty();
|
|
60
51
|
});
|
|
61
52
|
return orderedAttestations;
|
|
62
53
|
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RCxNQUFNLENBQU4sSUFBWSxjQWlDWDtBQWpDRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCxxQ0FBbUIsQ0FBQTtJQUNuQjs7T0FFRztJQUNILCtCQUFhLENBQUE7SUFDYjs7T0FFRztJQUNILGlEQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsbURBQWlDLENBQUE7SUFDakM7O09BRUc7SUFDSCxpRUFBK0MsQ0FBQTtJQUMvQzs7T0FFRztJQUNILG1EQUFpQyxDQUFBO0lBQ2pDOztPQUVHO0lBQ0gscUVBQW1ELENBQUE7SUFDbkQ7O09BRUc7SUFDSCx1REFBcUMsQ0FBQTtBQUN2QyxDQUFDLEVBakNXLGNBQWMsS0FBZCxjQUFjLFFBaUN6QjtBQUlELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxLQUFxQjtJQUMxRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxZQUFnQyxFQUNoQyxjQUE0QjtJQUU1Qix3REFBd0Q7SUFDeEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFFM0QsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFFRCx1RkFBdUY7SUFDdkYsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sbUJBQW1CLENBQUM7QUFDN0IsQ0FBQyJ9
|
package/dest/slasher/factory.js
CHANGED
|
@@ -2,9 +2,10 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
2
2
|
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
3
3
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
4
4
|
import { SlasherClient } from './slasher_client.js';
|
|
5
|
-
export const createSlasherClient = async (_config, l2BlockSource, telemetry = getTelemetryClient(), deps = {})
|
|
6
|
-
const config = {
|
|
7
|
-
|
|
5
|
+
export const createSlasherClient = async (_config, l2BlockSource, telemetry = getTelemetryClient(), deps = {})=>{
|
|
6
|
+
const config = {
|
|
7
|
+
..._config
|
|
8
|
+
};
|
|
9
|
+
const store = deps.store ?? await createStore('slasher', config, createLogger('slasher:lmdb'));
|
|
8
10
|
return new SlasherClient(config, store, l2BlockSource, telemetry);
|
|
9
11
|
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zbGFzaGVyL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQXdCLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3BELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEtBQUssRUFDdEMsT0FBNkUsRUFDN0UsYUFBNEIsRUFDNUIsWUFBNkIsa0JBQWtCLEVBQUUsRUFDakQsT0FBc0MsRUFBRSxFQUN4QyxFQUFFO0lBQ0YsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLFdBQVcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakcsT0FBTyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwRSxDQUFDLENBQUMifQ==
|
package/dest/slasher/index.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
export * from './slasher_client.js';
|
|
2
2
|
export { createSlasherClient } from './factory.js';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2xhc2hlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQyJ9
|
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import { L2BlockStream
|
|
1
|
+
import { L2BlockStream } from '@aztec/circuit-types';
|
|
2
2
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js/constants';
|
|
3
3
|
import { createEthereumChain } from '@aztec/ethereum';
|
|
4
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { SlashFactoryAbi } from '@aztec/l1-artifacts';
|
|
7
7
|
import { WithTracer, getTelemetryClient } from '@aztec/telemetry-client';
|
|
8
|
-
import { createPublicClient, getAddress, getContract, http
|
|
8
|
+
import { createPublicClient, getAddress, getContract, http } from 'viem';
|
|
9
9
|
/**
|
|
10
10
|
* Enum defining the possible states of the Slasher client.
|
|
11
|
-
*/
|
|
12
|
-
export var SlasherClientState;
|
|
13
|
-
(function (SlasherClientState) {
|
|
11
|
+
*/ export var SlasherClientState = /*#__PURE__*/ function(SlasherClientState) {
|
|
14
12
|
SlasherClientState[SlasherClientState["IDLE"] = 0] = "IDLE";
|
|
15
13
|
SlasherClientState[SlasherClientState["SYNCHING"] = 1] = "SYNCHING";
|
|
16
14
|
SlasherClientState[SlasherClientState["RUNNING"] = 2] = "RUNNING";
|
|
17
15
|
SlasherClientState[SlasherClientState["STOPPED"] = 3] = "STOPPED";
|
|
18
|
-
|
|
16
|
+
return SlasherClientState;
|
|
17
|
+
}({});
|
|
19
18
|
/**
|
|
20
19
|
* @notice A Hypomeiones slasher client implementation
|
|
21
20
|
*
|
|
@@ -40,28 +39,31 @@ export var SlasherClientState;
|
|
|
40
39
|
* - Decide how to deal with multiple slashing events in the same round.
|
|
41
40
|
* - This could be that multiple epochs are pruned in the same round, but with the current naive implementation we could end up
|
|
42
41
|
* slashing only the first, because the "lifetime" of the second would have passed after that vote
|
|
43
|
-
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
42
|
+
*/ export class SlasherClient extends WithTracer {
|
|
43
|
+
config;
|
|
44
|
+
store;
|
|
45
|
+
l2BlockSource;
|
|
46
|
+
log;
|
|
47
|
+
currentState;
|
|
48
|
+
syncPromise;
|
|
49
|
+
syncResolve;
|
|
50
|
+
latestBlockNumberAtStart;
|
|
51
|
+
provenBlockNumberAtStart;
|
|
52
|
+
synchedBlockHashes;
|
|
53
|
+
synchedLatestBlockNumber;
|
|
54
|
+
synchedProvenBlockNumber;
|
|
55
|
+
blockStream;
|
|
56
|
+
slashEvents;
|
|
57
|
+
slashFactoryContract;
|
|
58
|
+
// The amount to slash for a prune.
|
|
59
|
+
// Note that we set it to 0, such that no actual slashing will happen, but the event will be fired,
|
|
60
|
+
// showing that the slashing mechanism is working.
|
|
61
|
+
slashingAmount;
|
|
62
|
+
constructor(config, store, l2BlockSource, telemetry = getTelemetryClient(), log = createLogger('slasher')){
|
|
63
|
+
super(telemetry, 'slasher'), this.config = config, this.store = store, this.l2BlockSource = l2BlockSource, this.log = log, this.currentState = 0, this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.slashEvents = [], this.slashFactoryContract = undefined, this.slashingAmount = 0n;
|
|
62
64
|
this.blockStream = new L2BlockStream(l2BlockSource, this, this, createLogger('slasher:block_stream'), {
|
|
63
65
|
batchSize: config.blockRequestBatchSize,
|
|
64
|
-
pollIntervalMS: config.blockCheckIntervalMS
|
|
66
|
+
pollIntervalMS: config.blockCheckIntervalMS
|
|
65
67
|
});
|
|
66
68
|
this.synchedBlockHashes = store.openMap('slasher_block_hashes');
|
|
67
69
|
this.synchedLatestBlockNumber = store.openSingleton('slasher_last_l2_block');
|
|
@@ -71,15 +73,14 @@ export class SlasherClient extends WithTracer {
|
|
|
71
73
|
const publicClient = createPublicClient({
|
|
72
74
|
chain: chain.chainInfo,
|
|
73
75
|
transport: http(chain.rpcUrl),
|
|
74
|
-
pollingInterval: config.viemPollingIntervalMS
|
|
76
|
+
pollingInterval: config.viemPollingIntervalMS
|
|
75
77
|
});
|
|
76
78
|
this.slashFactoryContract = getContract({
|
|
77
79
|
address: getAddress(config.l1Contracts.slashFactoryAddress.toString()),
|
|
78
80
|
abi: SlashFactoryAbi,
|
|
79
|
-
client: publicClient
|
|
81
|
+
client: publicClient
|
|
80
82
|
});
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
+
} else {
|
|
83
84
|
this.log.warn('No slash factory address found, slashing will not be enabled');
|
|
84
85
|
}
|
|
85
86
|
this.log.info(`Slasher client initialized`);
|
|
@@ -91,7 +92,7 @@ export class SlasherClient extends WithTracer {
|
|
|
91
92
|
}
|
|
92
93
|
// As long as the slot is greater than the lifetime, we want to keep deleting the first element
|
|
93
94
|
// since it will not make sense to include anymore.
|
|
94
|
-
while
|
|
95
|
+
while(this.slashEvents.length > 0 && this.slashEvents[0].lifetime < slotNumber){
|
|
95
96
|
this.slashEvents.shift();
|
|
96
97
|
}
|
|
97
98
|
if (this.slashEvents.length == 0) {
|
|
@@ -100,7 +101,7 @@ export class SlasherClient extends WithTracer {
|
|
|
100
101
|
const slashEvent = this.slashEvents[0];
|
|
101
102
|
const [payloadAddress, isDeployed] = await this.slashFactoryContract.read.getAddressAndIsDeployed([
|
|
102
103
|
slashEvent.epoch,
|
|
103
|
-
slashEvent.amount
|
|
104
|
+
slashEvent.amount
|
|
104
105
|
]);
|
|
105
106
|
if (!isDeployed) {
|
|
106
107
|
// The proposal cannot be executed until it is deployed
|
|
@@ -131,58 +132,67 @@ export class SlasherClient extends WithTracer {
|
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
return Promise.resolve({
|
|
134
|
-
latest: {
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
latest: {
|
|
136
|
+
hash: latestBlockHash,
|
|
137
|
+
number: latestBlockNumber
|
|
138
|
+
},
|
|
139
|
+
proven: {
|
|
140
|
+
hash: provenBlockHash,
|
|
141
|
+
number: provenBlockNumber
|
|
142
|
+
},
|
|
143
|
+
finalized: {
|
|
144
|
+
hash: provenBlockHash,
|
|
145
|
+
number: provenBlockNumber
|
|
146
|
+
}
|
|
137
147
|
});
|
|
138
148
|
}
|
|
139
149
|
async handleBlockStreamEvent(event) {
|
|
140
150
|
this.log.debug(`Handling block stream event ${event.type}`);
|
|
141
|
-
switch
|
|
151
|
+
switch(event.type){
|
|
142
152
|
case 'blocks-added':
|
|
143
153
|
await this.handleLatestL2Blocks(event.blocks);
|
|
144
154
|
break;
|
|
145
155
|
case 'chain-finalized':
|
|
146
|
-
// TODO (alexg): I think we can prune the block hashes map here
|
|
147
156
|
break;
|
|
148
|
-
case 'chain-proven':
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
157
|
+
case 'chain-proven':
|
|
158
|
+
{
|
|
159
|
+
const from = await this.getSyncedProvenBlockNum() + 1;
|
|
160
|
+
const limit = event.blockNumber - from + 1;
|
|
161
|
+
await this.handleProvenL2Blocks(await this.l2BlockSource.getBlocks(from, limit));
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
154
164
|
case 'chain-pruned':
|
|
155
165
|
await this.handlePruneL2Blocks(event.blockNumber);
|
|
156
166
|
break;
|
|
157
|
-
default:
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
167
|
+
default:
|
|
168
|
+
{
|
|
169
|
+
const _ = event;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
161
172
|
}
|
|
162
173
|
}
|
|
163
174
|
async start() {
|
|
164
|
-
if (this.currentState ===
|
|
175
|
+
if (this.currentState === 3) {
|
|
165
176
|
throw new Error('Slasher already stopped');
|
|
166
177
|
}
|
|
167
|
-
if (this.currentState !==
|
|
178
|
+
if (this.currentState !== 0) {
|
|
168
179
|
return this.syncPromise;
|
|
169
180
|
}
|
|
170
181
|
// get the current latest block numbers
|
|
171
182
|
this.latestBlockNumberAtStart = await this.l2BlockSource.getBlockNumber();
|
|
172
183
|
this.provenBlockNumberAtStart = await this.l2BlockSource.getProvenBlockNumber();
|
|
173
|
-
const syncedLatestBlock =
|
|
174
|
-
const syncedProvenBlock =
|
|
184
|
+
const syncedLatestBlock = await this.getSyncedLatestBlockNum() + 1;
|
|
185
|
+
const syncedProvenBlock = await this.getSyncedProvenBlockNum() + 1;
|
|
175
186
|
// if there are blocks to be retrieved, go to a synching state
|
|
176
187
|
if (syncedLatestBlock <= this.latestBlockNumberAtStart || syncedProvenBlock <= this.provenBlockNumberAtStart) {
|
|
177
|
-
this.setCurrentState(
|
|
178
|
-
this.syncPromise = new Promise(resolve
|
|
188
|
+
this.setCurrentState(1);
|
|
189
|
+
this.syncPromise = new Promise((resolve)=>{
|
|
179
190
|
this.syncResolve = resolve;
|
|
180
191
|
});
|
|
181
192
|
this.log.verbose(`Starting sync from ${syncedLatestBlock} (last proven ${syncedProvenBlock})`);
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
193
|
+
} else {
|
|
184
194
|
// if no blocks to be retrieved, go straight to running
|
|
185
|
-
this.setCurrentState(
|
|
195
|
+
this.setCurrentState(2);
|
|
186
196
|
this.syncPromise = Promise.resolve();
|
|
187
197
|
this.log.verbose(`Block ${syncedLatestBlock} (proven ${syncedProvenBlock}) already beyond current block`);
|
|
188
198
|
}
|
|
@@ -191,67 +201,59 @@ export class SlasherClient extends WithTracer {
|
|
|
191
201
|
return this.syncPromise;
|
|
192
202
|
}
|
|
193
203
|
/**
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
async stop() {
|
|
204
|
+
* Allows consumers to stop the instance of the slasher client.
|
|
205
|
+
* 'ready' will now return 'false' and the running promise that keeps the client synced is interrupted.
|
|
206
|
+
*/ async stop() {
|
|
198
207
|
this.log.debug('Stopping Slasher client...');
|
|
199
208
|
await this.blockStream.stop();
|
|
200
209
|
this.log.debug('Stopped block downloader');
|
|
201
210
|
await this.store.close();
|
|
202
211
|
this.log.debug('Stopped slasher store');
|
|
203
|
-
this.setCurrentState(
|
|
212
|
+
this.setCurrentState(3);
|
|
204
213
|
this.log.info('Slasher client stopped.');
|
|
205
214
|
}
|
|
206
215
|
/**
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
return this.currentState === SlasherClientState.RUNNING;
|
|
216
|
+
* Public function to check if the slasher client is fully synced and ready to receive txs.
|
|
217
|
+
* @returns True if the slasher client is ready to receive txs.
|
|
218
|
+
*/ isReady() {
|
|
219
|
+
return this.currentState === 2;
|
|
212
220
|
}
|
|
213
221
|
/**
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
return (await this.synchedLatestBlockNumber.getAsync()) ?? INITIAL_L2_BLOCK_NUM - 1;
|
|
222
|
+
* Public function to check the latest block number that the slasher client is synced to.
|
|
223
|
+
* @returns Block number of latest L2 Block we've synced with.
|
|
224
|
+
*/ async getSyncedLatestBlockNum() {
|
|
225
|
+
return await this.synchedLatestBlockNumber.getAsync() ?? INITIAL_L2_BLOCK_NUM - 1;
|
|
219
226
|
}
|
|
220
227
|
/**
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
return (await this.synchedProvenBlockNumber.getAsync()) ?? INITIAL_L2_BLOCK_NUM - 1;
|
|
228
|
+
* Public function to check the latest proven block number that the slasher client is synced to.
|
|
229
|
+
* @returns Block number of latest proven L2 Block we've synced with.
|
|
230
|
+
*/ async getSyncedProvenBlockNum() {
|
|
231
|
+
return await this.synchedProvenBlockNumber.getAsync() ?? INITIAL_L2_BLOCK_NUM - 1;
|
|
226
232
|
}
|
|
227
233
|
/**
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
async getStatus() {
|
|
234
|
+
* Method to check the status of the slasher client.
|
|
235
|
+
* @returns Information about slasher client status: state & syncedToBlockNum.
|
|
236
|
+
*/ async getStatus() {
|
|
232
237
|
const blockNumber = await this.getSyncedLatestBlockNum();
|
|
233
|
-
const blockHash = blockNumber == 0
|
|
234
|
-
? ''
|
|
235
|
-
: await this.l2BlockSource
|
|
236
|
-
.getBlockHeader(blockNumber)
|
|
237
|
-
.then(header => header?.hash())
|
|
238
|
-
.then(hash => hash?.toString());
|
|
238
|
+
const blockHash = blockNumber == 0 ? '' : await this.l2BlockSource.getBlockHeader(blockNumber).then((header)=>header?.hash()).then((hash)=>hash?.toString());
|
|
239
239
|
return Promise.resolve({
|
|
240
240
|
state: this.currentState,
|
|
241
|
-
syncedToL2Block: {
|
|
241
|
+
syncedToL2Block: {
|
|
242
|
+
number: blockNumber,
|
|
243
|
+
hash: blockHash
|
|
244
|
+
}
|
|
242
245
|
});
|
|
243
246
|
}
|
|
244
247
|
/**
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
async handleLatestL2Blocks(blocks) {
|
|
248
|
+
* Handles new blocks
|
|
249
|
+
* @param blocks - A list of blocks that the slasher client needs to store block hashes for
|
|
250
|
+
* @returns Empty promise.
|
|
251
|
+
*/ async handleLatestL2Blocks(blocks) {
|
|
250
252
|
if (!blocks.length) {
|
|
251
253
|
return;
|
|
252
254
|
}
|
|
253
|
-
await this.store.transactionAsync(async ()
|
|
254
|
-
for (const block of blocks)
|
|
255
|
+
await this.store.transactionAsync(async ()=>{
|
|
256
|
+
for (const block of blocks){
|
|
255
257
|
await this.synchedBlockHashes.set(block.number, (await block.hash()).toString());
|
|
256
258
|
}
|
|
257
259
|
const lastBlockNum = blocks[blocks.length - 1].number;
|
|
@@ -260,11 +262,10 @@ export class SlasherClient extends WithTracer {
|
|
|
260
262
|
await this.startServiceIfSynched();
|
|
261
263
|
}
|
|
262
264
|
/**
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
async handleProvenL2Blocks(blocks) {
|
|
265
|
+
* Handles new proven blocks by updating the proven block number
|
|
266
|
+
* @param blocks - A list of proven L2 blocks.
|
|
267
|
+
* @returns Empty promise.
|
|
268
|
+
*/ async handleProvenL2Blocks(blocks) {
|
|
268
269
|
if (!blocks.length) {
|
|
269
270
|
return Promise.resolve();
|
|
270
271
|
}
|
|
@@ -285,32 +286,28 @@ export class SlasherClient extends WithTracer {
|
|
|
285
286
|
this.slashEvents.push({
|
|
286
287
|
epoch: epochNumber,
|
|
287
288
|
amount: this.slashingAmount,
|
|
288
|
-
lifetime
|
|
289
|
+
lifetime
|
|
289
290
|
});
|
|
290
291
|
await this.synchedLatestBlockNumber.set(latestBlock);
|
|
291
292
|
}
|
|
292
293
|
async startServiceIfSynched() {
|
|
293
294
|
const [latestBlock, provenBlock] = await Promise.all([
|
|
294
295
|
this.getSyncedLatestBlockNum(),
|
|
295
|
-
this.getSyncedProvenBlockNum()
|
|
296
|
+
this.getSyncedProvenBlockNum()
|
|
296
297
|
]);
|
|
297
|
-
if (this.currentState ===
|
|
298
|
-
latestBlock >= this.latestBlockNumberAtStart &&
|
|
299
|
-
provenBlock >= this.provenBlockNumberAtStart) {
|
|
298
|
+
if (this.currentState === 1 && latestBlock >= this.latestBlockNumberAtStart && provenBlock >= this.provenBlockNumberAtStart) {
|
|
300
299
|
this.log.debug(`Synched to blocks at start`);
|
|
301
|
-
this.setCurrentState(
|
|
300
|
+
this.setCurrentState(2);
|
|
302
301
|
if (this.syncResolve !== undefined) {
|
|
303
302
|
this.syncResolve();
|
|
304
303
|
}
|
|
305
304
|
}
|
|
306
305
|
}
|
|
307
306
|
/**
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
setCurrentState(newState) {
|
|
307
|
+
* Method to set the value of the current state.
|
|
308
|
+
* @param newState - New state value.
|
|
309
|
+
*/ setCurrentState(newState) {
|
|
312
310
|
this.currentState = newState;
|
|
313
311
|
this.log.debug(`Moved to state ${SlasherClientState[this.currentState]}`);
|
|
314
312
|
}
|
|
315
313
|
}
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhc2hlcl9jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2xhc2hlci9zbGFzaGVyX2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUwsYUFBYSxHQUdkLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUErQyxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBd0IsVUFBVSxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0YsT0FBTyxFQUtMLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsV0FBVyxFQUNYLElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUVkOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUM1QiwyREFBSSxDQUFBO0lBQ0osbUVBQVEsQ0FBQTtJQUNSLGlFQUFPLENBQUE7SUFDUCxpRUFBTyxDQUFBO0FBQ1QsQ0FBQyxFQUxXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFLN0I7QUEyQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsVUFBVTtJQXVCM0MsWUFDVSxNQUEwRCxFQUMxRCxLQUF3QixFQUN4QixhQUE0QixFQUNwQyxZQUE2QixrQkFBa0IsRUFBRSxFQUN6QyxNQUFNLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFFckMsS0FBSyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQU5wQixXQUFNLEdBQU4s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
|
package/dest/test/index.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { SequencerClient } from '../client/sequencer-client.js';
|
|
2
2
|
import { Sequencer } from '../sequencer/sequencer.js';
|
|
3
3
|
class TestSequencer_ extends Sequencer {
|
|
4
|
+
publicProcessorFactory;
|
|
5
|
+
timetable;
|
|
6
|
+
publisher;
|
|
4
7
|
}
|
|
5
8
|
class TestSequencerClient_ extends SequencerClient {
|
|
9
|
+
sequencer;
|
|
6
10
|
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3RELE1BQU0sY0FBZSxTQUFRLFNBQVM7Q0FJckM7QUFJRCxNQUFNLG9CQUFxQixTQUFRLGVBQWU7Q0FFakQifQ==
|