@aztec-labs/sequencer-client 6.0.0-rc.1 → 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/config.d.ts +2 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +8 -1
- 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/dest/sequencer/sequencer.d.ts +8 -15
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +13 -20
- package/package.json +21 -21
- package/src/config.ts +9 -0
- package/src/publisher/sequencer-bundle-simulator.ts +24 -10
- package/src/publisher/sequencer-publisher.ts +15 -1
- package/src/sequencer/sequencer.ts +13 -24
package/dest/config.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export declare const DefaultSequencerConfig: {
|
|
|
42
42
|
skipPublishingCheckpointsPercent: number;
|
|
43
43
|
maxBlocksPerCheckpoint: number;
|
|
44
44
|
minPeersToPropose: number;
|
|
45
|
+
allowUnsafeInboxCatchupCapacity: false;
|
|
45
46
|
};
|
|
46
47
|
/**
|
|
47
48
|
* Configuration settings for the SequencerClient.
|
|
@@ -53,4 +54,4 @@ export declare const sequencerClientConfigMappings: ConfigMappingsType<Sequencer
|
|
|
53
54
|
* Creates an instance of SequencerClientConfig out of environment variables using sensible defaults for integration testing if not set.
|
|
54
55
|
*/
|
|
55
56
|
export declare function getConfigEnvVars(): SequencerClientConfig;
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUE2QixNQUFNLDZCQUE2QixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBMEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RixPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFPeEIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQTBCLE1BQU0sa0NBQWtDLENBQUM7QUFDL0YsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBRTNFLE9BQU8sRUFDTCxLQUFLLFdBQVcsRUFHaEIsS0FBSyxlQUFlLEVBR3JCLE1BQU0sMkJBQTJCLENBQUM7QUFJbkMsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQWlDLE1BQU0scUNBQXFDLENBQUM7QUFFaEgsT0FBTyxFQUNMLEtBQUssd0JBQXdCLEVBQzdCLEtBQUssdUJBQXVCLEVBRzdCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFFaEM7OztHQUdHO0FBQ0gsZUFBTyxNQUFNLHNCQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQStCQSxDQUFDO0FBRXBDOztHQUVHO0FBQ0gsTUFBTSxNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixHQUMxRCxjQUFjLEdBQ2QscUJBQXFCLEdBQ3JCLHVCQUF1QixHQUN2QixlQUFlLEdBQ2YsY0FBYyxHQUNkLFdBQVcsR0FDWCxJQUFJLENBQUMsU0FBUyxFQUFFLDhCQUE4QixDQUFDLEdBQy9DLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxzQkFBc0IsR0FBRyxtQkFBbUIsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO0FBRS9GLGVBQU8sTUFBTSx1QkFBdUIsRUFBRSxrQkFBa0IsQ0FBQyxlQUFlLENBbU52RSxDQUFDO0FBRUYsZUFBTyxNQUFNLDZCQUE2QixFQUFFLGtCQUFrQixDQUFDLHFCQUFxQixDQVNuRixDQUFDO0FBRUY7O0dBRUc7QUFDSCx3QkFBZ0IsZ0JBQWdCLElBQUkscUJBQXFCLENBRXhEIn0=
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EACL,KAAK,kBAAkB,EAOxB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,kCAAkC,CAAC;AAC/F,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EACL,KAAK,WAAW,EAGhB,KAAK,eAAe,EAGrB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,KAAK,qBAAqB,EAAiC,MAAM,qCAAqC,CAAC;AAEhH,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAG7B,MAAM,uBAAuB,CAAC;AAE/B,cAAc,uBAAuB,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EACL,KAAK,kBAAkB,EAOxB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,kCAAkC,CAAC;AAC/F,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EACL,KAAK,WAAW,EAGhB,KAAK,eAAe,EAGrB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,KAAK,qBAAqB,EAAiC,MAAM,qCAAqC,CAAC;AAEhH,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAG7B,MAAM,uBAAuB,CAAC;AAE/B,cAAc,uBAAuB,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BA,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,wBAAwB,GAC1D,cAAc,GACd,qBAAqB,GACrB,uBAAuB,GACvB,eAAe,GACf,cAAc,GACd,WAAW,GACX,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,GAC/C,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,GAAG,mBAAmB,GAAG,oBAAoB,CAAC,CAAC;AAE/F,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,CAAC,eAAe,CAmNvE,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CASnF,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD"}
|
package/dest/config.js
CHANGED
|
@@ -43,7 +43,8 @@ export * from './publisher/config.js';
|
|
|
43
43
|
skipPushProposedBlocksToArchiver: false,
|
|
44
44
|
skipPublishingCheckpointsPercent: 0,
|
|
45
45
|
maxBlocksPerCheckpoint: DEFAULT_MAX_BLOCKS_PER_CHECKPOINT,
|
|
46
|
-
minPeersToPropose: 1
|
|
46
|
+
minPeersToPropose: 1,
|
|
47
|
+
allowUnsafeInboxCatchupCapacity: false
|
|
47
48
|
};
|
|
48
49
|
export const sequencerConfigMappings = {
|
|
49
50
|
sequencerPollingIntervalMS: {
|
|
@@ -226,6 +227,12 @@ export const sequencerConfigMappings = {
|
|
|
226
227
|
description: 'Minimum number of connected p2p peers required to build and propose a checkpoint (zero to disable the check).' + ' Ignored when p2p is disabled by config.',
|
|
227
228
|
...numberConfigHelper(DefaultSequencerConfig.minPeersToPropose)
|
|
228
229
|
},
|
|
230
|
+
allowUnsafeInboxCatchupCapacity: {
|
|
231
|
+
// Deliberately not settable from the environment, like the other test-only flags here: a deployment must not
|
|
232
|
+
// be able to opt out of the catch-up floor by accident.
|
|
233
|
+
description: 'Allow starting with fewer block opportunities per checkpoint than a mandatory streaming-Inbox backlog needs' + ' (for testing only).',
|
|
234
|
+
...booleanConfigHelper(DefaultSequencerConfig.allowUnsafeInboxCatchupCapacity)
|
|
235
|
+
},
|
|
229
236
|
...pickConfigMappings(p2pConfigMappings, [
|
|
230
237
|
'txPublicSetupAllowListExtend'
|
|
231
238
|
])
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLXB1Ymxpc2hlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1Ymxpc2hlci9zZXF1ZW5jZXItcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFMUUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBR0wsS0FBSywwQkFBMEIsRUFLL0IsS0FBSyxjQUFjLEVBQ25CLEtBQUssdUJBQXVCLEVBQzVCLEtBQUssd0JBQXdCLEVBRTlCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQUUsYUFBYSxFQUEwQixNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZILE9BQU8sRUFFTCxLQUFLLFlBQVksRUFDakIsS0FBSyxVQUFVLEVBQ2YsS0FBSyxXQUFXLEVBRWhCLEtBQUssU0FBUyxFQUVkLEtBQUssZ0JBQWdCLEVBR3RCLE1BQU0sa0NBQWtDLENBQUM7QUFRMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3BGLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakUsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBR3ZFLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixFQUE2QixNQUFNLHFCQUFxQixD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
|
|
@@ -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,
|
|
@@ -133,20 +133,12 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
133
133
|
* the floor leave a proposer that can never reach a mandatory endpoint: L1 keeps rejecting its publications
|
|
134
134
|
* and it loses all of its slots.
|
|
135
135
|
*
|
|
136
|
-
* Only
|
|
137
|
-
* (see `PIPELINING_SETUP_OPTS`) against an Inbox nobody is filling with a cap-sized backlog, so
|
|
138
|
-
* reject every one of those runs; they get a warning
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* default-cadence e2e run.
|
|
143
|
-
*
|
|
144
|
-
* That exemption is wider than the sandbox it is for, and deliberately so for now. It is a threshold on the
|
|
145
|
-
* Ethereum slot duration, not a declaration that this node is a development one — no such flag reaches the
|
|
146
|
-
* sequencer — so a real network that happens to run short Ethereum slots is exempted too. Faster L1 slots do not
|
|
147
|
-
* raise the per-block message cap, so such a sequencer can still be unable to reach a mandatory endpoint and
|
|
148
|
-
* lose its slots against an aged backlog. The alternative was rejecting every sandbox and e2e configuration,
|
|
149
|
-
* which is why the warning stands until an explicit development-profile signal exists.
|
|
136
|
+
* Only a configuration that explicitly opts out is exempt. Sandbox and e2e profiles deliberately run one or two
|
|
137
|
+
* blocks per slot (see `PIPELINING_SETUP_OPTS`) against an Inbox nobody is filling with a cap-sized backlog, so
|
|
138
|
+
* the floor would reject every one of those runs; they set `allowUnsafeInboxCatchupCapacity` and get a warning
|
|
139
|
+
* instead. The exemption is an explicit statement about the deployment, not a threshold on the Ethereum slot
|
|
140
|
+
* duration: a real network that happens to run short L1 slots gets no more per-block message capacity out of
|
|
141
|
+
* them, so it is held to the floor like any other.
|
|
150
142
|
*/
|
|
151
143
|
private assertEffectiveCapacityClearsInboxBacklog;
|
|
152
144
|
/**
|
|
@@ -341,6 +333,7 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
341
333
|
skipBroadcastCheckpointProposal?: boolean | undefined;
|
|
342
334
|
pauseProposingForSlots?: SlotNumber[] | undefined;
|
|
343
335
|
minPeersToPropose: number;
|
|
336
|
+
allowUnsafeInboxCatchupCapacity: boolean;
|
|
344
337
|
};
|
|
345
338
|
}
|
|
346
339
|
type SequencerSyncCheckResult = {
|
|
@@ -354,4 +347,4 @@ type SequencerSyncCheckResult = {
|
|
|
354
347
|
syncedL2Slot: SlotNumber;
|
|
355
348
|
pendingChainValidationStatus: ValidateCheckpointResult;
|
|
356
349
|
};
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
350
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3NlcXVlbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQW1DLE1BQU0seUJBQXlCLENBQUM7QUFDM0YsT0FBTyxFQUFFLEtBQUssYUFBYSxFQUFvQixLQUFLLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNHLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTlHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUNMLEtBQUssU0FBUyxFQUVkLEtBQUssV0FBVyxFQUNoQixLQUFLLGFBQWEsRUFDbEIsS0FBSyxzQkFBc0IsRUFDM0IsS0FBSyx3QkFBd0IsRUFDOUIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsS0FBSyxVQUFVLEVBQ2YsS0FBSyxzQkFBc0IsRUFFNUIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU83RCxPQUFPLEVBQ0wsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxlQUFlLEVBRXBCLEtBQUssc0JBQXNCLEVBQzVCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQWdDLE1BQU0sOEJBQThCLENBQUM7QUFHdEcsT0FBTyxFQUFFLGlCQUFpQixFQUEwQixNQUFNLDhCQUE4QixDQUFDO0FBQ3pGLE9BQU8sRUFFTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBR1osTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUlySCxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzFGLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0YsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVyRSxPQUFPLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRzlGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUduRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFFMUIsMkRBQTJEO0FBQzNELEtBQUssb0JBQW9CLEdBQUc7SUFDMUIsSUFBSSxFQUFFLFVBQVUsQ0FBQztJQUNqQixVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLEtBQUssRUFBRSxXQUFXLENBQUM7SUFDbkIsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUN6QixFQUFFLEVBQUUsTUFBTSxDQUFDO0lBQ1gsVUFBVSxFQUFFLE1BQU0sQ0FBQztDQUNwQixDQUFDOztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxxQkFBYSxTQUFVLFNBQVEsY0FBOEQ7SUFtRHpGLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSx5QkFBeUI7SUFDckQsU0FBUyxDQUFDLGVBQWUsRUFBRSxlQUFlO0lBQzFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUscUJBQXFCO0lBQy9DLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRztJQUN4QixTQUFTLENBQUMsVUFBVSxFQUFFLHNCQUFzQjtJQUM1QyxTQUFTLENBQUMsYUFBYSxFQUFFLHNCQUFzQixHQUFHLFNBQVM7SUFDM0QsU0FBUyxDQUFDLGFBQWEsRUFBRSxhQUFhLEdBQUcsV0FBVyxHQUFHLHNCQUFzQjtJQUM3RSxTQUFTLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CO0lBQ2xELFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSwwQkFBMEI7SUFDeEQsU0FBUyxDQUFDLFdBQVcsRUFBRSx3QkFBd0I7SUFDL0MsU0FBUyxDQUFDLFlBQVksRUFBRSxZQUFZO0lBQ3BDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVTtJQUNoQyxTQUFTLENBQUMsY0FBYyxFQUFFLGNBQWM7SUFDeEMsU0FBUyxDQUFDLGFBQWEsRUFBRSxhQUFhO0lBRXRDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsZUFBZTtJQUNwQyxTQUFTLENBQUMsR0FBRztJQUNiLHdHQUF3RztJQUN4RyxTQUFTLENBQUMsOEJBQThCLENBQUM7SUFwRTNDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxjQUFjLENBQUM7SUFDMUMsT0FBTyxDQUFDLEtBQUssQ0FBMEI7SUFDdkMsT0FBTyxDQUFDLGVBQWUsQ0FBeUI7SUFDaEQsMEZBQTBGO0lBQzFGLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBUztJQUNqQyxPQUFPLENBQUMsT0FBTyxDQUFtQjtJQUNsQyxPQUFPLENBQUMsNEJBQTRCLENBQStCO0lBQ25FLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFTO0lBRWxDLDhIQUE4SDtJQUM5SCxPQUFPLENBQUMseUJBQXlCLENBQXlCO0lBRTFEOzJHQUN1RztJQUN2RyxPQUFPLENBQUMsdUJBQXVCLENBQXVFO0lBRXRHLGtHQUFrRztJQUNsRyxPQUFPLENBQUMsMEJBQTBCLENBQTBCO0lBRTVELHFHQUFxRztJQUNyRyxTQUFTLENBQUMsZ0NBQWdDLEVBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUVuRSwwQ0FBMEM7SUFDMUMsT0FBTyxDQUFDLHNCQUFzQixDQUF5QjtJQUV2RCxnRkFBZ0Y7SUFDaEYsT0FBTyxDQUFDLDhCQUE4QixDQUEwQjtJQUVoRSwyR0FBMkc7SUFDM0csU0FBUyxDQUFDLHlCQUF5QixFQUFFLHFCQUFxQixHQUFHLFNBQVMsQ0FBQztJQUV2RTs7Ozs7Ozs7T0FRRztJQUNILFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxrQkFBeUI7SUFFM0Qsd0dBQXdHO0lBQ3hHLFNBQVMsQ0FBQyxTQUFTLEVBQUcsaUJBQWlCLENBQUM7SUFFeEMsK0JBQStCO0lBQy9CLFNBQVMsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQTBCO0lBQ25FLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQStCO0lBRWhFLFlBQ1ksZ0JBQWdCLEVBQUUseUJBQXlCLEVBQzNDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLGNBQWMsRUFBRSxxQkFBcUIsRUFDckMsU0FBUyxFQUFFLEdBQUcsRUFDZCxVQUFVLEVBQUUsc0JBQXNCLEVBQ2xDLGFBQWEsRUFBRSxzQkFBc0IsR0FBRyxTQUFTLEVBQ2pELGFBQWEsRUFBRSxhQUFhLEdBQUcsV0FBVyxHQUFHLHNCQUFzQixFQUNuRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFDeEMsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQzlDLFdBQVcsRUFBRSx3QkFBd0IsRUFDckMsWUFBWSxFQUFFLFlBQVksRUFDMUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsY0FBYyxFQUFFLGNBQWMsRUFDOUIsYUFBYSxFQUFFLGFBQWEsRUFDdEMsTUFBTSxFQUFFLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxlQUFlLENBQUMsRUFDaEUsU0FBUyxHQUFFLGVBQXNDLEVBQ2pELEdBQUcsU0FBNEI7SUFDekMsd0dBQXdHO0lBQzlGLDhCQUE4QixDQUFDLDRDQUFnQyxFQWtCMUU7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLFFBZW5EO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxPQUFPLENBQUMsY0FBYztJQW9CdEI7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsT0FBTyxDQUFDLHlDQUF5QztJQTJCakQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxPQUFPLENBQUMsZ0NBQWdDO0lBNkN4QyxzRUFBc0U7SUFDL0QsSUFBSSxTQUVWO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLEtBQUssU0FnQlg7SUFFRCxrRkFBa0Y7SUFDM0UsT0FBTyw4QkFFYjtJQUVEOzs7Ozs7T0FNRztJQUNVLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBa0JqQztJQUVEOzs7Ozs7O09BT0c7SUFDVSxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQWFsQztJQUVELDJDQUEyQztJQUMzQyxVQUFnQixRQUFRLGtCQVN2QjtJQUVELGtEQUFrRDtJQUMzQyxNQUFNOztNQUVaO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFVBQ2dCLElBQUksb0NBc0NuQjtJQUVELGlFQUFpRTtJQUNqRSxTQUFTLENBQUMsMEJBQTBCLElBQUksb0JBQW9CLENBSTNEO0lBRUQ7Ozs7T0FJRztJQUNILFVBQ2dCLHlCQUF5QixDQUN2QyxJQUFJLEVBQUUsVUFBVSxFQUNoQixVQUFVLEVBQUUsVUFBVSxFQUN0QixLQUFLLEVBQUUsV0FBVyxFQUNsQixXQUFXLEVBQUUsV0FBVyxFQUN4QixFQUFFLEVBQUUsTUFBTSxFQUNWLFVBQVUsRUFBRSxNQUFNLEdBQ2pCLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxTQUFTLENBQUMsQ0ErUzVDO0lBRUQsU0FBUyxDQUFDLDJCQUEyQixDQUNuQyxVQUFVLEVBQUUsVUFBVSxFQUN0QixXQUFXLEVBQUUsV0FBVyxFQUN4QixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsbUJBQW1CLEVBQUUsV0FBVyxFQUNoQyw0QkFBNEIsRUFBRSxnQkFBZ0IsRUFDOUMsUUFBUSxFQUFFLFVBQVUsR0FBRyxTQUFTLEVBQ2hDLFNBQVMsRUFBRSxrQkFBa0IsRUFDN0IsZUFBZSxFQUFFLFVBQVUsRUFDM0Isb0JBQW9CLEVBQUUsMkJBQTJCLEdBQUcsU0FBUyxFQUM3RCxzQkFBc0IsQ0FBQyxFQUFFLHNCQUFzQixHQUM5QyxxQkFBcUIsQ0FxQ3ZCO0lBRUQ7O09BRUc7SUFDSSxRQUFRLElBQUksY0FBYyxDQUVoQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxTQUFTLENBQUMsUUFBUSxDQUNoQixhQUFhLEVBQUUsY0FBYyxFQUM3QixVQUFVLEVBQUUsVUFBVSxHQUFHLFNBQVMsRUFDbEMsSUFBSSxHQUFFO1FBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQU8sR0FDN0IsSUFBSSxDQTJDTjtJQUVEOzs7T0FHRztJQUNILFVBQWdCLFNBQVMsQ0FBQyxJQUFJLEVBQUU7UUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDO1FBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxDQWlIL0c7SUFFRDs7O09BR0c7SUFDSCxVQUFnQixlQUFlLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBbURsRztJQUVEOzs7O09BSUc7SUFDSCxVQUNnQiw4QkFBOEIsQ0FBQyxJQUFJLEVBQUU7UUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDO1FBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXFGaEg7WUFFYSx5QkFBeUI7SUFTdkM7OztPQUdHO0lBQ0gsVUFDZ0IsMEJBQTBCLENBQUMsSUFBSSxFQUFFO1FBQy9DLElBQUksRUFBRSxVQUFVLENBQUM7UUFDakIsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUN2QixRQUFRLEVBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQztLQUNsQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0E2RGhCO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFVBQWdCLDhCQUE4QixDQUM1Qyw0QkFBNEIsRUFBRSx3QkFBd0IsRUFDdEQsV0FBVyxFQUFFLFVBQVUsR0FDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXVHZjtJQUVELE9BQU8sQ0FBQyxxQkFBcUI7SUE4QjdCOzs7T0FHRztJQUNILE9BQU8sQ0FBQyx3QkFBd0I7SUFLaEMsSUFBVyxpQkFBaUIsV0FFM0I7SUFFRCxJQUFXLGFBQWEsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUU3QztJQUVNLGdCQUFnQixJQUFJLHNCQUFzQixHQUFHLFNBQVMsQ0FFNUQ7SUFFRCxJQUFXLE1BQU0sSUFBSSxNQUFNLENBRTFCO0lBRU0scUJBQXFCLGlCQUUzQjtJQUVELHFGQUFxRjtJQUM5RSwyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxDQUVyRTtJQUVNLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFFZjtDQUNGO0FBRUQsS0FBSyx3QkFBd0IsR0FBRztJQUM5QixTQUFTLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDdEIsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDbkMsNEJBQTRCLEVBQUUsZ0JBQWdCLENBQUM7SUFDL0MsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUN6QixPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQ1oscUJBQXFCLEVBQUUsT0FBTyxDQUFDO0lBQy9CLHNCQUFzQixDQUFDLEVBQUUsc0JBQXNCLENBQUM7SUFDaEQsWUFBWSxFQUFFLFVBQVUsQ0FBQztJQUN6Qiw0QkFBNEIsRUFBRSx3QkFBd0IsQ0FBQztDQUN4RCxDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAmC,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,KAAK,aAAa,EAAoB,KAAK,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC3G,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAE9G,OAAO,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAO7D,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EAEpB,KAAK,sBAAsB,EAC5B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,KAAK,mBAAmB,EAAgC,MAAM,8BAA8B,CAAC;AAGtG,OAAO,
|
|
1
|
+
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
|
|
@@ -451,7 +451,7 @@ import { MIN_PER_BLOCK_ALLOCATION_MULTIPLIER, MIN_PER_BLOCK_DA_ALLOCATION_MULTIP
|
|
|
451
451
|
import { SequencerConfigSchema } from '@aztec-labs/stdlib/interfaces/server';
|
|
452
452
|
import { MIN_BLOCKS_FOR_INBOX_CATCHUP } from '@aztec-labs/stdlib/messaging';
|
|
453
453
|
import { pickFromSchema } from '@aztec-labs/stdlib/schemas';
|
|
454
|
-
import {
|
|
454
|
+
import { buildProposerTimetable } from '@aztec-labs/stdlib/timetable';
|
|
455
455
|
import { Attributes, getTelemetryClient, trackSpan } from '@aztec-labs/telemetry-client';
|
|
456
456
|
import EventEmitter from 'node:events';
|
|
457
457
|
import { DefaultSequencerConfig } from '../config.js';
|
|
@@ -617,27 +617,19 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
617
617
|
* the floor leave a proposer that can never reach a mandatory endpoint: L1 keeps rejecting its publications
|
|
618
618
|
* and it loses all of its slots.
|
|
619
619
|
*
|
|
620
|
-
* Only
|
|
621
|
-
* (see `PIPELINING_SETUP_OPTS`) against an Inbox nobody is filling with a cap-sized backlog, so
|
|
622
|
-
* reject every one of those runs; they get a warning
|
|
623
|
-
*
|
|
624
|
-
*
|
|
625
|
-
*
|
|
626
|
-
* default-cadence e2e run.
|
|
627
|
-
*
|
|
628
|
-
* That exemption is wider than the sandbox it is for, and deliberately so for now. It is a threshold on the
|
|
629
|
-
* Ethereum slot duration, not a declaration that this node is a development one — no such flag reaches the
|
|
630
|
-
* sequencer — so a real network that happens to run short Ethereum slots is exempted too. Faster L1 slots do not
|
|
631
|
-
* raise the per-block message cap, so such a sequencer can still be unable to reach a mandatory endpoint and
|
|
632
|
-
* lose its slots against an aged backlog. The alternative was rejecting every sandbox and e2e configuration,
|
|
633
|
-
* which is why the warning stands until an explicit development-profile signal exists.
|
|
620
|
+
* Only a configuration that explicitly opts out is exempt. Sandbox and e2e profiles deliberately run one or two
|
|
621
|
+
* blocks per slot (see `PIPELINING_SETUP_OPTS`) against an Inbox nobody is filling with a cap-sized backlog, so
|
|
622
|
+
* the floor would reject every one of those runs; they set `allowUnsafeInboxCatchupCapacity` and get a warning
|
|
623
|
+
* instead. The exemption is an explicit statement about the deployment, not a threshold on the Ethereum slot
|
|
624
|
+
* duration: a real network that happens to run short L1 slots gets no more per-block message capacity out of
|
|
625
|
+
* them, so it is held to the floor like any other.
|
|
634
626
|
*/ assertEffectiveCapacityClearsInboxBacklog(config, timetableMaxBlocks) {
|
|
635
627
|
const effectiveMaxBlocks = Math.min(config.maxBlocksPerCheckpoint, timetableMaxBlocks);
|
|
636
628
|
if (effectiveMaxBlocks >= MIN_BLOCKS_FOR_INBOX_CATCHUP) {
|
|
637
629
|
return;
|
|
638
630
|
}
|
|
639
631
|
const detail = `this sequencer can build at most ${effectiveMaxBlocks} block(s) per checkpoint ` + `(MAX_BLOCKS_PER_CHECKPOINT ${config.maxBlocksPerCheckpoint}, ${timetableMaxBlocks} derived from slot ` + `timings), below the ${MIN_BLOCKS_FOR_INBOX_CATCHUP} needed to clear a mandatory streaming-Inbox backlog`;
|
|
640
|
-
if (
|
|
632
|
+
if (config.allowUnsafeInboxCatchupCapacity) {
|
|
641
633
|
this.log.warn(`Inbox catch-up capacity below the floor: ${detail}.`, {
|
|
642
634
|
effectiveMaxBlocks,
|
|
643
635
|
maxBlocksPerCheckpoint: config.maxBlocksPerCheckpoint,
|
|
@@ -867,7 +859,7 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
867
859
|
// Cheap proposer check first: most nodes are not the proposer for most slots, so gate the
|
|
868
860
|
// expensive multi-subsystem checkSync (and the rest of the build path) behind it. Computed once
|
|
869
861
|
// here and reused for the escape-hatch voting path below. No setState/timing gate on this path:
|
|
870
|
-
// the build-start deadline gate runs only on the proposer build path
|
|
862
|
+
// the build-start deadline gate runs only on the proposer build path, before checkSync.
|
|
871
863
|
const [canPropose, proposer] = await this.checkCanPropose(targetSlot);
|
|
872
864
|
// If escape hatch is open for the target epoch, do not start checkpoint proposal work and do not attempt invalidations.
|
|
873
865
|
// Still perform governance/slashing voting (as proposer) once per slot.
|
|
@@ -911,9 +903,10 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
911
903
|
// Explicit build-loop entry gate: if we are past the latest useful block-building start for the
|
|
912
904
|
// target slot, abandon building for this slot. The proposer prioritizes the ideal L1-publish path
|
|
913
905
|
// and does not plan around the late consensus-handoff path. This is the proposer build path's
|
|
914
|
-
// timing gate; it runs only after we know we are the
|
|
915
|
-
//
|
|
916
|
-
//
|
|
906
|
+
// timing gate; it runs only after we know we are the proposer, so non-proposer invalidation and escape-hatch
|
|
907
|
+
// voting (which returned above) are never gated by build timing. Vote-only paths still run when block building is
|
|
908
|
+
// abandoned. This gate deliberately runs before checkSync, so a proposer whose archiver cannot sync still reaches
|
|
909
|
+
// the prune fallback, which is what un-sticks a network where every archiver refuses the same pending checkpoint.
|
|
917
910
|
const startDeadline = this.timetable.getBuildStartDeadline(targetSlot);
|
|
918
911
|
const nowForStartGate = this.dateProvider.now() / 1000;
|
|
919
912
|
if (nowForStartGate > startDeadline) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec-labs/sequencer-client",
|
|
3
|
-
"version": "6.0.0-rc.
|
|
3
|
+
"version": "6.0.0-rc.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -27,32 +27,32 @@
|
|
|
27
27
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@aztec-foundation/l1-artifacts": "6.0.0-rc.
|
|
31
|
-
"@aztec-labs/archiver": "6.0.0-rc.
|
|
32
|
-
"@aztec-labs/blob-client": "6.0.0-rc.
|
|
33
|
-
"@aztec-labs/blob-lib": "6.0.0-rc.
|
|
34
|
-
"@aztec-labs/constants": "6.0.0-rc.
|
|
35
|
-
"@aztec-labs/epoch-cache": "6.0.0-rc.
|
|
36
|
-
"@aztec-labs/ethereum": "6.0.0-rc.
|
|
37
|
-
"@aztec-labs/foundation": "6.0.0-rc.
|
|
38
|
-
"@aztec-labs/node-keystore": "6.0.0-rc.
|
|
39
|
-
"@aztec-labs/p2p": "6.0.0-rc.
|
|
40
|
-
"@aztec-labs/prover-client": "6.0.0-rc.
|
|
41
|
-
"@aztec-labs/simulator": "6.0.0-rc.
|
|
42
|
-
"@aztec-labs/slasher": "6.0.0-rc.
|
|
43
|
-
"@aztec-labs/stdlib": "6.0.0-rc.
|
|
44
|
-
"@aztec-labs/telemetry-client": "6.0.0-rc.
|
|
45
|
-
"@aztec-labs/validator-client": "6.0.0-rc.
|
|
46
|
-
"@aztec-labs/validator-ha-signer": "6.0.0-rc.
|
|
30
|
+
"@aztec-foundation/l1-artifacts": "6.0.0-rc.5",
|
|
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-rc.
|
|
54
|
-
"@aztec-labs/protocol-contracts": "6.0.0-rc.
|
|
55
|
-
"@aztec-labs/world-state": "6.0.0-rc.
|
|
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",
|
package/src/config.ts
CHANGED
|
@@ -70,6 +70,7 @@ export const DefaultSequencerConfig = {
|
|
|
70
70
|
skipPublishingCheckpointsPercent: 0,
|
|
71
71
|
maxBlocksPerCheckpoint: DEFAULT_MAX_BLOCKS_PER_CHECKPOINT,
|
|
72
72
|
minPeersToPropose: 1,
|
|
73
|
+
allowUnsafeInboxCatchupCapacity: false,
|
|
73
74
|
} satisfies ResolvedSequencerConfig;
|
|
74
75
|
|
|
75
76
|
/**
|
|
@@ -287,6 +288,14 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
287
288
|
' Ignored when p2p is disabled by config.',
|
|
288
289
|
...numberConfigHelper(DefaultSequencerConfig.minPeersToPropose),
|
|
289
290
|
},
|
|
291
|
+
allowUnsafeInboxCatchupCapacity: {
|
|
292
|
+
// Deliberately not settable from the environment, like the other test-only flags here: a deployment must not
|
|
293
|
+
// be able to opt out of the catch-up floor by accident.
|
|
294
|
+
description:
|
|
295
|
+
'Allow starting with fewer block opportunities per checkpoint than a mandatory streaming-Inbox backlog needs' +
|
|
296
|
+
' (for testing only).',
|
|
297
|
+
...booleanConfigHelper(DefaultSequencerConfig.allowUnsafeInboxCatchupCapacity),
|
|
298
|
+
},
|
|
290
299
|
...pickConfigMappings(p2pConfigMappings, ['txPublicSetupAllowListExtend']),
|
|
291
300
|
};
|
|
292
301
|
|
|
@@ -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;
|
|
@@ -40,11 +40,7 @@ import {
|
|
|
40
40
|
import { type L1ToL2MessageSource, MIN_BLOCKS_FOR_INBOX_CATCHUP } from '@aztec-labs/stdlib/messaging';
|
|
41
41
|
import type { CoordinationSignatureContext } from '@aztec-labs/stdlib/p2p';
|
|
42
42
|
import { pickFromSchema } from '@aztec-labs/stdlib/schemas';
|
|
43
|
-
import {
|
|
44
|
-
FAST_PROFILE_ETHEREUM_SLOT_DURATION,
|
|
45
|
-
ProposerTimetable,
|
|
46
|
-
buildProposerTimetable,
|
|
47
|
-
} from '@aztec-labs/stdlib/timetable';
|
|
43
|
+
import { ProposerTimetable, buildProposerTimetable } from '@aztec-labs/stdlib/timetable';
|
|
48
44
|
import {
|
|
49
45
|
Attributes,
|
|
50
46
|
type TelemetryClient,
|
|
@@ -243,20 +239,12 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
243
239
|
* the floor leave a proposer that can never reach a mandatory endpoint: L1 keeps rejecting its publications
|
|
244
240
|
* and it loses all of its slots.
|
|
245
241
|
*
|
|
246
|
-
* Only
|
|
247
|
-
* (see `PIPELINING_SETUP_OPTS`) against an Inbox nobody is filling with a cap-sized backlog, so
|
|
248
|
-
* reject every one of those runs; they get a warning
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
* default-cadence e2e run.
|
|
253
|
-
*
|
|
254
|
-
* That exemption is wider than the sandbox it is for, and deliberately so for now. It is a threshold on the
|
|
255
|
-
* Ethereum slot duration, not a declaration that this node is a development one — no such flag reaches the
|
|
256
|
-
* sequencer — so a real network that happens to run short Ethereum slots is exempted too. Faster L1 slots do not
|
|
257
|
-
* raise the per-block message cap, so such a sequencer can still be unable to reach a mandatory endpoint and
|
|
258
|
-
* lose its slots against an aged backlog. The alternative was rejecting every sandbox and e2e configuration,
|
|
259
|
-
* which is why the warning stands until an explicit development-profile signal exists.
|
|
242
|
+
* Only a configuration that explicitly opts out is exempt. Sandbox and e2e profiles deliberately run one or two
|
|
243
|
+
* blocks per slot (see `PIPELINING_SETUP_OPTS`) against an Inbox nobody is filling with a cap-sized backlog, so
|
|
244
|
+
* the floor would reject every one of those runs; they set `allowUnsafeInboxCatchupCapacity` and get a warning
|
|
245
|
+
* instead. The exemption is an explicit statement about the deployment, not a threshold on the Ethereum slot
|
|
246
|
+
* duration: a real network that happens to run short L1 slots gets no more per-block message capacity out of
|
|
247
|
+
* them, so it is held to the floor like any other.
|
|
260
248
|
*/
|
|
261
249
|
private assertEffectiveCapacityClearsInboxBacklog(config: ResolvedSequencerConfig, timetableMaxBlocks: number) {
|
|
262
250
|
const effectiveMaxBlocks = Math.min(config.maxBlocksPerCheckpoint, timetableMaxBlocks);
|
|
@@ -269,7 +257,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
269
257
|
`(MAX_BLOCKS_PER_CHECKPOINT ${config.maxBlocksPerCheckpoint}, ${timetableMaxBlocks} derived from slot ` +
|
|
270
258
|
`timings), below the ${MIN_BLOCKS_FOR_INBOX_CATCHUP} needed to clear a mandatory streaming-Inbox backlog`;
|
|
271
259
|
|
|
272
|
-
if (
|
|
260
|
+
if (config.allowUnsafeInboxCatchupCapacity) {
|
|
273
261
|
this.log.warn(`Inbox catch-up capacity below the floor: ${detail}.`, {
|
|
274
262
|
effectiveMaxBlocks,
|
|
275
263
|
maxBlocksPerCheckpoint: config.maxBlocksPerCheckpoint,
|
|
@@ -546,7 +534,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
546
534
|
// Cheap proposer check first: most nodes are not the proposer for most slots, so gate the
|
|
547
535
|
// expensive multi-subsystem checkSync (and the rest of the build path) behind it. Computed once
|
|
548
536
|
// here and reused for the escape-hatch voting path below. No setState/timing gate on this path:
|
|
549
|
-
// the build-start deadline gate runs only on the proposer build path
|
|
537
|
+
// the build-start deadline gate runs only on the proposer build path, before checkSync.
|
|
550
538
|
const [canPropose, proposer] = await this.checkCanPropose(targetSlot);
|
|
551
539
|
|
|
552
540
|
// If escape hatch is open for the target epoch, do not start checkpoint proposal work and do not attempt invalidations.
|
|
@@ -586,9 +574,10 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
586
574
|
// Explicit build-loop entry gate: if we are past the latest useful block-building start for the
|
|
587
575
|
// target slot, abandon building for this slot. The proposer prioritizes the ideal L1-publish path
|
|
588
576
|
// and does not plan around the late consensus-handoff path. This is the proposer build path's
|
|
589
|
-
// timing gate; it runs only after we know we are the
|
|
590
|
-
//
|
|
591
|
-
//
|
|
577
|
+
// timing gate; it runs only after we know we are the proposer, so non-proposer invalidation and escape-hatch
|
|
578
|
+
// voting (which returned above) are never gated by build timing. Vote-only paths still run when block building is
|
|
579
|
+
// abandoned. This gate deliberately runs before checkSync, so a proposer whose archiver cannot sync still reaches
|
|
580
|
+
// the prune fallback, which is what un-sticks a network where every archiver refuses the same pending checkpoint.
|
|
592
581
|
const startDeadline = this.timetable.getBuildStartDeadline(targetSlot);
|
|
593
582
|
const nowForStartGate = this.dateProvider.now() / 1000;
|
|
594
583
|
if (nowForStartGate > startDeadline) {
|