@aztec/sequencer-client 5.0.0-private.20260318 → 5.0.0-rc.1
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/README.md +281 -21
- package/dest/client/sequencer-client.d.ts +8 -15
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +35 -96
- package/dest/config.d.ts +8 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +48 -26
- package/dest/global_variable_builder/fee_predictor.d.ts +37 -0
- package/dest/global_variable_builder/fee_predictor.d.ts.map +1 -0
- package/dest/global_variable_builder/fee_predictor.js +128 -0
- package/dest/global_variable_builder/fee_provider.d.ts +21 -0
- package/dest/global_variable_builder/fee_provider.d.ts.map +1 -0
- package/dest/global_variable_builder/fee_provider.js +67 -0
- package/dest/global_variable_builder/global_builder.d.ts +14 -14
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/global_variable_builder/global_builder.js +16 -51
- package/dest/global_variable_builder/index.d.ts +4 -2
- package/dest/global_variable_builder/index.d.ts.map +1 -1
- package/dest/global_variable_builder/index.js +2 -0
- package/dest/publisher/config.d.ts +15 -3
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +19 -4
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +3 -4
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +1 -1
- package/dest/publisher/sequencer-bundle-simulator.d.ts +96 -0
- package/dest/publisher/sequencer-bundle-simulator.d.ts.map +1 -0
- package/dest/publisher/sequencer-bundle-simulator.js +198 -0
- package/dest/publisher/sequencer-publisher-factory.d.ts +3 -5
- package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-factory.js +2 -3
- package/dest/publisher/sequencer-publisher.d.ts +73 -65
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +317 -532
- package/dest/sequencer/automine/automine_factory.d.ts +56 -0
- package/dest/sequencer/automine/automine_factory.d.ts.map +1 -0
- package/dest/sequencer/automine/automine_factory.js +85 -0
- package/dest/sequencer/automine/automine_sequencer.d.ts +184 -0
- package/dest/sequencer/automine/automine_sequencer.d.ts.map +1 -0
- package/dest/sequencer/automine/automine_sequencer.js +677 -0
- package/dest/sequencer/automine/index.d.ts +3 -0
- package/dest/sequencer/automine/index.d.ts.map +1 -0
- package/dest/sequencer/automine/index.js +2 -0
- package/dest/sequencer/chain_state_overrides.d.ts +61 -0
- package/dest/sequencer/chain_state_overrides.d.ts.map +1 -0
- package/dest/sequencer/chain_state_overrides.js +98 -0
- package/dest/sequencer/checkpoint_proposal_job.d.ts +77 -17
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +768 -209
- package/dest/sequencer/checkpoint_proposal_job_metrics.d.ts +34 -0
- package/dest/sequencer/checkpoint_proposal_job_metrics.d.ts.map +1 -0
- package/dest/sequencer/checkpoint_proposal_job_metrics.js +72 -0
- package/dest/sequencer/checkpoint_voter.d.ts +1 -2
- package/dest/sequencer/checkpoint_voter.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_voter.js +2 -5
- package/dest/sequencer/errors.d.ts +1 -8
- package/dest/sequencer/errors.d.ts.map +1 -1
- package/dest/sequencer/errors.js +0 -9
- package/dest/sequencer/events.d.ts +62 -4
- package/dest/sequencer/events.d.ts.map +1 -1
- package/dest/sequencer/metrics.d.ts +13 -10
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/metrics.js +45 -20
- package/dest/sequencer/sequencer.d.ts +115 -30
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +506 -174
- package/dest/sequencer/types.d.ts +2 -2
- package/dest/sequencer/types.d.ts.map +1 -1
- package/dest/test/index.d.ts +3 -3
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.d.ts +4 -8
- package/dest/test/mock_checkpoint_builder.d.ts.map +1 -1
- package/dest/test/utils.d.ts +15 -1
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +23 -6
- package/package.json +28 -27
- package/src/client/sequencer-client.ts +53 -123
- package/src/config.ts +57 -23
- package/src/global_variable_builder/README.md +44 -0
- package/src/global_variable_builder/fee_predictor.ts +172 -0
- package/src/global_variable_builder/fee_provider.ts +80 -0
- package/src/global_variable_builder/global_builder.ts +25 -63
- package/src/global_variable_builder/index.ts +3 -1
- package/src/publisher/config.ts +40 -6
- package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +3 -1
- package/src/publisher/sequencer-bundle-simulator.ts +254 -0
- package/src/publisher/sequencer-publisher-factory.ts +3 -6
- package/src/publisher/sequencer-publisher.ts +376 -577
- package/src/sequencer/automine/README.md +60 -0
- package/src/sequencer/automine/automine_factory.ts +152 -0
- package/src/sequencer/automine/automine_sequencer.ts +783 -0
- package/src/sequencer/automine/index.ts +6 -0
- package/src/sequencer/chain_state_overrides.ts +169 -0
- package/src/sequencer/checkpoint_proposal_job.ts +917 -241
- package/src/sequencer/checkpoint_proposal_job_metrics.ts +128 -0
- package/src/sequencer/checkpoint_voter.ts +1 -12
- package/src/sequencer/errors.ts +0 -15
- package/src/sequencer/events.ts +65 -4
- package/src/sequencer/metrics.ts +57 -24
- package/src/sequencer/sequencer.ts +604 -195
- package/src/sequencer/types.ts +1 -1
- package/src/test/index.ts +2 -2
- package/src/test/mock_checkpoint_builder.ts +3 -3
- package/src/test/utils.ts +59 -10
- package/dest/sequencer/timetable.d.ts +0 -88
- package/dest/sequencer/timetable.d.ts.map +0 -1
- package/dest/sequencer/timetable.js +0 -222
- package/src/sequencer/README.md +0 -531
- package/src/sequencer/timetable.ts +0 -283
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { Multicall3, buildSimulationOverridesStateOverride } from '@aztec/ethereum/contracts';
|
|
2
|
+
import { MAX_L1_TX_LIMIT } from '@aztec/ethereum/l1-tx-utils';
|
|
3
|
+
import { formatViemError } from '@aztec/ethereum/utils';
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
+
import { getLastL1SlotTimestampForL2Slot } from '@aztec/stdlib/epoch-helpers';
|
|
6
|
+
/**
|
|
7
|
+
* Bundle-level simulator for the aggregate3 payload that `SequencerPublisher` is about to send.
|
|
8
|
+
*
|
|
9
|
+
* Runs `eth_simulateV1` against `Multicall3.aggregate3`, drops entries that revert, and returns
|
|
10
|
+
* a gasLimit for the survivors. When `eth_simulateV1` is unavailable, signals fallback to the
|
|
11
|
+
* caller so it can send the bundle as-is with a conservative gas limit.
|
|
12
|
+
*/ export class SequencerBundleSimulator {
|
|
13
|
+
deps;
|
|
14
|
+
log;
|
|
15
|
+
constructor(deps){
|
|
16
|
+
this.deps = deps;
|
|
17
|
+
this.log = deps.log ?? createLogger('sequencer:publisher:bundle-simulator');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Simulates the given bundle near the end of the target slot and filters out entries
|
|
21
|
+
* that revert.
|
|
22
|
+
*
|
|
23
|
+
* - If all entries pass on the first pass, returns `success` with the gasLimit.
|
|
24
|
+
* - If some entries revert, re-simulates the survivors. If the second pass is clean, returns
|
|
25
|
+
* `success` with the survivors and dropped entries. If the second pass surfaces any revert,
|
|
26
|
+
* returns `aborted` — we refuse to send a bundle whose composition still has internal
|
|
27
|
+
* reverts after one round of filtering.
|
|
28
|
+
* - If eth_simulateV1 is unavailable, returns `fallback`. The caller is expected to send the
|
|
29
|
+
* bundle as-is with a safe gas limit.
|
|
30
|
+
*
|
|
31
|
+
* The simulation `block.timestamp` is the last L1 slot timestamp inside the target L2 slot.
|
|
32
|
+
* This still maps to the target L2 slot for propose's `validateHeader` and EIP-712 signature
|
|
33
|
+
* checks, while avoiding eth_simulateV1 rejecting a child block whose timestamp is not strictly
|
|
34
|
+
* greater than the current L1 head.
|
|
35
|
+
*
|
|
36
|
+
* Known limitation: on networks where L1 is mining behind cadence (missed L1 slots, anvil with
|
|
37
|
+
* overridden timestamps), the actual `block.timestamp` at send time can land in the prior L2
|
|
38
|
+
* slot. In that case `propose` would revert silently inside the multicall. The simulator does
|
|
39
|
+
* not detect this case because it simulates inside the target slot — the prior implementation
|
|
40
|
+
* used `min(predictedNextL1Ts, targetTimestamp)` to surface this failure mode at simulate time.
|
|
41
|
+
*/ async simulate(validRequests, targetSlot) {
|
|
42
|
+
if (validRequests.length === 0) {
|
|
43
|
+
return {
|
|
44
|
+
kind: 'aborted',
|
|
45
|
+
reason: 'empty-bundle',
|
|
46
|
+
droppedRequests: []
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// Pin the publisher we'll use across the whole simulate call so that the publisher's rotation
|
|
50
|
+
// can't change l1TxUtils mid-flight.
|
|
51
|
+
const l1TxUtils = this.deps.getL1TxUtils();
|
|
52
|
+
const proposeRequest = validRequests.find((r)=>r.action === 'propose');
|
|
53
|
+
const simulateTimestamp = getLastL1SlotTimestampForL2Slot(targetSlot, this.deps.epochCache.getL1Constants());
|
|
54
|
+
const firstPassOverrides = await this.buildStateOverrides(!!proposeRequest);
|
|
55
|
+
const firstPass = await this.simulateAndDecode(l1TxUtils, validRequests, simulateTimestamp, firstPassOverrides);
|
|
56
|
+
if (firstPass.kind === 'fallback') {
|
|
57
|
+
this.log.warn('Bundle simulate fallback (eth_simulateV1 unavailable); caller will send bundle as-is', {
|
|
58
|
+
actions: validRequests.map((r)=>r.action)
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
kind: 'fallback',
|
|
62
|
+
requests: validRequests,
|
|
63
|
+
droppedRequests: []
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (firstPass.survivors.length === 0) {
|
|
67
|
+
this.log.warn('All bundle entries dropped in simulation; aborting send', {
|
|
68
|
+
actions: validRequests.map((r)=>r.action)
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
kind: 'aborted',
|
|
72
|
+
reason: 'all-reverted',
|
|
73
|
+
droppedRequests: firstPass.droppedRequests
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (firstPass.droppedRequests.length === 0) {
|
|
77
|
+
return this.buildSuccessResult(l1TxUtils, firstPass.survivors, [], firstPass.gasUsed, proposeRequest);
|
|
78
|
+
}
|
|
79
|
+
this.log.warn('Some bundle entries reverted; re-simulating reduced bundle', {
|
|
80
|
+
droppedActions: firstPass.droppedRequests.map((d)=>d.request.action),
|
|
81
|
+
remainingActions: firstPass.survivors.map((r)=>r.action)
|
|
82
|
+
});
|
|
83
|
+
// Rebuild overrides for the reduced bundle: if propose was dropped, we no longer need the blob-check override
|
|
84
|
+
const proposeSurvived = proposeRequest !== undefined && firstPass.survivors.includes(proposeRequest);
|
|
85
|
+
const secondPassOverrides = proposeSurvived ? firstPassOverrides : await this.buildStateOverrides(false);
|
|
86
|
+
const secondPass = await this.simulateAndDecode(l1TxUtils, firstPass.survivors, simulateTimestamp, secondPassOverrides);
|
|
87
|
+
if (secondPass.kind === 'fallback') {
|
|
88
|
+
this.log.warn('Bundle simulate errored on second pass (eth_simulateV1 unavailable); sending first-pass survivors as-is', {
|
|
89
|
+
actions: firstPass.survivors.map((r)=>r.action),
|
|
90
|
+
droppedActions: firstPass.droppedRequests.map((d)=>d.request.action)
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
kind: 'fallback',
|
|
94
|
+
requests: firstPass.survivors,
|
|
95
|
+
droppedRequests: firstPass.droppedRequests
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// We refuse to chase reverts through repeated trimming: anything other than a clean second pass aborts the whole send
|
|
99
|
+
if (secondPass.droppedRequests.length > 0) {
|
|
100
|
+
this.log.error('Re-simulate surfaced reverts; aborting send', {
|
|
101
|
+
secondPassDroppedActions: secondPass.droppedRequests.map((d)=>d.request.action)
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
kind: 'aborted',
|
|
105
|
+
reason: 'second-pass-reverts',
|
|
106
|
+
droppedRequests: [
|
|
107
|
+
...firstPass.droppedRequests,
|
|
108
|
+
...secondPass.droppedRequests
|
|
109
|
+
]
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return this.buildSuccessResult(l1TxUtils, secondPass.survivors, firstPass.droppedRequests, secondPass.gasUsed, proposeRequest);
|
|
113
|
+
}
|
|
114
|
+
buildSuccessResult(l1TxUtils, survivors, droppedRequests, bundleGasUsed, proposeRequest) {
|
|
115
|
+
const proposeSurvived = proposeRequest !== undefined && survivors.includes(proposeRequest);
|
|
116
|
+
const blobEvaluationGas = proposeSurvived ? proposeRequest?.blobEvaluationGas ?? 0n : 0n;
|
|
117
|
+
const gasLimit = this.computeGasLimit(l1TxUtils, bundleGasUsed, blobEvaluationGas);
|
|
118
|
+
this.log.debug('Bundle simulate complete', {
|
|
119
|
+
survivingRequests: survivors.length,
|
|
120
|
+
bundleGasUsed,
|
|
121
|
+
gasLimit,
|
|
122
|
+
actions: survivors.map((r)=>r.action)
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
kind: 'success',
|
|
126
|
+
requests: survivors,
|
|
127
|
+
gasLimit,
|
|
128
|
+
droppedRequests
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* `gasLimit = bumpGasLimit(ceil(gasUsed * 64 / 63))`, plus blob evaluation gas if a propose
|
|
133
|
+
* survived, capped at the L1 block gas limit.
|
|
134
|
+
*/ computeGasLimit(l1TxUtils, bundleGasUsed, blobEvaluationGas) {
|
|
135
|
+
const gasUsedWithEip150 = (bundleGasUsed * 64n + 62n) / 63n;
|
|
136
|
+
const gasLimit = l1TxUtils.bumpGasLimit(gasUsedWithEip150) + blobEvaluationGas;
|
|
137
|
+
return gasLimit > MAX_L1_TX_LIMIT ? MAX_L1_TX_LIMIT : gasLimit;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* eth_simulateV1 cannot carry blob sidecar data, so disable the rollup's on-chain blob check
|
|
141
|
+
* when a propose is in the bundle.
|
|
142
|
+
*/ buildStateOverrides(hasProposeAction) {
|
|
143
|
+
return buildSimulationOverridesStateOverride(this.deps.rollupContract, hasProposeAction ? {
|
|
144
|
+
disableBlobCheck: true
|
|
145
|
+
} : undefined);
|
|
146
|
+
}
|
|
147
|
+
async simulateAndDecode(l1TxUtils, requests, simulateTimestamp, stateOverrides) {
|
|
148
|
+
let simResult;
|
|
149
|
+
try {
|
|
150
|
+
simResult = await Multicall3.simulateAggregate3(requests.map((r)=>({
|
|
151
|
+
to: r.request.to,
|
|
152
|
+
data: r.request.data,
|
|
153
|
+
abi: r.request.abi
|
|
154
|
+
})), l1TxUtils, {
|
|
155
|
+
blockOverrides: {
|
|
156
|
+
time: simulateTimestamp,
|
|
157
|
+
gasLimit: MAX_L1_TX_LIMIT * 2n
|
|
158
|
+
},
|
|
159
|
+
stateOverrides,
|
|
160
|
+
gas: MAX_L1_TX_LIMIT,
|
|
161
|
+
fallbackGasEstimate: MAX_L1_TX_LIMIT
|
|
162
|
+
});
|
|
163
|
+
} catch (err) {
|
|
164
|
+
this.log.warn('Bundle simulate threw; treating as fallback', {
|
|
165
|
+
err: formatViemError(err),
|
|
166
|
+
actions: requests.map((r)=>r.action)
|
|
167
|
+
});
|
|
168
|
+
return {
|
|
169
|
+
kind: 'fallback'
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
if (simResult.kind === 'fallback') {
|
|
173
|
+
return {
|
|
174
|
+
kind: 'fallback'
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const survivors = [];
|
|
178
|
+
const droppedRequests = [];
|
|
179
|
+
for(let i = 0; i < requests.length; i++){
|
|
180
|
+
const entry = simResult.entries[i];
|
|
181
|
+
if (entry.success) {
|
|
182
|
+
survivors.push(requests[i]);
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
droppedRequests.push({
|
|
186
|
+
request: requests[i],
|
|
187
|
+
revertReason: entry.revertReason,
|
|
188
|
+
returnData: entry.returnData
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
kind: 'decoded',
|
|
193
|
+
survivors,
|
|
194
|
+
droppedRequests,
|
|
195
|
+
gasUsed: simResult.gasUsed
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
@@ -6,7 +6,6 @@ import type { GovernanceProposerContract, RollupContract } from '@aztec/ethereum
|
|
|
6
6
|
import type { L1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
7
7
|
import type { PublisherManager } from '@aztec/ethereum/publisher-manager';
|
|
8
8
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
9
|
-
import type { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
10
9
|
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
11
10
|
import { NodeKeystoreAdapter } from '@aztec/validator-client';
|
|
12
11
|
import type { SequencerClientConfig } from '../config.js';
|
|
@@ -31,7 +30,6 @@ export declare class SequencerPublisherFactory {
|
|
|
31
30
|
epochCache: EpochCache;
|
|
32
31
|
rollupContract: RollupContract;
|
|
33
32
|
governanceProposerContract: GovernanceProposerContract;
|
|
34
|
-
slashFactoryContract: SlashFactoryContract;
|
|
35
33
|
nodeKeyStore: NodeKeystoreAdapter;
|
|
36
34
|
logger?: Logger;
|
|
37
35
|
});
|
|
@@ -46,7 +44,7 @@ export declare class SequencerPublisherFactory {
|
|
|
46
44
|
* @returns A new SequencerPublisher instance.
|
|
47
45
|
*/
|
|
48
46
|
create(validatorAddress?: EthAddress): Promise<AttestorPublisherPair>;
|
|
49
|
-
/**
|
|
50
|
-
|
|
47
|
+
/** Stops all publishers managed by this factory. Used during sequencer shutdown. */
|
|
48
|
+
stopAll(): Promise<void>;
|
|
51
49
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLXB1Ymxpc2hlci1mYWN0b3J5LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGlzaGVyL3NlcXVlbmNlci1wdWJsaXNoZXItZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUYsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFM0YsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFOUQsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUQsT0FBTyxFQUFlLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0UsTUFBTSxNQUFNLHFCQUFxQixHQUFHO0lBQ2xDLGVBQWUsRUFBRSxVQUFVLENBQUM7SUFDNUIsU0FBUyxFQUFFLGtCQUFrQixDQUFDO0NBQy9CLENBQUM7QUFFRixxQkFBYSx5QkFBeUI7SUFXbEMsT0FBTyxDQUFDLGVBQWU7SUFDdkIsT0FBTyxDQUFDLElBQUk7SUFYZCxPQUFPLENBQUMsZ0JBQWdCLENBQTRCO0lBRXBELGdGQUFnRjtJQUNoRixPQUFPLENBQUMsV0FBVyxDQUEyQztJQUU5RCxPQUFPLENBQUMsWUFBWSxDQUFzQjtJQUUxQyxPQUFPLENBQUMsTUFBTSxDQUFTO0lBRXZCLFlBQ1UsZUFBZSxFQUFFLHFCQUFxQixFQUN0QyxJQUFJLEVBQUU7UUFDWixTQUFTLEVBQUUsZUFBZSxDQUFDO1FBQzNCLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztRQUNoQyxZQUFZLEVBQUUsWUFBWSxDQUFDO1FBQzNCLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDdkIsY0FBYyxFQUFFLGNBQWMsQ0FBQztRQUMvQiwwQkFBMEIsRUFBRSwwQkFBMEIsQ0FBQztRQUN2RCxZQUFZLEVBQUUsbUJBQW1CLENBQUM7UUFDbEMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ2pCLEVBS0Y7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxDQUU1RDtJQUVEOzs7O09BSUc7SUFDVSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBbURqRjtJQUVELG9GQUFvRjtJQUN2RSxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUVwQztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-publisher-factory.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"sequencer-publisher-factory.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAe,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE3E,MAAM,MAAM,qBAAqB,GAAG;IAClC,eAAe,EAAE,UAAU,CAAC;IAC5B,SAAS,EAAE,kBAAkB,CAAC;CAC/B,CAAC;AAEF,qBAAa,yBAAyB;IAWlC,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,IAAI;IAXd,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,gFAAgF;IAChF,OAAO,CAAC,WAAW,CAA2C;IAE9D,OAAO,CAAC,YAAY,CAAsB;IAE1C,OAAO,CAAC,MAAM,CAAS;IAEvB,YACU,eAAe,EAAE,qBAAqB,EACtC,IAAI,EAAE;QACZ,SAAS,EAAE,eAAe,CAAC;QAC3B,gBAAgB,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9C,UAAU,EAAE,mBAAmB,CAAC;QAChC,YAAY,EAAE,YAAY,CAAC;QAC3B,UAAU,EAAE,UAAU,CAAC;QACvB,cAAc,EAAE,cAAc,CAAC;QAC/B,0BAA0B,EAAE,0BAA0B,CAAC;QACvD,YAAY,EAAE,mBAAmB,CAAC;QAClC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,EAKF;IAED;;;OAGG;IACI,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAE5D;IAED;;;;OAIG;IACU,MAAM,CAAC,gBAAgB,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAmDjF;IAED,oFAAoF;IACvE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;CACF"}
|
|
@@ -59,7 +59,6 @@ export class SequencerPublisherFactory {
|
|
|
59
59
|
epochCache: this.deps.epochCache,
|
|
60
60
|
governanceProposerContract: this.deps.governanceProposerContract,
|
|
61
61
|
slashingProposerContract,
|
|
62
|
-
slashFactoryContract: this.deps.slashFactoryContract,
|
|
63
62
|
dateProvider: this.deps.dateProvider,
|
|
64
63
|
metrics: this.publisherMetrics,
|
|
65
64
|
lastActions: this.lastActions,
|
|
@@ -70,7 +69,7 @@ export class SequencerPublisherFactory {
|
|
|
70
69
|
publisher
|
|
71
70
|
};
|
|
72
71
|
}
|
|
73
|
-
/**
|
|
74
|
-
this.deps.publisherManager.
|
|
72
|
+
/** Stops all publishers managed by this factory. Used during sequencer shutdown. */ async stopAll() {
|
|
73
|
+
await this.deps.publisherManager.stop();
|
|
75
74
|
}
|
|
76
75
|
}
|
|
@@ -1,41 +1,61 @@
|
|
|
1
1
|
import type { BlobClientInterface } from '@aztec/blob-client/client';
|
|
2
2
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
3
3
|
import type { L1ContractsConfig } from '@aztec/ethereum/config';
|
|
4
|
-
import { type
|
|
4
|
+
import { type GovernanceProposerContract, type RollupContract, type SimulationOverridesPlan, type SlashingProposerContract } from '@aztec/ethereum/contracts';
|
|
5
5
|
import { type L1FeeAnalysisResult, L1FeeAnalyzer } from '@aztec/ethereum/l1-fee-analysis';
|
|
6
6
|
import { type L1BlobInputs, type L1TxConfig, type L1TxRequest, type L1TxUtils, type TransactionStats } from '@aztec/ethereum/l1-tx-utils';
|
|
7
|
-
import { FormattedViemError } from '@aztec/ethereum/utils';
|
|
8
7
|
import { CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
9
8
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
10
9
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
11
10
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
12
11
|
import { type Logger } from '@aztec/foundation/log';
|
|
13
|
-
import { DateProvider } from '@aztec/foundation/timer';
|
|
12
|
+
import { type DateProvider } from '@aztec/foundation/timer';
|
|
14
13
|
import { type ProposerSlashAction } from '@aztec/slasher';
|
|
15
14
|
import { CommitteeAttestationsAndSigners, type ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
16
15
|
import type { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
17
|
-
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
18
16
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
19
17
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
20
18
|
import { type TransactionReceipt, type TypedDataDefinition } from 'viem';
|
|
21
19
|
import type { SequencerPublisherConfig } from './config.js';
|
|
22
20
|
import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
23
|
-
|
|
21
|
+
/** Result of a sendRequests call, returned by both sendRequests() and sendRequestsAt(). */
|
|
22
|
+
export type SendRequestsResult = {
|
|
23
|
+
/** The L1 transaction receipt from the bundled multicall. */
|
|
24
|
+
result: {
|
|
25
|
+
receipt: TransactionReceipt;
|
|
26
|
+
};
|
|
27
|
+
/** Actions that expired (past their deadline) before the request was sent. */
|
|
28
|
+
expiredActions: Action[];
|
|
29
|
+
/** Actions that were included in the sent L1 transaction. */
|
|
30
|
+
sentActions: Action[];
|
|
31
|
+
/** Actions whose L1 simulation succeeded (subset of sentActions). */
|
|
32
|
+
successfulActions: Action[];
|
|
33
|
+
/** Actions whose L1 simulation failed (subset of sentActions). */
|
|
34
|
+
failedActions: Action[];
|
|
35
|
+
};
|
|
36
|
+
export declare const Actions: readonly ["invalidate-by-invalid-attestation", "invalidate-by-insufficient-attestations", "propose", "governance-signal", "vote-offenses", "execute-slash"];
|
|
24
37
|
export type Action = (typeof Actions)[number];
|
|
25
|
-
export declare const compareActions: (a: "
|
|
38
|
+
export declare const compareActions: (a: "execute-slash" | "governance-signal" | "invalidate-by-insufficient-attestations" | "invalidate-by-invalid-attestation" | "propose" | "vote-offenses", b: "execute-slash" | "governance-signal" | "invalidate-by-insufficient-attestations" | "invalidate-by-invalid-attestation" | "propose" | "vote-offenses") => number;
|
|
26
39
|
export type InvalidateCheckpointRequest = {
|
|
27
40
|
request: L1TxRequest;
|
|
28
41
|
reason: 'invalid-attestation' | 'insufficient-attestations';
|
|
29
42
|
gasUsed: bigint;
|
|
30
43
|
checkpointNumber: CheckpointNumber;
|
|
31
44
|
forcePendingCheckpointNumber: CheckpointNumber;
|
|
45
|
+
/** Archive at the rollback target checkpoint (checkpoint N-1). */
|
|
46
|
+
lastArchive: Fr;
|
|
47
|
+
};
|
|
48
|
+
type EnqueueProposeCheckpointOpts = {
|
|
49
|
+
txTimeoutAt?: Date;
|
|
32
50
|
};
|
|
33
|
-
interface RequestWithExpiry {
|
|
51
|
+
export interface RequestWithExpiry {
|
|
34
52
|
action: Action;
|
|
35
53
|
request: L1TxRequest;
|
|
36
54
|
lastValidL2Slot: SlotNumber;
|
|
37
55
|
gasConfig?: Pick<L1TxConfig, 'txTimeoutAt' | 'gasLimit'>;
|
|
38
56
|
blobConfig?: L1BlobInputs;
|
|
57
|
+
/** Gas consumed by validateBlobs; stashed for the bundle simulate at send time. */
|
|
58
|
+
blobEvaluationGas?: bigint;
|
|
39
59
|
checkSuccess: (request: L1TxRequest, result?: {
|
|
40
60
|
receipt: TransactionReceipt;
|
|
41
61
|
stats?: TransactionStats;
|
|
@@ -46,43 +66,45 @@ export declare class SequencerPublisher {
|
|
|
46
66
|
private config;
|
|
47
67
|
private interrupted;
|
|
48
68
|
private metrics;
|
|
69
|
+
private bundleSimulator;
|
|
49
70
|
epochCache: EpochCache;
|
|
50
71
|
private failedTxStore?;
|
|
51
|
-
|
|
52
|
-
|
|
72
|
+
/**
|
|
73
|
+
* ABI used to decode raw revert payloads from dropped bundle entries when the original
|
|
74
|
+
* request did not carry an abi (e.g. the propose request). Merges every contract the
|
|
75
|
+
* publisher can route to so any of their custom errors decode against it.
|
|
76
|
+
*/
|
|
77
|
+
private readonly revertDecoderAbi;
|
|
53
78
|
protected lastActions: Partial<Record<Action, SlotNumber>>;
|
|
54
|
-
private isPayloadEmptyCache;
|
|
55
|
-
private payloadProposedCache;
|
|
56
79
|
protected log: Logger;
|
|
57
80
|
protected ethereumSlotDuration: bigint;
|
|
81
|
+
protected aztecSlotDuration: bigint;
|
|
82
|
+
/** Date provider for wall-clock time. */
|
|
83
|
+
private readonly dateProvider;
|
|
58
84
|
private blobClient;
|
|
59
|
-
/** Address to use for simulations in fisherman mode (actual proposer's address) */
|
|
60
|
-
private proposerAddressForSimulation?;
|
|
61
85
|
/** Optional callback to obtain a replacement publisher when the current one fails to send. */
|
|
62
86
|
private getNextPublisher?;
|
|
63
87
|
/** L1 fee analyzer for fisherman mode */
|
|
64
88
|
private l1FeeAnalyzer?;
|
|
65
89
|
/** Fee asset price oracle for computing price modifiers from Uniswap V4 */
|
|
66
90
|
private feeAssetPriceOracle;
|
|
67
|
-
|
|
68
|
-
|
|
91
|
+
/** Interruptible sleep used by sendRequestsAt to wait until a target timestamp. */
|
|
92
|
+
private readonly interruptibleSleep;
|
|
69
93
|
l1TxUtils: L1TxUtils;
|
|
70
94
|
rollupContract: RollupContract;
|
|
71
95
|
govProposerContract: GovernanceProposerContract;
|
|
72
|
-
slashingProposerContract:
|
|
73
|
-
slashFactoryContract: SlashFactoryContract;
|
|
96
|
+
slashingProposerContract: SlashingProposerContract | undefined;
|
|
74
97
|
readonly tracer: Tracer;
|
|
75
98
|
protected requests: RequestWithExpiry[];
|
|
76
|
-
constructor(config: Pick<SequencerPublisherConfig, 'fishermanMode' | 'l1TxFailedStore'> & Pick<L1ContractsConfig, 'ethereumSlotDuration'> & {
|
|
99
|
+
constructor(config: Pick<SequencerPublisherConfig, 'fishermanMode' | 'l1TxFailedStore'> & Pick<L1ContractsConfig, 'ethereumSlotDuration' | 'aztecSlotDuration'> & {
|
|
77
100
|
l1ChainId: number;
|
|
78
101
|
}, deps: {
|
|
79
102
|
telemetry?: TelemetryClient;
|
|
80
103
|
blobClient: BlobClientInterface;
|
|
81
104
|
l1TxUtils: L1TxUtils;
|
|
82
105
|
rollupContract: RollupContract;
|
|
83
|
-
slashingProposerContract:
|
|
106
|
+
slashingProposerContract: SlashingProposerContract | undefined;
|
|
84
107
|
governanceProposerContract: GovernanceProposerContract;
|
|
85
|
-
slashFactoryContract: SlashFactoryContract;
|
|
86
108
|
epochCache: EpochCache;
|
|
87
109
|
dateProvider: DateProvider;
|
|
88
110
|
metrics: SequencerPublisherMetrics;
|
|
@@ -98,19 +120,18 @@ export declare class SequencerPublisher {
|
|
|
98
120
|
getRollupContract(): RollupContract;
|
|
99
121
|
/**
|
|
100
122
|
* Gets the fee asset price modifier from the oracle.
|
|
101
|
-
*
|
|
123
|
+
*
|
|
124
|
+
* @param predictedParentEthPerFeeAssetE12 - Optional predicted parent eth-per-fee-asset (E12).
|
|
125
|
+
* Pipelined proposers should pass the value from the predicted parent fee header so the
|
|
126
|
+
* modifier matches the parent L1 will use when applying it.
|
|
127
|
+
* @returns The fee asset price modifier in basis points, or 0n if the oracle query fails.
|
|
102
128
|
*/
|
|
103
|
-
getFeeAssetPriceModifier(): Promise<bigint>;
|
|
129
|
+
getFeeAssetPriceModifier(predictedParentEthPerFeeAssetE12?: bigint): Promise<bigint>;
|
|
104
130
|
getSenderAddress(): EthAddress;
|
|
105
131
|
/**
|
|
106
132
|
* Gets the L1 fee analyzer instance (only available in fisherman mode)
|
|
107
133
|
*/
|
|
108
134
|
getL1FeeAnalyzer(): L1FeeAnalyzer | undefined;
|
|
109
|
-
/**
|
|
110
|
-
* Sets the proposer address to use for simulations in fisherman mode.
|
|
111
|
-
* @param proposerAddress - The actual proposer's address to use for balance lookups in simulations
|
|
112
|
-
*/
|
|
113
|
-
setProposerAddressForSimulation(proposerAddress: EthAddress | undefined): void;
|
|
114
135
|
addRequest(request: RequestWithExpiry): void;
|
|
115
136
|
getCurrentL2Slot(): SlotNumber;
|
|
116
137
|
/**
|
|
@@ -127,36 +148,28 @@ export declare class SequencerPublisher {
|
|
|
127
148
|
analyzeL1Fees(l2SlotNumber: SlotNumber, onComplete?: (analysis: L1FeeAnalysisResult) => void): Promise<L1FeeAnalysisResult | undefined>;
|
|
128
149
|
/**
|
|
129
150
|
* Sends all requests that are still valid.
|
|
151
|
+
* @param targetSlot - The target L2 slot for this send. When provided (the production path, via
|
|
152
|
+
* sendRequestsAt), it is threaded into bundleSimulate so the block.timestamp override matches
|
|
153
|
+
* the slot the propose is built for. When omitted, falls back to getCurrentL2Slot() for the
|
|
154
|
+
* AutomineSequencer, which publishes synchronously within the current slot.
|
|
130
155
|
* @returns one of:
|
|
131
156
|
* - A receipt and stats if the tx succeeded
|
|
132
157
|
* - a receipt and errorMsg if it failed on L1
|
|
133
158
|
* - undefined if no valid requests are found OR the tx failed to send.
|
|
134
159
|
*/
|
|
135
|
-
sendRequests(): Promise<
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
errorMsg?: undefined;
|
|
140
|
-
} | {
|
|
141
|
-
stats?: undefined;
|
|
142
|
-
receipt: TransactionReceipt<bigint, number, "reverted" | "success", import("viem").TransactionType>;
|
|
143
|
-
errorMsg: string | undefined;
|
|
144
|
-
};
|
|
145
|
-
expiredActions: ("create-empire-payload" | "empire-slashing-signal" | "execute-empire-payload" | "execute-slash" | "governance-signal" | "invalidate-by-insufficient-attestations" | "invalidate-by-invalid-attestation" | "propose" | "vote-offenses")[];
|
|
146
|
-
sentActions: ("create-empire-payload" | "empire-slashing-signal" | "execute-empire-payload" | "execute-slash" | "governance-signal" | "invalidate-by-insufficient-attestations" | "invalidate-by-invalid-attestation" | "propose" | "vote-offenses")[];
|
|
147
|
-
successfulActions: ("create-empire-payload" | "empire-slashing-signal" | "execute-empire-payload" | "execute-slash" | "governance-signal" | "invalidate-by-insufficient-attestations" | "invalidate-by-invalid-attestation" | "propose" | "vote-offenses")[];
|
|
148
|
-
failedActions: ("create-empire-payload" | "empire-slashing-signal" | "execute-empire-payload" | "execute-slash" | "governance-signal" | "invalidate-by-insufficient-attestations" | "invalidate-by-invalid-attestation" | "propose" | "vote-offenses")[];
|
|
149
|
-
} | undefined>;
|
|
160
|
+
sendRequests(targetSlot?: SlotNumber): Promise<SendRequestsResult | undefined>;
|
|
161
|
+
/** Logs entries dropped by bundle simulation as warnings on the publisher's logger. */
|
|
162
|
+
private logDroppedInSim;
|
|
163
|
+
private backupDroppedInSim;
|
|
150
164
|
private forwardWithPublisherRotation;
|
|
165
|
+
sendRequestsAt(targetSlot: SlotNumber): Promise<SendRequestsResult | undefined>;
|
|
151
166
|
private callbackBundledTransactions;
|
|
152
167
|
/**
|
|
153
|
-
* @notice Will call `
|
|
168
|
+
* @notice Will call `canProposeAt` to make sure that it is possible to propose
|
|
154
169
|
* @param tipArchive - The archive to check
|
|
155
170
|
* @returns The slot and block number if it is possible to propose, undefined otherwise
|
|
156
171
|
*/
|
|
157
|
-
|
|
158
|
-
forcePendingCheckpointNumber?: CheckpointNumber;
|
|
159
|
-
}): Promise<{
|
|
172
|
+
canProposeAt(tipArchive: Fr, msgSender: EthAddress, simulationOverridesPlan?: SimulationOverridesPlan): Promise<{
|
|
160
173
|
slot: SlotNumber;
|
|
161
174
|
checkpointNumber: CheckpointNumber;
|
|
162
175
|
timeOfNextL1Slot: bigint;
|
|
@@ -167,39 +180,33 @@ export declare class SequencerPublisher {
|
|
|
167
180
|
* It will throw if the block header is invalid.
|
|
168
181
|
* @param header - The block header to validate
|
|
169
182
|
*/
|
|
170
|
-
validateBlockHeader(header: CheckpointHeader,
|
|
171
|
-
forcePendingCheckpointNumber: CheckpointNumber | undefined;
|
|
172
|
-
}): Promise<void>;
|
|
183
|
+
validateBlockHeader(header: CheckpointHeader, simulationOverridesPlan?: SimulationOverridesPlan): Promise<void>;
|
|
173
184
|
/**
|
|
174
185
|
* Simulate making a call to invalidate a checkpoint with invalid attestations. Returns undefined if no need to invalidate.
|
|
175
186
|
* @param validationResult - The validation result indicating which checkpoint to invalidate (as returned by the archiver)
|
|
176
187
|
*/
|
|
177
188
|
simulateInvalidateCheckpoint(validationResult: ValidateCheckpointResult): Promise<InvalidateCheckpointRequest | undefined>;
|
|
178
189
|
private buildInvalidateCheckpointRequest;
|
|
179
|
-
/** Simulates `propose` to make sure that the checkpoint is valid for submission */
|
|
180
|
-
validateCheckpointForSubmission(checkpoint: Checkpoint, attestationsAndSigners: CommitteeAttestationsAndSigners, attestationsAndSignersSignature: Signature, options: {
|
|
181
|
-
forcePendingCheckpointNumber?: CheckpointNumber;
|
|
182
|
-
}): Promise<bigint>;
|
|
183
190
|
private enqueueCastSignalHelper;
|
|
184
|
-
private isPayloadEmpty;
|
|
185
191
|
/**
|
|
186
192
|
* Enqueues a governance castSignal transaction to cast a signal for a given slot number.
|
|
187
193
|
* @param slotNumber - The slot number to cast a signal for.
|
|
188
|
-
* @param timestamp - The timestamp of the slot to cast a signal for.
|
|
189
194
|
* @returns True if the signal was successfully enqueued, false otherwise.
|
|
190
195
|
*/
|
|
191
|
-
enqueueGovernanceCastSignal(governancePayload: EthAddress, slotNumber: SlotNumber,
|
|
196
|
+
enqueueGovernanceCastSignal(governancePayload: EthAddress, slotNumber: SlotNumber, signerAddress: EthAddress, signer: (msg: TypedDataDefinition) => Promise<`0x${string}`>): Promise<boolean>;
|
|
192
197
|
/** Enqueues all slashing actions as returned by the slasher client. */
|
|
193
|
-
enqueueSlashingActions(actions: ProposerSlashAction[], slotNumber: SlotNumber,
|
|
194
|
-
/**
|
|
195
|
-
enqueueProposeCheckpoint(checkpoint: Checkpoint, attestationsAndSigners: CommitteeAttestationsAndSigners, attestationsAndSignersSignature: Signature, opts?:
|
|
196
|
-
txTimeoutAt?: Date;
|
|
197
|
-
forcePendingCheckpointNumber?: CheckpointNumber;
|
|
198
|
-
}): Promise<void>;
|
|
198
|
+
enqueueSlashingActions(actions: ProposerSlashAction[], slotNumber: SlotNumber, signerAddress: EthAddress, signer: (msg: TypedDataDefinition) => Promise<`0x${string}`>): Promise<boolean>;
|
|
199
|
+
/** Enqueues a proposal for a checkpoint on L1 */
|
|
200
|
+
enqueueProposeCheckpoint(checkpoint: Checkpoint, attestationsAndSigners: CommitteeAttestationsAndSigners, attestationsAndSignersSignature: Signature, opts?: EnqueueProposeCheckpointOpts): Promise<void>;
|
|
199
201
|
enqueueInvalidateCheckpoint(request: InvalidateCheckpointRequest | undefined, opts?: {
|
|
200
202
|
txTimeoutAt?: Date;
|
|
201
203
|
}): void;
|
|
202
|
-
|
|
204
|
+
/**
|
|
205
|
+
* Dedup-checked enqueue helper for actions that are simulated at bundle-send time rather
|
|
206
|
+
* than at enqueue time. Validates the (action, slot) dedup key, sets `lastActions`, and
|
|
207
|
+
* enqueues without a gasLimit so the bundle simulate sets the only gasLimit that matters.
|
|
208
|
+
*/
|
|
209
|
+
private enqueueRequest;
|
|
203
210
|
/**
|
|
204
211
|
* Calling `interrupt` will cause any in progress call to `publishRollup` to return `false` asap.
|
|
205
212
|
* Be warned, the call may return false even if the tx subsequently gets successfully mined.
|
|
@@ -210,8 +217,9 @@ export declare class SequencerPublisher {
|
|
|
210
217
|
/** Restarts the publisher after calling `interrupt`. */
|
|
211
218
|
restart(): void;
|
|
212
219
|
private prepareProposeTx;
|
|
213
|
-
private simulateProposeTx;
|
|
214
220
|
private addProposeTx;
|
|
221
|
+
/** Returns the timestamp of the next L1 slot boundary after now. */
|
|
222
|
+
private getNextL1SlotTimestamp;
|
|
215
223
|
}
|
|
216
224
|
export {};
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLXB1Ymxpc2hlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1Ymxpc2hlci9zZXF1ZW5jZXItcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBRUwsS0FBSywwQkFBMEIsRUFJL0IsS0FBSyxjQUFjLEVBQ25CLEtBQUssdUJBQXVCLEVBQzVCLEtBQUssd0JBQXdCLEVBRTlCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUYsT0FBTyxFQUNMLEtBQUssWUFBWSxFQUNqQixLQUFLLFVBQVUsRUFDZixLQUFLLFdBQVcsRUFDaEIsS0FBSyxTQUFTLEVBRWQsS0FBSyxnQkFBZ0IsRUFFdEIsTUFBTSw2QkFBNkIsQ0FBQztBQVFyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHL0UsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFFbkUsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQTZCLE1BQU0sZ0JBQWdCLENBQUM7QUFDckYsT0FBTyxFQUFFLCtCQUErQixFQUFFLEtBQUssd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRyxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU0zRCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLE1BQU0sRUFBaUMsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRyxPQUFPLEVBR0wsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxtQkFBbUIsRUFJekIsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc1RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWlCN0UsMkZBQTJGO0FBQzNGLE1BQU0sTUFBTSxrQkFBa0IsR0FBRztJQUMvQiw2REFBNkQ7SUFDN0QsTUFBTSxFQUFFO1FBQUUsT0FBTyxFQUFFLGtCQUFrQixDQUFBO0tBQUUsQ0FBQztJQUN4Qyw4RUFBOEU7SUFDOUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3pCLDZEQUE2RDtJQUM3RCxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDdEIscUVBQXFFO0lBQ3JFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVCLGtFQUFrRTtJQUNsRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDekIsQ0FBQztBQWtCRixlQUFPLE1BQU0sT0FBTyw2SkFPVixDQUFDO0FBRVgsTUFBTSxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFLOUMsZUFBTyxNQUFNLGNBQWMsZ1VBQW9FLENBQUM7QUFFaEcsTUFBTSxNQUFNLDJCQUEyQixHQUFHO0lBQ3hDLE9BQU8sRUFBRSxXQUFXLENBQUM7SUFDckIsTUFBTSxFQUFFLHFCQUFxQixHQUFHLDJCQUEyQixDQUFDO0lBQzVELE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDbkMsNEJBQTRCLEVBQUUsZ0JBQWdCLENBQUM7SUFDL0Msa0VBQWtFO0lBQ2xFLFdBQVcsRUFBRSxFQUFFLENBQUM7Q0FDakIsQ0FBQztBQUVGLEtBQUssNEJBQTRCLEdBQUc7SUFDbEMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDO0NBQ3BCLENBQUM7QUFFRixNQUFNLFdBQVcsaUJBQWlCO0lBQ2hDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixPQUFPLEVBQUUsV0FBVyxDQUFDO0lBQ3JCLGVBQWUsRUFBRSxVQUFVLENBQUM7SUFDNUIsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFDekQsVUFBVSxDQUFDLEVBQUUsWUFBWSxDQUFDO0lBQzFCLG1GQUFtRjtJQUNuRixpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUMzQixZQUFZLEVBQUUsQ0FDWixPQUFPLEVBQUUsV0FBVyxFQUNwQixNQUFNLENBQUMsRUFBRTtRQUFFLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQztRQUFDLEtBQUssQ0FBQyxFQUFFLGdCQUFnQixDQUFDO1FBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsS0FDbEYsT0FBTyxDQUFDO0NBQ2Q7QUFFRCxxQkFBYSxrQkFBa0I7SUErQzNCLE9BQU8sQ0FBQyxNQUFNO0lBOUNoQixPQUFPLENBQUMsV0FBVyxDQUFTO0lBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQTRCO0lBQzNDLE9BQU8sQ0FBQyxlQUFlLENBQTJCO0lBQzNDLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDOUIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUF1QztJQUU3RDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBOEU7SUFFL0csU0FBUyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFNO0lBRWhFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDdkMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztJQUVwQyx5Q0FBeUM7SUFDekMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQWU7SUFFNUMsT0FBTyxDQUFDLFVBQVUsQ0FBc0I7SUFFeEMsOEZBQThGO0lBQzlGLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFxRTtJQUU5Rix5Q0FBeUM7SUFDekMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFnQjtJQUV0QywyRUFBMkU7SUFDM0UsT0FBTyxDQUFDLG1CQUFtQixDQUFzQjtJQUVqRCxtRkFBbUY7SUFDbkYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBNEI7SUFFeEQsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUNyQixjQUFjLEVBQUUsY0FBYyxDQUFDO0lBQy9CLG1CQUFtQixFQUFFLDBCQUEwQixDQUFDO0lBQ2hELHdCQUF3QixFQUFFLHdCQUF3QixHQUFHLFNBQVMsQ0FBQztJQUV0RSxTQUFnQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRS9CLFNBQVMsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBTTtJQUU3QyxZQUNVLE1BQU0sRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxHQUFHLGlCQUFpQixDQUFDLEdBQ2pGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHO1FBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBQy9GLElBQUksRUFBRTtRQUNKLFNBQVMsQ0FBQyxFQUFFLGVBQWUsQ0FBQztRQUM1QixVQUFVLEVBQUUsbUJBQW1CLENBQUM7UUFDaEMsU0FBUyxFQUFFLFNBQVMsQ0FBQztRQUNyQixjQUFjLEVBQUUsY0FBYyxDQUFDO1FBQy9CLHdCQUF3QixFQUFFLHdCQUF3QixHQUFHLFNBQVMsQ0FBQztRQUMvRCwwQkFBMEIsRUFBRSwwQkFBMEIsQ0FBQztRQUN2RCxVQUFVLEVBQUUsVUFBVSxDQUFDO1FBQ3ZCLFlBQVksRUFBRSxZQUFZLENBQUM7UUFDM0IsT0FBTyxFQUFFLHlCQUF5QixDQUFDO1FBQ25DLFdBQVcsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUNiLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsS0FBSyxPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0tBQ3ZGLEVBcURGO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLGNBQWM7SUFrQmYsaUJBQWlCLElBQUksY0FBYyxDQUV6QztJQUVEOzs7Ozs7O09BT0c7SUFDSSx3QkFBd0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRTFGO0lBRU0sZ0JBQWdCLGVBRXRCO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUVuRDtJQUVNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLFFBRTNDO0lBRU0sZ0JBQWdCLElBQUksVUFBVSxDQUVwQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CLElBQUksSUFBSSxDQU1sQztJQUVEOzs7Ozs7T0FNRztJQUNVLGFBQWEsQ0FDeEIsWUFBWSxFQUFFLFVBQVUsRUFDeEIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEtBQUssSUFBSSxHQUNuRCxPQUFPLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLENBNEMxQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFFVSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUMsQ0FrRzFGO0lBRUQsdUZBQXVGO0lBQ3ZGLE9BQU8sQ0FBQyxlQUFlO1lBYVQsa0JBQWtCO1lBeUJsQiw0QkFBNEI7SUF5RTdCLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUMsQ0FzQjNGO0lBRUQsT0FBTyxDQUFDLDJCQUEyQjtJQTJCbkM7Ozs7T0FJRztJQUNVLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLENBQUMsRUFBRSx1QkFBdUI7Ozs7bUJBNEJqSDtJQUVEOzs7OztPQUtHO0lBRVUsbUJBQW1CLENBQzlCLE1BQU0sRUFBRSxnQkFBZ0IsRUFDeEIsdUJBQXVCLENBQUMsRUFBRSx1QkFBdUIsR0FDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXVDZjtJQUVEOzs7T0FHRztJQUNVLDRCQUE0QixDQUN2QyxnQkFBZ0IsRUFBRSx3QkFBd0IsR0FDekMsT0FBTyxDQUFDLDJCQUEyQixHQUFHLFNBQVMsQ0FBQyxDQXlGbEQ7SUFFRCxPQUFPLENBQUMsZ0NBQWdDO1lBOEIxQix1QkFBdUI7SUEyR3JDOzs7O09BSUc7SUFDSSwyQkFBMkIsQ0FDaEMsaUJBQWlCLEVBQUUsVUFBVSxFQUM3QixVQUFVLEVBQUUsVUFBVSxFQUN0QixhQUFhLEVBQUUsVUFBVSxFQUN6QixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEtBQUssT0FBTyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FDM0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVNsQjtJQUVELHVFQUF1RTtJQUMxRCxzQkFBc0IsQ0FDakMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLEVBQzlCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsS0FBSyxPQUFPLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUMzRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBcUVsQjtJQUVELGlEQUFpRDtJQUNwQyx3QkFBd0IsQ0FDbkMsVUFBVSxFQUFFLFVBQVUsRUFDdEIsc0JBQXNCLEVBQUUsK0JBQStCLEVBQ3ZELCtCQUErQixFQUFFLFNBQVMsRUFDMUMsSUFBSSxHQUFFLDRCQUFpQyxHQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBb0JmO0lBRU0sMkJBQTJCLENBQ2hDLE9BQU8sRUFBRSwyQkFBMkIsR0FBRyxTQUFTLEVBQ2hELElBQUksR0FBRTtRQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQTtLQUFPLFFBOEJsQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsY0FBYztJQWdDdEI7Ozs7O09BS0c7SUFDSSxTQUFTLFNBSWY7SUFFRCx3REFBd0Q7SUFDakQsT0FBTyxTQUdiO1lBRWEsZ0JBQWdCO1lBZ0ZoQixZQUFZO0lBa0YxQixvRUFBb0U7SUFDcEUsT0FBTyxDQUFDLHNCQUFzQjtDQUkvQiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"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"}
|