@aztec-labs/sequencer-client 6.0.0-nightly.20261007 → 6.0.0-rc.2
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/publisher/sequencer-bundle-simulator.d.ts +6 -4
- package/dest/publisher/sequencer-bundle-simulator.d.ts.map +1 -1
- package/dest/publisher/sequencer-bundle-simulator.js +15 -14
- package/dest/publisher/sequencer-publisher.d.ts +2 -1
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +13 -2
- package/package.json +20 -20
- package/src/publisher/sequencer-bundle-simulator.ts +24 -10
- package/src/publisher/sequencer-publisher.ts +15 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EpochCache } from '@aztec-labs/epoch-cache';
|
|
2
2
|
import { type RollupContract } from '@aztec-labs/ethereum/contracts';
|
|
3
|
-
import { type L1TxUtils } from '@aztec-labs/ethereum/l1-tx-utils';
|
|
3
|
+
import { type AmsterdamForkDetector, type L1TxUtils } from '@aztec-labs/ethereum/l1-tx-utils';
|
|
4
4
|
import type { SlotNumber } from '@aztec-labs/foundation/branded-types';
|
|
5
5
|
import { type Logger } from '@aztec-labs/foundation/log';
|
|
6
6
|
import type { Hex } from 'viem';
|
|
@@ -18,7 +18,7 @@ export type DroppedRequest = {
|
|
|
18
18
|
* the bumped gas limit derived from the simulated transaction gas (plus blob evaluation gas).
|
|
19
19
|
* `droppedRequests` lists the entries that were observed to revert in simulation.
|
|
20
20
|
* - `fallback`: the node does not support eth_simulateV1 (or the simulate call threw). The
|
|
21
|
-
* caller should send `requests` as-is with a safe gas limit (e.g.
|
|
21
|
+
* caller should send `requests` as-is with a safe gas limit (e.g. `MAX_L1_TX_LIMIT`).
|
|
22
22
|
* `droppedRequests` carries any entries that the first pass already proved reverted, so the
|
|
23
23
|
* caller does not re-include them when the second pass falls back.
|
|
24
24
|
* - `aborted`: the bundle cannot be sent. `droppedRequests` contains only entries that were
|
|
@@ -54,6 +54,8 @@ export declare class SequencerBundleSimulator {
|
|
|
54
54
|
getL1TxUtils: () => L1TxUtils;
|
|
55
55
|
rollupContract: RollupContract;
|
|
56
56
|
epochCache: EpochCache;
|
|
57
|
+
/** Decides the gas cap for simulating and sending the bundle, which is higher once Amsterdam is active. */
|
|
58
|
+
amsterdamFork: Pick<AmsterdamForkDetector, 'isActive'>;
|
|
57
59
|
log?: Logger;
|
|
58
60
|
});
|
|
59
61
|
/**
|
|
@@ -83,7 +85,7 @@ export declare class SequencerBundleSimulator {
|
|
|
83
85
|
private buildSuccessResult;
|
|
84
86
|
/**
|
|
85
87
|
* `gasLimit = bumpGasLimit(ceil(basis * 64 / 63))`, plus blob evaluation gas if a propose survived,
|
|
86
|
-
* capped at {@link
|
|
88
|
+
* capped at `maxGasLimit` (see {@link getMaxL1TxGasLimit}).
|
|
87
89
|
*
|
|
88
90
|
* The basis is the simulation's `maxUsedGas` when the node reports it, since that is measured before
|
|
89
91
|
* refunds, and its `gasUsed` otherwise. Either way the headroom on top is the buffer configured for the
|
|
@@ -97,4 +99,4 @@ export declare class SequencerBundleSimulator {
|
|
|
97
99
|
private buildStateOverrides;
|
|
98
100
|
private simulateAndDecode;
|
|
99
101
|
}
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLWJ1bmRsZS1zaW11bGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaXNoZXIvc2VxdWVuY2VyLWJ1bmRsZS1zaW11bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFjLEtBQUssY0FBYyxFQUF5QyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hILE9BQU8sRUFBRSxLQUFLLHFCQUFxQixFQUFFLEtBQUssU0FBUyxFQUFzQixNQUFNLGtDQUFrQyxDQUFDO0FBRWxILE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RSxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQWlCLE1BQU0sTUFBTSxDQUFDO0FBRS9DLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEUsdUZBQXVGO0FBQ3ZGLE1BQU0sTUFBTSxjQUFjLEdBQUc7SUFDM0IsT0FBTyxFQUFFLGlCQUFpQixDQUFDO0lBQzNCLFlBQVksRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLFVBQVUsRUFBRSxHQUFHLEdBQUcsU0FBUyxDQUFDO0NBQzdCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxNQUFNLG9CQUFvQixHQUM1QjtJQUFFLElBQUksRUFBRSxTQUFTLENBQUM7SUFBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFFLENBQUE7Q0FBRSxHQUN2RztJQUFFLElBQUksRUFBRSxVQUFVLENBQUM7SUFBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUFDLGVBQWUsRUFBRSxjQUFjLEVBQUUsQ0FBQTtDQUFFLEdBQ3RGO0lBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQztJQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7SUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFFLENBQUE7Q0FBRSxDQUFDO0FBRWhGLE1BQU0sTUFBTSxXQUFXLEdBQUcsY0FBYyxHQUFHLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQztBQVlsRjs7Ozs7O0dBTUc7QUFDSCxxQkFBYSx3QkFBd0I7SUFJakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO0lBSHZCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFTO0lBRTdCLFlBQ21CLElBQUksRUFBRTtRQUNyQixZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7UUFDOUIsY0FBYyxFQUFFLGNBQWMsQ0FBQztRQUMvQixVQUFVLEVBQUUsVUFBVSxDQUFDO1FBQ3ZCLDJHQUEyRztRQUMzRyxhQUFhLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztLQUNkLEVBR0Y7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNVLFFBQVEsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQXVGL0c7SUFFRCxPQUFPLENBQUMsa0JBQWtCO0lBc0IxQjs7Ozs7OztPQU9HO0lBQ0gsT0FBTyxDQUFDLGVBQWU7SUFZdkI7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLG1CQUFtQjtZQU9iLGlCQUFpQjtDQXFEaEMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-bundle-simulator.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-bundle-simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAc,KAAK,cAAc,EAAyC,MAAM,gCAAgC,CAAC;AACxH,OAAO,EAAE,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"sequencer-bundle-simulator.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-bundle-simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAc,KAAK,cAAc,EAAyC,MAAM,gCAAgC,CAAC;AACxH,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,SAAS,EAAsB,MAAM,kCAAkC,CAAC;AAElH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,4BAA4B,CAAC;AAEvE,OAAO,KAAK,EAAE,GAAG,EAAiB,MAAM,MAAM,CAAC;AAE/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,uFAAuF;AACvF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,GAAG,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,cAAc,EAAE,CAAA;CAAE,GACvG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAAC,eAAe,EAAE,cAAc,EAAE,CAAA;CAAE,GACtF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,eAAe,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,cAAc,GAAG,qBAAqB,CAAC;AAYlF;;;;;;GAMG;AACH,qBAAa,wBAAwB;IAIjC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,YACmB,IAAI,EAAE;QACrB,YAAY,EAAE,MAAM,SAAS,CAAC;QAC9B,cAAc,EAAE,cAAc,CAAC;QAC/B,UAAU,EAAE,UAAU,CAAC;QACvB,2GAA2G;QAC3G,aAAa,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;QACvD,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,EAGF;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACU,QAAQ,CAAC,aAAa,EAAE,iBAAiB,EAAE,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuF/G;IAED,OAAO,CAAC,kBAAkB;IAsB1B;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAYvB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;YAOb,iBAAiB;CAqDhC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Multicall3, buildSimulationOverridesStateOverride } from '@aztec-labs/ethereum/contracts';
|
|
2
|
-
import {
|
|
2
|
+
import { getMaxL1TxGasLimit } from '@aztec-labs/ethereum/l1-tx-utils';
|
|
3
3
|
import { formatViemError } from '@aztec-labs/ethereum/utils';
|
|
4
4
|
import { createLogger } from '@aztec-labs/foundation/log';
|
|
5
5
|
import { getLastL1SlotTimestampForL2Slot } from '@aztec-labs/stdlib/epoch-helpers';
|
|
@@ -49,10 +49,11 @@ import { getLastL1SlotTimestampForL2Slot } from '@aztec-labs/stdlib/epoch-helper
|
|
|
49
49
|
// Pin the publisher we'll use across the whole simulate call so that the publisher's rotation
|
|
50
50
|
// can't change l1TxUtils mid-flight.
|
|
51
51
|
const l1TxUtils = this.deps.getL1TxUtils();
|
|
52
|
+
const maxGasLimit = getMaxL1TxGasLimit(await this.deps.amsterdamFork.isActive());
|
|
52
53
|
const proposeRequest = validRequests.find((r)=>r.action === 'propose');
|
|
53
54
|
const simulateTimestamp = getLastL1SlotTimestampForL2Slot(targetSlot, this.deps.epochCache.getL1Constants());
|
|
54
55
|
const firstPassOverrides = await this.buildStateOverrides(!!proposeRequest);
|
|
55
|
-
const firstPass = await this.simulateAndDecode(l1TxUtils, validRequests, simulateTimestamp, firstPassOverrides);
|
|
56
|
+
const firstPass = await this.simulateAndDecode(l1TxUtils, validRequests, simulateTimestamp, firstPassOverrides, maxGasLimit);
|
|
56
57
|
if (firstPass.kind === 'fallback') {
|
|
57
58
|
this.log.warn('Bundle simulate fallback (eth_simulateV1 unavailable); caller will send bundle as-is', {
|
|
58
59
|
actions: validRequests.map((r)=>r.action)
|
|
@@ -74,7 +75,7 @@ import { getLastL1SlotTimestampForL2Slot } from '@aztec-labs/stdlib/epoch-helper
|
|
|
74
75
|
};
|
|
75
76
|
}
|
|
76
77
|
if (firstPass.droppedRequests.length === 0) {
|
|
77
|
-
return this.buildSuccessResult(l1TxUtils, firstPass.survivors, [], firstPass, proposeRequest);
|
|
78
|
+
return this.buildSuccessResult(l1TxUtils, firstPass.survivors, [], firstPass, proposeRequest, maxGasLimit);
|
|
78
79
|
}
|
|
79
80
|
this.log.warn('Some bundle entries reverted; re-simulating reduced bundle', {
|
|
80
81
|
droppedActions: firstPass.droppedRequests.map((d)=>d.request.action),
|
|
@@ -83,7 +84,7 @@ import { getLastL1SlotTimestampForL2Slot } from '@aztec-labs/stdlib/epoch-helper
|
|
|
83
84
|
// Rebuild overrides for the reduced bundle: if propose was dropped, we no longer need the blob-check override
|
|
84
85
|
const proposeSurvived = proposeRequest !== undefined && firstPass.survivors.includes(proposeRequest);
|
|
85
86
|
const secondPassOverrides = proposeSurvived ? firstPassOverrides : await this.buildStateOverrides(false);
|
|
86
|
-
const secondPass = await this.simulateAndDecode(l1TxUtils, firstPass.survivors, simulateTimestamp, secondPassOverrides);
|
|
87
|
+
const secondPass = await this.simulateAndDecode(l1TxUtils, firstPass.survivors, simulateTimestamp, secondPassOverrides, maxGasLimit);
|
|
87
88
|
if (secondPass.kind === 'fallback') {
|
|
88
89
|
this.log.warn('Bundle simulate errored on second pass (eth_simulateV1 unavailable); sending first-pass survivors as-is', {
|
|
89
90
|
actions: firstPass.survivors.map((r)=>r.action),
|
|
@@ -110,12 +111,12 @@ import { getLastL1SlotTimestampForL2Slot } from '@aztec-labs/stdlib/epoch-helper
|
|
|
110
111
|
};
|
|
111
112
|
}
|
|
112
113
|
// The reduced bundle is what we are about to send, so its own gas metrics are the ones that size the tx.
|
|
113
|
-
return this.buildSuccessResult(l1TxUtils, secondPass.survivors, firstPass.droppedRequests, secondPass, proposeRequest);
|
|
114
|
+
return this.buildSuccessResult(l1TxUtils, secondPass.survivors, firstPass.droppedRequests, secondPass, proposeRequest, maxGasLimit);
|
|
114
115
|
}
|
|
115
|
-
buildSuccessResult(l1TxUtils, survivors, droppedRequests, bundleGas, proposeRequest) {
|
|
116
|
+
buildSuccessResult(l1TxUtils, survivors, droppedRequests, bundleGas, proposeRequest, maxGasLimit) {
|
|
116
117
|
const proposeSurvived = proposeRequest !== undefined && survivors.includes(proposeRequest);
|
|
117
118
|
const blobEvaluationGas = proposeSurvived ? proposeRequest?.blobEvaluationGas ?? 0n : 0n;
|
|
118
|
-
const gasLimit = this.computeGasLimit(l1TxUtils, bundleGas, blobEvaluationGas);
|
|
119
|
+
const gasLimit = this.computeGasLimit(l1TxUtils, bundleGas, blobEvaluationGas, maxGasLimit);
|
|
119
120
|
this.log.debug('Bundle simulate complete', {
|
|
120
121
|
survivingRequests: survivors.length,
|
|
121
122
|
bundleGasUsed: bundleGas.gasUsed,
|
|
@@ -133,16 +134,16 @@ import { getLastL1SlotTimestampForL2Slot } from '@aztec-labs/stdlib/epoch-helper
|
|
|
133
134
|
}
|
|
134
135
|
/**
|
|
135
136
|
* `gasLimit = bumpGasLimit(ceil(basis * 64 / 63))`, plus blob evaluation gas if a propose survived,
|
|
136
|
-
* capped at {@link
|
|
137
|
+
* capped at `maxGasLimit` (see {@link getMaxL1TxGasLimit}).
|
|
137
138
|
*
|
|
138
139
|
* The basis is the simulation's `maxUsedGas` when the node reports it, since that is measured before
|
|
139
140
|
* refunds, and its `gasUsed` otherwise. Either way the headroom on top is the buffer configured for the
|
|
140
141
|
* L1 tx utils; neither figure guarantees a sufficient limit, hence the padding and the buffer.
|
|
141
|
-
*/ computeGasLimit(l1TxUtils, bundleGas, blobEvaluationGas) {
|
|
142
|
+
*/ computeGasLimit(l1TxUtils, bundleGas, blobEvaluationGas, maxGasLimit) {
|
|
142
143
|
const basis = bundleGas.maxUsedGas ?? bundleGas.gasUsed;
|
|
143
144
|
const gasUsedWithEip150 = (basis * 64n + 62n) / 63n;
|
|
144
145
|
const gasLimit = l1TxUtils.bumpGasLimit(gasUsedWithEip150) + blobEvaluationGas;
|
|
145
|
-
return gasLimit >
|
|
146
|
+
return gasLimit > maxGasLimit ? maxGasLimit : gasLimit;
|
|
146
147
|
}
|
|
147
148
|
/**
|
|
148
149
|
* eth_simulateV1 cannot carry blob sidecar data, so disable the rollup's on-chain blob check
|
|
@@ -152,7 +153,7 @@ import { getLastL1SlotTimestampForL2Slot } from '@aztec-labs/stdlib/epoch-helper
|
|
|
152
153
|
disableBlobCheck: true
|
|
153
154
|
} : undefined);
|
|
154
155
|
}
|
|
155
|
-
async simulateAndDecode(l1TxUtils, requests, simulateTimestamp, stateOverrides) {
|
|
156
|
+
async simulateAndDecode(l1TxUtils, requests, simulateTimestamp, stateOverrides, maxGasLimit) {
|
|
156
157
|
let simResult;
|
|
157
158
|
try {
|
|
158
159
|
simResult = await Multicall3.simulateAggregate3(requests.map((r)=>({
|
|
@@ -162,11 +163,11 @@ import { getLastL1SlotTimestampForL2Slot } from '@aztec-labs/stdlib/epoch-helper
|
|
|
162
163
|
})), l1TxUtils, {
|
|
163
164
|
blockOverrides: {
|
|
164
165
|
time: simulateTimestamp,
|
|
165
|
-
gasLimit:
|
|
166
|
+
gasLimit: maxGasLimit * 2n
|
|
166
167
|
},
|
|
167
168
|
stateOverrides,
|
|
168
|
-
gas:
|
|
169
|
-
fallbackGasEstimate:
|
|
169
|
+
gas: maxGasLimit,
|
|
170
|
+
fallbackGasEstimate: maxGasLimit
|
|
170
171
|
});
|
|
171
172
|
} catch (err) {
|
|
172
173
|
this.log.warn('Bundle simulate threw; treating as fallback', {
|
|
@@ -69,6 +69,7 @@ export declare class SequencerPublisher implements Disposable {
|
|
|
69
69
|
private interrupted;
|
|
70
70
|
private metrics;
|
|
71
71
|
private bundleSimulator;
|
|
72
|
+
private readonly amsterdamFork;
|
|
72
73
|
epochCache: EpochCache;
|
|
73
74
|
private failedTxStore?;
|
|
74
75
|
/**
|
|
@@ -277,4 +278,4 @@ export declare class SequencerPublisher implements Disposable {
|
|
|
277
278
|
private getNextL1SlotTimestamp;
|
|
278
279
|
}
|
|
279
280
|
export {};
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLXB1Ymxpc2hlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1Ymxpc2hlci9zZXF1ZW5jZXItcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFMUUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBR0wsS0FBSywwQkFBMEIsRUFLL0IsS0FBSyxjQUFjLEVBQ25CLEtBQUssdUJBQXVCLEVBQzVCLEtBQUssd0JBQXdCLEVBRTlCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQUUsYUFBYSxFQUEwQixNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZILE9BQU8sRUFFTCxLQUFLLFlBQVksRUFDakIsS0FBSyxVQUFVLEVBQ2YsS0FBSyxXQUFXLEVBRWhCLEtBQUssU0FBUyxFQUVkLEtBQUssZ0JBQWdCLEVBR3RCLE1BQU0sa0NBQWtDLENBQUM7QUFRMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3BGLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakUsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBR3ZFLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixFQUE2QixNQUFNLHFCQUFxQixDQUFDO0FBQzFGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxLQUFLLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUcsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFNakUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsS0FBSyxNQUFNLEVBQWlDLE1BQU0sOEJBQThCLENBQUM7QUFDaEgsT0FBTyxFQUdMLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssbUJBQW1CLEVBS3pCLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFpQjdFLDJGQUEyRjtBQUMzRixNQUFNLE1BQU0sa0JBQWtCLEdBQUc7SUFDL0IsNkRBQTZEO0lBQzdELE1BQU0sRUFBRTtRQUFFLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQTtLQUFFLENBQUM7SUFDeEMsOEVBQThFO0lBQzlFLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUN6Qiw2REFBNkQ7SUFDN0QsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3RCLHFFQUFxRTtJQUNyRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUM1QixrRUFBa0U7SUFDbEUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO0NBQ3pCLENBQUM7QUFvQkYsZUFBTyxNQUFNLE9BQU8sc0tBUVYsQ0FBQztBQUVYLE1BQU0sTUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBSzlDLGVBQU8sTUFBTSxjQUFjLG9WQUFvRSxDQUFDO0FBRWhHLE1BQU0sTUFBTSwyQkFBMkIsR0FBRztJQUN4QyxPQUFPLEVBQUUsV0FBVyxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxxQkFBcUIsR0FBRywyQkFBMkIsQ0FBQztJQUM1RCxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO0lBQ25DLDRCQUE0QixFQUFFLGdCQUFnQixDQUFDO0lBQy9DLGtFQUFrRTtJQUNsRSxXQUFXLEVBQUUsRUFBRSxDQUFDO0NBQ2pCLENBQUM7QUFFRixLQUFLLDRCQUE0QixHQUFHO0lBQ2xDLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQztDQUNwQixDQUFDO0FBRUYsTUFBTSxXQUFXLGlCQUFpQjtJQUNoQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsT0FBTyxFQUFFLFdBQVcsQ0FBQztJQUNyQixlQUFlLEVBQUUsVUFBVSxDQUFDO0lBQzVCLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBQztJQUMxQixtRkFBbUY7SUFDbkYsaUJBQWlCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDM0IsWUFBWSxFQUFFLENBQ1osT0FBTyxFQUFFLFdBQVcsRUFDcEIsTUFBTSxDQUFDLEVBQUU7UUFBRSxPQUFPLEVBQUUsa0JBQWtCLENBQUM7UUFBQyxLQUFLLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztRQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEtBQ2xGLE9BQU8sQ0FBQztDQUNkO0FBRUQscUJBQWEsa0JBQW1CLFlBQVcsVUFBVTtJQW9EakQsT0FBTyxDQUFDLE1BQU07SUFuRGhCLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUF5QjtJQUVuRCxPQUFPLENBQUMsV0FBVyxDQUFTO0lBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQTRCO0lBQzNDLE9BQU8sQ0FBQyxlQUFlLENBQTJCO0lBQ2xELE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUF3QjtJQUMvQyxVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQzlCLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBdUM7SUFFN0Q7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQThFO0lBRS9HLFNBQVMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBTTtJQUVoRSxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztJQUN0QixTQUFTLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDO0lBQ3ZDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7SUFDcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBUztJQUN0RCxPQUFPLENBQUMsUUFBUSxDQUFDLGlDQUFpQyxDQUFTO0lBRTNELHlDQUF5QztJQUN6QyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBZTtJQUU1QyxPQUFPLENBQUMsVUFBVSxDQUFzQjtJQUV4Qyw4RkFBOEY7SUFDOUYsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQXFFO0lBRTlGLHlDQUF5QztJQUN6QyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQWdCO0lBRXRDLDJFQUEyRTtJQUMzRSxPQUFPLENBQUMsbUJBQW1CLENBQXNCO0lBRWpELG1GQUFtRjtJQUNuRixPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUE0QjtJQUV4RCxTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLGNBQWMsRUFBRSxjQUFjLENBQUM7SUFDL0IsbUJBQW1CLEVBQUUsMEJBQTBCLENBQUM7SUFDaEQsd0JBQXdCLEVBQUUsd0JBQXdCLEdBQUcsU0FBUyxDQUFDO0lBRXRFLFNBQWdCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFFL0IsU0FBUyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFNO0lBRTdDLFlBQ1UsTUFBTSxFQUFFLElBQUksQ0FDbEIsd0JBQXdCLEVBQ3RCLGVBQWUsR0FDZixpQkFBaUIsR0FDakIsZ0RBQWdELEdBQ2hELHFEQUFxRCxDQUN4RCxHQUNDLElBQUksQ0FBQyxlQUFlLEVBQUUsb0NBQW9DLENBQUMsR0FDM0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLHNCQUFzQixHQUFHLG1CQUFtQixDQUFDLEdBQUc7UUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFDL0YsSUFBSSxFQUFFO1FBQ0osU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDO1FBQzVCLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztRQUNoQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQ3JCLGNBQWMsRUFBRSxjQUFjLENBQUM7UUFDL0Isd0JBQXdCLEVBQUUsd0JBQXdCLEdBQUcsU0FBUyxDQUFDO1FBQy9ELDBCQUEwQixFQUFFLDBCQUEwQixDQUFDO1FBQ3ZELFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDdkIsWUFBWSxFQUFFLFlBQVksQ0FBQztRQUMzQixPQUFPLEVBQUUseUJBQXlCLENBQUM7UUFDbkMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ2IsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxLQUFLLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7S0FDdkYsRUFtRUY7SUFFRCwyRUFBMkU7SUFDcEUsT0FBTyxJQUFJLElBQUksQ0FFckI7SUFFRCx1REFBdUQ7SUFDaEQsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUU5QjtJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLGNBQWM7WUFnRFIscUJBQXFCO0lBZ0JuQyw2REFBNkQ7SUFDN0QsT0FBTyxDQUFDLGlCQUFpQjtJQWN6Qjs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLGVBQWU7SUFJaEIsaUJBQWlCLElBQUksY0FBYyxDQUV6QztJQUVEOzs7Ozs7O09BT0c7SUFDSSx3QkFBd0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRTFGO0lBRU0sZ0JBQWdCLGVBRXRCO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUVuRDtJQUVNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLFFBRTNDO0lBRU0sZ0JBQWdCLElBQUksVUFBVSxDQUVwQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CLElBQUksSUFBSSxDQU1sQztJQUVEOzs7Ozs7T0FNRztJQUNVLGFBQWEsQ0FDeEIsWUFBWSxFQUFFLFVBQVUsRUFDeEIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEtBQUssSUFBSSxHQUNuRCxPQUFPLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLENBNEMxQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFFVSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUMsQ0EwSTFGO0lBRUQsdUZBQXVGO0lBQ3ZGLE9BQU8sQ0FBQyxlQUFlO1lBYVQsa0JBQWtCO1lBdUNsQiw0QkFBNEI7SUFxRTFDLGtFQUFrRTtJQUNsRSxPQUFPLENBQUMsbUJBQW1CO0lBd0MzQiwrRUFBK0U7SUFDL0UsT0FBTyxDQUFDLGlCQUFpQjtJQTBDWixjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLENBTzNGO0lBRUQ7Ozs7Ozs7T0FPRztJQUNVLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWtEcEU7SUFFRCxPQUFPLENBQUMsMEJBQTBCO0lBWWxDLE9BQU8sQ0FBQywyQkFBMkI7SUF1Q25DOzs7O09BSUc7SUFDVSxZQUFZLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixDQUFDLEVBQUUsdUJBQXVCOzs7O21CQTRCakg7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUVVLGdDQUFnQyxDQUMzQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQ3hCLEtBQUssRUFBRTtRQUFFLGFBQWEsRUFBRSxNQUFNLENBQUM7UUFBQyw4QkFBOEIsRUFBRSxnQkFBZ0IsQ0FBQTtLQUFFLEVBQ2xGLHVCQUF1QixDQUFDLEVBQUUsdUJBQXVCLEdBQ2hELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FrQ2pCO0lBRUQ7OztPQUdHO0lBQ1UsNEJBQTRCLENBQ3ZDLGdCQUFnQixFQUFFLHdCQUF3QixHQUN6QyxPQUFPLENBQUMsMkJBQTJCLEdBQUcsU0FBUyxDQUFDLENBNkZsRDtJQUVELE9BQU8sQ0FBQyxnQ0FBZ0M7WUFrQzFCLHVCQUF1QjtJQXVJckM7Ozs7T0FJRztJQUNJLDJCQUEyQixDQUNoQyxpQkFBaUIsRUFBRSxVQUFVLEVBQzdCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsS0FBSyxPQUFPLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUMzRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBU2xCO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDVSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0E4QjVFO0lBRUQsdUVBQXVFO0lBQzFELHNCQUFzQixDQUNqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsRUFDOUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLFVBQVUsRUFDekIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLG1CQUFtQixLQUFLLE9BQU8sQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQzNELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FxRWxCO0lBRUQsaURBQWlEO0lBQ3BDLHdCQUF3QixDQUNuQyxVQUFVLEVBQUUsVUFBVSxFQUN0QixzQkFBc0IsRUFBRSwrQkFBK0IsRUFDdkQsK0JBQStCLEVBQUUsU0FBUyxFQUMxQyxVQUFVLEVBQUUsTUFBTSxFQUNsQixJQUFJLEdBQUUsNEJBQWlDLEdBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FxQmY7SUFFTSwyQkFBMkIsQ0FDaEMsT0FBTyxFQUFFLDJCQUEyQixHQUFHLFNBQVMsRUFDaEQsSUFBSSxHQUFFO1FBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFBO0tBQU8sUUFvQ2xDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxjQUFjO0lBc0N0Qjs7Ozs7T0FLRztJQUNJLFNBQVMsU0FJZjtJQUVELHdEQUF3RDtJQUNqRCxPQUFPLFNBR2I7WUFFYSxnQkFBZ0I7WUFxRmhCLFlBQVk7SUFrRjFCLG9FQUFvRTtJQUNwRSxPQUFPLENBQUMsc0JBQXNCO0NBSS9CIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAGL,KAAK,0BAA0B,EAK/B,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAE9B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,mBAAmB,EAAE,aAAa,EAA0B,MAAM,sCAAsC,CAAC;AACvH,OAAO,
|
|
1
|
+
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -375,7 +375,7 @@ import { EmpireBaseAbi, ErrorsAbi, RollupAbi, SlashingProposerAbi } from '@aztec
|
|
|
375
375
|
import { Blob, getBlobsPerL1Block, getPrefixedEthBlobCommitments } from '@aztec-labs/blob-lib';
|
|
376
376
|
import { FeeAssetPriceOracle, MULTI_CALL_3_ADDRESS, Multicall3, MulticallForwarderRevertedError, buildSimulationOverridesStateOverride } from '@aztec-labs/ethereum/contracts';
|
|
377
377
|
import { L1FeeAnalyzer, captureWindowBlockFees } from '@aztec-labs/ethereum/l1-fee-analysis';
|
|
378
|
-
import { L1TxTimeoutError, MAX_L1_TX_LIMIT, WEI_CONST, summarizeTransactionReceipt } from '@aztec-labs/ethereum/l1-tx-utils';
|
|
378
|
+
import { AmsterdamForkDetector, L1TxTimeoutError, MAX_L1_TX_LIMIT, WEI_CONST, summarizeTransactionReceipt } from '@aztec-labs/ethereum/l1-tx-utils';
|
|
379
379
|
import { FormattedViemError, formatViemError, mergeAbis, tryDecodeRevertReason, tryExtractEvent } from '@aztec-labs/ethereum/utils';
|
|
380
380
|
import { CheckpointNumber, SlotNumber } from '@aztec-labs/foundation/branded-types';
|
|
381
381
|
import { trimmedBytesLength } from '@aztec-labs/foundation/buffer';
|
|
@@ -437,6 +437,7 @@ export class SequencerPublisher {
|
|
|
437
437
|
interrupted;
|
|
438
438
|
metrics;
|
|
439
439
|
bundleSimulator;
|
|
440
|
+
amsterdamFork;
|
|
440
441
|
epochCache;
|
|
441
442
|
failedTxStore;
|
|
442
443
|
/**
|
|
@@ -506,10 +507,18 @@ export class SequencerPublisher {
|
|
|
506
507
|
this.feeAssetPriceOracle = new FeeAssetPriceOracle(this.l1TxUtils.client, this.rollupContract, this.log.createChild('price-oracle'));
|
|
507
508
|
// Initialize failed L1 tx store (optional, for test networks)
|
|
508
509
|
this.failedTxStore = createL1TxFailedStore(config.l1TxFailedStore, this.log);
|
|
510
|
+
this.amsterdamFork = new AmsterdamForkDetector({
|
|
511
|
+
getBlock: ()=>this.l1TxUtils.getBlock()
|
|
512
|
+
}, {
|
|
513
|
+
maxBlockAgeMs: config.ethereumSlotDuration * 1000,
|
|
514
|
+
dateProvider: this.dateProvider,
|
|
515
|
+
log: this.log.createChild('amsterdam-fork')
|
|
516
|
+
});
|
|
509
517
|
this.bundleSimulator = new SequencerBundleSimulator({
|
|
510
518
|
getL1TxUtils: ()=>this.l1TxUtils,
|
|
511
519
|
rollupContract: this.rollupContract,
|
|
512
520
|
epochCache: this.epochCache,
|
|
521
|
+
amsterdamFork: this.amsterdamFork,
|
|
513
522
|
log: this.log.createChild('bundle-simulator')
|
|
514
523
|
});
|
|
515
524
|
}
|
|
@@ -1048,7 +1057,9 @@ export class SequencerPublisher {
|
|
|
1048
1057
|
this.log.warn(`Timed out waiting for previous L1 block before sending requests, proceeding`, logCtx);
|
|
1049
1058
|
return;
|
|
1050
1059
|
}
|
|
1051
|
-
const
|
|
1060
|
+
const latestBlock = await this.l1TxUtils.getBlock();
|
|
1061
|
+
this.amsterdamFork.observe(latestBlock);
|
|
1062
|
+
const latestBlockTs = latestBlock.timestamp;
|
|
1052
1063
|
if (latestBlockTs >= previousL1BlockTs) {
|
|
1053
1064
|
this.log.debug(`Previous L1 block mined, proceeding to send requests`, {
|
|
1054
1065
|
...logCtx,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec-labs/sequencer-client",
|
|
3
|
-
"version": "6.0.0-
|
|
3
|
+
"version": "6.0.0-rc.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -28,31 +28,31 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@aztec-foundation/l1-artifacts": "6.0.0-rc.5",
|
|
31
|
-
"@aztec-labs/archiver": "6.0.0-
|
|
32
|
-
"@aztec-labs/blob-client": "6.0.0-
|
|
33
|
-
"@aztec-labs/blob-lib": "6.0.0-
|
|
34
|
-
"@aztec-labs/constants": "6.0.0-
|
|
35
|
-
"@aztec-labs/epoch-cache": "6.0.0-
|
|
36
|
-
"@aztec-labs/ethereum": "6.0.0-
|
|
37
|
-
"@aztec-labs/foundation": "6.0.0-
|
|
38
|
-
"@aztec-labs/node-keystore": "6.0.0-
|
|
39
|
-
"@aztec-labs/p2p": "6.0.0-
|
|
40
|
-
"@aztec-labs/prover-client": "6.0.0-
|
|
41
|
-
"@aztec-labs/simulator": "6.0.0-
|
|
42
|
-
"@aztec-labs/slasher": "6.0.0-
|
|
43
|
-
"@aztec-labs/stdlib": "6.0.0-
|
|
44
|
-
"@aztec-labs/telemetry-client": "6.0.0-
|
|
45
|
-
"@aztec-labs/validator-client": "6.0.0-
|
|
46
|
-
"@aztec-labs/validator-ha-signer": "6.0.0-
|
|
31
|
+
"@aztec-labs/archiver": "6.0.0-rc.2",
|
|
32
|
+
"@aztec-labs/blob-client": "6.0.0-rc.2",
|
|
33
|
+
"@aztec-labs/blob-lib": "6.0.0-rc.2",
|
|
34
|
+
"@aztec-labs/constants": "6.0.0-rc.2",
|
|
35
|
+
"@aztec-labs/epoch-cache": "6.0.0-rc.2",
|
|
36
|
+
"@aztec-labs/ethereum": "6.0.0-rc.2",
|
|
37
|
+
"@aztec-labs/foundation": "6.0.0-rc.2",
|
|
38
|
+
"@aztec-labs/node-keystore": "6.0.0-rc.2",
|
|
39
|
+
"@aztec-labs/p2p": "6.0.0-rc.2",
|
|
40
|
+
"@aztec-labs/prover-client": "6.0.0-rc.2",
|
|
41
|
+
"@aztec-labs/simulator": "6.0.0-rc.2",
|
|
42
|
+
"@aztec-labs/slasher": "6.0.0-rc.2",
|
|
43
|
+
"@aztec-labs/stdlib": "6.0.0-rc.2",
|
|
44
|
+
"@aztec-labs/telemetry-client": "6.0.0-rc.2",
|
|
45
|
+
"@aztec-labs/validator-client": "6.0.0-rc.2",
|
|
46
|
+
"@aztec-labs/validator-ha-signer": "6.0.0-rc.2",
|
|
47
47
|
"lodash.chunk": "^4.2.0",
|
|
48
48
|
"tslib": "^2.4.0",
|
|
49
49
|
"viem": "npm:@aztec/viem@2.38.3",
|
|
50
50
|
"zod": "~4.4.3"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@aztec-labs/noir-protocol-circuits-types": "6.0.0-
|
|
54
|
-
"@aztec-labs/protocol-contracts": "6.0.0-
|
|
55
|
-
"@aztec-labs/world-state": "6.0.0-
|
|
53
|
+
"@aztec-labs/noir-protocol-circuits-types": "6.0.0-rc.2",
|
|
54
|
+
"@aztec-labs/protocol-contracts": "6.0.0-rc.2",
|
|
55
|
+
"@aztec-labs/world-state": "6.0.0-rc.2",
|
|
56
56
|
"@electric-sql/pglite": "^0.3.14",
|
|
57
57
|
"@jest/globals": "^30.0.0",
|
|
58
58
|
"@types/jest": "^30.0.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EpochCache } from '@aztec-labs/epoch-cache';
|
|
2
2
|
import { Multicall3, type RollupContract, buildSimulationOverridesStateOverride } from '@aztec-labs/ethereum/contracts';
|
|
3
|
-
import { type L1TxUtils,
|
|
3
|
+
import { type AmsterdamForkDetector, type L1TxUtils, getMaxL1TxGasLimit } from '@aztec-labs/ethereum/l1-tx-utils';
|
|
4
4
|
import { formatViemError } from '@aztec-labs/ethereum/utils';
|
|
5
5
|
import type { SlotNumber } from '@aztec-labs/foundation/branded-types';
|
|
6
6
|
import { type Logger, createLogger } from '@aztec-labs/foundation/log';
|
|
@@ -23,7 +23,7 @@ export type DroppedRequest = {
|
|
|
23
23
|
* the bumped gas limit derived from the simulated transaction gas (plus blob evaluation gas).
|
|
24
24
|
* `droppedRequests` lists the entries that were observed to revert in simulation.
|
|
25
25
|
* - `fallback`: the node does not support eth_simulateV1 (or the simulate call threw). The
|
|
26
|
-
* caller should send `requests` as-is with a safe gas limit (e.g.
|
|
26
|
+
* caller should send `requests` as-is with a safe gas limit (e.g. `MAX_L1_TX_LIMIT`).
|
|
27
27
|
* `droppedRequests` carries any entries that the first pass already proved reverted, so the
|
|
28
28
|
* caller does not re-include them when the second pass falls back.
|
|
29
29
|
* - `aborted`: the bundle cannot be sent. `droppedRequests` contains only entries that were
|
|
@@ -62,6 +62,8 @@ export class SequencerBundleSimulator {
|
|
|
62
62
|
getL1TxUtils: () => L1TxUtils;
|
|
63
63
|
rollupContract: RollupContract;
|
|
64
64
|
epochCache: EpochCache;
|
|
65
|
+
/** Decides the gas cap for simulating and sending the bundle, which is higher once Amsterdam is active. */
|
|
66
|
+
amsterdamFork: Pick<AmsterdamForkDetector, 'isActive'>;
|
|
65
67
|
log?: Logger;
|
|
66
68
|
},
|
|
67
69
|
) {
|
|
@@ -98,12 +100,19 @@ export class SequencerBundleSimulator {
|
|
|
98
100
|
// Pin the publisher we'll use across the whole simulate call so that the publisher's rotation
|
|
99
101
|
// can't change l1TxUtils mid-flight.
|
|
100
102
|
const l1TxUtils = this.deps.getL1TxUtils();
|
|
103
|
+
const maxGasLimit = getMaxL1TxGasLimit(await this.deps.amsterdamFork.isActive());
|
|
101
104
|
|
|
102
105
|
const proposeRequest = validRequests.find(r => r.action === 'propose');
|
|
103
106
|
const simulateTimestamp = getLastL1SlotTimestampForL2Slot(targetSlot, this.deps.epochCache.getL1Constants());
|
|
104
107
|
const firstPassOverrides = await this.buildStateOverrides(!!proposeRequest);
|
|
105
108
|
|
|
106
|
-
const firstPass = await this.simulateAndDecode(
|
|
109
|
+
const firstPass = await this.simulateAndDecode(
|
|
110
|
+
l1TxUtils,
|
|
111
|
+
validRequests,
|
|
112
|
+
simulateTimestamp,
|
|
113
|
+
firstPassOverrides,
|
|
114
|
+
maxGasLimit,
|
|
115
|
+
);
|
|
107
116
|
|
|
108
117
|
if (firstPass.kind === 'fallback') {
|
|
109
118
|
this.log.warn('Bundle simulate fallback (eth_simulateV1 unavailable); caller will send bundle as-is', {
|
|
@@ -120,7 +129,7 @@ export class SequencerBundleSimulator {
|
|
|
120
129
|
}
|
|
121
130
|
|
|
122
131
|
if (firstPass.droppedRequests.length === 0) {
|
|
123
|
-
return this.buildSuccessResult(l1TxUtils, firstPass.survivors, [], firstPass, proposeRequest);
|
|
132
|
+
return this.buildSuccessResult(l1TxUtils, firstPass.survivors, [], firstPass, proposeRequest, maxGasLimit);
|
|
124
133
|
}
|
|
125
134
|
|
|
126
135
|
this.log.warn('Some bundle entries reverted; re-simulating reduced bundle', {
|
|
@@ -136,6 +145,7 @@ export class SequencerBundleSimulator {
|
|
|
136
145
|
firstPass.survivors,
|
|
137
146
|
simulateTimestamp,
|
|
138
147
|
secondPassOverrides,
|
|
148
|
+
maxGasLimit,
|
|
139
149
|
);
|
|
140
150
|
|
|
141
151
|
if (secondPass.kind === 'fallback') {
|
|
@@ -168,6 +178,7 @@ export class SequencerBundleSimulator {
|
|
|
168
178
|
firstPass.droppedRequests,
|
|
169
179
|
secondPass,
|
|
170
180
|
proposeRequest,
|
|
181
|
+
maxGasLimit,
|
|
171
182
|
);
|
|
172
183
|
}
|
|
173
184
|
|
|
@@ -177,10 +188,11 @@ export class SequencerBundleSimulator {
|
|
|
177
188
|
droppedRequests: DroppedRequest[],
|
|
178
189
|
bundleGas: { gasUsed: bigint; maxUsedGas?: bigint },
|
|
179
190
|
proposeRequest: RequestWithExpiry | undefined,
|
|
191
|
+
maxGasLimit: bigint,
|
|
180
192
|
): BundleSimulateResult {
|
|
181
193
|
const proposeSurvived = proposeRequest !== undefined && survivors.includes(proposeRequest);
|
|
182
194
|
const blobEvaluationGas = proposeSurvived ? (proposeRequest?.blobEvaluationGas ?? 0n) : 0n;
|
|
183
|
-
const gasLimit = this.computeGasLimit(l1TxUtils, bundleGas, blobEvaluationGas);
|
|
195
|
+
const gasLimit = this.computeGasLimit(l1TxUtils, bundleGas, blobEvaluationGas, maxGasLimit);
|
|
184
196
|
this.log.debug('Bundle simulate complete', {
|
|
185
197
|
survivingRequests: survivors.length,
|
|
186
198
|
bundleGasUsed: bundleGas.gasUsed,
|
|
@@ -194,7 +206,7 @@ export class SequencerBundleSimulator {
|
|
|
194
206
|
|
|
195
207
|
/**
|
|
196
208
|
* `gasLimit = bumpGasLimit(ceil(basis * 64 / 63))`, plus blob evaluation gas if a propose survived,
|
|
197
|
-
* capped at {@link
|
|
209
|
+
* capped at `maxGasLimit` (see {@link getMaxL1TxGasLimit}).
|
|
198
210
|
*
|
|
199
211
|
* The basis is the simulation's `maxUsedGas` when the node reports it, since that is measured before
|
|
200
212
|
* refunds, and its `gasUsed` otherwise. Either way the headroom on top is the buffer configured for the
|
|
@@ -204,11 +216,12 @@ export class SequencerBundleSimulator {
|
|
|
204
216
|
l1TxUtils: L1TxUtils,
|
|
205
217
|
bundleGas: { gasUsed: bigint; maxUsedGas?: bigint },
|
|
206
218
|
blobEvaluationGas: bigint,
|
|
219
|
+
maxGasLimit: bigint,
|
|
207
220
|
): bigint {
|
|
208
221
|
const basis = bundleGas.maxUsedGas ?? bundleGas.gasUsed;
|
|
209
222
|
const gasUsedWithEip150 = (basis * 64n + 62n) / 63n;
|
|
210
223
|
const gasLimit = l1TxUtils.bumpGasLimit(gasUsedWithEip150) + blobEvaluationGas;
|
|
211
|
-
return gasLimit >
|
|
224
|
+
return gasLimit > maxGasLimit ? maxGasLimit : gasLimit;
|
|
212
225
|
}
|
|
213
226
|
|
|
214
227
|
/**
|
|
@@ -227,6 +240,7 @@ export class SequencerBundleSimulator {
|
|
|
227
240
|
requests: RequestWithExpiry[],
|
|
228
241
|
simulateTimestamp: bigint,
|
|
229
242
|
stateOverrides: StateOverride,
|
|
243
|
+
maxGasLimit: bigint,
|
|
230
244
|
): Promise<SimulatePassResult> {
|
|
231
245
|
let simResult: Awaited<ReturnType<typeof Multicall3.simulateAggregate3>>;
|
|
232
246
|
try {
|
|
@@ -234,10 +248,10 @@ export class SequencerBundleSimulator {
|
|
|
234
248
|
requests.map(r => ({ to: r.request.to! as Hex, data: r.request.data! as Hex, abi: r.request.abi })),
|
|
235
249
|
l1TxUtils,
|
|
236
250
|
{
|
|
237
|
-
blockOverrides: { time: simulateTimestamp, gasLimit:
|
|
251
|
+
blockOverrides: { time: simulateTimestamp, gasLimit: maxGasLimit * 2n },
|
|
238
252
|
stateOverrides,
|
|
239
|
-
gas:
|
|
240
|
-
fallbackGasEstimate:
|
|
253
|
+
gas: maxGasLimit,
|
|
254
|
+
fallbackGasEstimate: maxGasLimit,
|
|
241
255
|
},
|
|
242
256
|
);
|
|
243
257
|
} catch (err) {
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
} from '@aztec-labs/ethereum/contracts';
|
|
20
20
|
import { type L1FeeAnalysisResult, L1FeeAnalyzer, captureWindowBlockFees } from '@aztec-labs/ethereum/l1-fee-analysis';
|
|
21
21
|
import {
|
|
22
|
+
AmsterdamForkDetector,
|
|
22
23
|
type L1BlobInputs,
|
|
23
24
|
type L1TxConfig,
|
|
24
25
|
type L1TxRequest,
|
|
@@ -173,6 +174,7 @@ export class SequencerPublisher implements Disposable {
|
|
|
173
174
|
private interrupted = false;
|
|
174
175
|
private metrics: SequencerPublisherMetrics;
|
|
175
176
|
private bundleSimulator: SequencerBundleSimulator;
|
|
177
|
+
private readonly amsterdamFork: AmsterdamForkDetector;
|
|
176
178
|
public epochCache: EpochCache;
|
|
177
179
|
private failedTxStore?: Promise<L1TxFailedStore | undefined>;
|
|
178
180
|
|
|
@@ -291,10 +293,20 @@ export class SequencerPublisher implements Disposable {
|
|
|
291
293
|
// Initialize failed L1 tx store (optional, for test networks)
|
|
292
294
|
this.failedTxStore = createL1TxFailedStore(config.l1TxFailedStore, this.log);
|
|
293
295
|
|
|
296
|
+
this.amsterdamFork = new AmsterdamForkDetector(
|
|
297
|
+
{ getBlock: () => this.l1TxUtils.getBlock() },
|
|
298
|
+
{
|
|
299
|
+
maxBlockAgeMs: config.ethereumSlotDuration * 1000,
|
|
300
|
+
dateProvider: this.dateProvider,
|
|
301
|
+
log: this.log.createChild('amsterdam-fork'),
|
|
302
|
+
},
|
|
303
|
+
);
|
|
304
|
+
|
|
294
305
|
this.bundleSimulator = new SequencerBundleSimulator({
|
|
295
306
|
getL1TxUtils: () => this.l1TxUtils,
|
|
296
307
|
rollupContract: this.rollupContract,
|
|
297
308
|
epochCache: this.epochCache,
|
|
309
|
+
amsterdamFork: this.amsterdamFork,
|
|
298
310
|
log: this.log.createChild('bundle-simulator'),
|
|
299
311
|
});
|
|
300
312
|
}
|
|
@@ -916,7 +928,9 @@ export class SequencerPublisher implements Disposable {
|
|
|
916
928
|
return;
|
|
917
929
|
}
|
|
918
930
|
|
|
919
|
-
const
|
|
931
|
+
const latestBlock = await this.l1TxUtils.getBlock();
|
|
932
|
+
this.amsterdamFork.observe(latestBlock);
|
|
933
|
+
const latestBlockTs = latestBlock.timestamp;
|
|
920
934
|
if (latestBlockTs >= previousL1BlockTs) {
|
|
921
935
|
this.log.debug(`Previous L1 block mined, proceeding to send requests`, { ...logCtx, latestBlockTs });
|
|
922
936
|
return;
|