@aztec/sequencer-client 0.0.1-commit.ffe5b04ea → 0.0.1-commit.fff30aa
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/client/sequencer-client.d.ts +5 -12
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +22 -72
- package/dest/config.d.ts +2 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +7 -1
- package/dest/global_variable_builder/global_builder.d.ts +13 -7
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/global_variable_builder/global_builder.js +22 -21
- package/dest/global_variable_builder/index.d.ts +2 -2
- package/dest/global_variable_builder/index.d.ts.map +1 -1
- package/dest/publisher/config.d.ts +1 -5
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +1 -6
- package/dest/publisher/index.d.ts +1 -2
- package/dest/publisher/index.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-factory.d.ts +1 -1
- package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-factory.js +0 -14
- package/dest/publisher/sequencer-publisher.d.ts +15 -18
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +70 -290
- package/dest/sequencer/checkpoint_proposal_job.d.ts +3 -1
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +66 -63
- package/dest/sequencer/checkpoint_voter.d.ts +1 -2
- package/dest/sequencer/checkpoint_voter.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_voter.js +2 -5
- package/dest/sequencer/sequencer.d.ts +6 -3
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +17 -16
- package/dest/sequencer/types.d.ts +2 -5
- package/dest/sequencer/types.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.d.ts +4 -4
- package/dest/test/mock_checkpoint_builder.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.js +2 -0
- package/package.json +28 -28
- package/src/client/sequencer-client.ts +34 -94
- package/src/config.ts +8 -1
- package/src/global_variable_builder/global_builder.ts +22 -23
- package/src/global_variable_builder/index.ts +1 -1
- package/src/publisher/config.ts +0 -9
- package/src/publisher/index.ts +0 -3
- package/src/publisher/sequencer-publisher-factory.ts +0 -15
- package/src/publisher/sequencer-publisher.ts +71 -276
- package/src/sequencer/checkpoint_proposal_job.ts +93 -77
- package/src/sequencer/checkpoint_voter.ts +1 -12
- package/src/sequencer/sequencer.ts +20 -17
- package/src/sequencer/types.ts +2 -5
- package/src/test/mock_checkpoint_builder.ts +5 -3
- package/dest/publisher/l1_tx_failed_store/factory.d.ts +0 -11
- package/dest/publisher/l1_tx_failed_store/factory.d.ts.map +0 -1
- package/dest/publisher/l1_tx_failed_store/factory.js +0 -22
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +0 -59
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +0 -1
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.js +0 -1
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts +0 -15
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts.map +0 -1
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.js +0 -34
- package/dest/publisher/l1_tx_failed_store/index.d.ts +0 -4
- package/dest/publisher/l1_tx_failed_store/index.d.ts.map +0 -1
- package/dest/publisher/l1_tx_failed_store/index.js +0 -2
- package/src/publisher/l1_tx_failed_store/factory.ts +0 -32
- package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +0 -55
- package/src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts +0 -46
- package/src/publisher/l1_tx_failed_store/index.ts +0 -3
|
@@ -2,7 +2,7 @@ import { type BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-ty
|
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { L2Block } from '@aztec/stdlib/block';
|
|
4
4
|
import { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
5
|
-
import type { FullNodeBlockBuilderConfig, ICheckpointBlockBuilder, ICheckpointsBuilder, MerkleTreeWriteOperations
|
|
5
|
+
import type { BlockBuilderOptions, FullNodeBlockBuilderConfig, ICheckpointBlockBuilder, ICheckpointsBuilder, MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
6
6
|
import type { CheckpointGlobalVariables, Tx } from '@aztec/stdlib/tx';
|
|
7
7
|
import type { BuildBlockInCheckpointResult } from '@aztec/validator-client';
|
|
8
8
|
/**
|
|
@@ -22,7 +22,7 @@ export declare class MockCheckpointBuilder implements ICheckpointBlockBuilder {
|
|
|
22
22
|
buildBlockCalls: Array<{
|
|
23
23
|
blockNumber: BlockNumber;
|
|
24
24
|
timestamp: bigint;
|
|
25
|
-
opts:
|
|
25
|
+
opts: BlockBuilderOptions;
|
|
26
26
|
}>;
|
|
27
27
|
/** Track all consumed transaction hashes across buildBlock calls */
|
|
28
28
|
consumedTxHashes: Set<string>;
|
|
@@ -39,7 +39,7 @@ export declare class MockCheckpointBuilder implements ICheckpointBlockBuilder {
|
|
|
39
39
|
*/
|
|
40
40
|
setBlockProvider(provider: () => L2Block): this;
|
|
41
41
|
getConstantData(): CheckpointGlobalVariables;
|
|
42
|
-
buildBlock(pendingTxs: Iterable<Tx> | AsyncIterable<Tx>, blockNumber: BlockNumber, timestamp: bigint, opts:
|
|
42
|
+
buildBlock(pendingTxs: Iterable<Tx> | AsyncIterable<Tx>, blockNumber: BlockNumber, timestamp: bigint, opts: BlockBuilderOptions): Promise<BuildBlockInCheckpointResult>;
|
|
43
43
|
completeCheckpoint(): Promise<Checkpoint>;
|
|
44
44
|
getCheckpoint(): Promise<Checkpoint>;
|
|
45
45
|
private buildCheckpoint;
|
|
@@ -92,4 +92,4 @@ export declare class MockCheckpointsBuilder implements ICheckpointsBuilder {
|
|
|
92
92
|
/** Reset for reuse in another test */
|
|
93
93
|
reset(): void;
|
|
94
94
|
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19jaGVja3BvaW50X2J1aWxkZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfY2hlY2twb2ludF9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLFdBQVcsRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFDVixtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIseUJBQXlCLEVBQzFCLE1BQU0saUNBQWlDLENBQUM7QUFHekMsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RTs7O0dBR0c7QUFDSCxxQkFBYSxxQkFBc0IsWUFBVyx1QkFBdUI7SUF3QmpFLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUMxQixPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtJQXhCbkMsT0FBTyxDQUFDLE1BQU0sQ0FBaUI7SUFDL0IsT0FBTyxDQUFDLFdBQVcsQ0FBaUI7SUFDcEMsT0FBTyxDQUFDLGVBQWUsQ0FBYztJQUNyQyxPQUFPLENBQUMsVUFBVSxDQUFLO0lBRXZCLHFGQUFxRjtJQUNyRixPQUFPLENBQUMsYUFBYSxDQUEwQztJQUUvRCxpQ0FBaUM7SUFDMUIsZUFBZSxFQUFFLEtBQUssQ0FBQztRQUM1QixXQUFXLEVBQUUsV0FBVyxDQUFDO1FBQ3pCLFNBQVMsRUFBRSxNQUFNLENBQUM7UUFDbEIs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_checkpoint_builder.d.ts","sourceRoot":"","sources":["../../src/test/mock_checkpoint_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,gBAAgB,EAAyB,MAAM,iCAAiC,CAAC;AAC5G,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EACV,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"mock_checkpoint_builder.d.ts","sourceRoot":"","sources":["../../src/test/mock_checkpoint_builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -216,6 +216,8 @@ import { makeAppendOnlyTreeSnapshot } from '@aztec/stdlib/testing';
|
|
|
216
216
|
if (!this.checkpointBuilder) {
|
|
217
217
|
// Auto-create a builder if none was set
|
|
218
218
|
this.checkpointBuilder = new MockCheckpointBuilder(constants, checkpointNumber);
|
|
219
|
+
} else {
|
|
220
|
+
this.checkpointBuilder.resetCheckpointState();
|
|
219
221
|
}
|
|
220
222
|
return Promise.resolve(this.checkpointBuilder);
|
|
221
223
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.fff30aa",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -26,38 +26,38 @@
|
|
|
26
26
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
30
|
-
"@aztec/bb-prover": "0.0.1-commit.
|
|
31
|
-
"@aztec/blob-client": "0.0.1-commit.
|
|
32
|
-
"@aztec/blob-lib": "0.0.1-commit.
|
|
33
|
-
"@aztec/constants": "0.0.1-commit.
|
|
34
|
-
"@aztec/epoch-cache": "0.0.1-commit.
|
|
35
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
36
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
37
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
38
|
-
"@aztec/merkle-tree": "0.0.1-commit.
|
|
39
|
-
"@aztec/node-keystore": "0.0.1-commit.
|
|
40
|
-
"@aztec/noir-acvm_js": "0.0.1-commit.
|
|
41
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
42
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
43
|
-
"@aztec/noir-types": "0.0.1-commit.
|
|
44
|
-
"@aztec/p2p": "0.0.1-commit.
|
|
45
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
46
|
-
"@aztec/prover-client": "0.0.1-commit.
|
|
47
|
-
"@aztec/simulator": "0.0.1-commit.
|
|
48
|
-
"@aztec/slasher": "0.0.1-commit.
|
|
49
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
50
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
51
|
-
"@aztec/validator-client": "0.0.1-commit.
|
|
52
|
-
"@aztec/validator-ha-signer": "0.0.1-commit.
|
|
53
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
29
|
+
"@aztec/aztec.js": "0.0.1-commit.fff30aa",
|
|
30
|
+
"@aztec/bb-prover": "0.0.1-commit.fff30aa",
|
|
31
|
+
"@aztec/blob-client": "0.0.1-commit.fff30aa",
|
|
32
|
+
"@aztec/blob-lib": "0.0.1-commit.fff30aa",
|
|
33
|
+
"@aztec/constants": "0.0.1-commit.fff30aa",
|
|
34
|
+
"@aztec/epoch-cache": "0.0.1-commit.fff30aa",
|
|
35
|
+
"@aztec/ethereum": "0.0.1-commit.fff30aa",
|
|
36
|
+
"@aztec/foundation": "0.0.1-commit.fff30aa",
|
|
37
|
+
"@aztec/l1-artifacts": "0.0.1-commit.fff30aa",
|
|
38
|
+
"@aztec/merkle-tree": "0.0.1-commit.fff30aa",
|
|
39
|
+
"@aztec/node-keystore": "0.0.1-commit.fff30aa",
|
|
40
|
+
"@aztec/noir-acvm_js": "0.0.1-commit.fff30aa",
|
|
41
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.fff30aa",
|
|
42
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.fff30aa",
|
|
43
|
+
"@aztec/noir-types": "0.0.1-commit.fff30aa",
|
|
44
|
+
"@aztec/p2p": "0.0.1-commit.fff30aa",
|
|
45
|
+
"@aztec/protocol-contracts": "0.0.1-commit.fff30aa",
|
|
46
|
+
"@aztec/prover-client": "0.0.1-commit.fff30aa",
|
|
47
|
+
"@aztec/simulator": "0.0.1-commit.fff30aa",
|
|
48
|
+
"@aztec/slasher": "0.0.1-commit.fff30aa",
|
|
49
|
+
"@aztec/stdlib": "0.0.1-commit.fff30aa",
|
|
50
|
+
"@aztec/telemetry-client": "0.0.1-commit.fff30aa",
|
|
51
|
+
"@aztec/validator-client": "0.0.1-commit.fff30aa",
|
|
52
|
+
"@aztec/validator-ha-signer": "0.0.1-commit.fff30aa",
|
|
53
|
+
"@aztec/world-state": "0.0.1-commit.fff30aa",
|
|
54
54
|
"lodash.chunk": "^4.2.0",
|
|
55
55
|
"tslib": "^2.4.0",
|
|
56
56
|
"viem": "npm:@aztec/viem@2.38.2"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
60
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
59
|
+
"@aztec/archiver": "0.0.1-commit.fff30aa",
|
|
60
|
+
"@aztec/kv-store": "0.0.1-commit.fff30aa",
|
|
61
61
|
"@electric-sql/pglite": "^0.3.14",
|
|
62
62
|
"@jest/globals": "^30.0.0",
|
|
63
63
|
"@types/jest": "^30.0.0",
|
|
@@ -19,15 +19,10 @@ import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
|
19
19
|
import { L1Metrics, type TelemetryClient } from '@aztec/telemetry-client';
|
|
20
20
|
import { FullNodeCheckpointsBuilder, NodeKeystoreAdapter, type ValidatorClient } from '@aztec/validator-client';
|
|
21
21
|
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
type SequencerClientConfig,
|
|
25
|
-
getPublisherConfigFromSequencerConfig,
|
|
26
|
-
} from '../config.js';
|
|
27
|
-
import { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
22
|
+
import { type SequencerClientConfig, getPublisherConfigFromSequencerConfig } from '../config.js';
|
|
23
|
+
import type { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
28
24
|
import { SequencerPublisherFactory } from '../publisher/sequencer-publisher-factory.js';
|
|
29
25
|
import { Sequencer, type SequencerConfig } from '../sequencer/index.js';
|
|
30
|
-
import { SequencerTimetable } from '../sequencer/timetable.js';
|
|
31
26
|
|
|
32
27
|
/**
|
|
33
28
|
* Encapsulates the full sequencer and publisher.
|
|
@@ -71,6 +66,7 @@ export class SequencerClient {
|
|
|
71
66
|
epochCache?: EpochCache;
|
|
72
67
|
l1TxUtils: L1TxUtils[];
|
|
73
68
|
nodeKeyStore: KeystoreManager;
|
|
69
|
+
globalVariableBuilder: GlobalVariableBuilder;
|
|
74
70
|
},
|
|
75
71
|
) {
|
|
76
72
|
const {
|
|
@@ -98,10 +94,9 @@ export class SequencerClient {
|
|
|
98
94
|
log.getBindings(),
|
|
99
95
|
);
|
|
100
96
|
const rollupContract = new RollupContract(publicClient, config.l1Contracts.rollupAddress.toString());
|
|
101
|
-
const [l1GenesisTime, slotDuration,
|
|
97
|
+
const [l1GenesisTime, slotDuration, rollupManaLimit] = await Promise.all([
|
|
102
98
|
rollupContract.getL1GenesisTime(),
|
|
103
99
|
rollupContract.getSlotDuration(),
|
|
104
|
-
rollupContract.getVersion(),
|
|
105
100
|
rollupContract.getManaLimit().then(Number),
|
|
106
101
|
] as const);
|
|
107
102
|
|
|
@@ -144,13 +139,7 @@ export class SequencerClient {
|
|
|
144
139
|
|
|
145
140
|
const ethereumSlotDuration = config.ethereumSlotDuration;
|
|
146
141
|
|
|
147
|
-
const globalsBuilder =
|
|
148
|
-
...config,
|
|
149
|
-
l1GenesisTime,
|
|
150
|
-
slotDuration: Number(slotDuration),
|
|
151
|
-
ethereumSlotDuration,
|
|
152
|
-
rollupVersion,
|
|
153
|
-
});
|
|
142
|
+
const globalsBuilder = deps.globalVariableBuilder;
|
|
154
143
|
|
|
155
144
|
// When running in anvil, assume we can post a tx up until one second before the end of an L1 slot.
|
|
156
145
|
// Otherwise, we need the full L1 slot duration for publishing to ensure inclusion.
|
|
@@ -160,12 +149,7 @@ export class SequencerClient {
|
|
|
160
149
|
const l1PublishingTimeBasedOnChain = isAnvilTestChain(config.l1ChainId) ? 1 : ethereumSlotDuration;
|
|
161
150
|
const l1PublishingTime = config.l1PublishingTime ?? l1PublishingTimeBasedOnChain;
|
|
162
151
|
|
|
163
|
-
const { maxL2BlockGas, maxDABlockGas, maxTxsPerBlock } =
|
|
164
|
-
config,
|
|
165
|
-
rollupManaLimit,
|
|
166
|
-
l1PublishingTime,
|
|
167
|
-
log,
|
|
168
|
-
);
|
|
152
|
+
const { maxL2BlockGas, maxDABlockGas, maxTxsPerBlock } = capPerBlockLimits(config, rollupManaLimit, log);
|
|
169
153
|
|
|
170
154
|
const l1Constants = { l1GenesisTime, slotDuration: Number(slotDuration), ethereumSlotDuration, rollupManaLimit };
|
|
171
155
|
|
|
@@ -224,6 +208,11 @@ export class SequencerClient {
|
|
|
224
208
|
this.l1Metrics?.stop();
|
|
225
209
|
}
|
|
226
210
|
|
|
211
|
+
/** Triggers an immediate run of the sequencer, bypassing the polling interval. */
|
|
212
|
+
public trigger() {
|
|
213
|
+
return this.sequencer.trigger();
|
|
214
|
+
}
|
|
215
|
+
|
|
227
216
|
public getSequencer(): Sequencer {
|
|
228
217
|
return this.sequencer;
|
|
229
218
|
}
|
|
@@ -248,88 +237,39 @@ export class SequencerClient {
|
|
|
248
237
|
}
|
|
249
238
|
|
|
250
239
|
/**
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
* Otherwise, derives it as (checkpointLimit / maxBlocks) * multiplier, capped at the checkpoint limit.
|
|
240
|
+
* Caps operator-provided per-block limits at checkpoint-level limits.
|
|
241
|
+
* Returns undefined for any limit the operator didn't set — the checkpoint builder handles redistribution.
|
|
254
242
|
*/
|
|
255
|
-
|
|
243
|
+
function capPerBlockLimits(
|
|
256
244
|
config: SequencerClientConfig,
|
|
257
245
|
rollupManaLimit: number,
|
|
258
|
-
l1PublishingTime: number,
|
|
259
246
|
log: ReturnType<typeof createLogger>,
|
|
260
|
-
): { maxL2BlockGas: number; maxDABlockGas: number; maxTxsPerBlock: number } {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
p2pPropagationTime: config.attestationPropagationTime,
|
|
266
|
-
blockDurationMs: config.blockDurationMs,
|
|
267
|
-
enforce: config.enforceTimeTable ?? DefaultSequencerConfig.enforceTimeTable,
|
|
268
|
-
}).maxNumberOfBlocks;
|
|
269
|
-
|
|
270
|
-
const multiplier = config.perBlockAllocationMultiplier ?? DefaultSequencerConfig.perBlockAllocationMultiplier;
|
|
271
|
-
|
|
272
|
-
// Compute maxL2BlockGas
|
|
273
|
-
let maxL2BlockGas: number;
|
|
274
|
-
if (config.maxL2BlockGas !== undefined) {
|
|
275
|
-
if (config.maxL2BlockGas > rollupManaLimit) {
|
|
276
|
-
log.warn(
|
|
277
|
-
`Provided MAX_L2_BLOCK_GAS ${config.maxL2BlockGas} exceeds L1 rollup mana limit ${rollupManaLimit} (capping)`,
|
|
278
|
-
);
|
|
279
|
-
maxL2BlockGas = rollupManaLimit;
|
|
280
|
-
} else {
|
|
281
|
-
maxL2BlockGas = config.maxL2BlockGas;
|
|
282
|
-
}
|
|
283
|
-
} else {
|
|
284
|
-
maxL2BlockGas = Math.min(rollupManaLimit, Math.ceil((rollupManaLimit / maxNumberOfBlocks) * multiplier));
|
|
247
|
+
): { maxL2BlockGas: number | undefined; maxDABlockGas: number | undefined; maxTxsPerBlock: number | undefined } {
|
|
248
|
+
let maxL2BlockGas = config.maxL2BlockGas;
|
|
249
|
+
if (maxL2BlockGas !== undefined && maxL2BlockGas > rollupManaLimit) {
|
|
250
|
+
log.warn(`Provided MAX_L2_BLOCK_GAS ${maxL2BlockGas} exceeds rollup mana limit ${rollupManaLimit} (capping)`);
|
|
251
|
+
maxL2BlockGas = rollupManaLimit;
|
|
285
252
|
}
|
|
286
253
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
`Provided MAX_DA_BLOCK_GAS ${config.maxDABlockGas} exceeds DA checkpoint limit ${daCheckpointLimit} (capping)`,
|
|
294
|
-
);
|
|
295
|
-
maxDABlockGas = daCheckpointLimit;
|
|
296
|
-
} else {
|
|
297
|
-
maxDABlockGas = config.maxDABlockGas;
|
|
298
|
-
}
|
|
299
|
-
} else {
|
|
300
|
-
maxDABlockGas = Math.min(daCheckpointLimit, Math.ceil((daCheckpointLimit / maxNumberOfBlocks) * multiplier));
|
|
254
|
+
let maxDABlockGas = config.maxDABlockGas;
|
|
255
|
+
if (maxDABlockGas !== undefined && maxDABlockGas > MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT) {
|
|
256
|
+
log.warn(
|
|
257
|
+
`Provided MAX_DA_BLOCK_GAS ${maxDABlockGas} exceeds DA checkpoint limit ${MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT} (capping)`,
|
|
258
|
+
);
|
|
259
|
+
maxDABlockGas = MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT;
|
|
301
260
|
}
|
|
302
261
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
)
|
|
311
|
-
maxTxsPerBlock = config.maxTxsPerCheckpoint;
|
|
312
|
-
} else {
|
|
313
|
-
maxTxsPerBlock = config.maxTxsPerBlock;
|
|
314
|
-
}
|
|
315
|
-
} else if (config.maxTxsPerCheckpoint !== undefined) {
|
|
316
|
-
maxTxsPerBlock = Math.min(
|
|
317
|
-
config.maxTxsPerCheckpoint,
|
|
318
|
-
Math.ceil((config.maxTxsPerCheckpoint / maxNumberOfBlocks) * multiplier),
|
|
262
|
+
let maxTxsPerBlock = config.maxTxsPerBlock;
|
|
263
|
+
if (
|
|
264
|
+
maxTxsPerBlock !== undefined &&
|
|
265
|
+
config.maxTxsPerCheckpoint !== undefined &&
|
|
266
|
+
maxTxsPerBlock > config.maxTxsPerCheckpoint
|
|
267
|
+
) {
|
|
268
|
+
log.warn(
|
|
269
|
+
`Provided MAX_TX_PER_BLOCK ${maxTxsPerBlock} exceeds MAX_TX_PER_CHECKPOINT ${config.maxTxsPerCheckpoint} (capping)`,
|
|
319
270
|
);
|
|
320
|
-
|
|
321
|
-
maxTxsPerBlock = defaultMaxTxsPerBlock;
|
|
271
|
+
maxTxsPerBlock = config.maxTxsPerCheckpoint;
|
|
322
272
|
}
|
|
323
273
|
|
|
324
|
-
log.info(`Computed block limits L2=${maxL2BlockGas} DA=${maxDABlockGas} maxTxs=${maxTxsPerBlock}`, {
|
|
325
|
-
maxL2BlockGas,
|
|
326
|
-
maxDABlockGas,
|
|
327
|
-
maxTxsPerBlock,
|
|
328
|
-
rollupManaLimit,
|
|
329
|
-
daCheckpointLimit,
|
|
330
|
-
maxNumberOfBlocks,
|
|
331
|
-
multiplier,
|
|
332
|
-
});
|
|
333
|
-
|
|
334
274
|
return { maxL2BlockGas, maxDABlockGas, maxTxsPerBlock };
|
|
335
275
|
}
|
package/src/config.ts
CHANGED
|
@@ -40,7 +40,8 @@ export const DefaultSequencerConfig = {
|
|
|
40
40
|
minTxsPerBlock: 1,
|
|
41
41
|
buildCheckpointIfEmpty: false,
|
|
42
42
|
publishTxsWithProposals: false,
|
|
43
|
-
perBlockAllocationMultiplier: 2,
|
|
43
|
+
perBlockAllocationMultiplier: 1.2,
|
|
44
|
+
redistributeCheckpointBudget: true,
|
|
44
45
|
enforceTimeTable: true,
|
|
45
46
|
attestationPropagationTime: DEFAULT_P2P_PROPAGATION_TIME,
|
|
46
47
|
secondsBeforeInvalidatingBlockAsCommitteeMember: 144, // 12 L1 blocks
|
|
@@ -112,6 +113,12 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
112
113
|
' Values greater than one allow early blocks to use more than their even share, relying on checkpoint-level capping for later blocks.',
|
|
113
114
|
...numberConfigHelper(DefaultSequencerConfig.perBlockAllocationMultiplier),
|
|
114
115
|
},
|
|
116
|
+
redistributeCheckpointBudget: {
|
|
117
|
+
env: 'SEQ_REDISTRIBUTE_CHECKPOINT_BUDGET',
|
|
118
|
+
description:
|
|
119
|
+
'Redistribute remaining checkpoint budget evenly across remaining blocks instead of allowing a single block to consume the entire remaining budget.',
|
|
120
|
+
...booleanConfigHelper(DefaultSequencerConfig.redistributeCheckpointBudget),
|
|
121
|
+
},
|
|
115
122
|
coinbase: {
|
|
116
123
|
env: 'COINBASE',
|
|
117
124
|
parseEnv: (val: string) => (val ? EthAddress.fromString(val) : undefined),
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
2
|
-
import type { L1ContractsConfig } from '@aztec/ethereum/config';
|
|
3
1
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
4
|
-
import type {
|
|
2
|
+
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
5
3
|
import type { ViemPublicClient } from '@aztec/ethereum/types';
|
|
6
4
|
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
7
5
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
8
6
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
9
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
8
|
+
import type { DateProvider } from '@aztec/foundation/timer';
|
|
10
9
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
11
|
-
import { type L1RollupConstants, getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
10
|
+
import { type L1RollupConstants, getNextL1SlotTimestamp, getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
12
11
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
13
12
|
import type {
|
|
14
13
|
CheckpointGlobalVariables,
|
|
@@ -16,7 +15,12 @@ import type {
|
|
|
16
15
|
} from '@aztec/stdlib/tx';
|
|
17
16
|
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
/** Configuration for the GlobalVariableBuilder (excludes L1 client config). */
|
|
19
|
+
export type GlobalVariableBuilderConfig = {
|
|
20
|
+
l1Contracts: Pick<L1ContractAddresses, 'rollupAddress'>;
|
|
21
|
+
ethereumSlotDuration: number;
|
|
22
|
+
rollupVersion: bigint;
|
|
23
|
+
} & Pick<L1RollupConstants, 'slotDuration' | 'l1GenesisTime'>;
|
|
20
24
|
|
|
21
25
|
/**
|
|
22
26
|
* Simple global variables builder.
|
|
@@ -27,7 +31,6 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
|
27
31
|
private currentL1BlockNumber: bigint | undefined = undefined;
|
|
28
32
|
|
|
29
33
|
private readonly rollupContract: RollupContract;
|
|
30
|
-
private readonly publicClient: ViemPublicClient;
|
|
31
34
|
private readonly ethereumSlotDuration: number;
|
|
32
35
|
private readonly aztecSlotDuration: number;
|
|
33
36
|
private readonly l1GenesisTime: bigint;
|
|
@@ -36,28 +39,18 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
|
36
39
|
private version: Fr;
|
|
37
40
|
|
|
38
41
|
constructor(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
private readonly dateProvider: DateProvider,
|
|
43
|
+
private readonly publicClient: ViemPublicClient,
|
|
44
|
+
config: GlobalVariableBuilderConfig,
|
|
42
45
|
) {
|
|
43
|
-
const { l1RpcUrls, l1ChainId: chainId, l1Contracts } = config;
|
|
44
|
-
|
|
45
|
-
const chain = createEthereumChain(l1RpcUrls, chainId);
|
|
46
|
-
|
|
47
46
|
this.version = new Fr(config.rollupVersion);
|
|
48
|
-
this.chainId = new Fr(
|
|
47
|
+
this.chainId = new Fr(this.publicClient.chain!.id);
|
|
49
48
|
|
|
50
49
|
this.ethereumSlotDuration = config.ethereumSlotDuration;
|
|
51
50
|
this.aztecSlotDuration = config.slotDuration;
|
|
52
51
|
this.l1GenesisTime = config.l1GenesisTime;
|
|
53
52
|
|
|
54
|
-
this.
|
|
55
|
-
chain: chain.chainInfo,
|
|
56
|
-
transport: fallback(chain.rpcUrls.map(url => http(url, { batch: false }))),
|
|
57
|
-
pollingInterval: config.viemPollingIntervalMS,
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
this.rollupContract = new RollupContract(this.publicClient, l1Contracts.rollupAddress);
|
|
53
|
+
this.rollupContract = new RollupContract(this.publicClient, config.l1Contracts.rollupAddress);
|
|
61
54
|
}
|
|
62
55
|
|
|
63
56
|
/**
|
|
@@ -73,7 +66,10 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
|
73
66
|
const earliestTimestamp = await this.rollupContract.getTimestampForSlot(
|
|
74
67
|
SlotNumber.fromBigInt(BigInt(lastCheckpoint.slotNumber) + 1n),
|
|
75
68
|
);
|
|
76
|
-
const nextEthTimestamp =
|
|
69
|
+
const nextEthTimestamp = getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), {
|
|
70
|
+
l1GenesisTime: this.l1GenesisTime,
|
|
71
|
+
ethereumSlotDuration: this.ethereumSlotDuration,
|
|
72
|
+
});
|
|
77
73
|
const timestamp = earliestTimestamp > nextEthTimestamp ? earliestTimestamp : nextEthTimestamp;
|
|
78
74
|
|
|
79
75
|
return new GasFees(0, await this.rollupContract.getManaMinFeeAt(timestamp, true));
|
|
@@ -108,7 +104,10 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
|
108
104
|
const slot: SlotNumber =
|
|
109
105
|
maybeSlot ??
|
|
110
106
|
(await this.rollupContract.getSlotAt(
|
|
111
|
-
|
|
107
|
+
getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), {
|
|
108
|
+
l1GenesisTime: this.l1GenesisTime,
|
|
109
|
+
ethereumSlotDuration: this.ethereumSlotDuration,
|
|
110
|
+
}),
|
|
112
111
|
));
|
|
113
112
|
|
|
114
113
|
const checkpointGlobalVariables = await this.buildCheckpointGlobalVariables(coinbase, feeRecipient, slot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { GlobalVariableBuilder } from './global_builder.js';
|
|
1
|
+
export { GlobalVariableBuilder, type GlobalVariableBuilderConfig } from './global_builder.js';
|
package/src/publisher/config.ts
CHANGED
|
@@ -48,8 +48,6 @@ export type PublisherConfig = L1TxUtilsConfig &
|
|
|
48
48
|
fishermanMode?: boolean;
|
|
49
49
|
/** Address of the forwarder contract to wrap all L1 transactions through (for testing purposes only) */
|
|
50
50
|
publisherForwarderAddress?: EthAddress;
|
|
51
|
-
/** Store for failed L1 transaction inputs (test networks only). Format: gs://bucket/path */
|
|
52
|
-
l1TxFailedStore?: string;
|
|
53
51
|
};
|
|
54
52
|
|
|
55
53
|
export type ProverPublisherConfig = L1TxUtilsConfig &
|
|
@@ -64,8 +62,6 @@ export type SequencerPublisherConfig = L1TxUtilsConfig &
|
|
|
64
62
|
fishermanMode?: boolean;
|
|
65
63
|
sequencerPublisherAllowInvalidStates?: boolean;
|
|
66
64
|
sequencerPublisherForwarderAddress?: EthAddress;
|
|
67
|
-
/** Store for failed L1 transaction inputs (test networks only). Format: gs://bucket/path */
|
|
68
|
-
l1TxFailedStore?: string;
|
|
69
65
|
};
|
|
70
66
|
|
|
71
67
|
export function getPublisherConfigFromProverConfig(config: ProverPublisherConfig): PublisherConfig {
|
|
@@ -81,7 +77,6 @@ export function getPublisherConfigFromSequencerConfig(config: SequencerPublisher
|
|
|
81
77
|
...config,
|
|
82
78
|
publisherAllowInvalidStates: config.sequencerPublisherAllowInvalidStates,
|
|
83
79
|
publisherForwarderAddress: config.sequencerPublisherForwarderAddress,
|
|
84
|
-
l1TxFailedStore: config.l1TxFailedStore,
|
|
85
80
|
};
|
|
86
81
|
}
|
|
87
82
|
|
|
@@ -138,10 +133,6 @@ export const sequencerPublisherConfigMappings: ConfigMappingsType<SequencerPubli
|
|
|
138
133
|
description: 'Address of the forwarder contract to wrap all L1 transactions through (for testing purposes only)',
|
|
139
134
|
parseEnv: (val: string) => (val ? EthAddress.fromString(val) : undefined),
|
|
140
135
|
},
|
|
141
|
-
l1TxFailedStore: {
|
|
142
|
-
env: 'L1_TX_FAILED_STORE',
|
|
143
|
-
description: 'Store for failed L1 transaction inputs (test networks only). Format: gs://bucket/path',
|
|
144
|
-
},
|
|
145
136
|
};
|
|
146
137
|
|
|
147
138
|
export const proverPublisherConfigMappings: ConfigMappingsType<ProverPublisherConfig & L1TxUtilsConfig> = {
|
package/src/publisher/index.ts
CHANGED
|
@@ -3,6 +3,3 @@ export { SequencerPublisherFactory } from './sequencer-publisher-factory.js';
|
|
|
3
3
|
|
|
4
4
|
// Used for tests
|
|
5
5
|
export { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
6
|
-
|
|
7
|
-
// Failed L1 tx store (optional, for test networks)
|
|
8
|
-
export { type FailedL1Tx, type FailedL1TxUri, type L1TxFailedStore } from './l1_tx_failed_store/index.js';
|
|
@@ -81,23 +81,8 @@ export class SequencerPublisherFactory {
|
|
|
81
81
|
const rollup = this.deps.rollupContract;
|
|
82
82
|
const slashingProposerContract = await rollup.getSlashingProposer();
|
|
83
83
|
|
|
84
|
-
const getNextPublisher = async (excludeAddresses: EthAddress[]): Promise<L1TxUtils | undefined> => {
|
|
85
|
-
const exclusionFilter: PublisherFilter<L1TxUtils> = (utils: L1TxUtils) => {
|
|
86
|
-
if (excludeAddresses.some(addr => addr.equals(utils.getSenderAddress()))) {
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
return filter(utils);
|
|
90
|
-
};
|
|
91
|
-
try {
|
|
92
|
-
return await this.deps.publisherManager.getAvailablePublisher(exclusionFilter);
|
|
93
|
-
} catch {
|
|
94
|
-
return undefined;
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
|
|
98
84
|
const publisher = new SequencerPublisher(this.sequencerConfig, {
|
|
99
85
|
l1TxUtils: l1Publisher,
|
|
100
|
-
getNextPublisher,
|
|
101
86
|
telemetry: this.deps.telemetry,
|
|
102
87
|
blobClient: this.deps.blobClient,
|
|
103
88
|
rollupContract: this.deps.rollupContract,
|