@aztec/sequencer-client 5.0.0-private.20260319 → 5.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +281 -21
- package/dest/client/sequencer-client.d.ts +8 -3
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +17 -32
- package/dest/config.d.ts +10 -4
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +48 -24
- package/dest/global_variable_builder/fee_predictor.d.ts +37 -0
- package/dest/global_variable_builder/fee_predictor.d.ts.map +1 -0
- package/dest/global_variable_builder/fee_predictor.js +128 -0
- package/dest/global_variable_builder/fee_provider.d.ts +21 -0
- package/dest/global_variable_builder/fee_provider.d.ts.map +1 -0
- package/dest/global_variable_builder/fee_provider.js +67 -0
- package/dest/global_variable_builder/global_builder.d.ts +14 -14
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/global_variable_builder/global_builder.js +16 -51
- package/dest/global_variable_builder/index.d.ts +4 -2
- package/dest/global_variable_builder/index.d.ts.map +1 -1
- package/dest/global_variable_builder/index.js +2 -0
- package/dest/publisher/config.d.ts +15 -3
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +19 -4
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +3 -4
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +1 -1
- package/dest/publisher/sequencer-bundle-simulator.d.ts +96 -0
- package/dest/publisher/sequencer-bundle-simulator.d.ts.map +1 -0
- package/dest/publisher/sequencer-bundle-simulator.js +198 -0
- package/dest/publisher/sequencer-publisher-factory.d.ts +3 -5
- package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-factory.js +2 -3
- package/dest/publisher/sequencer-publisher.d.ts +70 -64
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +312 -533
- package/dest/sequencer/automine/automine_factory.d.ts +56 -0
- package/dest/sequencer/automine/automine_factory.d.ts.map +1 -0
- package/dest/sequencer/automine/automine_factory.js +85 -0
- package/dest/sequencer/automine/automine_sequencer.d.ts +184 -0
- package/dest/sequencer/automine/automine_sequencer.d.ts.map +1 -0
- package/dest/sequencer/automine/automine_sequencer.js +677 -0
- package/dest/sequencer/automine/index.d.ts +3 -0
- package/dest/sequencer/automine/index.d.ts.map +1 -0
- package/dest/sequencer/automine/index.js +2 -0
- package/dest/sequencer/chain_state_overrides.d.ts +61 -0
- package/dest/sequencer/chain_state_overrides.d.ts.map +1 -0
- package/dest/sequencer/chain_state_overrides.js +98 -0
- package/dest/sequencer/checkpoint_proposal_job.d.ts +73 -21
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +709 -199
- package/dest/sequencer/checkpoint_proposal_job_metrics.d.ts +34 -0
- package/dest/sequencer/checkpoint_proposal_job_metrics.d.ts.map +1 -0
- package/dest/sequencer/checkpoint_proposal_job_metrics.js +72 -0
- package/dest/sequencer/checkpoint_voter.d.ts +1 -2
- package/dest/sequencer/checkpoint_voter.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_voter.js +2 -5
- package/dest/sequencer/errors.d.ts +1 -8
- package/dest/sequencer/errors.d.ts.map +1 -1
- package/dest/sequencer/errors.js +0 -9
- package/dest/sequencer/events.d.ts +61 -4
- package/dest/sequencer/events.d.ts.map +1 -1
- package/dest/sequencer/metrics.d.ts +9 -10
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/metrics.js +34 -20
- package/dest/sequencer/sequencer.d.ts +112 -27
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +467 -147
- package/dest/sequencer/types.d.ts +2 -2
- package/dest/sequencer/types.d.ts.map +1 -1
- package/dest/test/index.d.ts +3 -3
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/utils.d.ts +15 -1
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +23 -6
- package/package.json +28 -27
- package/src/client/sequencer-client.ts +29 -41
- package/src/config.ts +57 -24
- package/src/global_variable_builder/README.md +44 -0
- package/src/global_variable_builder/fee_predictor.ts +172 -0
- package/src/global_variable_builder/fee_provider.ts +80 -0
- package/src/global_variable_builder/global_builder.ts +25 -63
- package/src/global_variable_builder/index.ts +3 -1
- package/src/publisher/config.ts +40 -6
- package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +3 -1
- package/src/publisher/sequencer-bundle-simulator.ts +254 -0
- package/src/publisher/sequencer-publisher-factory.ts +3 -6
- package/src/publisher/sequencer-publisher.ts +368 -577
- package/src/sequencer/automine/README.md +60 -0
- package/src/sequencer/automine/automine_factory.ts +152 -0
- package/src/sequencer/automine/automine_sequencer.ts +783 -0
- package/src/sequencer/automine/index.ts +6 -0
- package/src/sequencer/chain_state_overrides.ts +169 -0
- package/src/sequencer/checkpoint_proposal_job.ts +818 -224
- package/src/sequencer/checkpoint_proposal_job_metrics.ts +128 -0
- package/src/sequencer/checkpoint_voter.ts +1 -12
- package/src/sequencer/errors.ts +0 -15
- package/src/sequencer/events.ts +65 -4
- package/src/sequencer/metrics.ts +43 -24
- package/src/sequencer/sequencer.ts +542 -164
- package/src/sequencer/types.ts +1 -1
- package/src/test/index.ts +2 -2
- package/src/test/utils.ts +59 -10
- package/dest/sequencer/timetable.d.ts +0 -88
- package/dest/sequencer/timetable.d.ts.map +0 -1
- package/dest/sequencer/timetable.js +0 -222
- package/src/sequencer/README.md +0 -531
- package/src/sequencer/timetable.ts +0 -283
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
2
|
-
export type SequencerRollupConstants = Pick<L1RollupConstants, 'ethereumSlotDuration' | 'l1GenesisTime' | 'slotDuration' | 'rollupManaLimit'>;
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export type SequencerRollupConstants = Pick<L1RollupConstants, 'ethereumSlotDuration' | 'l1GenesisTime' | 'slotDuration' | 'rollupManaLimit' | 'epochDuration'>;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRSxNQUFNLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUN6QyxpQkFBaUIsRUFDakIsc0JBQXNCLEdBQUcsZUFBZSxHQUFHLGNBQWMsR0FBRyxpQkFBaUIsR0FBRyxlQUFlLENBQ2hHLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sequencer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,iBAAiB,EACjB,sBAAsB,GAAG,eAAe,GAAG,cAAc,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sequencer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,iBAAiB,EACjB,sBAAsB,GAAG,eAAe,GAAG,cAAc,GAAG,iBAAiB,GAAG,eAAe,CAChG,CAAC"}
|
package/dest/test/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { L1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
2
2
|
import type { PublisherManager } from '@aztec/ethereum/publisher-manager';
|
|
3
3
|
import type { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
4
|
+
import type { ProposerTimetable } from '@aztec/stdlib/timetable';
|
|
4
5
|
import type { FullNodeCheckpointsBuilder, ValidatorClient } from '@aztec/validator-client';
|
|
5
6
|
import { SequencerClient } from '../client/sequencer-client.js';
|
|
6
7
|
import type { SequencerPublisherFactory } from '../publisher/sequencer-publisher-factory.js';
|
|
7
8
|
import { Sequencer } from '../sequencer/sequencer.js';
|
|
8
|
-
import type { SequencerTimetable } from '../sequencer/timetable.js';
|
|
9
9
|
declare class TestSequencer_ extends Sequencer {
|
|
10
10
|
publicProcessorFactory: PublicProcessorFactory;
|
|
11
|
-
timetable:
|
|
11
|
+
timetable: ProposerTimetable;
|
|
12
12
|
publisherFactory: SequencerPublisherFactory;
|
|
13
13
|
validatorClient: ValidatorClient;
|
|
14
14
|
checkpointsBuilder: FullNodeCheckpointsBuilder;
|
|
@@ -20,4 +20,4 @@ declare class TestSequencerClient_ extends SequencerClient {
|
|
|
20
20
|
}
|
|
21
21
|
export type TestSequencerClient = TestSequencerClient_;
|
|
22
22
|
export {};
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLDBCQUEwQixFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTNGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0RCxjQUFNLGNBQWUsU0FBUSxTQUFTO0lBQ3JCLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDO0lBQy9DLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQztJQUM3QixnQkFBZ0IsRUFBRSx5QkFBeUIsQ0FBQztJQUM1QyxlQUFlLEVBQUUsZUFBZSxDQUFDO0lBQ2pDLGtCQUFrQixFQUFFLDBCQUEwQixDQUFDO0NBQy9EO0FBRUQsTUFBTSxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFFM0MsY0FBTSxvQkFBcUIsU0FBUSxlQUFlO0lBQ2pDLFNBQVMsRUFBRSxhQUFhLENBQUM7SUFDekIsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDOUQ7QUFFRCxNQUFNLE1BQU0sbUJBQW1CLEdBQUcsb0JBQW9CLENBQUMifQ==
|
package/dest/test/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,cAAM,cAAe,SAAQ,SAAS;IACrB,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,gBAAgB,EAAE,yBAAyB,CAAC;IAC5C,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,0BAA0B,CAAC;CAC/D;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAE3C,cAAM,oBAAqB,SAAQ,eAAe;IACjC,SAAS,EAAE,aAAa,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;CAC9D;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,CAAC"}
|
package/dest/test/utils.d.ts
CHANGED
|
@@ -4,10 +4,24 @@ import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
4
4
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
5
5
|
import type { P2P } from '@aztec/p2p';
|
|
6
6
|
import { CommitteeAttestation, L2Block } from '@aztec/stdlib/block';
|
|
7
|
+
import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
7
8
|
import { BlockProposal, CheckpointAttestation, CheckpointProposal } from '@aztec/stdlib/p2p';
|
|
9
|
+
import { ProposerTimetable } from '@aztec/stdlib/timetable';
|
|
8
10
|
import { GlobalVariables, type Tx } from '@aztec/stdlib/tx';
|
|
9
11
|
import type { MockProxy } from 'jest-mock-extended';
|
|
10
12
|
export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint_builder.js';
|
|
13
|
+
/**
|
|
14
|
+
* Builds a {@link ProposerTimetable} for tests from a millisecond block duration and optional budgets,
|
|
15
|
+
* filling unset budgets with the shared `DEFAULT_*` values the sequencer config layer applies. Mirrors how
|
|
16
|
+
* the sequencer constructs its timetable so tests exercise the same budget resolution.
|
|
17
|
+
*/
|
|
18
|
+
export declare function makeProposerTimetable(opts: {
|
|
19
|
+
l1Constants: Pick<L1RollupConstants, 'l1GenesisTime' | 'slotDuration' | 'ethereumSlotDuration'>;
|
|
20
|
+
blockDurationMs?: number;
|
|
21
|
+
minBlockDuration?: number;
|
|
22
|
+
p2pPropagationTime?: number;
|
|
23
|
+
checkpointProposalPrepareTime?: number;
|
|
24
|
+
}): ProposerTimetable;
|
|
11
25
|
/**
|
|
12
26
|
* Creates a mock transaction with a specific seed for deterministic testing
|
|
13
27
|
*/
|
|
@@ -50,4 +64,4 @@ export declare function setupTxsAndBlock(p2p: MockProxy<P2P>, globalVariables: G
|
|
|
50
64
|
txs: Tx[];
|
|
51
65
|
block: L2Block;
|
|
52
66
|
}>;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFvQixNQUFNLG1CQUFtQixDQUFDO0FBTy9HLE9BQU8sRUFLTCxpQkFBaUIsRUFDbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQWUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFvQyxNQUFNLGtCQUFrQixDQUFDO0FBRTNHLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdGOzs7O0dBSUc7QUFDSCx3QkFBZ0IscUJBQXFCLENBQUMsSUFBSSxFQUFFO0lBQzFDLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxHQUFHLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2hHLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN6QixnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUMxQixrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUM1Qiw2QkFBNkIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUN4QyxHQUFHLGlCQUFpQixDQVNwQjtBQUVEOztHQUVHO0FBQ0gsd0JBQXNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FNckU7QUFFRDs7R0FFRztBQUNILHdCQUFzQixTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQWdCN0Y7QUFFRDs7R0FFRztBQUNILHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUluRTtBQUVEOztHQUVHO0FBQ0gsd0JBQXVCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBSW5GO0FBRUQ7O0dBRUc7QUFDSCx3QkFBZ0Isb0JBQW9CLENBQUMsTUFBTSxFQUFFLGVBQWUsR0FBRyxvQkFBb0IsRUFBRSxDQUdwRjtBQXVCRDs7R0FFRztBQUNILHdCQUFnQixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsYUFBYSxDQVd2RjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHdCQUF3QixDQUN0QyxLQUFLLEVBQUUsT0FBTyxFQUNkLG1CQUFtQixFQUFFLFNBQVMsRUFDOUIsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUMxQixxQkFBcUIsR0FBRSxNQUFXLEdBQ2pDLGtCQUFrQixDQWdCcEI7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLDJCQUEyQixDQUN6QyxLQUFLLEVBQUUsT0FBTyxFQUNkLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLE1BQU0sRUFBRSxVQUFVLEVBQ2xCLHFCQUFxQixHQUFFLE1BQVcsR0FDakMscUJBQXFCLENBYXZCO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLGdCQUFnQixDQUNwQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUNuQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxPQUFPLEVBQUUsTUFBTSxFQUNmLE9BQU8sRUFBRSxFQUFFLEdBQ1YsT0FBTyxDQUFDO0lBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQTtDQUFFLENBQUMsQ0FLeEMifQ==
|
package/dest/test/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAoB,MAAM,mBAAmB,CAAC;AAO/G,OAAO,EAKL,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAe,eAAe,EAAE,KAAK,EAAE,EAAoC,MAAM,kBAAkB,CAAC;AAE3G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE7F;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,cAAc,GAAG,sBAAsB,CAAC,CAAC;IAChG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6BAA6B,CAAC,EAAE,MAAM,CAAC;CACxC,GAAG,iBAAiB,CASpB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAMrE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAInE;AAED;;GAEG;AACH,wBAAuB,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAInF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,oBAAoB,EAAE,CAGpF;AAuBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,aAAa,CAWvF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,mBAAmB,EAAE,SAAS,EAC9B,cAAc,CAAC,EAAE,SAAS,EAC1B,qBAAqB,GAAE,MAAW,GACjC,kBAAkB,CAgBpB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,UAAU,EAClB,qBAAqB,GAAE,MAAW,GACjC,qBAAqB,CAavB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EACnB,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,EAAE,GACV,OAAO,CAAC;IAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAKxC"}
|
package/dest/test/utils.js
CHANGED
|
@@ -5,12 +5,28 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
5
5
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
6
6
|
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
7
7
|
import { CommitteeAttestation, L2Block } from '@aztec/stdlib/block';
|
|
8
|
+
import { DEFAULT_BLOCK_DURATION_MS } from '@aztec/stdlib/config';
|
|
8
9
|
import { BlockProposal, CheckpointAttestation, CheckpointProposal, ConsensusPayload } from '@aztec/stdlib/p2p';
|
|
9
10
|
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
10
|
-
import { makeAppendOnlyTreeSnapshot, mockTxForRollup } from '@aztec/stdlib/testing';
|
|
11
|
+
import { TEST_COORDINATION_SIGNATURE_CONTEXT, makeAppendOnlyTreeSnapshot, mockTxForRollup } from '@aztec/stdlib/testing';
|
|
12
|
+
import { DEFAULT_CHECKPOINT_PROPOSAL_INIT_TIME, DEFAULT_CHECKPOINT_PROPOSAL_PREPARE_TIME, DEFAULT_MIN_BLOCK_DURATION, DEFAULT_P2P_PROPAGATION_TIME, ProposerTimetable } from '@aztec/stdlib/timetable';
|
|
11
13
|
import { BlockHeader, makeProcessedTxFromPrivateOnlyTx } from '@aztec/stdlib/tx';
|
|
12
14
|
// Re-export mock classes from their dedicated file
|
|
13
15
|
export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint_builder.js';
|
|
16
|
+
/**
|
|
17
|
+
* Builds a {@link ProposerTimetable} for tests from a millisecond block duration and optional budgets,
|
|
18
|
+
* filling unset budgets with the shared `DEFAULT_*` values the sequencer config layer applies. Mirrors how
|
|
19
|
+
* the sequencer constructs its timetable so tests exercise the same budget resolution.
|
|
20
|
+
*/ export function makeProposerTimetable(opts) {
|
|
21
|
+
return new ProposerTimetable({
|
|
22
|
+
l1Constants: opts.l1Constants,
|
|
23
|
+
blockDuration: (opts.blockDurationMs ?? DEFAULT_BLOCK_DURATION_MS) / 1000,
|
|
24
|
+
minBlockDuration: opts.minBlockDuration ?? DEFAULT_MIN_BLOCK_DURATION,
|
|
25
|
+
p2pPropagationTime: opts.p2pPropagationTime ?? DEFAULT_P2P_PROPAGATION_TIME,
|
|
26
|
+
checkpointProposalPrepareTime: opts.checkpointProposalPrepareTime ?? DEFAULT_CHECKPOINT_PROPOSAL_PREPARE_TIME,
|
|
27
|
+
checkpointProposalInitTime: DEFAULT_CHECKPOINT_PROPOSAL_INIT_TIME
|
|
28
|
+
});
|
|
29
|
+
}
|
|
14
30
|
/**
|
|
15
31
|
* Creates a mock transaction with a specific seed for deterministic testing
|
|
16
32
|
*/ export async function makeTx(seed, chainId) {
|
|
@@ -64,14 +80,14 @@ export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint
|
|
|
64
80
|
* Creates a block proposal from a block and signature
|
|
65
81
|
*/ export function createBlockProposal(block, signature) {
|
|
66
82
|
const txHashes = block.body.txEffects.map((tx)=>tx.txHash);
|
|
67
|
-
return new BlockProposal(block.header, block.indexWithinCheckpoint, Fr.ZERO, block.archive.root, txHashes, signature);
|
|
83
|
+
return new BlockProposal(block.header, block.indexWithinCheckpoint, Fr.ZERO, block.archive.root, txHashes, signature, TEST_COORDINATION_SIGNATURE_CONTEXT);
|
|
68
84
|
}
|
|
69
85
|
/**
|
|
70
86
|
* Creates a checkpoint proposal from a block and signature
|
|
71
87
|
*/ export function createCheckpointProposal(block, checkpointSignature, blockSignature, feeAssetPriceModifier = 0n) {
|
|
72
88
|
const txHashes = block.body.txEffects.map((tx)=>tx.txHash);
|
|
73
89
|
const checkpointHeader = createCheckpointHeaderFromBlock(block);
|
|
74
|
-
return new CheckpointProposal(checkpointHeader, block.archive.root, feeAssetPriceModifier, checkpointSignature, {
|
|
90
|
+
return new CheckpointProposal(checkpointHeader, block.archive.root, feeAssetPriceModifier, checkpointSignature, TEST_COORDINATION_SIGNATURE_CONTEXT, {
|
|
75
91
|
blockHeader: block.header,
|
|
76
92
|
indexWithinCheckpoint: block.indexWithinCheckpoint,
|
|
77
93
|
txHashes,
|
|
@@ -84,10 +100,11 @@ export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint
|
|
|
84
100
|
* In production, the sender is recovered from the signature.
|
|
85
101
|
*/ export function createCheckpointAttestation(block, signature, sender, feeAssetPriceModifier = 0n) {
|
|
86
102
|
const checkpointHeader = createCheckpointHeaderFromBlock(block);
|
|
87
|
-
const payload = new ConsensusPayload(checkpointHeader, block.archive.root, feeAssetPriceModifier);
|
|
103
|
+
const payload = new ConsensusPayload(checkpointHeader, block.archive.root, feeAssetPriceModifier, TEST_COORDINATION_SIGNATURE_CONTEXT);
|
|
88
104
|
const attestation = new CheckpointAttestation(payload, signature, signature);
|
|
89
|
-
//
|
|
90
|
-
attestation.
|
|
105
|
+
// Bypass signature recovery for testing since we use random signatures
|
|
106
|
+
attestation.getSender = ()=>sender;
|
|
107
|
+
attestation.getProposer = ()=>sender;
|
|
91
108
|
return attestation;
|
|
92
109
|
}
|
|
93
110
|
/**
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "5.0.0-
|
|
3
|
+
"version": "5.0.0-rc.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
|
+
"./automine": "./dest/sequencer/automine/index.js",
|
|
7
8
|
"./config": "./dest/config.js",
|
|
8
9
|
"./test": "./dest/test/index.js"
|
|
9
10
|
},
|
|
@@ -26,37 +27,37 @@
|
|
|
26
27
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
27
28
|
},
|
|
28
29
|
"dependencies": {
|
|
29
|
-
"@aztec/aztec.js": "5.0.0-
|
|
30
|
-
"@aztec/bb-prover": "5.0.0-
|
|
31
|
-
"@aztec/blob-client": "5.0.0-
|
|
32
|
-
"@aztec/blob-lib": "5.0.0-
|
|
33
|
-
"@aztec/constants": "5.0.0-
|
|
34
|
-
"@aztec/epoch-cache": "5.0.0-
|
|
35
|
-
"@aztec/ethereum": "5.0.0-
|
|
36
|
-
"@aztec/foundation": "5.0.0-
|
|
37
|
-
"@aztec/l1-artifacts": "5.0.0-
|
|
38
|
-
"@aztec/node-keystore": "5.0.0-
|
|
39
|
-
"@aztec/noir-acvm_js": "5.0.0-
|
|
40
|
-
"@aztec/noir-contracts.js": "5.0.0-
|
|
41
|
-
"@aztec/noir-protocol-circuits-types": "5.0.0-
|
|
42
|
-
"@aztec/noir-types": "5.0.0-
|
|
43
|
-
"@aztec/p2p": "5.0.0-
|
|
44
|
-
"@aztec/protocol-contracts": "5.0.0-
|
|
45
|
-
"@aztec/prover-client": "5.0.0-
|
|
46
|
-
"@aztec/simulator": "5.0.0-
|
|
47
|
-
"@aztec/slasher": "5.0.0-
|
|
48
|
-
"@aztec/stdlib": "5.0.0-
|
|
49
|
-
"@aztec/telemetry-client": "5.0.0-
|
|
50
|
-
"@aztec/validator-client": "5.0.0-
|
|
51
|
-
"@aztec/validator-ha-signer": "5.0.0-
|
|
52
|
-
"@aztec/world-state": "5.0.0-
|
|
30
|
+
"@aztec/aztec.js": "5.0.0-rc.1",
|
|
31
|
+
"@aztec/bb-prover": "5.0.0-rc.1",
|
|
32
|
+
"@aztec/blob-client": "5.0.0-rc.1",
|
|
33
|
+
"@aztec/blob-lib": "5.0.0-rc.1",
|
|
34
|
+
"@aztec/constants": "5.0.0-rc.1",
|
|
35
|
+
"@aztec/epoch-cache": "5.0.0-rc.1",
|
|
36
|
+
"@aztec/ethereum": "5.0.0-rc.1",
|
|
37
|
+
"@aztec/foundation": "5.0.0-rc.1",
|
|
38
|
+
"@aztec/l1-artifacts": "5.0.0-rc.1",
|
|
39
|
+
"@aztec/node-keystore": "5.0.0-rc.1",
|
|
40
|
+
"@aztec/noir-acvm_js": "5.0.0-rc.1",
|
|
41
|
+
"@aztec/noir-contracts.js": "5.0.0-rc.1",
|
|
42
|
+
"@aztec/noir-protocol-circuits-types": "5.0.0-rc.1",
|
|
43
|
+
"@aztec/noir-types": "5.0.0-rc.1",
|
|
44
|
+
"@aztec/p2p": "5.0.0-rc.1",
|
|
45
|
+
"@aztec/protocol-contracts": "5.0.0-rc.1",
|
|
46
|
+
"@aztec/prover-client": "5.0.0-rc.1",
|
|
47
|
+
"@aztec/simulator": "5.0.0-rc.1",
|
|
48
|
+
"@aztec/slasher": "5.0.0-rc.1",
|
|
49
|
+
"@aztec/stdlib": "5.0.0-rc.1",
|
|
50
|
+
"@aztec/telemetry-client": "5.0.0-rc.1",
|
|
51
|
+
"@aztec/validator-client": "5.0.0-rc.1",
|
|
52
|
+
"@aztec/validator-ha-signer": "5.0.0-rc.1",
|
|
53
|
+
"@aztec/world-state": "5.0.0-rc.1",
|
|
53
54
|
"lodash.chunk": "^4.2.0",
|
|
54
55
|
"tslib": "^2.4.0",
|
|
55
56
|
"viem": "npm:@aztec/viem@2.38.2"
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
58
|
-
"@aztec/archiver": "5.0.0-
|
|
59
|
-
"@aztec/kv-store": "5.0.0-
|
|
59
|
+
"@aztec/archiver": "5.0.0-rc.1",
|
|
60
|
+
"@aztec/kv-store": "5.0.0-rc.1",
|
|
60
61
|
"@electric-sql/pglite": "^0.3.14",
|
|
61
62
|
"@jest/globals": "^30.0.0",
|
|
62
63
|
"@types/jest": "^30.0.0",
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { BlobClientInterface } from '@aztec/blob-client/client';
|
|
2
2
|
import { MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT } from '@aztec/constants';
|
|
3
3
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
4
|
-
import { isAnvilTestChain } from '@aztec/ethereum/chain';
|
|
5
4
|
import { getPublicClient } from '@aztec/ethereum/client';
|
|
6
5
|
import { GovernanceProposerContract, RollupContract } from '@aztec/ethereum/contracts';
|
|
7
6
|
import { type Delayer, L1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
@@ -12,15 +11,14 @@ import type { DateProvider } from '@aztec/foundation/timer';
|
|
|
12
11
|
import type { KeystoreManager } from '@aztec/node-keystore';
|
|
13
12
|
import type { P2P } from '@aztec/p2p';
|
|
14
13
|
import type { SlasherClientInterface } from '@aztec/slasher';
|
|
15
|
-
import type { L2BlockSink, L2BlockSource } from '@aztec/stdlib/block';
|
|
14
|
+
import type { L2BlockSink, L2BlockSource, ProposedCheckpointSink } from '@aztec/stdlib/block';
|
|
16
15
|
import type { ValidatorClientFullConfig, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
17
|
-
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
18
16
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
19
17
|
import { L1Metrics, type TelemetryClient } from '@aztec/telemetry-client';
|
|
20
18
|
import { FullNodeCheckpointsBuilder, NodeKeystoreAdapter, type ValidatorClient } from '@aztec/validator-client';
|
|
21
19
|
|
|
22
20
|
import { type SequencerClientConfig, getPublisherConfigFromSequencerConfig } from '../config.js';
|
|
23
|
-
import { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
21
|
+
import type { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
24
22
|
import { SequencerPublisherFactory } from '../publisher/sequencer-publisher-factory.js';
|
|
25
23
|
import { Sequencer, type SequencerConfig } from '../sequencer/index.js';
|
|
26
24
|
|
|
@@ -57,7 +55,7 @@ export class SequencerClient {
|
|
|
57
55
|
worldStateSynchronizer: WorldStateSynchronizer;
|
|
58
56
|
slasherClient: SlasherClientInterface | undefined;
|
|
59
57
|
checkpointsBuilder: FullNodeCheckpointsBuilder;
|
|
60
|
-
l2BlockSource: L2BlockSource & L2BlockSink;
|
|
58
|
+
l2BlockSource: L2BlockSource & L2BlockSink & ProposedCheckpointSink;
|
|
61
59
|
l1ToL2MessageSource: L1ToL2MessageSource;
|
|
62
60
|
telemetry: TelemetryClient;
|
|
63
61
|
publisherFactory?: SequencerPublisherFactory;
|
|
@@ -65,7 +63,9 @@ export class SequencerClient {
|
|
|
65
63
|
dateProvider: DateProvider;
|
|
66
64
|
epochCache?: EpochCache;
|
|
67
65
|
l1TxUtils: L1TxUtils[];
|
|
66
|
+
funderL1TxUtils?: L1TxUtils;
|
|
68
67
|
nodeKeyStore: KeystoreManager;
|
|
68
|
+
globalVariableBuilder: GlobalVariableBuilder;
|
|
69
69
|
},
|
|
70
70
|
) {
|
|
71
71
|
const {
|
|
@@ -87,42 +87,34 @@ export class SequencerClient {
|
|
|
87
87
|
publicClient,
|
|
88
88
|
l1TxUtils.map(x => x.getSenderAddress()),
|
|
89
89
|
);
|
|
90
|
-
const publisherManager = new PublisherManager(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
);
|
|
95
|
-
const
|
|
96
|
-
const [l1GenesisTime, slotDuration, rollupVersion, rollupManaLimit] = await Promise.all([
|
|
90
|
+
const publisherManager = new PublisherManager(l1TxUtils, getPublisherConfigFromSequencerConfig(config), {
|
|
91
|
+
bindings: log.getBindings(),
|
|
92
|
+
funder: deps.funderL1TxUtils,
|
|
93
|
+
});
|
|
94
|
+
const rollupContract = new RollupContract(publicClient, config.rollupAddress.toString());
|
|
95
|
+
const [l1GenesisTime, slotDuration, rollupManaLimit] = await Promise.all([
|
|
97
96
|
rollupContract.getL1GenesisTime(),
|
|
98
97
|
rollupContract.getSlotDuration(),
|
|
99
|
-
rollupContract.getVersion(),
|
|
100
98
|
rollupContract.getManaLimit().then(Number),
|
|
101
99
|
] as const);
|
|
102
100
|
|
|
103
101
|
const governanceProposerContract = new GovernanceProposerContract(
|
|
104
102
|
publicClient,
|
|
105
|
-
config.
|
|
103
|
+
config.governanceProposerAddress.toString(),
|
|
106
104
|
);
|
|
107
105
|
const epochCache =
|
|
108
106
|
deps.epochCache ??
|
|
109
107
|
(await EpochCache.create(
|
|
110
|
-
config.
|
|
108
|
+
config.rollupAddress,
|
|
111
109
|
{
|
|
112
110
|
l1RpcUrls: rpcUrls,
|
|
113
111
|
l1ChainId: chainId,
|
|
114
112
|
viemPollingIntervalMS: config.viemPollingIntervalMS,
|
|
115
113
|
ethereumSlotDuration: config.ethereumSlotDuration,
|
|
116
|
-
enableProposerPipelining: config.enableProposerPipelining,
|
|
117
114
|
},
|
|
118
115
|
{ dateProvider: deps.dateProvider },
|
|
119
116
|
));
|
|
120
117
|
|
|
121
|
-
const slashFactoryContract = new SlashFactoryContract(
|
|
122
|
-
publicClient,
|
|
123
|
-
config.l1Contracts.slashFactoryAddress?.toString() ?? EthAddress.ZERO.toString(),
|
|
124
|
-
);
|
|
125
|
-
|
|
126
118
|
const publisherFactory =
|
|
127
119
|
deps.publisherFactory ??
|
|
128
120
|
new SequencerPublisherFactory(config, {
|
|
@@ -130,7 +122,6 @@ export class SequencerClient {
|
|
|
130
122
|
blobClient: deps.blobClient,
|
|
131
123
|
epochCache,
|
|
132
124
|
governanceProposerContract,
|
|
133
|
-
slashFactoryContract,
|
|
134
125
|
rollupContract,
|
|
135
126
|
dateProvider: deps.dateProvider,
|
|
136
127
|
publisherManager,
|
|
@@ -140,25 +131,17 @@ export class SequencerClient {
|
|
|
140
131
|
|
|
141
132
|
const ethereumSlotDuration = config.ethereumSlotDuration;
|
|
142
133
|
|
|
143
|
-
const globalsBuilder =
|
|
144
|
-
...config,
|
|
145
|
-
l1GenesisTime,
|
|
146
|
-
slotDuration: Number(slotDuration),
|
|
147
|
-
ethereumSlotDuration,
|
|
148
|
-
rollupVersion,
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
// When running in anvil, assume we can post a tx up until one second before the end of an L1 slot.
|
|
152
|
-
// Otherwise, we need the full L1 slot duration for publishing to ensure inclusion.
|
|
153
|
-
// In theory, the L1 slot has an initial 4s phase where the block is propagated, so we could
|
|
154
|
-
// reduce the publishing time allowance. However, we prefer being conservative.
|
|
155
|
-
// See https://www.blocknative.com/blog/anatomy-of-a-slot#7 for more info.
|
|
156
|
-
const l1PublishingTimeBasedOnChain = isAnvilTestChain(config.l1ChainId) ? 1 : ethereumSlotDuration;
|
|
157
|
-
const l1PublishingTime = config.l1PublishingTime ?? l1PublishingTimeBasedOnChain;
|
|
134
|
+
const globalsBuilder = deps.globalVariableBuilder;
|
|
158
135
|
|
|
159
136
|
const { maxL2BlockGas, maxDABlockGas, maxTxsPerBlock } = capPerBlockLimits(config, rollupManaLimit, log);
|
|
160
137
|
|
|
161
|
-
const l1Constants = {
|
|
138
|
+
const l1Constants = {
|
|
139
|
+
l1GenesisTime,
|
|
140
|
+
slotDuration: Number(slotDuration),
|
|
141
|
+
ethereumSlotDuration,
|
|
142
|
+
rollupManaLimit,
|
|
143
|
+
epochDuration: config.aztecEpochDuration,
|
|
144
|
+
};
|
|
162
145
|
|
|
163
146
|
const sequencer = new Sequencer(
|
|
164
147
|
publisherFactory,
|
|
@@ -174,7 +157,7 @@ export class SequencerClient {
|
|
|
174
157
|
deps.dateProvider,
|
|
175
158
|
epochCache,
|
|
176
159
|
rollupContract,
|
|
177
|
-
{ ...config,
|
|
160
|
+
{ ...config, maxL2BlockGas, maxDABlockGas, maxTxsPerBlock },
|
|
178
161
|
telemetryClient,
|
|
179
162
|
log,
|
|
180
163
|
);
|
|
@@ -202,7 +185,7 @@ export class SequencerClient {
|
|
|
202
185
|
await this.validatorClient?.start();
|
|
203
186
|
this.sequencer.start();
|
|
204
187
|
this.l1Metrics?.start();
|
|
205
|
-
await this.publisherManager.
|
|
188
|
+
await this.publisherManager.start();
|
|
206
189
|
}
|
|
207
190
|
|
|
208
191
|
/**
|
|
@@ -211,10 +194,15 @@ export class SequencerClient {
|
|
|
211
194
|
public async stop() {
|
|
212
195
|
await this.sequencer.stop();
|
|
213
196
|
await this.validatorClient?.stop();
|
|
214
|
-
this.publisherManager.
|
|
197
|
+
await this.publisherManager.stop();
|
|
215
198
|
this.l1Metrics?.stop();
|
|
216
199
|
}
|
|
217
200
|
|
|
201
|
+
/** Triggers an immediate run of the sequencer, bypassing the polling interval. */
|
|
202
|
+
public trigger() {
|
|
203
|
+
return this.sequencer.trigger();
|
|
204
|
+
}
|
|
205
|
+
|
|
218
206
|
public getSequencer(): Sequencer {
|
|
219
207
|
return this.sequencer;
|
|
220
208
|
}
|
package/src/config.ts
CHANGED
|
@@ -3,8 +3,10 @@ import { type L1ReaderConfig, l1ReaderConfigMappings } from '@aztec/ethereum/l1-
|
|
|
3
3
|
import {
|
|
4
4
|
type ConfigMappingsType,
|
|
5
5
|
booleanConfigHelper,
|
|
6
|
+
floatConfigHelper,
|
|
6
7
|
getConfigFromMappings,
|
|
7
8
|
numberConfigHelper,
|
|
9
|
+
optionalNumberConfigHelper,
|
|
8
10
|
pickConfigMappings,
|
|
9
11
|
} from '@aztec/foundation/config';
|
|
10
12
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
@@ -13,12 +15,13 @@ import { type P2PConfig, p2pConfigMappings } from '@aztec/p2p/config';
|
|
|
13
15
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
14
16
|
import {
|
|
15
17
|
type ChainConfig,
|
|
16
|
-
|
|
18
|
+
DEFAULT_BLOCK_DURATION_MS,
|
|
19
|
+
DEFAULT_MAX_BLOCKS_PER_CHECKPOINT,
|
|
17
20
|
type SequencerConfig,
|
|
18
21
|
chainConfigMappings,
|
|
19
|
-
pipelineConfigMappings,
|
|
20
22
|
sharedSequencerConfigMappings,
|
|
21
23
|
} from '@aztec/stdlib/config';
|
|
24
|
+
import { MIN_PER_BLOCK_ALLOCATION_MULTIPLIER, MIN_PER_BLOCK_DA_ALLOCATION_MULTIPLIER } from '@aztec/stdlib/gas';
|
|
22
25
|
import type { ResolvedSequencerConfig } from '@aztec/stdlib/interfaces/server';
|
|
23
26
|
import { DEFAULT_P2P_PROPAGATION_TIME } from '@aztec/stdlib/timetable';
|
|
24
27
|
import { type ValidatorClientConfig, validatorClientConfigMappings } from '@aztec/validator-client/config';
|
|
@@ -42,15 +45,20 @@ export const DefaultSequencerConfig = {
|
|
|
42
45
|
minTxsPerBlock: 1,
|
|
43
46
|
buildCheckpointIfEmpty: false,
|
|
44
47
|
publishTxsWithProposals: false,
|
|
45
|
-
perBlockAllocationMultiplier:
|
|
48
|
+
perBlockAllocationMultiplier: MIN_PER_BLOCK_ALLOCATION_MULTIPLIER,
|
|
49
|
+
perBlockDAAllocationMultiplier: MIN_PER_BLOCK_DA_ALLOCATION_MULTIPLIER,
|
|
46
50
|
redistributeCheckpointBudget: true,
|
|
47
|
-
|
|
51
|
+
blockDurationMs: DEFAULT_BLOCK_DURATION_MS,
|
|
52
|
+
l1PublishingTime: 12,
|
|
53
|
+
checkpointProposalSyncGraceSeconds: 2 * (DEFAULT_BLOCK_DURATION_MS / 1000),
|
|
48
54
|
attestationPropagationTime: DEFAULT_P2P_PROPAGATION_TIME,
|
|
49
55
|
secondsBeforeInvalidatingBlockAsCommitteeMember: 144, // 12 L1 blocks
|
|
50
56
|
secondsBeforeInvalidatingBlockAsNonCommitteeMember: 432, // 36 L1 blocks
|
|
51
57
|
skipCollectingAttestations: false,
|
|
52
58
|
skipInvalidateBlockAsProposer: false,
|
|
59
|
+
skipWaitForValidParentCheckpointOnL1: false,
|
|
53
60
|
broadcastInvalidBlockProposal: false,
|
|
61
|
+
broadcastInvalidCheckpointProposalOnly: false,
|
|
54
62
|
injectFakeAttestation: false,
|
|
55
63
|
injectHighSValueAttestation: false,
|
|
56
64
|
injectUnrecoverableSignatureAttestation: false,
|
|
@@ -58,6 +66,7 @@ export const DefaultSequencerConfig = {
|
|
|
58
66
|
shuffleAttestationOrdering: false,
|
|
59
67
|
skipPushProposedBlocksToArchiver: false,
|
|
60
68
|
skipPublishingCheckpointsPercent: 0,
|
|
69
|
+
maxBlocksPerCheckpoint: DEFAULT_MAX_BLOCKS_PER_CHECKPOINT,
|
|
61
70
|
} satisfies ResolvedSequencerConfig;
|
|
62
71
|
|
|
63
72
|
/**
|
|
@@ -70,7 +79,6 @@ export type SequencerClientConfig = SequencerPublisherConfig &
|
|
|
70
79
|
SequencerConfig &
|
|
71
80
|
L1ReaderConfig &
|
|
72
81
|
ChainConfig &
|
|
73
|
-
PipelineConfig &
|
|
74
82
|
Pick<P2PConfig, 'txPublicSetupAllowListExtend'> &
|
|
75
83
|
Pick<L1ContractsConfig, 'ethereumSlotDuration' | 'aztecSlotDuration' | 'aztecEpochDuration'>;
|
|
76
84
|
|
|
@@ -83,7 +91,7 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
83
91
|
maxTxsPerCheckpoint: {
|
|
84
92
|
env: 'SEQ_MAX_TX_PER_CHECKPOINT',
|
|
85
93
|
description: 'The maximum number of txs across all blocks in a checkpoint.',
|
|
86
|
-
|
|
94
|
+
...optionalNumberConfigHelper(),
|
|
87
95
|
},
|
|
88
96
|
minTxsPerBlock: {
|
|
89
97
|
env: 'SEQ_MIN_TX_PER_BLOCK',
|
|
@@ -102,19 +110,26 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
102
110
|
maxL2BlockGas: {
|
|
103
111
|
env: 'SEQ_MAX_L2_BLOCK_GAS',
|
|
104
112
|
description: 'The maximum L2 block gas.',
|
|
105
|
-
|
|
113
|
+
...optionalNumberConfigHelper(),
|
|
106
114
|
},
|
|
107
115
|
maxDABlockGas: {
|
|
108
116
|
env: 'SEQ_MAX_DA_BLOCK_GAS',
|
|
109
117
|
description: 'The maximum DA block gas.',
|
|
110
|
-
|
|
118
|
+
...optionalNumberConfigHelper(),
|
|
111
119
|
},
|
|
112
120
|
perBlockAllocationMultiplier: {
|
|
113
121
|
env: 'SEQ_PER_BLOCK_ALLOCATION_MULTIPLIER',
|
|
114
122
|
description:
|
|
115
123
|
'Per-block gas budget multiplier for both L2 and DA gas. Budget per block is (checkpointLimit / maxBlocks) * multiplier.' +
|
|
116
124
|
' Values greater than one allow early blocks to use more than their even share, relying on checkpoint-level capping for later blocks.',
|
|
117
|
-
...
|
|
125
|
+
...floatConfigHelper(DefaultSequencerConfig.perBlockAllocationMultiplier),
|
|
126
|
+
},
|
|
127
|
+
perBlockDAAllocationMultiplier: {
|
|
128
|
+
env: 'SEQ_PER_BLOCK_DA_ALLOCATION_MULTIPLIER',
|
|
129
|
+
description:
|
|
130
|
+
'Per-block budget multiplier applied to DA gas and blob fields in place of perBlockAllocationMultiplier.' +
|
|
131
|
+
' Defaults higher than the general multiplier so the largest contract class deploy fits a single block.',
|
|
132
|
+
...numberConfigHelper(DefaultSequencerConfig.perBlockDAAllocationMultiplier),
|
|
118
133
|
},
|
|
119
134
|
redistributeCheckpointBudget: {
|
|
120
135
|
env: 'SEQ_REDISTRIBUTE_CHECKPOINT_BUDGET',
|
|
@@ -124,7 +139,7 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
124
139
|
},
|
|
125
140
|
coinbase: {
|
|
126
141
|
env: 'COINBASE',
|
|
127
|
-
parseEnv: (val: string) =>
|
|
142
|
+
parseEnv: (val: string) => EthAddress.fromString(val),
|
|
128
143
|
description: 'Recipient of block reward.',
|
|
129
144
|
},
|
|
130
145
|
feeRecipient: {
|
|
@@ -140,11 +155,6 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
140
155
|
env: 'ACVM_BINARY_PATH',
|
|
141
156
|
description: 'The path to the ACVM binary',
|
|
142
157
|
},
|
|
143
|
-
enforceTimeTable: {
|
|
144
|
-
env: 'SEQ_ENFORCE_TIME_TABLE',
|
|
145
|
-
description: 'Whether to enforce the time table when building blocks',
|
|
146
|
-
...booleanConfigHelper(DefaultSequencerConfig.enforceTimeTable),
|
|
147
|
-
},
|
|
148
158
|
governanceProposerPayload: {
|
|
149
159
|
env: 'GOVERNANCE_PROPOSER_PAYLOAD_ADDRESS',
|
|
150
160
|
description: 'The address of the payload for the governanceProposer',
|
|
@@ -152,13 +162,8 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
152
162
|
},
|
|
153
163
|
l1PublishingTime: {
|
|
154
164
|
env: 'SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT',
|
|
155
|
-
description: 'How much time
|
|
156
|
-
|
|
157
|
-
},
|
|
158
|
-
attestationPropagationTime: {
|
|
159
|
-
env: 'SEQ_ATTESTATION_PROPAGATION_TIME',
|
|
160
|
-
description: 'How many seconds it takes for proposals and attestations to travel across the p2p layer (one-way)',
|
|
161
|
-
...numberConfigHelper(DefaultSequencerConfig.attestationPropagationTime),
|
|
165
|
+
description: 'How much time in seconds to allow in the slot for publishing the L1 transaction.',
|
|
166
|
+
...numberConfigHelper(DefaultSequencerConfig.l1PublishingTime),
|
|
162
167
|
},
|
|
163
168
|
fakeProcessingDelayPerTxMs: {
|
|
164
169
|
description: 'Used for testing to introduce a fake delay after processing each tx',
|
|
@@ -189,10 +194,25 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
189
194
|
description: 'Do not invalidate the previous block if invalid when we are the proposer (for testing only)',
|
|
190
195
|
...booleanConfigHelper(DefaultSequencerConfig.skipInvalidateBlockAsProposer),
|
|
191
196
|
},
|
|
197
|
+
skipWaitForValidParentCheckpointOnL1: {
|
|
198
|
+
description:
|
|
199
|
+
'Bypass the parent checkpoint validity check before submitting a pipelined checkpoint, ' +
|
|
200
|
+
'allowing the proposer to publish even when the parent landed on L1 with invalid attestations (for testing only)',
|
|
201
|
+
...booleanConfigHelper(DefaultSequencerConfig.skipWaitForValidParentCheckpointOnL1),
|
|
202
|
+
},
|
|
192
203
|
broadcastInvalidBlockProposal: {
|
|
193
204
|
description: 'Broadcast invalid block proposals with corrupted state (for testing only)',
|
|
194
205
|
...booleanConfigHelper(DefaultSequencerConfig.broadcastInvalidBlockProposal),
|
|
195
206
|
},
|
|
207
|
+
invalidBlockProposalIndexWithinCheckpoint: {
|
|
208
|
+
description: 'Broadcast an invalid block proposal only at this indexWithinCheckpoint (for testing only)',
|
|
209
|
+
...optionalNumberConfigHelper(),
|
|
210
|
+
},
|
|
211
|
+
broadcastInvalidCheckpointProposalOnly: {
|
|
212
|
+
description:
|
|
213
|
+
'Broadcast invalid checkpoint proposals while keeping the underlying block proposals valid (for testing only). When unset, the checkpoint follows broadcastInvalidBlockProposal.',
|
|
214
|
+
...booleanConfigHelper(DefaultSequencerConfig.broadcastInvalidCheckpointProposalOnly),
|
|
215
|
+
},
|
|
196
216
|
injectFakeAttestation: {
|
|
197
217
|
description: 'Inject a fake attestation (for testing only)',
|
|
198
218
|
...booleanConfigHelper(DefaultSequencerConfig.injectFakeAttestation),
|
|
@@ -233,18 +253,31 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
233
253
|
description: 'Percent probability (0 - 100) of sequencer skipping checkpoint publishing (testing only)',
|
|
234
254
|
...numberConfigHelper(DefaultSequencerConfig.skipPublishingCheckpointsPercent),
|
|
235
255
|
},
|
|
256
|
+
skipBroadcastProposals: {
|
|
257
|
+
description: 'Skip broadcasting checkpoint and block proposals via gossipsub when proposer (for testing only)',
|
|
258
|
+
...booleanConfigHelper(false),
|
|
259
|
+
},
|
|
260
|
+
skipBroadcastCheckpointProposal: {
|
|
261
|
+
description:
|
|
262
|
+
'Skip broadcasting only the CheckpointProposal via gossipsub when proposer; the held last block is broadcast ' +
|
|
263
|
+
'standalone instead so peers still receive it as a proposed-but-uncheckpointed tip (for testing only)',
|
|
264
|
+
...booleanConfigHelper(false),
|
|
265
|
+
},
|
|
266
|
+
pauseProposingForSlots: {
|
|
267
|
+
description:
|
|
268
|
+
'List of slots for which the sequencer will not produce a proposal (for testing only). Attestation paths are unaffected.',
|
|
269
|
+
},
|
|
236
270
|
...pickConfigMappings(p2pConfigMappings, ['txPublicSetupAllowListExtend']),
|
|
237
271
|
};
|
|
238
272
|
|
|
239
273
|
export const sequencerClientConfigMappings: ConfigMappingsType<SequencerClientConfig> = {
|
|
274
|
+
...chainConfigMappings,
|
|
240
275
|
...validatorClientConfigMappings,
|
|
241
276
|
...sequencerConfigMappings,
|
|
242
277
|
...keyStoreConfigMappings,
|
|
243
278
|
...l1ReaderConfigMappings,
|
|
244
279
|
...sequencerTxSenderConfigMappings,
|
|
245
280
|
...sequencerPublisherConfigMappings,
|
|
246
|
-
...chainConfigMappings,
|
|
247
|
-
...pipelineConfigMappings,
|
|
248
281
|
...pickConfigMappings(l1ContractsConfigMappings, ['ethereumSlotDuration', 'aztecSlotDuration', 'aztecEpochDuration']),
|
|
249
282
|
};
|
|
250
283
|
|