@aztec/sequencer-client 0.0.1-commit.3100065 → 0.0.1-commit.330febf

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.
Files changed (42) hide show
  1. package/dest/config.d.ts +2 -1
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +6 -0
  4. package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +48 -8
  5. package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +1 -1
  6. package/dest/publisher/l1_tx_failed_store/failed_tx_store.js +68 -1
  7. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts +2 -2
  8. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts.map +1 -1
  9. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.js +4 -2
  10. package/dest/publisher/l1_tx_failed_store/index.d.ts +2 -2
  11. package/dest/publisher/l1_tx_failed_store/index.d.ts.map +1 -1
  12. package/dest/publisher/l1_tx_failed_store/index.js +1 -0
  13. package/dest/publisher/sequencer-publisher.d.ts +20 -4
  14. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  15. package/dest/publisher/sequencer-publisher.js +278 -49
  16. package/dest/sequencer/automine/automine_sequencer.d.ts +1 -1
  17. package/dest/sequencer/automine/automine_sequencer.d.ts.map +1 -1
  18. package/dest/sequencer/automine/automine_sequencer.js +7 -1
  19. package/dest/sequencer/checkpoint_proposal_job.d.ts +1 -1
  20. package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
  21. package/dest/sequencer/checkpoint_proposal_job.js +9 -1
  22. package/dest/sequencer/errors.d.ts +8 -1
  23. package/dest/sequencer/errors.d.ts.map +1 -1
  24. package/dest/sequencer/errors.js +9 -0
  25. package/dest/sequencer/missing_committee.d.ts +72 -0
  26. package/dest/sequencer/missing_committee.d.ts.map +1 -0
  27. package/dest/sequencer/missing_committee.js +139 -0
  28. package/dest/sequencer/sequencer.d.ts +4 -3
  29. package/dest/sequencer/sequencer.d.ts.map +1 -1
  30. package/dest/sequencer/sequencer.js +13 -4
  31. package/package.json +28 -28
  32. package/src/config.ts +7 -0
  33. package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +114 -7
  34. package/src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts +4 -3
  35. package/src/publisher/l1_tx_failed_store/index.ts +1 -1
  36. package/src/publisher/sequencer-publisher.ts +308 -59
  37. package/src/sequencer/README.md +243 -0
  38. package/src/sequencer/automine/automine_sequencer.ts +5 -1
  39. package/src/sequencer/checkpoint_proposal_job.ts +5 -1
  40. package/src/sequencer/errors.ts +15 -0
  41. package/src/sequencer/missing_committee.ts +192 -0
  42. package/src/sequencer/sequencer.ts +14 -5
@@ -0,0 +1,72 @@
1
+ import type { EpochCache } from '@aztec/epoch-cache';
2
+ import type { RollupContract } from '@aztec/ethereum/contracts';
3
+ import { EpochNumber, type SlotNumber } from '@aztec/foundation/branded-types';
4
+ import type { Logger } from '@aztec/foundation/log';
5
+ import type { DateProvider } from '@aztec/foundation/timer';
6
+ import type { L2BlockSource } from '@aztec/stdlib/block';
7
+ import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
8
+ /** Collaborators {@link logMissingCommittee} needs to diagnose and report why no committee exists. */
9
+ export interface MissingCommitteeContext {
10
+ epochCache: Pick<EpochCache, 'getL1Constants' | 'getLagInEpochsForValidatorSet'>;
11
+ rollupContract: Pick<RollupContract, 'getActiveAttesterCount' | 'getAttesterCountAtTime'>;
12
+ l2BlockSource: Pick<L2BlockSource, 'getBlockNumber'>;
13
+ l1Constants: Pick<L1RollupConstants, 'l1GenesisTime' | 'slotDuration' | 'epochDuration'>;
14
+ dateProvider: Pick<DateProvider, 'nowInSeconds'>;
15
+ logger: Pick<Logger, 'info' | 'warn' | 'debug'>;
16
+ }
17
+ /**
18
+ * Why the sequencer cannot find a validator committee for an upcoming slot. A committee for an epoch is
19
+ * sampled from the validator set as of `lagInEpochsForValidatorSet` epochs earlier, and L1 refuses to
20
+ * produce one until at least `targetCommitteeSize` validators were staked at that sampling time.
21
+ */
22
+ export type MissingCommitteeCause =
23
+ /** Enough validators are staked now; the committee is just waiting for the sampling window to advance. */
24
+ 'awaiting-sampling-lag'
25
+ /** The chain has not produced any block yet and too few validators are staked: normal bootstrap state. */
26
+ | 'awaiting-first-validators'
27
+ /** The chain has produced blocks before but the validator set has since dropped below the required size. */
28
+ | 'validator-set-shrank';
29
+ export interface MissingCommitteeDiagnosis {
30
+ cause: MissingCommitteeCause;
31
+ /** Log severity: bootstrap and lag are expected (`info`); a shrunken set on a live chain is not (`warn`). */
32
+ severity: 'info' | 'warn';
33
+ }
34
+ /**
35
+ * Logs why no validator committee exists for the given slot. Rather than the cryptic "committee does not
36
+ * exist on L1", it diagnoses the cause from the live attester count and whether the chain has ever produced
37
+ * a block: a bootstrapping chain waiting for validators to stake, a full set still waiting for the sampling
38
+ * lag to elapse, or a validator set that has shrunk below the required size on a live chain. Only the last is
39
+ * a genuine problem, so only it is logged at `warn`.
40
+ *
41
+ * Best-effort: if the diagnostic L1 reads fail we fall back to a neutral message so this never throws on the
42
+ * propose path.
43
+ */
44
+ export declare function logMissingCommittee(targetSlot: SlotNumber, targetEpoch: EpochNumber, ctx: MissingCommitteeContext): Promise<void>;
45
+ /**
46
+ * Classifies why no committee exists for a slot, using only cheap live signals: the current attester count
47
+ * and whether the chain has ever produced a block. See {@link MissingCommitteeCause} for the reasoning.
48
+ */
49
+ export declare function classifyMissingCommittee(args: {
50
+ attesterCount: number;
51
+ targetCommitteeSize: number;
52
+ hasProducedBlocks: boolean;
53
+ }): MissingCommitteeDiagnosis;
54
+ /**
55
+ * Given each candidate epoch after the one we failed to propose at, paired with the attester count staked at
56
+ * that epoch's validator-set sample time (`undefined` when the sample time is still in the future), returns
57
+ * the earliest epoch that will have a committee, or `undefined` if none qualifies.
58
+ *
59
+ * Candidates must be ordered ascending by epoch. A committee for epoch `E` exists iff at least
60
+ * `targetCommitteeSize` validators were staked at `E`'s sample time, so the first candidate whose sampled
61
+ * count meets the target is the answer; a candidate whose sample time is still in the future is assumed to
62
+ * have a committee if the set holds and wins as soon as it is reached. The predicate is not monotone in `E`
63
+ * (the set can dip below target between sample times), so this must scan ascending rather than binary-search.
64
+ */
65
+ export declare function findFirstEpochWithCommittee(args: {
66
+ candidates: {
67
+ epoch: EpochNumber;
68
+ sampledAttesterCount: number | undefined;
69
+ }[];
70
+ targetCommitteeSize: number;
71
+ }): EpochNumber | undefined;
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2luZ19jb21taXR0ZWUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvbWlzc2luZ19jb21taXR0ZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRS9FLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUE2QixNQUFNLDZCQUE2QixDQUFDO0FBRWhHLHNHQUFzRztBQUN0RyxNQUFNLFdBQVcsdUJBQXVCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLGdCQUFnQixHQUFHLCtCQUErQixDQUFDLENBQUM7SUFDakYsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUMsQ0FBQztJQUMxRixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JELFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxHQUFHLGNBQWMsR0FBRyxlQUFlLENBQUMsQ0FBQztJQUN6RixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0NBQ2pEO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sTUFBTSxxQkFBcUI7QUFDL0IsMEdBQTBHO0FBQ3hHLHVCQUF1QjtBQUN6QiwwR0FBMEc7R0FDeEcsMkJBQTJCO0FBQzdCLDRHQUE0RztHQUMxRyxzQkFBc0IsQ0FBQztBQUUzQixNQUFNLFdBQVcseUJBQXlCO0lBQ3hDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQztJQUM3Qiw2R0FBNkc7SUFDN0csUUFBUSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDM0I7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCx3QkFBc0IsbUJBQW1CLENBQ3ZDLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLEdBQUcsRUFBRSx1QkFBdUIsR0FDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQTBEZjtBQUVEOzs7R0FHRztBQUNILHdCQUFnQix3QkFBd0IsQ0FBQyxJQUFJLEVBQUU7SUFDN0MsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUN0QixtQkFBbUIsRUFBRSxNQUFNLENBQUM7SUFDNUIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO0NBQzVCLEdBQUcseUJBQXlCLENBWTVCO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILHdCQUFnQiwyQkFBMkIsQ0FBQyxJQUFJLEVBQUU7SUFDaEQsVUFBVSxFQUFFO1FBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQztRQUFDLG9CQUFvQixFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUE7S0FBRSxFQUFFLENBQUM7SUFDL0UsbUJBQW1CLEVBQUUsTUFBTSxDQUFDO0NBQzdCLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FJMUIifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing_committee.d.ts","sourceRoot":"","sources":["../../src/sequencer/missing_committee.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,6BAA6B,CAAC;AAEhG,sGAAsG;AACtG,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,gBAAgB,GAAG,+BAA+B,CAAC,CAAC;IACjF,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,wBAAwB,GAAG,wBAAwB,CAAC,CAAC;IAC1F,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACrD,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,cAAc,GAAG,eAAe,CAAC,CAAC;IACzF,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACjD,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACjD;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB;AAC/B,0GAA0G;AACxG,uBAAuB;AACzB,0GAA0G;GACxG,2BAA2B;AAC7B,4GAA4G;GAC1G,sBAAsB,CAAC;AAE3B,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,6GAA6G;IAC7G,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,uBAAuB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA0Df;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,yBAAyB,CAY5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,UAAU,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IAC/E,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,WAAW,GAAG,SAAS,CAI1B"}
@@ -0,0 +1,139 @@
1
+ import { EpochNumber } from '@aztec/foundation/branded-types';
2
+ import { timesParallel } from '@aztec/foundation/collection';
3
+ import { formatSeconds } from '@aztec/foundation/string';
4
+ import { getStartTimestampForEpoch } from '@aztec/stdlib/epoch-helpers';
5
+ /**
6
+ * Logs why no validator committee exists for the given slot. Rather than the cryptic "committee does not
7
+ * exist on L1", it diagnoses the cause from the live attester count and whether the chain has ever produced
8
+ * a block: a bootstrapping chain waiting for validators to stake, a full set still waiting for the sampling
9
+ * lag to elapse, or a validator set that has shrunk below the required size on a live chain. Only the last is
10
+ * a genuine problem, so only it is logged at `warn`.
11
+ *
12
+ * Best-effort: if the diagnostic L1 reads fail we fall back to a neutral message so this never throws on the
13
+ * propose path.
14
+ */ export async function logMissingCommittee(targetSlot, targetEpoch, ctx) {
15
+ const targetCommitteeSize = ctx.epochCache.getL1Constants().targetCommitteeSize;
16
+ const lag = ctx.epochCache.getLagInEpochsForValidatorSet();
17
+ let attesterCount;
18
+ let hasProducedBlocks;
19
+ try {
20
+ [attesterCount, hasProducedBlocks] = await Promise.all([
21
+ ctx.rollupContract.getActiveAttesterCount(),
22
+ ctx.l2BlockSource.getBlockNumber().then((n)=>n > 0)
23
+ ]);
24
+ } catch (err) {
25
+ ctx.logger.warn(`No committee found for slot ${targetSlot}; could not determine validator set size`, {
26
+ targetSlot,
27
+ targetEpoch,
28
+ targetCommitteeSize,
29
+ err
30
+ });
31
+ return;
32
+ }
33
+ const diagnosis = classifyMissingCommittee({
34
+ attesterCount,
35
+ targetCommitteeSize,
36
+ hasProducedBlocks
37
+ });
38
+ const logCtx = {
39
+ targetSlot,
40
+ targetEpoch,
41
+ attesterCount,
42
+ targetCommitteeSize,
43
+ cause: diagnosis.cause
44
+ };
45
+ switch(diagnosis.cause){
46
+ case 'awaiting-sampling-lag':
47
+ {
48
+ const firstCommitteeEpoch = await estimateFirstCommitteeEpoch(targetEpoch, lag, targetCommitteeSize, ctx);
49
+ const staked = `${attesterCount} validators are staked (>= ${targetCommitteeSize} required)`;
50
+ const forming = `the committee is still forming as the ${lag}-epoch sampling window advances`;
51
+ // When we could not pin the exact epoch, report the safe upper bound rather than a misleading ETA.
52
+ const epoch = firstCommitteeEpoch ?? EpochNumber(targetEpoch + lag + 1);
53
+ const expectation = firstCommitteeEpoch === undefined ? `A committee should exist no later than epoch ${epoch}.` : `The first committee is expected at epoch ${epoch}${formatEpochEta(epoch, ctx)}.`;
54
+ ctx.logger.info(`No committee for slot ${targetSlot} yet: ${staked}, ${forming}. ${expectation}`, {
55
+ ...logCtx,
56
+ firstCommitteeEpoch: epoch
57
+ });
58
+ break;
59
+ }
60
+ case 'awaiting-first-validators':
61
+ ctx.logger.info(`No committee for slot ${targetSlot}: the chain has not started producing blocks and only ${attesterCount} ` + `of the ${targetCommitteeSize} required validators are staked. Block production begins once at least ` + `${targetCommitteeSize} validators stake and the ${lag}-epoch sampling lag elapses.`, logCtx);
62
+ break;
63
+ case 'validator-set-shrank':
64
+ ctx.logger.warn(`No committee for slot ${targetSlot}: the validator set has dropped to ${attesterCount}, below the ` + `${targetCommitteeSize} required to form a committee. The chain cannot progress until enough validators ` + `are staked again — check for validators exiting or being slashed.`, logCtx);
65
+ break;
66
+ }
67
+ }
68
+ /**
69
+ * Classifies why no committee exists for a slot, using only cheap live signals: the current attester count
70
+ * and whether the chain has ever produced a block. See {@link MissingCommitteeCause} for the reasoning.
71
+ */ export function classifyMissingCommittee(args) {
72
+ const { attesterCount, targetCommitteeSize, hasProducedBlocks } = args;
73
+ if (attesterCount >= targetCommitteeSize) {
74
+ return {
75
+ cause: 'awaiting-sampling-lag',
76
+ severity: 'info'
77
+ };
78
+ }
79
+ if (hasProducedBlocks) {
80
+ return {
81
+ cause: 'validator-set-shrank',
82
+ severity: 'warn'
83
+ };
84
+ }
85
+ return {
86
+ cause: 'awaiting-first-validators',
87
+ severity: 'info'
88
+ };
89
+ }
90
+ /**
91
+ * Given each candidate epoch after the one we failed to propose at, paired with the attester count staked at
92
+ * that epoch's validator-set sample time (`undefined` when the sample time is still in the future), returns
93
+ * the earliest epoch that will have a committee, or `undefined` if none qualifies.
94
+ *
95
+ * Candidates must be ordered ascending by epoch. A committee for epoch `E` exists iff at least
96
+ * `targetCommitteeSize` validators were staked at `E`'s sample time, so the first candidate whose sampled
97
+ * count meets the target is the answer; a candidate whose sample time is still in the future is assumed to
98
+ * have a committee if the set holds and wins as soon as it is reached. The predicate is not monotone in `E`
99
+ * (the set can dip below target between sample times), so this must scan ascending rather than binary-search.
100
+ */ export function findFirstEpochWithCommittee(args) {
101
+ return args.candidates.find((c)=>c.sampledAttesterCount === undefined || c.sampledAttesterCount >= args.targetCommitteeSize)?.epoch;
102
+ }
103
+ /**
104
+ * Earliest epoch expected to have a committee, replaying L1's validator-set sampling rule: a committee for
105
+ * epoch `E` exists iff at least `targetCommitteeSize` attesters were staked at `E`'s sample time
106
+ * (`epochStart(E) - lag * epochDuration`). Only epochs after the one we failed at can qualify, and the set
107
+ * must have crossed the target within the last `lag` epochs' sample window, so the answer lies in
108
+ * `(targetEpoch, targetEpoch + lag + 1]`. Reads the historical attester count at each candidate's sample time
109
+ * (at most `lag` on-chain reads; future sample times are assumed to hold). Returns `undefined` if no candidate
110
+ * qualifies or the reads fail, leaving the caller to report a bound instead of an ETA.
111
+ */ async function estimateFirstCommitteeEpoch(targetEpoch, lag, targetCommitteeSize, ctx) {
112
+ try {
113
+ const epochDurationSeconds = BigInt(ctx.l1Constants.epochDuration * ctx.l1Constants.slotDuration);
114
+ const nowSeconds = BigInt(ctx.dateProvider.nowInSeconds());
115
+ const candidates = await timesParallel(lag + 1, async (i)=>{
116
+ const epoch = EpochNumber(targetEpoch + 1 + i);
117
+ const sampleTime = getStartTimestampForEpoch(epoch, ctx.l1Constants) - epochDurationSeconds * BigInt(lag);
118
+ const sampledAttesterCount = sampleTime > nowSeconds ? undefined : await ctx.rollupContract.getAttesterCountAtTime(sampleTime);
119
+ return {
120
+ epoch,
121
+ sampledAttesterCount
122
+ };
123
+ });
124
+ return findFirstEpochWithCommittee({
125
+ candidates,
126
+ targetCommitteeSize
127
+ });
128
+ } catch (err) {
129
+ ctx.logger.debug(`Could not estimate first committee epoch after epoch ${targetEpoch}`, {
130
+ targetEpoch,
131
+ err
132
+ });
133
+ return undefined;
134
+ }
135
+ }
136
+ /** Formats the ETA to the start of the given epoch as ` (~12m from now)`, or empty if it is in the past. */ function formatEpochEta(epoch, ctx) {
137
+ const secondsUntil = Number(getStartTimestampForEpoch(epoch, ctx.l1Constants)) - ctx.dateProvider.nowInSeconds();
138
+ return secondsUntil > 0 ? ` (~${formatSeconds(secondsUntil)} from now)` : '';
139
+ }
@@ -73,8 +73,8 @@ export declare class Sequencer extends Sequencer_base {
73
73
  /** The (checkpoint, slot) of the last invalidation request we successfully simulated, to prevent
74
74
  * re-simulating and re-submitting the same invalidation across the many ticks within a single slot. */
75
75
  private lastInvalidationAttempt;
76
- /** The last slot for which we logged "no committee" warning, to avoid spam */
77
- private lastSlotForNoCommitteeWarning;
76
+ /** The last epoch for which we logged a "no committee" diagnostic, to avoid per-slot log spam. */
77
+ private lastEpochForNoCommitteeLog;
78
78
  /** The last slot for which we triggered a checkpoint proposal job, to prevent duplicate attempts. */
79
79
  protected lastSlotForCheckpointProposalJob: SlotNumber | undefined;
80
80
  /** Last successful checkpoint proposed */
@@ -278,6 +278,7 @@ export declare class Sequencer extends Sequencer_base {
278
278
  acvmBinaryPath?: string | undefined;
279
279
  txPublicSetupAllowListExtend?: import("@aztec/stdlib/config").AllowedElement[] | undefined;
280
280
  governanceProposerPayload?: EthAddress | undefined;
281
+ governanceProposerForcePayloadVote: boolean;
281
282
  minBlockDuration?: number | undefined;
282
283
  checkpointProposalPrepareTime?: number | undefined;
283
284
  l1PublishingTime: number;
@@ -321,4 +322,4 @@ type SequencerSyncCheckResult = {
321
322
  syncedL2Slot: SlotNumber;
322
323
  pendingChainValidationStatus: ValidateCheckpointResult;
323
324
  };
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3NlcXVlbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQW1DLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUFvQixLQUFLLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsYUFBYSxFQUNiLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDekIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsS0FBSyxVQUFVLEVBQ2YsS0FBSyxzQkFBc0IsRUFFNUIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU94RCxPQUFPLEVBQ0wsS0FBSyx1QkFB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
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3NlcXVlbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQW1DLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUFvQixLQUFLLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsYUFBYSxFQUNiLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDekIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsS0FBSyxVQUFVLEVBQ2YsS0FBSyxzQkFBc0IsRUFFNUIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU94RCxPQUFPLEVBQ0wsS0FBSyx1QkFB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
@@ -1 +1 @@
1
- {"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
@@ -393,6 +393,7 @@ import { CheckpointProposalJobMetrics } from './checkpoint_proposal_job_metrics.
393
393
  import { CheckpointVoter } from './checkpoint_voter.js';
394
394
  import { SequencerInterruptedError } from './errors.js';
395
395
  import { SequencerMetrics } from './metrics.js';
396
+ import { logMissingCommittee } from './missing_committee.js';
396
397
  import { RequestsTracker } from './requests_tracker.js';
397
398
  import { SequencerState } from './utils.js';
398
399
  export { SequencerState };
@@ -458,7 +459,7 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
458
459
  /** The last slot for which we attempted to perform our fallback duties (votes and/or prune) with degraded block production */ lastSlotForFallbackAction;
459
460
  /** The (checkpoint, slot) of the last invalidation request we successfully simulated, to prevent
460
461
  * re-simulating and re-submitting the same invalidation across the many ticks within a single slot. */ lastInvalidationAttempt;
461
- /** The last slot for which we logged "no committee" warning, to avoid spam */ lastSlotForNoCommitteeWarning;
462
+ /** The last epoch for which we logged a "no committee" diagnostic, to avoid per-slot log spam. */ lastEpochForNoCommitteeLog;
462
463
  /** The last slot for which we triggered a checkpoint proposal job, to prevent duplicate attempts. */ lastSlotForCheckpointProposalJob;
463
464
  /** Last successful checkpoint proposed */ lastCheckpointProposed;
464
465
  /** The last epoch for which we logged strategy comparison in fisherman mode. */ lastEpochForStrategyComparison;
@@ -1154,9 +1155,17 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
1154
1155
  proposer = await this.epochCache.getProposerAttesterAddressInSlot(targetSlot);
1155
1156
  } catch (e) {
1156
1157
  if (e instanceof NoCommitteeError) {
1157
- if (this.lastSlotForNoCommitteeWarning !== targetSlot) {
1158
- this.lastSlotForNoCommitteeWarning = targetSlot;
1159
- this.log.warn(`Cannot propose at target slot ${targetSlot} since the committee does not exist on L1`);
1158
+ const targetEpoch = getEpochAtSlot(targetSlot, this.l1Constants);
1159
+ if (this.lastEpochForNoCommitteeLog !== targetEpoch) {
1160
+ this.lastEpochForNoCommitteeLog = targetEpoch;
1161
+ await logMissingCommittee(targetSlot, targetEpoch, {
1162
+ epochCache: this.epochCache,
1163
+ rollupContract: this.rollupContract,
1164
+ l2BlockSource: this.l2BlockSource,
1165
+ l1Constants: this.l1Constants,
1166
+ dateProvider: this.dateProvider,
1167
+ logger: this.log
1168
+ });
1160
1169
  }
1161
1170
  return [
1162
1171
  false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/sequencer-client",
3
- "version": "0.0.1-commit.3100065",
3
+ "version": "0.0.1-commit.330febf",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -27,37 +27,37 @@
27
27
  "test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
28
28
  },
29
29
  "dependencies": {
30
- "@aztec/aztec.js": "0.0.1-commit.3100065",
31
- "@aztec/bb-prover": "0.0.1-commit.3100065",
32
- "@aztec/blob-client": "0.0.1-commit.3100065",
33
- "@aztec/blob-lib": "0.0.1-commit.3100065",
34
- "@aztec/constants": "0.0.1-commit.3100065",
35
- "@aztec/epoch-cache": "0.0.1-commit.3100065",
36
- "@aztec/ethereum": "0.0.1-commit.3100065",
37
- "@aztec/foundation": "0.0.1-commit.3100065",
38
- "@aztec/l1-artifacts": "0.0.1-commit.3100065",
39
- "@aztec/node-keystore": "0.0.1-commit.3100065",
40
- "@aztec/noir-acvm_js": "0.0.1-commit.3100065",
41
- "@aztec/noir-contracts.js": "0.0.1-commit.3100065",
42
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.3100065",
43
- "@aztec/noir-types": "0.0.1-commit.3100065",
44
- "@aztec/p2p": "0.0.1-commit.3100065",
45
- "@aztec/protocol-contracts": "0.0.1-commit.3100065",
46
- "@aztec/prover-client": "0.0.1-commit.3100065",
47
- "@aztec/simulator": "0.0.1-commit.3100065",
48
- "@aztec/slasher": "0.0.1-commit.3100065",
49
- "@aztec/stdlib": "0.0.1-commit.3100065",
50
- "@aztec/telemetry-client": "0.0.1-commit.3100065",
51
- "@aztec/validator-client": "0.0.1-commit.3100065",
52
- "@aztec/validator-ha-signer": "0.0.1-commit.3100065",
53
- "@aztec/world-state": "0.0.1-commit.3100065",
30
+ "@aztec/aztec.js": "0.0.1-commit.330febf",
31
+ "@aztec/bb-prover": "0.0.1-commit.330febf",
32
+ "@aztec/blob-client": "0.0.1-commit.330febf",
33
+ "@aztec/blob-lib": "0.0.1-commit.330febf",
34
+ "@aztec/constants": "0.0.1-commit.330febf",
35
+ "@aztec/epoch-cache": "0.0.1-commit.330febf",
36
+ "@aztec/ethereum": "0.0.1-commit.330febf",
37
+ "@aztec/foundation": "0.0.1-commit.330febf",
38
+ "@aztec/l1-artifacts": "6.0.0-nightly.20260807",
39
+ "@aztec/node-keystore": "0.0.1-commit.330febf",
40
+ "@aztec/noir-acvm_js": "6.0.0-nightly.20260807",
41
+ "@aztec/noir-types": "6.0.0-nightly.20260807",
42
+ "@aztec/p2p": "0.0.1-commit.330febf",
43
+ "@aztec/protocol-contracts": "0.0.1-commit.330febf",
44
+ "@aztec/prover-client": "0.0.1-commit.330febf",
45
+ "@aztec/simulator": "0.0.1-commit.330febf",
46
+ "@aztec/slasher": "0.0.1-commit.330febf",
47
+ "@aztec/stdlib": "0.0.1-commit.330febf",
48
+ "@aztec/telemetry-client": "0.0.1-commit.330febf",
49
+ "@aztec/validator-client": "0.0.1-commit.330febf",
50
+ "@aztec/validator-ha-signer": "0.0.1-commit.330febf",
51
+ "@aztec/world-state": "0.0.1-commit.330febf",
54
52
  "lodash.chunk": "^4.2.0",
55
53
  "tslib": "^2.4.0",
56
- "viem": "npm:@aztec/viem@2.38.2"
54
+ "viem": "npm:@aztec/viem@2.38.2",
55
+ "zod": "^4"
57
56
  },
58
57
  "devDependencies": {
59
- "@aztec/archiver": "0.0.1-commit.3100065",
60
- "@aztec/kv-store": "0.0.1-commit.3100065",
58
+ "@aztec/archiver": "0.0.1-commit.330febf",
59
+ "@aztec/kv-store": "0.0.1-commit.330febf",
60
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.330febf",
61
61
  "@electric-sql/pglite": "^0.3.14",
62
62
  "@jest/globals": "^30.0.0",
63
63
  "@types/jest": "^30.0.0",
package/src/config.ts CHANGED
@@ -64,6 +64,7 @@ export const DefaultSequencerConfig = {
64
64
  injectUnrecoverableSignatureAttestation: false,
65
65
  injectYParityAttestation: false,
66
66
  fishermanMode: false,
67
+ governanceProposerForcePayloadVote: false,
67
68
  shuffleAttestationOrdering: false,
68
69
  skipPushProposedBlocksToArchiver: false,
69
70
  skipPublishingCheckpointsPercent: 0,
@@ -161,6 +162,12 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
161
162
  description: 'The address of the payload for the governanceProposer',
162
163
  parseEnv: (val: string) => EthAddress.fromString(val),
163
164
  },
165
+ governanceProposerForcePayloadVote: {
166
+ env: 'GOVERNANCE_PROPOSER_FORCE_PAYLOAD_VOTE',
167
+ description:
168
+ 'Keep signalling the configured governance payload even if a proposal referencing it was already executed.',
169
+ ...booleanConfigHelper(DefaultSequencerConfig.governanceProposerForcePayloadVote),
170
+ },
164
171
  l1PublishingTime: {
165
172
  env: 'SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT',
166
173
  description: 'How much time in seconds to allow in the slot for publishing the L1 transaction.',
@@ -1,33 +1,40 @@
1
+ import type { WindowBlockFees } from '@aztec/ethereum/l1-fee-analysis';
2
+ import type { GasPrice } from '@aztec/ethereum/l1-tx-utils';
1
3
  import type { Branded } from '@aztec/foundation/branded-types';
4
+ import { type ZodFor, schemas } from '@aztec/foundation/schemas';
2
5
 
3
6
  import type { Hex } from 'viem';
7
+ import { z } from 'zod';
4
8
 
5
9
  /** URI pointing to a stored failed L1 transaction. */
6
10
  export type FailedL1TxUri = Branded<string, 'FailedL1TxUri'>;
7
11
 
8
- /** A failed L1 transaction captured for debugging and replay. */
12
+ /**
13
+ * A failed L1 transaction captured for debugging and replay. Serialized with jsonStringify (bigints
14
+ * become decimal strings on disk) and parsed back via FailedL1TxSchema.
15
+ */
9
16
  export type FailedL1Tx = {
10
17
  /** Tx hash (for reverts) or keccak256(request.data) (for simulation/send failures). */
11
18
  id: Hex;
12
19
  /** Unix timestamp (ms) when failure occurred. */
13
20
  timestamp: number;
14
- /** Whether the failure was during simulation or after sending. */
15
- failureType: 'simulation' | 'revert' | 'send-error';
21
+ /** How the failure occurred. */
22
+ failureType: 'simulation' | 'revert' | 'send-error' | 'timeout';
16
23
  /** The actual L1 transaction for replay (multicall-encoded for bundled txs). */
17
24
  request: {
18
25
  to: Hex;
19
26
  data: Hex;
20
- value?: string; // bigint as string
27
+ value?: bigint;
21
28
  };
22
29
  /** Raw blob data as hex for replay. */
23
30
  blobData?: Hex[];
24
31
  /** L1 block number at time of failure (simulation target or receipt block). */
25
- l1BlockNumber: string; // bigint as string
32
+ l1BlockNumber: bigint;
26
33
  /** Receipt info (present only for on-chain reverts). */
27
34
  receipt?: {
28
35
  transactionHash: Hex;
29
- blockNumber: string; // bigint as string
30
- gasUsed: string; // bigint as string
36
+ blockNumber: bigint;
37
+ gasUsed: bigint;
31
38
  status: 'reverted';
32
39
  };
33
40
  /** Error information. */
@@ -46,8 +53,108 @@ export type FailedL1Tx = {
46
53
  slot?: number;
47
54
  sender: Hex;
48
55
  };
56
+ /** Gas pricing info at time of failure for underpricing diagnosis. */
57
+ gasInfo?: {
58
+ /** Gas prices the tx was sent with (present for revert/send-error/timeout, not simulation). */
59
+ sentGasPrice?: GasPrice;
60
+ /** Gas limit used or estimated. */
61
+ gasLimit?: bigint;
62
+ /** Nonce used for the sent tx. */
63
+ nonce?: number;
64
+ /**
65
+ * For timeouts: the escalating gas prices used across the initial send and each speed-up retry,
66
+ * in order. Compare against windowBlocks[].minIncludedPriorityFee to see if any attempt cleared the bar.
67
+ */
68
+ sentGasPriceLadder?: GasPrice[];
69
+ /** Number of send attempts (initial send + speed-ups). */
70
+ attempts?: number;
71
+ /**
72
+ * Per-block fee data for the L1 blocks the tx could have been included in (the target L2 slot's
73
+ * inclusion window), in chronological order. Compare sentGasPrice against these to see whether
74
+ * the tx was underpriced for each block it competed for. May be a partial or empty list if the
75
+ * window was not yet mined when the failure was recorded (e.g. an early send failure).
76
+ */
77
+ windowBlocks?: WindowBlockFees[];
78
+ };
79
+ /** Timing info relative to the L2 slot. */
80
+ timing?: {
81
+ /** The target L2 slot this tx was for. */
82
+ targetL2Slot?: number;
83
+ /** Unix timestamp (seconds) when the target slot ends. */
84
+ slotDeadlineTimestampS?: bigint;
85
+ /** Milliseconds remaining until the slot deadline. Negative = past deadline. */
86
+ msUntilSlotDeadline?: number;
87
+ };
49
88
  };
50
89
 
90
+ const hexSchema = schemas.HexStringWith0x;
91
+
92
+ const gasPriceSchema = z.object({
93
+ maxFeePerGas: schemas.BigInt,
94
+ maxPriorityFeePerGas: schemas.BigInt,
95
+ maxFeePerBlobGas: schemas.BigInt.optional(),
96
+ }) satisfies ZodFor<GasPrice>;
97
+
98
+ const windowBlockFeesSchema = z.object({
99
+ blockNumber: schemas.BigInt,
100
+ timestamp: schemas.BigInt,
101
+ baseFeePerGas: schemas.BigInt,
102
+ p75PriorityFee: schemas.BigInt,
103
+ minIncludedPriorityFee: schemas.BigInt,
104
+ blockBlobsFull: z.boolean(),
105
+ includedBlobCount: z.number(),
106
+ }) satisfies ZodFor<WindowBlockFees>;
107
+
108
+ /** Parses a stored failed-tx record, coercing the on-disk decimal strings back to bigints. */
109
+ export const FailedL1TxSchema: ZodFor<FailedL1Tx> = z.object({
110
+ id: hexSchema,
111
+ timestamp: z.number(),
112
+ failureType: z.enum(['simulation', 'revert', 'send-error', 'timeout']),
113
+ request: z.object({
114
+ to: hexSchema,
115
+ data: hexSchema,
116
+ value: schemas.BigInt.optional(),
117
+ }),
118
+ blobData: z.array(hexSchema).optional(),
119
+ l1BlockNumber: schemas.BigInt,
120
+ receipt: z
121
+ .object({
122
+ transactionHash: hexSchema,
123
+ blockNumber: schemas.BigInt,
124
+ gasUsed: schemas.BigInt,
125
+ status: z.literal('reverted'),
126
+ })
127
+ .optional(),
128
+ error: z.object({
129
+ message: z.string(),
130
+ name: z.string().optional(),
131
+ }),
132
+ context: z.object({
133
+ actions: z.array(z.string()),
134
+ requests: z.array(z.object({ action: z.string(), to: hexSchema, data: hexSchema })).optional(),
135
+ checkpointNumber: z.number().optional(),
136
+ slot: z.number().optional(),
137
+ sender: hexSchema,
138
+ }),
139
+ gasInfo: z
140
+ .object({
141
+ sentGasPrice: gasPriceSchema.optional(),
142
+ gasLimit: schemas.BigInt.optional(),
143
+ nonce: z.number().optional(),
144
+ sentGasPriceLadder: z.array(gasPriceSchema).optional(),
145
+ attempts: z.number().optional(),
146
+ windowBlocks: z.array(windowBlockFeesSchema).optional(),
147
+ })
148
+ .optional(),
149
+ timing: z
150
+ .object({
151
+ targetL2Slot: z.number().optional(),
152
+ slotDeadlineTimestampS: schemas.BigInt.optional(),
153
+ msUntilSlotDeadline: z.number().optional(),
154
+ })
155
+ .optional(),
156
+ });
157
+
51
158
  /** Store for failed L1 transactions for debugging purposes. */
52
159
  export interface L1TxFailedStore {
53
160
  /** Saves a failed transaction and returns its URI. */
@@ -1,7 +1,8 @@
1
+ import { jsonParseWithSchema, jsonStringify } from '@aztec/foundation/json-rpc';
1
2
  import { type Logger, createLogger } from '@aztec/foundation/log';
2
3
  import type { FileStore } from '@aztec/stdlib/file-store';
3
4
 
4
- import type { FailedL1Tx, FailedL1TxUri, L1TxFailedStore } from './failed_tx_store.js';
5
+ import { type FailedL1Tx, FailedL1TxSchema, type FailedL1TxUri, type L1TxFailedStore } from './failed_tx_store.js';
5
6
 
6
7
  /**
7
8
  * L1TxFailedStore implementation using the FileStore abstraction.
@@ -20,7 +21,7 @@ export class FileStoreL1TxFailedStore implements L1TxFailedStore {
20
21
  public async saveFailedTx(tx: FailedL1Tx): Promise<FailedL1TxUri> {
21
22
  const prefix = tx.receipt ? 'tx' : 'data';
22
23
  const path = `${tx.failureType}/${prefix}-${tx.id}.json`;
23
- const json = JSON.stringify(tx, null, 2);
24
+ const json = jsonStringify(tx, true);
24
25
 
25
26
  const uri = await this.fileStore.save(path, Buffer.from(json), {
26
27
  metadata: {
@@ -41,6 +42,6 @@ export class FileStoreL1TxFailedStore implements L1TxFailedStore {
41
42
 
42
43
  public async getFailedTx(uri: FailedL1TxUri): Promise<FailedL1Tx> {
43
44
  const data = await this.fileStore.read(uri);
44
- return JSON.parse(data.toString()) as FailedL1Tx;
45
+ return jsonParseWithSchema(data.toString(), FailedL1TxSchema);
45
46
  }
46
47
  }
@@ -1,3 +1,3 @@
1
- export { type FailedL1Tx, type FailedL1TxUri, type L1TxFailedStore } from './failed_tx_store.js';
1
+ export { type FailedL1Tx, FailedL1TxSchema, type FailedL1TxUri, type L1TxFailedStore } from './failed_tx_store.js';
2
2
  export { createL1TxFailedStore } from './factory.js';
3
3
  export { FileStoreL1TxFailedStore } from './file_store_failed_tx_store.js';