@aztec/sequencer-client 4.2.0-nightly.20260320 → 4.2.0-nightly.20260322
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 +3 -1
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +2 -10
- 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 -22
- package/dest/global_variable_builder/index.d.ts +2 -2
- package/dest/global_variable_builder/index.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.d.ts +5 -3
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +23 -4
- package/dest/sequencer/sequencer.js +3 -3
- package/package.json +28 -28
- package/src/client/sequencer-client.ts +4 -10
- package/src/global_variable_builder/global_builder.ts +22 -24
- package/src/global_variable_builder/index.ts +1 -1
- package/src/publisher/sequencer-publisher.ts +26 -4
- package/src/sequencer/sequencer.ts +3 -3
|
@@ -13,6 +13,7 @@ import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
|
13
13
|
import { L1Metrics, type TelemetryClient } from '@aztec/telemetry-client';
|
|
14
14
|
import { FullNodeCheckpointsBuilder, NodeKeystoreAdapter, type ValidatorClient } from '@aztec/validator-client';
|
|
15
15
|
import { type SequencerClientConfig } from '../config.js';
|
|
16
|
+
import type { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
16
17
|
import { SequencerPublisherFactory } from '../publisher/sequencer-publisher-factory.js';
|
|
17
18
|
import { Sequencer, type SequencerConfig } from '../sequencer/index.js';
|
|
18
19
|
/**
|
|
@@ -53,6 +54,7 @@ export declare class SequencerClient {
|
|
|
53
54
|
epochCache?: EpochCache;
|
|
54
55
|
l1TxUtils: L1TxUtils[];
|
|
55
56
|
nodeKeyStore: KeystoreManager;
|
|
57
|
+
globalVariableBuilder: GlobalVariableBuilder;
|
|
56
58
|
}): Promise<SequencerClient>;
|
|
57
59
|
/**
|
|
58
60
|
* Updates sequencer and validator client config.
|
|
@@ -73,4 +75,4 @@ export declare class SequencerClient {
|
|
|
73
75
|
get validatorAddresses(): EthAddress[] | undefined;
|
|
74
76
|
get maxL2BlockGas(): number | undefined;
|
|
75
77
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLWNsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9zZXF1ZW5jZXItY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSWhELE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekcsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLEtBQUssZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEgsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQXlDLE1BQU0sY0FBYyxDQUFDO0FBQ2pHLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDeEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhFOztHQUVHO0FBQ0gscUJBQWEsZUFBZTtJQUV4QixTQUFTLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO0lBQ3ZELFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUztJQUM5QixTQUFTLENBQUMsa0JBQWtCLEVBQUUsMEJBQTBCO0lBQ3hELFNBQVMsQ0FBQyxlQUFlLENBQUM7SUFDMUIsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNsQixPQUFPLENBQUMsUUFBUSxDQUFDO0lBTm5CLFlBQ1ksZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQzdDLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGtCQUFrQixFQUFFLDBCQUEwQixFQUM5QyxlQUFlLENBQUMsNkJBQWlCLEVBQ25DLFNBQVMsQ0FBQyx1QkFBVyxFQUNyQixRQUFRLENBQUMscUJBQVMsRUFDeEI7SUFFSjs7Ozs7Ozs7Ozs7T0FXRztJQUNILE9BQW9CLEdBQUcsQ0FDckIsTUFBTSxFQUFFLHFCQUFxQixFQUM3QixJQUFJLEVBQUU7UUFDSixlQUFlLEVBQUUsZUFBZSxDQUFDO1FBQ2pDLFNBQVMsRUFBRSxHQUFHLENBQUM7UUFDZixzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQztRQUMvQyxhQUFhLEVBQUUsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO1FBQ2xELGtCQUFrQixFQUFFLDBCQUEwQixDQUFDO1FBQy9DLGFBQWEsRUFBRSxhQUFhLEdBQUcsV0FBVyxDQUFDO1FBQzNDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDO1FBQ3pDLFNBQVMsRUFBRSxlQUFlLENBQUM7UUFDM0IsZ0JBQWdCLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztRQUM3QyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7UUFDaEMsWUFBWSxFQUFFLFlBQVksQ0FBQztRQUMzQixVQUFVLENBQUMsRUFBRSxVQUFVLENBQUM7UUFDeEIsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLFlBQVksRUFBRSxlQUFlLENBQUM7UUFDOUIscUJBQXFCLEVBQUUscUJBQXFCLENBQUM7S0FDOUMsNEJBK0dGO0lBRUQ7OztPQUdHO0lBQ0ksWUFBWSxDQUFDLE1BQU0sRUFBRSxlQUFlLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixDQUFDLFFBSS9FO0lBRUQsNEJBQTRCO0lBQ2YsS0FBSyxrQkFLakI7SUFFRDs7T0FFRztJQUNVLElBQUksa0JBS2hCO0lBRU0sWUFBWSxJQUFJLFNBQVMsQ0FFL0I7SUFFRCxxRkFBcUY7SUFDOUUsMkJBQTJCLENBQUMsT0FBTyxFQUFFLG1CQUFtQixHQUFHLElBQUksQ0FFckU7SUFFRCxpRkFBaUY7SUFDakYsVUFBVSxJQUFJLE9BQU8sR0FBRyxTQUFTLENBRWhDO0lBRUQsSUFBSSxrQkFBa0IsSUFBSSxVQUFVLEVBQUUsR0FBRyxTQUFTLENBRWpEO0lBRUQsSUFBSSxhQUFhLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FFdEM7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-client.d.ts","sourceRoot":"","sources":["../../src/client/sequencer-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEhH,OAAO,EAAE,KAAK,qBAAqB,EAAyC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"sequencer-client.d.ts","sourceRoot":"","sources":["../../src/client/sequencer-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,6 @@ import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
|
10
10
|
import { L1Metrics } from '@aztec/telemetry-client';
|
|
11
11
|
import { NodeKeystoreAdapter } from '@aztec/validator-client';
|
|
12
12
|
import { getPublisherConfigFromSequencerConfig } from '../config.js';
|
|
13
|
-
import { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
14
13
|
import { SequencerPublisherFactory } from '../publisher/sequencer-publisher-factory.js';
|
|
15
14
|
import { Sequencer } from '../sequencer/index.js';
|
|
16
15
|
/**
|
|
@@ -50,10 +49,9 @@ import { Sequencer } from '../sequencer/index.js';
|
|
|
50
49
|
const l1Metrics = new L1Metrics(telemetryClient.getMeter('L1PublisherMetrics'), publicClient, l1TxUtils.map((x)=>x.getSenderAddress()));
|
|
51
50
|
const publisherManager = new PublisherManager(l1TxUtils, getPublisherConfigFromSequencerConfig(config), log.getBindings());
|
|
52
51
|
const rollupContract = new RollupContract(publicClient, config.l1Contracts.rollupAddress.toString());
|
|
53
|
-
const [l1GenesisTime, slotDuration,
|
|
52
|
+
const [l1GenesisTime, slotDuration, rollupManaLimit] = await Promise.all([
|
|
54
53
|
rollupContract.getL1GenesisTime(),
|
|
55
54
|
rollupContract.getSlotDuration(),
|
|
56
|
-
rollupContract.getVersion(),
|
|
57
55
|
rollupContract.getManaLimit().then(Number)
|
|
58
56
|
]);
|
|
59
57
|
const governanceProposerContract = new GovernanceProposerContract(publicClient, config.l1Contracts.governanceProposerAddress.toString());
|
|
@@ -79,13 +77,7 @@ import { Sequencer } from '../sequencer/index.js';
|
|
|
79
77
|
logger: log
|
|
80
78
|
});
|
|
81
79
|
const ethereumSlotDuration = config.ethereumSlotDuration;
|
|
82
|
-
const globalsBuilder =
|
|
83
|
-
...config,
|
|
84
|
-
l1GenesisTime,
|
|
85
|
-
slotDuration: Number(slotDuration),
|
|
86
|
-
ethereumSlotDuration,
|
|
87
|
-
rollupVersion
|
|
88
|
-
});
|
|
80
|
+
const globalsBuilder = deps.globalVariableBuilder;
|
|
89
81
|
// When running in anvil, assume we can post a tx up until one second before the end of an L1 slot.
|
|
90
82
|
// Otherwise, we need the full L1 slot duration for publishing to ensure inclusion.
|
|
91
83
|
// In theory, the L1 slot has an initial 4s phase where the block is propagated, so we could
|
|
@@ -1,29 +1,35 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
2
|
+
import type { ViemPublicClient } from '@aztec/ethereum/types';
|
|
3
3
|
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
+
import type { DateProvider } from '@aztec/foundation/timer';
|
|
5
6
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
7
|
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
7
8
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
8
9
|
import type { CheckpointGlobalVariables, GlobalVariableBuilder as GlobalVariableBuilderInterface } from '@aztec/stdlib/tx';
|
|
9
10
|
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
11
|
+
/** Configuration for the GlobalVariableBuilder (excludes L1 client config). */
|
|
12
|
+
export type GlobalVariableBuilderConfig = {
|
|
13
|
+
l1Contracts: Pick<L1ContractAddresses, 'rollupAddress'>;
|
|
14
|
+
ethereumSlotDuration: number;
|
|
15
|
+
rollupVersion: bigint;
|
|
16
|
+
} & Pick<L1RollupConstants, 'slotDuration' | 'l1GenesisTime'>;
|
|
10
17
|
/**
|
|
11
18
|
* Simple global variables builder.
|
|
12
19
|
*/
|
|
13
20
|
export declare class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
21
|
+
private readonly dateProvider;
|
|
22
|
+
private readonly publicClient;
|
|
14
23
|
private log;
|
|
15
24
|
private currentMinFees;
|
|
16
25
|
private currentL1BlockNumber;
|
|
17
26
|
private readonly rollupContract;
|
|
18
|
-
private readonly publicClient;
|
|
19
27
|
private readonly ethereumSlotDuration;
|
|
20
28
|
private readonly aztecSlotDuration;
|
|
21
29
|
private readonly l1GenesisTime;
|
|
22
30
|
private chainId;
|
|
23
31
|
private version;
|
|
24
|
-
constructor(
|
|
25
|
-
rollupVersion: bigint;
|
|
26
|
-
});
|
|
32
|
+
constructor(dateProvider: DateProvider, publicClient: ViemPublicClient, config: GlobalVariableBuilderConfig);
|
|
27
33
|
private computeCurrentMinFees;
|
|
28
34
|
getCurrentMinFees(): Promise<GasFees>;
|
|
29
35
|
/**
|
|
@@ -38,4 +44,4 @@ export declare class GlobalVariableBuilder implements GlobalVariableBuilderInter
|
|
|
38
44
|
/** Builds global variables that are constant throughout a checkpoint. */
|
|
39
45
|
buildCheckpointGlobalVariables(coinbase: EthAddress, feeRecipient: AztecAddress, slotNumber: SlotNumber): Promise<CheckpointGlobalVariables>;
|
|
40
46
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsX2J1aWxkZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nbG9iYWxfdmFyaWFibGVfYnVpbGRlci9nbG9iYWxfYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUxRSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVoRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBK0MsTUFBTSw2QkFBNkIsQ0FBQztBQUNsSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxLQUFLLEVBQ1YseUJBQXlCLEVBQ3pCLHFCQUFxQixJQUFJLDhCQUE4QixFQUN4RCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCwrRUFBK0U7QUFDL0UsTUFBTSxNQUFNLDJCQUEyQixHQUFHO0lBQ3hDLFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDeEQsb0JBQW9CLEVBQUUsTUFBTSxDQUFDO0lBQzdCLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDdkIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxHQUFHLGVBQWUsQ0FBQyxDQUFDO0FBRTlEOztHQUVHO0FBQ0gscUJBQWEscUJBQXNCLFlBQVcsOEJBQThCO0lBY3hFLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWTtJQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVk7SUFkL0IsT0FBTyxDQUFDLEdBQUcsQ0FBcUQ7SUFDaEUsT0FBTyxDQUFDLGNBQWMsQ0FBd0Q7SUFDOUUsT0FBTyxDQUFDLG9CQUFvQixDQUFpQztJQUU3RCxPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBaUI7SUFDaEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBUztJQUM5QyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFTO0lBQzNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFTO0lBRXZDLE9BQU8sQ0FBQyxPQUFPLENBQUs7SUFDcEIsT0FBTyxDQUFDLE9BQU8sQ0FBSztJQUVwQixZQUNtQixZQUFZLEVBQUUsWUFBWSxFQUMxQixZQUFZLEVBQUUsZ0JBQWdCLEVBQy9DLE1BQU0sRUFBRSwyQkFBMkIsRUFVcEM7WUFNYSxxQkFBcUI7SUFrQnRCLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FVakQ7SUFFRDs7Ozs7OztPQU9HO0lBQ1Usb0JBQW9CLENBQy9CLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLFFBQVEsRUFBRSxVQUFVLEVBQ3BCLFlBQVksRUFBRSxZQUFZLEVBQzFCLFNBQVMsQ0FBQyxFQUFFLFVBQVUsR0FDckIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQVkxQjtJQUVELHlFQUF5RTtJQUM1RCw4QkFBOEIsQ0FDekMsUUFBUSxFQUFFLFVBQVUsRUFDcEIsWUFBWSxFQUFFLFlBQVksRUFDMUIsVUFBVSxFQUFFLFVBQVUsR0FDckIsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBYXBDO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global_builder.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/global_builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"global_builder.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/global_builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,KAAK,iBAAiB,EAA+C,MAAM,6BAA6B,CAAC;AAClH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,IAAI,8BAA8B,EACxD,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,+EAA+E;AAC/E,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IACxD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CAAC,iBAAiB,EAAE,cAAc,GAAG,eAAe,CAAC,CAAC;AAE9D;;GAEG;AACH,qBAAa,qBAAsB,YAAW,8BAA8B;IAcxE,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAd/B,OAAO,CAAC,GAAG,CAAqD;IAChE,OAAO,CAAC,cAAc,CAAwD;IAC9E,OAAO,CAAC,oBAAoB,CAAiC;IAE7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAK;IAEpB,YACmB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,gBAAgB,EAC/C,MAAM,EAAE,2BAA2B,EAUpC;YAMa,qBAAqB;IAkBtB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAUjD;IAED;;;;;;;OAOG;IACU,oBAAoB,CAC/B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,eAAe,CAAC,CAY1B;IAED,yEAAyE;IAC5D,8BAA8B,CACzC,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,yBAAyB,CAAC,CAapC;CACF"}
|
|
@@ -1,42 +1,36 @@
|
|
|
1
|
-
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
2
|
-
import { makeL1HttpTransport } from '@aztec/ethereum/client';
|
|
3
1
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
4
2
|
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
5
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
6
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
7
|
-
import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
5
|
+
import { getNextL1SlotTimestamp, getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
8
6
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
9
7
|
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
10
|
-
import { createPublicClient } from 'viem';
|
|
11
8
|
/**
|
|
12
9
|
* Simple global variables builder.
|
|
13
10
|
*/ export class GlobalVariableBuilder {
|
|
14
|
-
|
|
15
|
-
currentMinFees = Promise.resolve(new GasFees(0, 0));
|
|
16
|
-
currentL1BlockNumber = undefined;
|
|
17
|
-
rollupContract;
|
|
11
|
+
dateProvider;
|
|
18
12
|
publicClient;
|
|
13
|
+
log;
|
|
14
|
+
currentMinFees;
|
|
15
|
+
currentL1BlockNumber;
|
|
16
|
+
rollupContract;
|
|
19
17
|
ethereumSlotDuration;
|
|
20
18
|
aztecSlotDuration;
|
|
21
19
|
l1GenesisTime;
|
|
22
20
|
chainId;
|
|
23
21
|
version;
|
|
24
|
-
constructor(config){
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
constructor(dateProvider, publicClient, config){
|
|
23
|
+
this.dateProvider = dateProvider;
|
|
24
|
+
this.publicClient = publicClient;
|
|
25
|
+
this.log = createLogger('sequencer:global_variable_builder');
|
|
26
|
+
this.currentMinFees = Promise.resolve(new GasFees(0, 0));
|
|
27
|
+
this.currentL1BlockNumber = undefined;
|
|
27
28
|
this.version = new Fr(config.rollupVersion);
|
|
28
|
-
this.chainId = new Fr(
|
|
29
|
+
this.chainId = new Fr(this.publicClient.chain.id);
|
|
29
30
|
this.ethereumSlotDuration = config.ethereumSlotDuration;
|
|
30
31
|
this.aztecSlotDuration = config.slotDuration;
|
|
31
32
|
this.l1GenesisTime = config.l1GenesisTime;
|
|
32
|
-
this.
|
|
33
|
-
chain: chain.chainInfo,
|
|
34
|
-
transport: makeL1HttpTransport(chain.rpcUrls, {
|
|
35
|
-
timeout: config.l1HttpTimeoutMS
|
|
36
|
-
}),
|
|
37
|
-
pollingInterval: config.viemPollingIntervalMS
|
|
38
|
-
});
|
|
39
|
-
this.rollupContract = new RollupContract(this.publicClient, l1Contracts.rollupAddress);
|
|
33
|
+
this.rollupContract = new RollupContract(this.publicClient, config.l1Contracts.rollupAddress);
|
|
40
34
|
}
|
|
41
35
|
/**
|
|
42
36
|
* Computes the "current" min fees, e.g., the price that you currently should pay to get include in the next block
|
|
@@ -47,7 +41,10 @@ import { createPublicClient } from 'viem';
|
|
|
47
41
|
// The timestamp of that last block will act as a lower bound for the next block.
|
|
48
42
|
const lastCheckpoint = await this.rollupContract.getPendingCheckpoint();
|
|
49
43
|
const earliestTimestamp = await this.rollupContract.getTimestampForSlot(SlotNumber.fromBigInt(BigInt(lastCheckpoint.slotNumber) + 1n));
|
|
50
|
-
const nextEthTimestamp =
|
|
44
|
+
const nextEthTimestamp = getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), {
|
|
45
|
+
l1GenesisTime: this.l1GenesisTime,
|
|
46
|
+
ethereumSlotDuration: this.ethereumSlotDuration
|
|
47
|
+
});
|
|
51
48
|
const timestamp = earliestTimestamp > nextEthTimestamp ? earliestTimestamp : nextEthTimestamp;
|
|
52
49
|
return new GasFees(0, await this.rollupContract.getManaMinFeeAt(timestamp, true));
|
|
53
50
|
}
|
|
@@ -69,7 +66,10 @@ import { createPublicClient } from 'viem';
|
|
|
69
66
|
* @param slotNumber - The slot number to use for the global variables, if undefined it will be calculated.
|
|
70
67
|
* @returns The global variables for the given block number.
|
|
71
68
|
*/ async buildGlobalVariables(blockNumber, coinbase, feeRecipient, maybeSlot) {
|
|
72
|
-
const slot = maybeSlot ?? await this.rollupContract.getSlotAt(
|
|
69
|
+
const slot = maybeSlot ?? await this.rollupContract.getSlotAt(getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), {
|
|
70
|
+
l1GenesisTime: this.l1GenesisTime,
|
|
71
|
+
ethereumSlotDuration: this.ethereumSlotDuration
|
|
72
|
+
}));
|
|
73
73
|
const checkpointGlobalVariables = await this.buildCheckpointGlobalVariables(coinbase, feeRecipient, slot);
|
|
74
74
|
return GlobalVariables.from({
|
|
75
75
|
blockNumber,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { GlobalVariableBuilder } from './global_builder.js';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export { GlobalVariableBuilder, type GlobalVariableBuilderConfig } from './global_builder.js';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nbG9iYWxfdmFyaWFibGVfYnVpbGRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsS0FBSywyQkFBMkIsRUFBRSxNQUFNLHFCQUFxQixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,2BAA2B,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -54,6 +54,7 @@ export declare class SequencerPublisher {
|
|
|
54
54
|
private payloadProposedCache;
|
|
55
55
|
protected log: Logger;
|
|
56
56
|
protected ethereumSlotDuration: bigint;
|
|
57
|
+
private dateProvider;
|
|
57
58
|
private blobClient;
|
|
58
59
|
/** Address to use for simulations in fisherman mode (actual proposer's address) */
|
|
59
60
|
private proposerAddressForSimulation?;
|
|
@@ -140,11 +141,11 @@ export declare class SequencerPublisher {
|
|
|
140
141
|
} | undefined>;
|
|
141
142
|
private callbackBundledTransactions;
|
|
142
143
|
/**
|
|
143
|
-
* @notice Will call `
|
|
144
|
+
* @notice Will call `canProposeAt` to make sure that it is possible to propose
|
|
144
145
|
* @param tipArchive - The archive to check
|
|
145
146
|
* @returns The slot and block number if it is possible to propose, undefined otherwise
|
|
146
147
|
*/
|
|
147
|
-
|
|
148
|
+
canProposeAt(tipArchive: Fr, msgSender: EthAddress, opts?: {
|
|
148
149
|
forcePendingCheckpointNumber?: CheckpointNumber;
|
|
149
150
|
}): Promise<{
|
|
150
151
|
slot: SlotNumber;
|
|
@@ -202,6 +203,7 @@ export declare class SequencerPublisher {
|
|
|
202
203
|
private prepareProposeTx;
|
|
203
204
|
private simulateProposeTx;
|
|
204
205
|
private addProposeTx;
|
|
206
|
+
private getNextL1SlotTimestampWithL1Floor;
|
|
205
207
|
}
|
|
206
208
|
export {};
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLXB1Ymxpc2hlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1Ymxpc2hlci9zZXF1ZW5jZXItcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyw4QkFBOEIsRUFFbkMsS0FBSywwQkFBMEIsRUFJL0IsY0FBYyxFQUNkLEtBQUssNkJBQTZCLEVBR25DLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUYsT0FBTyxFQUNMLEtBQUssWUFBWSxFQUNqQixLQUFLLFVBQVUsRUFDZixLQUFLLFdBQVcsRUFDaEIsS0FBSyxTQUFTLEVBRWQsS0FBSyxnQkFBZ0IsRUFFdEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQStDLE1BQU0sdUJBQXVCLENBQUM7QUFHeEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRy9FLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsWUFBWSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFFOUQsT0FBTyxF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EACL,KAAK,8BAA8B,EAEnC,KAAK,0BAA0B,EAI/B,cAAc,EACd,KAAK,6BAA6B,EAGnC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,mBAAmB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EAEd,KAAK,gBAAgB,EAEtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAA+C,MAAM,uBAAuB,CAAC;AAGxG,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG/E,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAsB,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,KAAK,mBAAmB,EAA6B,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACrG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -390,6 +390,7 @@ import { Timer } from '@aztec/foundation/timer';
|
|
|
390
390
|
import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
391
391
|
import { encodeSlashConsensusVotes } from '@aztec/slasher';
|
|
392
392
|
import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
393
|
+
import { getNextL1SlotTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
393
394
|
import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
394
395
|
import { encodeFunctionData, toHex } from 'viem';
|
|
395
396
|
import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
@@ -438,6 +439,7 @@ export class SequencerPublisher {
|
|
|
438
439
|
payloadProposedCache;
|
|
439
440
|
log;
|
|
440
441
|
ethereumSlotDuration;
|
|
442
|
+
dateProvider;
|
|
441
443
|
blobClient;
|
|
442
444
|
/** Address to use for simulations in fisherman mode (actual proposer's address) */ proposerAddressForSimulation;
|
|
443
445
|
/** L1 fee analyzer for fisherman mode */ l1FeeAnalyzer;
|
|
@@ -464,6 +466,7 @@ export class SequencerPublisher {
|
|
|
464
466
|
this.requests = [];
|
|
465
467
|
this.log = deps.log ?? createLogger('sequencer:publisher');
|
|
466
468
|
this.ethereumSlotDuration = BigInt(config.ethereumSlotDuration);
|
|
469
|
+
this.dateProvider = deps.dateProvider;
|
|
467
470
|
this.epochCache = deps.epochCache;
|
|
468
471
|
this.lastActions = deps.lastActions;
|
|
469
472
|
this.blobClient = deps.blobClient;
|
|
@@ -693,17 +696,18 @@ export class SequencerPublisher {
|
|
|
693
696
|
}
|
|
694
697
|
}
|
|
695
698
|
/**
|
|
696
|
-
* @notice Will call `
|
|
699
|
+
* @notice Will call `canProposeAt` to make sure that it is possible to propose
|
|
697
700
|
* @param tipArchive - The archive to check
|
|
698
701
|
* @returns The slot and block number if it is possible to propose, undefined otherwise
|
|
699
|
-
*/
|
|
702
|
+
*/ async canProposeAt(tipArchive, msgSender, opts = {}) {
|
|
700
703
|
// TODO: #14291 - should loop through multiple keys to check if any of them can propose
|
|
701
704
|
const ignoredErrors = [
|
|
702
705
|
'SlotAlreadyInChain',
|
|
703
706
|
'InvalidProposer',
|
|
704
707
|
'InvalidArchive'
|
|
705
708
|
];
|
|
706
|
-
|
|
709
|
+
const nextL1SlotTs = await this.getNextL1SlotTimestampWithL1Floor();
|
|
710
|
+
return this.rollupContract.canProposeAt(tipArchive.toBuffer(), msgSender.toString(), nextL1SlotTs, {
|
|
707
711
|
forcePendingCheckpointNumber: opts.forcePendingCheckpointNumber
|
|
708
712
|
}).catch((err)=>{
|
|
709
713
|
if (err instanceof FormattedViemError && ignoredErrors.find((e)=>err.message.includes(e))) {
|
|
@@ -735,7 +739,7 @@ export class SequencerPublisher {
|
|
|
735
739
|
header.blobsHash.toString(),
|
|
736
740
|
flags
|
|
737
741
|
];
|
|
738
|
-
const ts =
|
|
742
|
+
const ts = await this.getNextL1SlotTimestampWithL1Floor();
|
|
739
743
|
const stateOverrides = await this.rollupContract.makePendingCheckpointNumberOverride(opts?.forcePendingCheckpointNumber);
|
|
740
744
|
let balance = 0n;
|
|
741
745
|
if (this.config.fishermanMode) {
|
|
@@ -1426,4 +1430,19 @@ export class SequencerPublisher {
|
|
|
1426
1430
|
}
|
|
1427
1431
|
});
|
|
1428
1432
|
}
|
|
1433
|
+
/**
|
|
1434
|
+
* Returns the timestamp to use when simulating L1 proposal calls.
|
|
1435
|
+
* Uses the wall-clock-based next L1 slot boundary, but floors it with the latest L1 block timestamp
|
|
1436
|
+
* plus one slot duration. This prevents the sequencer from targeting a future L2 slot when the L1
|
|
1437
|
+
* chain hasn't caught up to the wall clock yet (e.g., the dateProvider is one L1 slot ahead of the
|
|
1438
|
+
* latest mined block), which would cause the propose tx to land in an L1 block with block.timestamp
|
|
1439
|
+
* still in the previous L2 slot.
|
|
1440
|
+
* TODO(palla): Properly fix by keeping dateProvider synced with anvil's chain time on every block.
|
|
1441
|
+
*/ async getNextL1SlotTimestampWithL1Floor() {
|
|
1442
|
+
const l1Constants = this.epochCache.getL1Constants();
|
|
1443
|
+
const fromWallClock = getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), l1Constants);
|
|
1444
|
+
const latestBlock = await this.l1TxUtils.client.getBlock();
|
|
1445
|
+
const fromL1Block = latestBlock.timestamp + BigInt(l1Constants.ethereumSlotDuration);
|
|
1446
|
+
return fromWallClock > fromL1Block ? fromWallClock : fromL1Block;
|
|
1447
|
+
}
|
|
1429
1448
|
}
|
|
@@ -650,7 +650,7 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
650
650
|
const invalidateCheckpoint = await publisher.simulateInvalidateCheckpoint(syncedTo.pendingChainValidationStatus);
|
|
651
651
|
// Check with the rollup contract if we can indeed propose at the next L2 slot. This check should not fail
|
|
652
652
|
// if all the previous checks are good, but we do it just in case.
|
|
653
|
-
const canProposeCheck = await publisher.
|
|
653
|
+
const canProposeCheck = await publisher.canProposeAt(syncedTo.archive, proposer ?? EthAddress.ZERO, invalidateCheckpoint);
|
|
654
654
|
if (canProposeCheck === undefined) {
|
|
655
655
|
this.log.warn(`Cannot propose checkpoint ${checkpointNumber} at slot ${slot} due to failed rollup contract check`, logCtx);
|
|
656
656
|
this.emit('proposer-rollup-check-failed', {
|
|
@@ -744,8 +744,8 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
744
744
|
* We don't check against the previous block submitted since it may have been reorg'd out.
|
|
745
745
|
*/ async checkSync(args) {
|
|
746
746
|
// Check that the archiver has fully synced the L2 slot before the one we want to propose in.
|
|
747
|
-
//
|
|
748
|
-
//
|
|
747
|
+
// The archiver reports sync progress via L1 block timestamps and synced checkpoint slots.
|
|
748
|
+
// See getSyncedL2SlotNumber for how missed L1 blocks are handled.
|
|
749
749
|
const syncedL2Slot = await this.l2BlockSource.getSyncedL2SlotNumber();
|
|
750
750
|
const { slot } = args;
|
|
751
751
|
if (syncedL2Slot === undefined || syncedL2Slot + 1 < slot) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "4.2.0-nightly.
|
|
3
|
+
"version": "4.2.0-nightly.20260322",
|
|
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": "4.2.0-nightly.
|
|
30
|
-
"@aztec/bb-prover": "4.2.0-nightly.
|
|
31
|
-
"@aztec/blob-client": "4.2.0-nightly.
|
|
32
|
-
"@aztec/blob-lib": "4.2.0-nightly.
|
|
33
|
-
"@aztec/constants": "4.2.0-nightly.
|
|
34
|
-
"@aztec/epoch-cache": "4.2.0-nightly.
|
|
35
|
-
"@aztec/ethereum": "4.2.0-nightly.
|
|
36
|
-
"@aztec/foundation": "4.2.0-nightly.
|
|
37
|
-
"@aztec/l1-artifacts": "4.2.0-nightly.
|
|
38
|
-
"@aztec/merkle-tree": "4.2.0-nightly.
|
|
39
|
-
"@aztec/node-keystore": "4.2.0-nightly.
|
|
40
|
-
"@aztec/noir-acvm_js": "4.2.0-nightly.
|
|
41
|
-
"@aztec/noir-contracts.js": "4.2.0-nightly.
|
|
42
|
-
"@aztec/noir-protocol-circuits-types": "4.2.0-nightly.
|
|
43
|
-
"@aztec/noir-types": "4.2.0-nightly.
|
|
44
|
-
"@aztec/p2p": "4.2.0-nightly.
|
|
45
|
-
"@aztec/protocol-contracts": "4.2.0-nightly.
|
|
46
|
-
"@aztec/prover-client": "4.2.0-nightly.
|
|
47
|
-
"@aztec/simulator": "4.2.0-nightly.
|
|
48
|
-
"@aztec/slasher": "4.2.0-nightly.
|
|
49
|
-
"@aztec/stdlib": "4.2.0-nightly.
|
|
50
|
-
"@aztec/telemetry-client": "4.2.0-nightly.
|
|
51
|
-
"@aztec/validator-client": "4.2.0-nightly.
|
|
52
|
-
"@aztec/validator-ha-signer": "4.2.0-nightly.
|
|
53
|
-
"@aztec/world-state": "4.2.0-nightly.
|
|
29
|
+
"@aztec/aztec.js": "4.2.0-nightly.20260322",
|
|
30
|
+
"@aztec/bb-prover": "4.2.0-nightly.20260322",
|
|
31
|
+
"@aztec/blob-client": "4.2.0-nightly.20260322",
|
|
32
|
+
"@aztec/blob-lib": "4.2.0-nightly.20260322",
|
|
33
|
+
"@aztec/constants": "4.2.0-nightly.20260322",
|
|
34
|
+
"@aztec/epoch-cache": "4.2.0-nightly.20260322",
|
|
35
|
+
"@aztec/ethereum": "4.2.0-nightly.20260322",
|
|
36
|
+
"@aztec/foundation": "4.2.0-nightly.20260322",
|
|
37
|
+
"@aztec/l1-artifacts": "4.2.0-nightly.20260322",
|
|
38
|
+
"@aztec/merkle-tree": "4.2.0-nightly.20260322",
|
|
39
|
+
"@aztec/node-keystore": "4.2.0-nightly.20260322",
|
|
40
|
+
"@aztec/noir-acvm_js": "4.2.0-nightly.20260322",
|
|
41
|
+
"@aztec/noir-contracts.js": "4.2.0-nightly.20260322",
|
|
42
|
+
"@aztec/noir-protocol-circuits-types": "4.2.0-nightly.20260322",
|
|
43
|
+
"@aztec/noir-types": "4.2.0-nightly.20260322",
|
|
44
|
+
"@aztec/p2p": "4.2.0-nightly.20260322",
|
|
45
|
+
"@aztec/protocol-contracts": "4.2.0-nightly.20260322",
|
|
46
|
+
"@aztec/prover-client": "4.2.0-nightly.20260322",
|
|
47
|
+
"@aztec/simulator": "4.2.0-nightly.20260322",
|
|
48
|
+
"@aztec/slasher": "4.2.0-nightly.20260322",
|
|
49
|
+
"@aztec/stdlib": "4.2.0-nightly.20260322",
|
|
50
|
+
"@aztec/telemetry-client": "4.2.0-nightly.20260322",
|
|
51
|
+
"@aztec/validator-client": "4.2.0-nightly.20260322",
|
|
52
|
+
"@aztec/validator-ha-signer": "4.2.0-nightly.20260322",
|
|
53
|
+
"@aztec/world-state": "4.2.0-nightly.20260322",
|
|
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": "4.2.0-nightly.
|
|
60
|
-
"@aztec/kv-store": "4.2.0-nightly.
|
|
59
|
+
"@aztec/archiver": "4.2.0-nightly.20260322",
|
|
60
|
+
"@aztec/kv-store": "4.2.0-nightly.20260322",
|
|
61
61
|
"@electric-sql/pglite": "^0.3.14",
|
|
62
62
|
"@jest/globals": "^30.0.0",
|
|
63
63
|
"@types/jest": "^30.0.0",
|
|
@@ -20,7 +20,7 @@ import { L1Metrics, type TelemetryClient } from '@aztec/telemetry-client';
|
|
|
20
20
|
import { FullNodeCheckpointsBuilder, NodeKeystoreAdapter, type ValidatorClient } from '@aztec/validator-client';
|
|
21
21
|
|
|
22
22
|
import { type SequencerClientConfig, getPublisherConfigFromSequencerConfig } from '../config.js';
|
|
23
|
-
import { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
23
|
+
import type { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
24
24
|
import { SequencerPublisherFactory } from '../publisher/sequencer-publisher-factory.js';
|
|
25
25
|
import { Sequencer, type SequencerConfig } from '../sequencer/index.js';
|
|
26
26
|
|
|
@@ -66,6 +66,7 @@ export class SequencerClient {
|
|
|
66
66
|
epochCache?: EpochCache;
|
|
67
67
|
l1TxUtils: L1TxUtils[];
|
|
68
68
|
nodeKeyStore: KeystoreManager;
|
|
69
|
+
globalVariableBuilder: GlobalVariableBuilder;
|
|
69
70
|
},
|
|
70
71
|
) {
|
|
71
72
|
const {
|
|
@@ -93,10 +94,9 @@ export class SequencerClient {
|
|
|
93
94
|
log.getBindings(),
|
|
94
95
|
);
|
|
95
96
|
const rollupContract = new RollupContract(publicClient, config.l1Contracts.rollupAddress.toString());
|
|
96
|
-
const [l1GenesisTime, slotDuration,
|
|
97
|
+
const [l1GenesisTime, slotDuration, rollupManaLimit] = await Promise.all([
|
|
97
98
|
rollupContract.getL1GenesisTime(),
|
|
98
99
|
rollupContract.getSlotDuration(),
|
|
99
|
-
rollupContract.getVersion(),
|
|
100
100
|
rollupContract.getManaLimit().then(Number),
|
|
101
101
|
] as const);
|
|
102
102
|
|
|
@@ -139,13 +139,7 @@ export class SequencerClient {
|
|
|
139
139
|
|
|
140
140
|
const ethereumSlotDuration = config.ethereumSlotDuration;
|
|
141
141
|
|
|
142
|
-
const globalsBuilder =
|
|
143
|
-
...config,
|
|
144
|
-
l1GenesisTime,
|
|
145
|
-
slotDuration: Number(slotDuration),
|
|
146
|
-
ethereumSlotDuration,
|
|
147
|
-
rollupVersion,
|
|
148
|
-
});
|
|
142
|
+
const globalsBuilder = deps.globalVariableBuilder;
|
|
149
143
|
|
|
150
144
|
// When running in anvil, assume we can post a tx up until one second before the end of an L1 slot.
|
|
151
145
|
// Otherwise, we need the full L1 slot duration for publishing to ensure inclusion.
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
2
|
-
import { makeL1HttpTransport } from '@aztec/ethereum/client';
|
|
3
|
-
import type { L1ContractsConfig } from '@aztec/ethereum/config';
|
|
4
1
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
5
|
-
import type {
|
|
2
|
+
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
6
3
|
import type { ViemPublicClient } from '@aztec/ethereum/types';
|
|
7
4
|
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
8
5
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
9
6
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
10
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
8
|
+
import type { DateProvider } from '@aztec/foundation/timer';
|
|
11
9
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
12
|
-
import { type L1RollupConstants, getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
10
|
+
import { type L1RollupConstants, getNextL1SlotTimestamp, getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
13
11
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
14
12
|
import type {
|
|
15
13
|
CheckpointGlobalVariables,
|
|
@@ -17,7 +15,12 @@ import type {
|
|
|
17
15
|
} from '@aztec/stdlib/tx';
|
|
18
16
|
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
19
17
|
|
|
20
|
-
|
|
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'>;
|
|
21
24
|
|
|
22
25
|
/**
|
|
23
26
|
* Simple global variables builder.
|
|
@@ -28,7 +31,6 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
|
28
31
|
private currentL1BlockNumber: bigint | undefined = undefined;
|
|
29
32
|
|
|
30
33
|
private readonly rollupContract: RollupContract;
|
|
31
|
-
private readonly publicClient: ViemPublicClient;
|
|
32
34
|
private readonly ethereumSlotDuration: number;
|
|
33
35
|
private readonly aztecSlotDuration: number;
|
|
34
36
|
private readonly l1GenesisTime: bigint;
|
|
@@ -37,28 +39,18 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
|
37
39
|
private version: Fr;
|
|
38
40
|
|
|
39
41
|
constructor(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
private readonly dateProvider: DateProvider,
|
|
43
|
+
private readonly publicClient: ViemPublicClient,
|
|
44
|
+
config: GlobalVariableBuilderConfig,
|
|
43
45
|
) {
|
|
44
|
-
const { l1RpcUrls, l1ChainId: chainId, l1Contracts } = config;
|
|
45
|
-
|
|
46
|
-
const chain = createEthereumChain(l1RpcUrls, chainId);
|
|
47
|
-
|
|
48
46
|
this.version = new Fr(config.rollupVersion);
|
|
49
|
-
this.chainId = new Fr(
|
|
47
|
+
this.chainId = new Fr(this.publicClient.chain!.id);
|
|
50
48
|
|
|
51
49
|
this.ethereumSlotDuration = config.ethereumSlotDuration;
|
|
52
50
|
this.aztecSlotDuration = config.slotDuration;
|
|
53
51
|
this.l1GenesisTime = config.l1GenesisTime;
|
|
54
52
|
|
|
55
|
-
this.
|
|
56
|
-
chain: chain.chainInfo,
|
|
57
|
-
transport: makeL1HttpTransport(chain.rpcUrls, { timeout: config.l1HttpTimeoutMS }),
|
|
58
|
-
pollingInterval: config.viemPollingIntervalMS,
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
this.rollupContract = new RollupContract(this.publicClient, l1Contracts.rollupAddress);
|
|
53
|
+
this.rollupContract = new RollupContract(this.publicClient, config.l1Contracts.rollupAddress);
|
|
62
54
|
}
|
|
63
55
|
|
|
64
56
|
/**
|
|
@@ -74,7 +66,10 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
|
74
66
|
const earliestTimestamp = await this.rollupContract.getTimestampForSlot(
|
|
75
67
|
SlotNumber.fromBigInt(BigInt(lastCheckpoint.slotNumber) + 1n),
|
|
76
68
|
);
|
|
77
|
-
const nextEthTimestamp =
|
|
69
|
+
const nextEthTimestamp = getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), {
|
|
70
|
+
l1GenesisTime: this.l1GenesisTime,
|
|
71
|
+
ethereumSlotDuration: this.ethereumSlotDuration,
|
|
72
|
+
});
|
|
78
73
|
const timestamp = earliestTimestamp > nextEthTimestamp ? earliestTimestamp : nextEthTimestamp;
|
|
79
74
|
|
|
80
75
|
return new GasFees(0, await this.rollupContract.getManaMinFeeAt(timestamp, true));
|
|
@@ -109,7 +104,10 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
|
109
104
|
const slot: SlotNumber =
|
|
110
105
|
maybeSlot ??
|
|
111
106
|
(await this.rollupContract.getSlotAt(
|
|
112
|
-
|
|
107
|
+
getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), {
|
|
108
|
+
l1GenesisTime: this.l1GenesisTime,
|
|
109
|
+
ethereumSlotDuration: this.ethereumSlotDuration,
|
|
110
|
+
}),
|
|
113
111
|
));
|
|
114
112
|
|
|
115
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';
|
|
@@ -41,6 +41,7 @@ import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
|
41
41
|
import { type ProposerSlashAction, encodeSlashConsensusVotes } from '@aztec/slasher';
|
|
42
42
|
import { CommitteeAttestationsAndSigners, type ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
43
43
|
import type { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
44
|
+
import { getNextL1SlotTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
44
45
|
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
45
46
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
46
47
|
import type { L1PublishCheckpointStats } from '@aztec/stdlib/stats';
|
|
@@ -121,6 +122,7 @@ export class SequencerPublisher {
|
|
|
121
122
|
|
|
122
123
|
protected log: Logger;
|
|
123
124
|
protected ethereumSlotDuration: bigint;
|
|
125
|
+
private dateProvider: DateProvider;
|
|
124
126
|
|
|
125
127
|
private blobClient: BlobClientInterface;
|
|
126
128
|
|
|
@@ -169,6 +171,7 @@ export class SequencerPublisher {
|
|
|
169
171
|
) {
|
|
170
172
|
this.log = deps.log ?? createLogger('sequencer:publisher');
|
|
171
173
|
this.ethereumSlotDuration = BigInt(config.ethereumSlotDuration);
|
|
174
|
+
this.dateProvider = deps.dateProvider;
|
|
172
175
|
this.epochCache = deps.epochCache;
|
|
173
176
|
this.lastActions = deps.lastActions;
|
|
174
177
|
|
|
@@ -450,11 +453,11 @@ export class SequencerPublisher {
|
|
|
450
453
|
}
|
|
451
454
|
|
|
452
455
|
/**
|
|
453
|
-
* @notice Will call `
|
|
456
|
+
* @notice Will call `canProposeAt` to make sure that it is possible to propose
|
|
454
457
|
* @param tipArchive - The archive to check
|
|
455
458
|
* @returns The slot and block number if it is possible to propose, undefined otherwise
|
|
456
459
|
*/
|
|
457
|
-
public
|
|
460
|
+
public async canProposeAt(
|
|
458
461
|
tipArchive: Fr,
|
|
459
462
|
msgSender: EthAddress,
|
|
460
463
|
opts: { forcePendingCheckpointNumber?: CheckpointNumber } = {},
|
|
@@ -462,8 +465,10 @@ export class SequencerPublisher {
|
|
|
462
465
|
// TODO: #14291 - should loop through multiple keys to check if any of them can propose
|
|
463
466
|
const ignoredErrors = ['SlotAlreadyInChain', 'InvalidProposer', 'InvalidArchive'];
|
|
464
467
|
|
|
468
|
+
const nextL1SlotTs = await this.getNextL1SlotTimestampWithL1Floor();
|
|
469
|
+
|
|
465
470
|
return this.rollupContract
|
|
466
|
-
.
|
|
471
|
+
.canProposeAt(tipArchive.toBuffer(), msgSender.toString(), nextL1SlotTs, {
|
|
467
472
|
forcePendingCheckpointNumber: opts.forcePendingCheckpointNumber,
|
|
468
473
|
})
|
|
469
474
|
.catch(err => {
|
|
@@ -500,7 +505,7 @@ export class SequencerPublisher {
|
|
|
500
505
|
flags,
|
|
501
506
|
] as const;
|
|
502
507
|
|
|
503
|
-
const ts =
|
|
508
|
+
const ts = await this.getNextL1SlotTimestampWithL1Floor();
|
|
504
509
|
const stateOverrides = await this.rollupContract.makePendingCheckpointNumberOverride(
|
|
505
510
|
opts?.forcePendingCheckpointNumber,
|
|
506
511
|
);
|
|
@@ -1355,4 +1360,21 @@ export class SequencerPublisher {
|
|
|
1355
1360
|
},
|
|
1356
1361
|
});
|
|
1357
1362
|
}
|
|
1363
|
+
|
|
1364
|
+
/**
|
|
1365
|
+
* Returns the timestamp to use when simulating L1 proposal calls.
|
|
1366
|
+
* Uses the wall-clock-based next L1 slot boundary, but floors it with the latest L1 block timestamp
|
|
1367
|
+
* plus one slot duration. This prevents the sequencer from targeting a future L2 slot when the L1
|
|
1368
|
+
* chain hasn't caught up to the wall clock yet (e.g., the dateProvider is one L1 slot ahead of the
|
|
1369
|
+
* latest mined block), which would cause the propose tx to land in an L1 block with block.timestamp
|
|
1370
|
+
* still in the previous L2 slot.
|
|
1371
|
+
* TODO(palla): Properly fix by keeping dateProvider synced with anvil's chain time on every block.
|
|
1372
|
+
*/
|
|
1373
|
+
private async getNextL1SlotTimestampWithL1Floor(): Promise<bigint> {
|
|
1374
|
+
const l1Constants = this.epochCache.getL1Constants();
|
|
1375
|
+
const fromWallClock = getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), l1Constants);
|
|
1376
|
+
const latestBlock = await this.l1TxUtils.client.getBlock();
|
|
1377
|
+
const fromL1Block = latestBlock.timestamp + BigInt(l1Constants.ethereumSlotDuration);
|
|
1378
|
+
return fromWallClock > fromL1Block ? fromWallClock : fromL1Block;
|
|
1379
|
+
}
|
|
1358
1380
|
}
|
|
@@ -327,7 +327,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
327
327
|
|
|
328
328
|
// Check with the rollup contract if we can indeed propose at the next L2 slot. This check should not fail
|
|
329
329
|
// if all the previous checks are good, but we do it just in case.
|
|
330
|
-
const canProposeCheck = await publisher.
|
|
330
|
+
const canProposeCheck = await publisher.canProposeAt(
|
|
331
331
|
syncedTo.archive,
|
|
332
332
|
proposer ?? EthAddress.ZERO,
|
|
333
333
|
invalidateCheckpoint,
|
|
@@ -475,8 +475,8 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
475
475
|
*/
|
|
476
476
|
protected async checkSync(args: { ts: bigint; slot: SlotNumber }): Promise<SequencerSyncCheckResult | undefined> {
|
|
477
477
|
// Check that the archiver has fully synced the L2 slot before the one we want to propose in.
|
|
478
|
-
//
|
|
479
|
-
//
|
|
478
|
+
// The archiver reports sync progress via L1 block timestamps and synced checkpoint slots.
|
|
479
|
+
// See getSyncedL2SlotNumber for how missed L1 blocks are handled.
|
|
480
480
|
const syncedL2Slot = await this.l2BlockSource.getSyncedL2SlotNumber();
|
|
481
481
|
const { slot } = args;
|
|
482
482
|
if (syncedL2Slot === undefined || syncedL2Slot + 1 < slot) {
|