@aztec/sequencer-client 0.0.1-commit.ff7989d6c → 0.0.1-commit.ffe5b04ea
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 +12 -1
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +85 -13
- package/dest/config.d.ts +23 -4
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +23 -16
- package/dest/publisher/config.d.ts +5 -1
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +6 -1
- package/dest/publisher/index.d.ts +2 -1
- package/dest/publisher/index.d.ts.map +1 -1
- package/dest/publisher/l1_tx_failed_store/factory.d.ts +11 -0
- package/dest/publisher/l1_tx_failed_store/factory.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/factory.js +22 -0
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +59 -0
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.js +1 -0
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts +15 -0
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.js +34 -0
- package/dest/publisher/l1_tx_failed_store/index.d.ts +4 -0
- package/dest/publisher/l1_tx_failed_store/index.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/index.js +2 -0
- package/dest/publisher/sequencer-publisher-factory.d.ts +1 -1
- package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-factory.js +14 -0
- package/dest/publisher/sequencer-publisher.d.ts +12 -2
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +258 -9
- package/dest/sequencer/checkpoint_proposal_job.d.ts +2 -4
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +68 -37
- package/dest/sequencer/sequencer.d.ts +9 -6
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +1 -1
- package/dest/sequencer/timetable.d.ts +4 -3
- package/dest/sequencer/timetable.d.ts.map +1 -1
- package/dest/sequencer/timetable.js +6 -7
- package/dest/sequencer/types.d.ts +5 -2
- package/dest/sequencer/types.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.d.ts +4 -6
- package/dest/test/mock_checkpoint_builder.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.js +39 -30
- package/package.json +28 -28
- package/src/client/sequencer-client.ts +111 -12
- package/src/config.ts +28 -19
- package/src/publisher/config.ts +9 -0
- package/src/publisher/index.ts +3 -0
- package/src/publisher/l1_tx_failed_store/factory.ts +32 -0
- package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +55 -0
- package/src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts +46 -0
- package/src/publisher/l1_tx_failed_store/index.ts +3 -0
- package/src/publisher/sequencer-publisher-factory.ts +15 -0
- package/src/publisher/sequencer-publisher.ts +237 -15
- package/src/sequencer/checkpoint_proposal_job.ts +90 -44
- package/src/sequencer/sequencer.ts +1 -1
- package/src/sequencer/timetable.ts +7 -7
- package/src/sequencer/types.ts +4 -1
- package/src/test/mock_checkpoint_builder.ts +48 -45
|
@@ -3,6 +3,7 @@ import { EpochCache } from '@aztec/epoch-cache';
|
|
|
3
3
|
import { type Delayer, L1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
4
4
|
import { PublisherManager } from '@aztec/ethereum/publisher-manager';
|
|
5
5
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
6
7
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
7
8
|
import type { KeystoreManager } from '@aztec/node-keystore';
|
|
8
9
|
import type { P2P } from '@aztec/p2p';
|
|
@@ -73,4 +74,14 @@ export declare class SequencerClient {
|
|
|
73
74
|
get validatorAddresses(): EthAddress[] | undefined;
|
|
74
75
|
get maxL2BlockGas(): number | undefined;
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Computes per-block L2 gas, DA gas, and TX count budgets based on the L1 rollup limits and the timetable.
|
|
79
|
+
* If the user explicitly set a limit, it is capped at the corresponding checkpoint limit.
|
|
80
|
+
* Otherwise, derives it as (checkpointLimit / maxBlocks) * multiplier, capped at the checkpoint limit.
|
|
81
|
+
*/
|
|
82
|
+
export declare function computeBlockLimits(config: SequencerClientConfig, rollupManaLimit: number, l1PublishingTime: number, log: ReturnType<typeof createLogger>): {
|
|
83
|
+
maxL2BlockGas: number;
|
|
84
|
+
maxDABlockGas: number;
|
|
85
|
+
maxTxsPerBlock: number;
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLWNsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9zZXF1ZW5jZXItY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSWhELE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLGVBQWUsRUFBRSxNQUFNLHlCQUF5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
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"sequencer-client.d.ts","sourceRoot":"","sources":["../../src/client/sequencer-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT } from '@aztec/constants';
|
|
1
2
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
2
3
|
import { isAnvilTestChain } from '@aztec/ethereum/chain';
|
|
3
4
|
import { getPublicClient } from '@aztec/ethereum/client';
|
|
@@ -8,10 +9,11 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
8
9
|
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
9
10
|
import { L1Metrics } from '@aztec/telemetry-client';
|
|
10
11
|
import { NodeKeystoreAdapter } from '@aztec/validator-client';
|
|
11
|
-
import { getPublisherConfigFromSequencerConfig } from '../config.js';
|
|
12
|
+
import { DefaultSequencerConfig, getPublisherConfigFromSequencerConfig } from '../config.js';
|
|
12
13
|
import { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
13
14
|
import { SequencerPublisherFactory } from '../publisher/sequencer-publisher-factory.js';
|
|
14
15
|
import { Sequencer } from '../sequencer/index.js';
|
|
16
|
+
import { SequencerTimetable } from '../sequencer/timetable.js';
|
|
15
17
|
/**
|
|
16
18
|
* Encapsulates the full sequencer and publisher.
|
|
17
19
|
*/ export class SequencerClient {
|
|
@@ -78,21 +80,13 @@ import { Sequencer } from '../sequencer/index.js';
|
|
|
78
80
|
logger: log
|
|
79
81
|
});
|
|
80
82
|
const ethereumSlotDuration = config.ethereumSlotDuration;
|
|
81
|
-
const l1Constants = {
|
|
82
|
-
l1GenesisTime,
|
|
83
|
-
slotDuration: Number(slotDuration),
|
|
84
|
-
ethereumSlotDuration
|
|
85
|
-
};
|
|
86
83
|
const globalsBuilder = new GlobalVariableBuilder({
|
|
87
84
|
...config,
|
|
88
|
-
|
|
85
|
+
l1GenesisTime,
|
|
86
|
+
slotDuration: Number(slotDuration),
|
|
87
|
+
ethereumSlotDuration,
|
|
89
88
|
rollupVersion
|
|
90
89
|
});
|
|
91
|
-
let sequencerManaLimit = config.maxL2BlockGas ?? rollupManaLimit;
|
|
92
|
-
if (sequencerManaLimit > rollupManaLimit) {
|
|
93
|
-
log.warn(`Provided maxL2BlockGas ${sequencerManaLimit} is greater than the max allowed by L1. Setting limit to ${rollupManaLimit}.`);
|
|
94
|
-
sequencerManaLimit = rollupManaLimit;
|
|
95
|
-
}
|
|
96
90
|
// When running in anvil, assume we can post a tx up until one second before the end of an L1 slot.
|
|
97
91
|
// Otherwise, we need the full L1 slot duration for publishing to ensure inclusion.
|
|
98
92
|
// In theory, the L1 slot has an initial 4s phase where the block is propagated, so we could
|
|
@@ -100,10 +94,19 @@ import { Sequencer } from '../sequencer/index.js';
|
|
|
100
94
|
// See https://www.blocknative.com/blog/anatomy-of-a-slot#7 for more info.
|
|
101
95
|
const l1PublishingTimeBasedOnChain = isAnvilTestChain(config.l1ChainId) ? 1 : ethereumSlotDuration;
|
|
102
96
|
const l1PublishingTime = config.l1PublishingTime ?? l1PublishingTimeBasedOnChain;
|
|
97
|
+
const { maxL2BlockGas, maxDABlockGas, maxTxsPerBlock } = computeBlockLimits(config, rollupManaLimit, l1PublishingTime, log);
|
|
98
|
+
const l1Constants = {
|
|
99
|
+
l1GenesisTime,
|
|
100
|
+
slotDuration: Number(slotDuration),
|
|
101
|
+
ethereumSlotDuration,
|
|
102
|
+
rollupManaLimit
|
|
103
|
+
};
|
|
103
104
|
const sequencer = new Sequencer(publisherFactory, validatorClient, globalsBuilder, p2pClient, worldStateSynchronizer, slasherClient, l2BlockSource, l1ToL2MessageSource, checkpointsBuilder, l1Constants, deps.dateProvider, epochCache, rollupContract, {
|
|
104
105
|
...config,
|
|
105
106
|
l1PublishingTime,
|
|
106
|
-
maxL2BlockGas
|
|
107
|
+
maxL2BlockGas,
|
|
108
|
+
maxDABlockGas,
|
|
109
|
+
maxTxsPerBlock
|
|
107
110
|
}, telemetryClient, log);
|
|
108
111
|
sequencer.init();
|
|
109
112
|
// Extract the shared delayer from the first L1TxUtils instance (all instances share the same delayer)
|
|
@@ -148,3 +151,72 @@ import { Sequencer } from '../sequencer/index.js';
|
|
|
148
151
|
return this.sequencer.maxL2BlockGas;
|
|
149
152
|
}
|
|
150
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Computes per-block L2 gas, DA gas, and TX count budgets based on the L1 rollup limits and the timetable.
|
|
156
|
+
* If the user explicitly set a limit, it is capped at the corresponding checkpoint limit.
|
|
157
|
+
* Otherwise, derives it as (checkpointLimit / maxBlocks) * multiplier, capped at the checkpoint limit.
|
|
158
|
+
*/ export function computeBlockLimits(config, rollupManaLimit, l1PublishingTime, log) {
|
|
159
|
+
const maxNumberOfBlocks = new SequencerTimetable({
|
|
160
|
+
ethereumSlotDuration: config.ethereumSlotDuration,
|
|
161
|
+
aztecSlotDuration: config.aztecSlotDuration,
|
|
162
|
+
l1PublishingTime,
|
|
163
|
+
p2pPropagationTime: config.attestationPropagationTime,
|
|
164
|
+
blockDurationMs: config.blockDurationMs,
|
|
165
|
+
enforce: config.enforceTimeTable ?? DefaultSequencerConfig.enforceTimeTable
|
|
166
|
+
}).maxNumberOfBlocks;
|
|
167
|
+
const multiplier = config.perBlockAllocationMultiplier ?? DefaultSequencerConfig.perBlockAllocationMultiplier;
|
|
168
|
+
// Compute maxL2BlockGas
|
|
169
|
+
let maxL2BlockGas;
|
|
170
|
+
if (config.maxL2BlockGas !== undefined) {
|
|
171
|
+
if (config.maxL2BlockGas > rollupManaLimit) {
|
|
172
|
+
log.warn(`Provided MAX_L2_BLOCK_GAS ${config.maxL2BlockGas} exceeds L1 rollup mana limit ${rollupManaLimit} (capping)`);
|
|
173
|
+
maxL2BlockGas = rollupManaLimit;
|
|
174
|
+
} else {
|
|
175
|
+
maxL2BlockGas = config.maxL2BlockGas;
|
|
176
|
+
}
|
|
177
|
+
} else {
|
|
178
|
+
maxL2BlockGas = Math.min(rollupManaLimit, Math.ceil(rollupManaLimit / maxNumberOfBlocks * multiplier));
|
|
179
|
+
}
|
|
180
|
+
// Compute maxDABlockGas
|
|
181
|
+
const daCheckpointLimit = MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT;
|
|
182
|
+
let maxDABlockGas;
|
|
183
|
+
if (config.maxDABlockGas !== undefined) {
|
|
184
|
+
if (config.maxDABlockGas > daCheckpointLimit) {
|
|
185
|
+
log.warn(`Provided MAX_DA_BLOCK_GAS ${config.maxDABlockGas} exceeds DA checkpoint limit ${daCheckpointLimit} (capping)`);
|
|
186
|
+
maxDABlockGas = daCheckpointLimit;
|
|
187
|
+
} else {
|
|
188
|
+
maxDABlockGas = config.maxDABlockGas;
|
|
189
|
+
}
|
|
190
|
+
} else {
|
|
191
|
+
maxDABlockGas = Math.min(daCheckpointLimit, Math.ceil(daCheckpointLimit / maxNumberOfBlocks * multiplier));
|
|
192
|
+
}
|
|
193
|
+
// Compute maxTxsPerBlock
|
|
194
|
+
const defaultMaxTxsPerBlock = 32;
|
|
195
|
+
let maxTxsPerBlock;
|
|
196
|
+
if (config.maxTxsPerBlock !== undefined) {
|
|
197
|
+
if (config.maxTxsPerCheckpoint !== undefined && config.maxTxsPerBlock > config.maxTxsPerCheckpoint) {
|
|
198
|
+
log.warn(`Provided MAX_TX_PER_BLOCK ${config.maxTxsPerBlock} exceeds MAX_TX_PER_CHECKPOINT ${config.maxTxsPerCheckpoint} (capping)`);
|
|
199
|
+
maxTxsPerBlock = config.maxTxsPerCheckpoint;
|
|
200
|
+
} else {
|
|
201
|
+
maxTxsPerBlock = config.maxTxsPerBlock;
|
|
202
|
+
}
|
|
203
|
+
} else if (config.maxTxsPerCheckpoint !== undefined) {
|
|
204
|
+
maxTxsPerBlock = Math.min(config.maxTxsPerCheckpoint, Math.ceil(config.maxTxsPerCheckpoint / maxNumberOfBlocks * multiplier));
|
|
205
|
+
} else {
|
|
206
|
+
maxTxsPerBlock = defaultMaxTxsPerBlock;
|
|
207
|
+
}
|
|
208
|
+
log.info(`Computed block limits L2=${maxL2BlockGas} DA=${maxDABlockGas} maxTxs=${maxTxsPerBlock}`, {
|
|
209
|
+
maxL2BlockGas,
|
|
210
|
+
maxDABlockGas,
|
|
211
|
+
maxTxsPerBlock,
|
|
212
|
+
rollupManaLimit,
|
|
213
|
+
daCheckpointLimit,
|
|
214
|
+
maxNumberOfBlocks,
|
|
215
|
+
multiplier
|
|
216
|
+
});
|
|
217
|
+
return {
|
|
218
|
+
maxL2BlockGas,
|
|
219
|
+
maxDABlockGas,
|
|
220
|
+
maxTxsPerBlock
|
|
221
|
+
};
|
|
222
|
+
}
|
package/dest/config.d.ts
CHANGED
|
@@ -4,7 +4,6 @@ import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
|
4
4
|
import { type KeyStoreConfig } from '@aztec/node-keystore/config';
|
|
5
5
|
import { type P2PConfig } from '@aztec/p2p/config';
|
|
6
6
|
import { type ChainConfig, type SequencerConfig } from '@aztec/stdlib/config';
|
|
7
|
-
import type { ResolvedSequencerConfig } from '@aztec/stdlib/interfaces/server';
|
|
8
7
|
import { type ValidatorClientConfig } from '@aztec/validator-client/config';
|
|
9
8
|
import { type SequencerPublisherConfig, type SequencerTxSenderConfig } from './publisher/config.js';
|
|
10
9
|
export * from './publisher/config.js';
|
|
@@ -13,15 +12,35 @@ export type { SequencerConfig };
|
|
|
13
12
|
* Default values for SequencerConfig.
|
|
14
13
|
* Centralized location for all sequencer configuration defaults.
|
|
15
14
|
*/
|
|
16
|
-
export declare const DefaultSequencerConfig:
|
|
15
|
+
export declare const DefaultSequencerConfig: {
|
|
16
|
+
sequencerPollingIntervalMS: number;
|
|
17
|
+
minTxsPerBlock: number;
|
|
18
|
+
buildCheckpointIfEmpty: false;
|
|
19
|
+
publishTxsWithProposals: false;
|
|
20
|
+
perBlockAllocationMultiplier: number;
|
|
21
|
+
enforceTimeTable: true;
|
|
22
|
+
attestationPropagationTime: number;
|
|
23
|
+
secondsBeforeInvalidatingBlockAsCommitteeMember: number;
|
|
24
|
+
secondsBeforeInvalidatingBlockAsNonCommitteeMember: number;
|
|
25
|
+
skipCollectingAttestations: false;
|
|
26
|
+
skipInvalidateBlockAsProposer: false;
|
|
27
|
+
broadcastInvalidBlockProposal: false;
|
|
28
|
+
injectFakeAttestation: false;
|
|
29
|
+
injectHighSValueAttestation: false;
|
|
30
|
+
injectUnrecoverableSignatureAttestation: false;
|
|
31
|
+
fishermanMode: false;
|
|
32
|
+
shuffleAttestationOrdering: false;
|
|
33
|
+
skipPushProposedBlocksToArchiver: false;
|
|
34
|
+
skipPublishingCheckpointsPercent: number;
|
|
35
|
+
};
|
|
17
36
|
/**
|
|
18
37
|
* Configuration settings for the SequencerClient.
|
|
19
38
|
*/
|
|
20
|
-
export type SequencerClientConfig = SequencerPublisherConfig & KeyStoreConfig & ValidatorClientConfig & SequencerTxSenderConfig & SequencerConfig & L1ReaderConfig & ChainConfig & Pick<P2PConfig, '
|
|
39
|
+
export type SequencerClientConfig = SequencerPublisherConfig & KeyStoreConfig & ValidatorClientConfig & SequencerTxSenderConfig & SequencerConfig & L1ReaderConfig & ChainConfig & Pick<P2PConfig, 'txPublicSetupAllowListExtend'> & Pick<L1ContractsConfig, 'ethereumSlotDuration' | 'aztecSlotDuration' | 'aztecEpochDuration'>;
|
|
21
40
|
export declare const sequencerConfigMappings: ConfigMappingsType<SequencerConfig>;
|
|
22
41
|
export declare const sequencerClientConfigMappings: ConfigMappingsType<SequencerClientConfig>;
|
|
23
42
|
/**
|
|
24
43
|
* Creates an instance of SequencerClientConfig out of environment variables using sensible defaults for integration testing if not set.
|
|
25
44
|
*/
|
|
26
45
|
export declare function getConfigEnvVars(): SequencerClientConfig;
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUE2QixNQUFNLHdCQUF3QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBMEIsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RixPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFLeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQTBCLE1BQU0sNkJBQTZCLENBQUM7QUFDMUYsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFxQixNQUFNLG1CQUFtQixDQUFDO0FBRXRFLE9BQU8sRUFDTCxLQUFLLFdBQVcsRUFDaEIsS0FBSyxlQUFlLEVBR3JCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQWlDLE1BQU0sZ0NBQWdDLENBQUM7QUFFM0csT0FBTyxFQUNMLEtBQUssd0JBQXdCLEVBQzdCLEtBQUssdUJBQXVCLEVBRzdCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFFaEM7OztHQUdHO0FBQ0gsZUFBTyxNQUFNLHNCQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQkEsQ0FBQztBQUVwQzs7R0FFRztBQUNILE1BQU0sTUFBTSxxQkFBcUIsR0FBRyx3QkFBd0IsR0FDMUQsY0FBYyxHQUNkLHFCQUFxQixHQUNyQix1QkFBdUIsR0FDdkIsZUFBZSxHQUNmLGNBQWMsR0FDZCxXQUFXLEdBQ1gsSUFBSSxDQUFDLFNBQVMsRUFBRSw4QkFBOEIsQ0FBQyxHQUMvQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsc0JBQXNCLEdBQUcsbUJBQW1CLEdBQUcsb0JBQW9CLENBQUMsQ0FBQztBQUUvRixlQUFPLE1BQU0sdUJBQXVCLEVBQUUsa0JBQWtCLENBQUMsZUFBZSxDQTBKdkUsQ0FBQztBQUVGLGVBQU8sTUFBTSw2QkFBNkIsRUFBRSxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FTbkYsQ0FBQztBQUVGOztHQUVHO0FBQ0gsd0JBQWdCLGdCQUFnQixJQUFJLHFCQUFxQixDQUV4RCJ9
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EAGrB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EAGrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,KAAK,qBAAqB,EAAiC,MAAM,gCAAgC,CAAC;AAE3G,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAG7B,MAAM,uBAAuB,CAAC;AAE/B,cAAc,uBAAuB,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;CAoBA,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,wBAAwB,GAC1D,cAAc,GACd,qBAAqB,GACrB,uBAAuB,GACvB,eAAe,GACf,cAAc,GACd,WAAW,GACX,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,GAC/C,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,GAAG,mBAAmB,GAAG,oBAAoB,CAAC,CAAC;AAE/F,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,CAAC,eAAe,CA0JvE,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CASnF,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD"}
|
package/dest/config.js
CHANGED
|
@@ -15,13 +15,10 @@ export * from './publisher/config.js';
|
|
|
15
15
|
* Centralized location for all sequencer configuration defaults.
|
|
16
16
|
*/ export const DefaultSequencerConfig = {
|
|
17
17
|
sequencerPollingIntervalMS: 500,
|
|
18
|
-
maxTxsPerBlock: 32,
|
|
19
18
|
minTxsPerBlock: 1,
|
|
20
19
|
buildCheckpointIfEmpty: false,
|
|
21
20
|
publishTxsWithProposals: false,
|
|
22
|
-
|
|
23
|
-
maxDABlockGas: 10e9,
|
|
24
|
-
maxBlockSizeInBytes: 1024 * 1024,
|
|
21
|
+
perBlockAllocationMultiplier: 2,
|
|
25
22
|
enforceTimeTable: true,
|
|
26
23
|
attestationPropagationTime: DEFAULT_P2P_PROPAGATION_TIME,
|
|
27
24
|
secondsBeforeInvalidatingBlockAsCommitteeMember: 144,
|
|
@@ -30,6 +27,8 @@ export * from './publisher/config.js';
|
|
|
30
27
|
skipInvalidateBlockAsProposer: false,
|
|
31
28
|
broadcastInvalidBlockProposal: false,
|
|
32
29
|
injectFakeAttestation: false,
|
|
30
|
+
injectHighSValueAttestation: false,
|
|
31
|
+
injectUnrecoverableSignatureAttestation: false,
|
|
33
32
|
fishermanMode: false,
|
|
34
33
|
shuffleAttestationOrdering: false,
|
|
35
34
|
skipPushProposedBlocksToArchiver: false,
|
|
@@ -41,10 +40,10 @@ export const sequencerConfigMappings = {
|
|
|
41
40
|
description: 'The number of ms to wait between polling for checking to build on the next slot.',
|
|
42
41
|
...numberConfigHelper(DefaultSequencerConfig.sequencerPollingIntervalMS)
|
|
43
42
|
},
|
|
44
|
-
|
|
45
|
-
env: '
|
|
46
|
-
description: 'The maximum number of txs
|
|
47
|
-
|
|
43
|
+
maxTxsPerCheckpoint: {
|
|
44
|
+
env: 'SEQ_MAX_TX_PER_CHECKPOINT',
|
|
45
|
+
description: 'The maximum number of txs across all blocks in a checkpoint.',
|
|
46
|
+
parseEnv: (val)=>val ? parseInt(val, 10) : undefined
|
|
48
47
|
},
|
|
49
48
|
minTxsPerBlock: {
|
|
50
49
|
env: 'SEQ_MIN_TX_PER_BLOCK',
|
|
@@ -62,12 +61,17 @@ export const sequencerConfigMappings = {
|
|
|
62
61
|
maxL2BlockGas: {
|
|
63
62
|
env: 'SEQ_MAX_L2_BLOCK_GAS',
|
|
64
63
|
description: 'The maximum L2 block gas.',
|
|
65
|
-
|
|
64
|
+
parseEnv: (val)=>val ? parseInt(val, 10) : undefined
|
|
66
65
|
},
|
|
67
66
|
maxDABlockGas: {
|
|
68
67
|
env: 'SEQ_MAX_DA_BLOCK_GAS',
|
|
69
68
|
description: 'The maximum DA block gas.',
|
|
70
|
-
|
|
69
|
+
parseEnv: (val)=>val ? parseInt(val, 10) : undefined
|
|
70
|
+
},
|
|
71
|
+
perBlockAllocationMultiplier: {
|
|
72
|
+
env: 'SEQ_PER_BLOCK_ALLOCATION_MULTIPLIER',
|
|
73
|
+
description: 'Per-block gas budget multiplier for both L2 and DA gas. Budget per block is (checkpointLimit / maxBlocks) * multiplier.' + ' Values greater than one allow early blocks to use more than their even share, relying on checkpoint-level capping for later blocks.',
|
|
74
|
+
...numberConfigHelper(DefaultSequencerConfig.perBlockAllocationMultiplier)
|
|
71
75
|
},
|
|
72
76
|
coinbase: {
|
|
73
77
|
env: 'COINBASE',
|
|
@@ -87,11 +91,6 @@ export const sequencerConfigMappings = {
|
|
|
87
91
|
env: 'ACVM_BINARY_PATH',
|
|
88
92
|
description: 'The path to the ACVM binary'
|
|
89
93
|
},
|
|
90
|
-
maxBlockSizeInBytes: {
|
|
91
|
-
env: 'SEQ_MAX_BLOCK_SIZE_IN_BYTES',
|
|
92
|
-
description: 'Max block size',
|
|
93
|
-
...numberConfigHelper(DefaultSequencerConfig.maxBlockSizeInBytes)
|
|
94
|
-
},
|
|
95
94
|
enforceTimeTable: {
|
|
96
95
|
env: 'SEQ_ENFORCE_TIME_TABLE',
|
|
97
96
|
description: 'Whether to enforce the time table when building blocks',
|
|
@@ -144,6 +143,14 @@ export const sequencerConfigMappings = {
|
|
|
144
143
|
description: 'Inject a fake attestation (for testing only)',
|
|
145
144
|
...booleanConfigHelper(DefaultSequencerConfig.injectFakeAttestation)
|
|
146
145
|
},
|
|
146
|
+
injectHighSValueAttestation: {
|
|
147
|
+
description: 'Inject a malleable attestation with a high-s value (for testing only)',
|
|
148
|
+
...booleanConfigHelper(DefaultSequencerConfig.injectHighSValueAttestation)
|
|
149
|
+
},
|
|
150
|
+
injectUnrecoverableSignatureAttestation: {
|
|
151
|
+
description: 'Inject an attestation with an unrecoverable signature (for testing only)',
|
|
152
|
+
...booleanConfigHelper(DefaultSequencerConfig.injectUnrecoverableSignatureAttestation)
|
|
153
|
+
},
|
|
147
154
|
fishermanMode: {
|
|
148
155
|
env: 'FISHERMAN_MODE',
|
|
149
156
|
description: 'Whether to run in fisherman mode: builds blocks on every slot for validation without publishing to L1',
|
|
@@ -172,7 +179,7 @@ export const sequencerConfigMappings = {
|
|
|
172
179
|
...numberConfigHelper(DefaultSequencerConfig.skipPublishingCheckpointsPercent)
|
|
173
180
|
},
|
|
174
181
|
...pickConfigMappings(p2pConfigMappings, [
|
|
175
|
-
'
|
|
182
|
+
'txPublicSetupAllowListExtend'
|
|
176
183
|
])
|
|
177
184
|
};
|
|
178
185
|
export const sequencerClientConfigMappings = {
|
|
@@ -28,6 +28,8 @@ export type PublisherConfig = L1TxUtilsConfig & BlobClientConfig & {
|
|
|
28
28
|
fishermanMode?: boolean;
|
|
29
29
|
/** Address of the forwarder contract to wrap all L1 transactions through (for testing purposes only) */
|
|
30
30
|
publisherForwarderAddress?: EthAddress;
|
|
31
|
+
/** Store for failed L1 transaction inputs (test networks only). Format: gs://bucket/path */
|
|
32
|
+
l1TxFailedStore?: string;
|
|
31
33
|
};
|
|
32
34
|
export type ProverPublisherConfig = L1TxUtilsConfig & BlobClientConfig & {
|
|
33
35
|
fishermanMode?: boolean;
|
|
@@ -38,6 +40,8 @@ export type SequencerPublisherConfig = L1TxUtilsConfig & BlobClientConfig & {
|
|
|
38
40
|
fishermanMode?: boolean;
|
|
39
41
|
sequencerPublisherAllowInvalidStates?: boolean;
|
|
40
42
|
sequencerPublisherForwarderAddress?: EthAddress;
|
|
43
|
+
/** Store for failed L1 transaction inputs (test networks only). Format: gs://bucket/path */
|
|
44
|
+
l1TxFailedStore?: string;
|
|
41
45
|
};
|
|
42
46
|
export declare function getPublisherConfigFromProverConfig(config: ProverPublisherConfig): PublisherConfig;
|
|
43
47
|
export declare function getPublisherConfigFromSequencerConfig(config: SequencerPublisherConfig): PublisherConfig;
|
|
@@ -45,4 +49,4 @@ export declare const proverTxSenderConfigMappings: ConfigMappingsType<Omit<Prove
|
|
|
45
49
|
export declare const sequencerTxSenderConfigMappings: ConfigMappingsType<Omit<SequencerTxSenderConfig, 'l1Contracts'>>;
|
|
46
50
|
export declare const sequencerPublisherConfigMappings: ConfigMappingsType<SequencerPublisherConfig & L1TxUtilsConfig>;
|
|
47
51
|
export declare const proverPublisherConfigMappings: ConfigMappingsType<ProverPublisherConfig & L1TxUtilsConfig>;
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGlzaGVyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBMkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQTBCLE1BQU0sMkJBQTJCLENBQUM7QUFDeEYsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUEyQixNQUFNLG9DQUFvQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFFLFdBQVcsRUFBdUIsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0Qsa0RBQWtEO0FBQ2xELE1BQU0sTUFBTSxjQUFjLEdBQUcsY0FBYyxHQUFHO0lBQzVDLG1EQUFtRDtJQUNuRCxvQkFBb0IsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUVwRCwwREFBMEQ7SUFDMUQsa0JBQWtCLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztDQUNuQyxDQUFDO0FBRUYsTUFBTSxNQUFNLG9CQUFvQixHQUFHLGNBQWMsR0FBRztJQUNsRCwwQkFBMEIsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUMxRCx3QkFBd0IsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDO0NBQ3pDLENBQUM7QUFFRixNQUFNLE1BQU0sdUJBQXVCLEdBQUcsY0FBYyxHQUFHO0lBQ3JELDZCQUE2QixDQUFDLEVBQUUsV0FBVyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzdELDJCQUEyQixDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUM7Q0FDNUMsQ0FBQztBQUVGLHdCQUFnQixpQ0FBaUMsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEdBQUcsY0FBYyxDQU05RjtBQUVELHdCQUFnQixvQ0FBb0MsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLEdBQUcsY0FBYyxDQU1wRztBQUVELHdDQUF3QztBQUN4QyxNQUFNLE1BQU0sZUFBZSxHQUFHLGVBQWUsR0FDM0MsZ0JBQWdCLEdBQUc7SUFDakIsb0dBQW9HO0lBQ3BHLDJCQUEyQixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ3RDLDRHQUE0RztJQUM1RyxhQUFhLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDeEIsd0dBQXdHO0lBQ3hHLHlCQUF5QixDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQ3ZDLDRGQUE0RjtJQUM1RixlQUFlLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDMUIsQ0FBQztBQUVKLE1BQU0sTUFBTSxxQkFBcUIsR0FBRyxlQUFlLEdBQ2pELGdCQUFnQixHQUFHO0lBQ2pCLGFBQWEsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUN4QixpQ0FBaUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUM1QywrQkFBK0IsQ0FBQyxFQUFFLFVBQVUsQ0FBQztDQUM5QyxDQUFDO0FBRUosTUFBTSxNQUFNLHdCQUF3QixHQUFHLGVBQWUsR0FDcEQsZ0JBQWdCLEdBQUc7SUFDakIsYUFBYSxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ3hCLG9DQUFvQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQy9DLGtDQUFrQyxDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQ2hELDRGQUE0RjtJQUM1RixlQUFlLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDMUIsQ0FBQztBQUVKLHdCQUFnQixrQ0FBa0MsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEdBQUcsZUFBZSxDQU1qRztBQUVELHdCQUFnQixxQ0FBcUMsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLEdBQUcsZUFBZSxDQU92RztBQUVELGVBQU8sTUFBTSw0QkFBNEIsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLENBZXRHLENBQUM7QUFFRixlQUFPLE1BQU0sK0JBQStCLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLGFBQWEsQ0FBQyxDQWU1RyxDQUFDO0FBRUYsZUFBTyxNQUFNLGdDQUFnQyxFQUFFLGtCQUFrQixDQUFDLHdCQUF3QixHQUFHLGVBQWUsQ0F1QjNHLENBQUM7QUFFRixlQUFPLE1BQU0sNkJBQTZCLEVBQUUsa0JBQWtCLENBQUMscUJBQXFCLEdBQUcsZUFBZSxDQW1CckcsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/publisher/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,KAAK,eAAe,EAA2B,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,KAAK,kBAAkB,EAAE,WAAW,EAAuB,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,kDAAkD;AAClD,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,mDAAmD;IACnD,oBAAoB,CAAC,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE,CAAC,EAAE,CAAC;IAEpD,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,UAAU,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAClD,0BAA0B,CAAC,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE,CAAC,EAAE,CAAC;IAC1D,wBAAwB,CAAC,EAAE,UAAU,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,cAAc,GAAG;IACrD,6BAA6B,CAAC,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE,CAAC,EAAE,CAAC;IAC7D,2BAA2B,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5C,CAAC;AAEF,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAM9F;AAED,wBAAgB,oCAAoC,CAAC,MAAM,EAAE,uBAAuB,GAAG,cAAc,CAMpG;AAED,wCAAwC;AACxC,MAAM,MAAM,eAAe,GAAG,eAAe,GAC3C,gBAAgB,GAAG;IACjB,oGAAoG;IACpG,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,4GAA4G;IAC5G,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wGAAwG;IACxG,yBAAyB,CAAC,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/publisher/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,KAAK,eAAe,EAA2B,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,KAAK,kBAAkB,EAAE,WAAW,EAAuB,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,kDAAkD;AAClD,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,mDAAmD;IACnD,oBAAoB,CAAC,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE,CAAC,EAAE,CAAC;IAEpD,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,UAAU,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAClD,0BAA0B,CAAC,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE,CAAC,EAAE,CAAC;IAC1D,wBAAwB,CAAC,EAAE,UAAU,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,cAAc,GAAG;IACrD,6BAA6B,CAAC,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE,CAAC,EAAE,CAAC;IAC7D,2BAA2B,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5C,CAAC;AAEF,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAM9F;AAED,wBAAgB,oCAAoC,CAAC,MAAM,EAAE,uBAAuB,GAAG,cAAc,CAMpG;AAED,wCAAwC;AACxC,MAAM,MAAM,eAAe,GAAG,eAAe,GAC3C,gBAAgB,GAAG;IACjB,oGAAoG;IACpG,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,4GAA4G;IAC5G,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wGAAwG;IACxG,yBAAyB,CAAC,EAAE,UAAU,CAAC;IACvC,4FAA4F;IAC5F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEJ,MAAM,MAAM,qBAAqB,GAAG,eAAe,GACjD,gBAAgB,GAAG;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,+BAA+B,CAAC,EAAE,UAAU,CAAC;CAC9C,CAAC;AAEJ,MAAM,MAAM,wBAAwB,GAAG,eAAe,GACpD,gBAAgB,GAAG;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oCAAoC,CAAC,EAAE,OAAO,CAAC;IAC/C,kCAAkC,CAAC,EAAE,UAAU,CAAC;IAChD,4FAA4F;IAC5F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEJ,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CAMjG;AAED,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,wBAAwB,GAAG,eAAe,CAOvG;AAED,eAAO,MAAM,4BAA4B,EAAE,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAetG,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,kBAAkB,CAAC,IAAI,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAe5G,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,kBAAkB,CAAC,wBAAwB,GAAG,eAAe,CAuB3G,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,GAAG,eAAe,CAmBrG,CAAC"}
|
package/dest/publisher/config.js
CHANGED
|
@@ -28,7 +28,8 @@ export function getPublisherConfigFromSequencerConfig(config) {
|
|
|
28
28
|
return {
|
|
29
29
|
...config,
|
|
30
30
|
publisherAllowInvalidStates: config.sequencerPublisherAllowInvalidStates,
|
|
31
|
-
publisherForwarderAddress: config.sequencerPublisherForwarderAddress
|
|
31
|
+
publisherForwarderAddress: config.sequencerPublisherForwarderAddress,
|
|
32
|
+
l1TxFailedStore: config.l1TxFailedStore
|
|
32
33
|
};
|
|
33
34
|
}
|
|
34
35
|
export const proverTxSenderConfigMappings = {
|
|
@@ -84,6 +85,10 @@ export const sequencerPublisherConfigMappings = {
|
|
|
84
85
|
env: `SEQ_PUBLISHER_FORWARDER_ADDRESS`,
|
|
85
86
|
description: 'Address of the forwarder contract to wrap all L1 transactions through (for testing purposes only)',
|
|
86
87
|
parseEnv: (val)=>val ? EthAddress.fromString(val) : undefined
|
|
88
|
+
},
|
|
89
|
+
l1TxFailedStore: {
|
|
90
|
+
env: 'L1_TX_FAILED_STORE',
|
|
91
|
+
description: 'Store for failed L1 transaction inputs (test networks only). Format: gs://bucket/path'
|
|
87
92
|
}
|
|
88
93
|
};
|
|
89
94
|
export const proverPublisherConfigMappings = {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { SequencerPublisher } from './sequencer-publisher.js';
|
|
2
2
|
export { SequencerPublisherFactory } from './sequencer-publisher-factory.js';
|
|
3
3
|
export { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
4
|
-
|
|
4
|
+
export { type FailedL1Tx, type FailedL1TxUri, type L1TxFailedStore } from './l1_tx_failed_store/index.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaXNoZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHN0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHN0UsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFLEtBQUssYUFBYSxFQUFFLEtBQUssZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAG7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAG7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAG7E,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
2
|
+
import type { L1TxFailedStore } from './failed_tx_store.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates an L1TxFailedStore from a config string.
|
|
5
|
+
* Supports any backend that FileStore supports (GCS, S3, R2, local filesystem).
|
|
6
|
+
* @param config - Config string (e.g., 'gs://bucket/path', 's3://bucket/path', 'file:///path'). If undefined, returns undefined.
|
|
7
|
+
* @param logger - Optional logger.
|
|
8
|
+
* @returns The store instance, or undefined if config is not provided.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createL1TxFailedStore(config: string | undefined, logger?: Logger): Promise<L1TxFailedStore | undefined>;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3B1Ymxpc2hlci9sMV90eF9mYWlsZWRfc3RvcmUvZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHNUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQXNCLHFCQUFxQixDQUN6QyxNQUFNLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDMUIsTUFBTSxHQUFFLE1BQXFELEdBQzVELE9BQU8sQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLENBZXRDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/publisher/l1_tx_failed_store/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,GAAE,MAAqD,GAC5D,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAetC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { createFileStore } from '@aztec/stdlib/file-store';
|
|
3
|
+
import { FileStoreL1TxFailedStore } from './file_store_failed_tx_store.js';
|
|
4
|
+
/**
|
|
5
|
+
* Creates an L1TxFailedStore from a config string.
|
|
6
|
+
* Supports any backend that FileStore supports (GCS, S3, R2, local filesystem).
|
|
7
|
+
* @param config - Config string (e.g., 'gs://bucket/path', 's3://bucket/path', 'file:///path'). If undefined, returns undefined.
|
|
8
|
+
* @param logger - Optional logger.
|
|
9
|
+
* @returns The store instance, or undefined if config is not provided.
|
|
10
|
+
*/ export async function createL1TxFailedStore(config, logger = createLogger('sequencer:l1-tx-failed-store')) {
|
|
11
|
+
if (!config) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const fileStore = await createFileStore(config, logger);
|
|
15
|
+
if (!fileStore) {
|
|
16
|
+
throw new Error(`Failed to create file store from config: '${config}'. ` + `Supported formats: 'gs://bucket/path', 's3://bucket/path', 'file:///path'.`);
|
|
17
|
+
}
|
|
18
|
+
logger.info(`Created L1 tx failed store`, {
|
|
19
|
+
config
|
|
20
|
+
});
|
|
21
|
+
return new FileStoreL1TxFailedStore(fileStore, logger);
|
|
22
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Hex } from 'viem';
|
|
2
|
+
/** URI pointing to a stored failed L1 transaction. */
|
|
3
|
+
export type FailedL1TxUri = string & {
|
|
4
|
+
__brand: 'FailedL1TxUri';
|
|
5
|
+
};
|
|
6
|
+
/** A failed L1 transaction captured for debugging and replay. */
|
|
7
|
+
export type FailedL1Tx = {
|
|
8
|
+
/** Tx hash (for reverts) or keccak256(request.data) (for simulation/send failures). */
|
|
9
|
+
id: Hex;
|
|
10
|
+
/** Unix timestamp (ms) when failure occurred. */
|
|
11
|
+
timestamp: number;
|
|
12
|
+
/** Whether the failure was during simulation or after sending. */
|
|
13
|
+
failureType: 'simulation' | 'revert' | 'send-error';
|
|
14
|
+
/** The actual L1 transaction for replay (multicall-encoded for bundled txs). */
|
|
15
|
+
request: {
|
|
16
|
+
to: Hex;
|
|
17
|
+
data: Hex;
|
|
18
|
+
value?: string;
|
|
19
|
+
};
|
|
20
|
+
/** Raw blob data as hex for replay. */
|
|
21
|
+
blobData?: Hex[];
|
|
22
|
+
/** L1 block number at time of failure (simulation target or receipt block). */
|
|
23
|
+
l1BlockNumber: string;
|
|
24
|
+
/** Receipt info (present only for on-chain reverts). */
|
|
25
|
+
receipt?: {
|
|
26
|
+
transactionHash: Hex;
|
|
27
|
+
blockNumber: string;
|
|
28
|
+
gasUsed: string;
|
|
29
|
+
status: 'reverted';
|
|
30
|
+
};
|
|
31
|
+
/** Error information. */
|
|
32
|
+
error: {
|
|
33
|
+
message: string;
|
|
34
|
+
/** Decoded error name (e.g., 'Rollup__InvalidProposer'). */
|
|
35
|
+
name?: string;
|
|
36
|
+
};
|
|
37
|
+
/** Context metadata. */
|
|
38
|
+
context: {
|
|
39
|
+
/** Actions involved (e.g., ['propose', 'governance-signal']). */
|
|
40
|
+
actions: string[];
|
|
41
|
+
/** Individual request data for each action (metadata, not used for replay). */
|
|
42
|
+
requests?: Array<{
|
|
43
|
+
action: string;
|
|
44
|
+
to: Hex;
|
|
45
|
+
data: Hex;
|
|
46
|
+
}>;
|
|
47
|
+
checkpointNumber?: number;
|
|
48
|
+
slot?: number;
|
|
49
|
+
sender: Hex;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
/** Store for failed L1 transactions for debugging purposes. */
|
|
53
|
+
export interface L1TxFailedStore {
|
|
54
|
+
/** Saves a failed transaction and returns its URI. */
|
|
55
|
+
saveFailedTx(tx: FailedL1Tx): Promise<FailedL1TxUri>;
|
|
56
|
+
/** Retrieves a failed transaction by its URI. */
|
|
57
|
+
getFailedTx(uri: FailedL1TxUri): Promise<FailedL1Tx>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFpbGVkX3R4X3N0b3JlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGlzaGVyL2wxX3R4X2ZhaWxlZF9zdG9yZS9mYWlsZWRfdHhfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhDLHNEQUFzRDtBQUN0RCxNQUFNLE1BQU0sYUFBYSxHQUFHLE1BQU0sR0FBRztJQUFFLE9BQU8sRUFBRSxlQUFlLENBQUE7Q0FBRSxDQUFDO0FBRWxFLGlFQUFpRTtBQUNqRSxNQUFNLE1BQU0sVUFBVSxHQUFHO0lBQ3ZCLHVGQUF1RjtJQUN2RixFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ1IsaURBQWlEO0lBQ2pELFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsa0VBQWtFO0lBQ2xFLFdBQVcsRUFBRSxZQUFZLEdBQUcsUUFBUSxHQUFHLFlBQVksQ0FBQztJQUNwRCxnRkFBZ0Y7SUFDaEYsT0FBTyxFQUFFO1FBQ1AsRUFBRSxFQUFFLEdBQUcsQ0FBQztRQUNSLElBQUksRUFBRSxHQUFHLENBQUM7UUFDVixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7S0FDaEIsQ0FBQztJQUNGLHVDQUF1QztJQUN2QyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQiwrRUFBK0U7SUFDL0UsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUN0Qix3REFBd0Q7SUFDeEQsT0FBTyxDQUFDLEVBQUU7UUFDUixlQUFlLEVBQUUsR0FBRyxDQUFDO1FBQ3JCLFdBQVcsRUFBRSxNQUFNLENBQUM7UUFDcEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUNoQixNQUFNLEVBQUUsVUFBVSxDQUFDO0tBQ3BCLENBQUM7SUFDRix5QkFBeUI7SUFDekIsS0FBSyxFQUFFO1FBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUNoQiw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ2YsQ0FBQztJQUNGLHdCQUF3QjtJQUN4QixPQUFPLEVBQUU7UUFDUCxpRUFBaUU7UUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLCtFQUErRTtRQUMvRSxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7WUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztZQUFDLElBQUksRUFBRSxHQUFHLENBQUE7U0FBRSxDQUFDLENBQUM7UUFDekQsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ2QsTUFBTSxFQUFFLEdBQUcsQ0FBQztLQUNiLENBQUM7Q0FDSCxDQUFDO0FBRUYsK0RBQStEO0FBQy9ELE1BQU0sV0FBVyxlQUFlO0lBQzlCLHNEQUFzRDtJQUN0RCxZQUFZLENBQUMsRUFBRSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckQsaURBQWlEO0lBQ2pELFdBQVcsQ0FBQyxHQUFHLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztDQUN0RCJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failed_tx_store.d.ts","sourceRoot":"","sources":["../../../src/publisher/l1_tx_failed_store/failed_tx_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC,sDAAsD;AACtD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC;AAElE,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG;IACvB,uFAAuF;IACvF,EAAE,EAAE,GAAG,CAAC;IACR,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,WAAW,EAAE,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;IACpD,gFAAgF;IAChF,OAAO,EAAE;QACP,EAAE,EAAE,GAAG,CAAC;QACR,IAAI,EAAE,GAAG,CAAC;QACV,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,uCAAuC;IACvC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,+EAA+E;IAC/E,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,OAAO,CAAC,EAAE;QACR,eAAe,EAAE,GAAG,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,UAAU,CAAC;KACpB,CAAC;IACF,yBAAyB;IACzB,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,4DAA4D;QAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,wBAAwB;IACxB,OAAO,EAAE;QACP,iEAAiE;QACjE,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,+EAA+E;QAC/E,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,GAAG,CAAC;YAAC,IAAI,EAAE,GAAG,CAAA;SAAE,CAAC,CAAC;QACzD,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,GAAG,CAAC;KACb,CAAC;CACH,CAAC;AAEF,+DAA+D;AAC/D,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,YAAY,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,iDAAiD;IACjD,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACtD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/** Store for failed L1 transactions for debugging purposes. */ export { };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
2
|
+
import type { FileStore } from '@aztec/stdlib/file-store';
|
|
3
|
+
import type { FailedL1Tx, FailedL1TxUri, L1TxFailedStore } from './failed_tx_store.js';
|
|
4
|
+
/**
|
|
5
|
+
* L1TxFailedStore implementation using the FileStore abstraction.
|
|
6
|
+
* Supports any backend that FileStore supports (GCS, S3, R2, local filesystem).
|
|
7
|
+
*/
|
|
8
|
+
export declare class FileStoreL1TxFailedStore implements L1TxFailedStore {
|
|
9
|
+
private readonly fileStore;
|
|
10
|
+
private readonly log;
|
|
11
|
+
constructor(fileStore: FileStore, logger?: Logger);
|
|
12
|
+
saveFailedTx(tx: FailedL1Tx): Promise<FailedL1TxUri>;
|
|
13
|
+
getFailedTx(uri: FailedL1TxUri): Promise<FailedL1Tx>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9zdG9yZV9mYWlsZWRfdHhfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaXNoZXIvbDFfdHhfZmFpbGVkX3N0b3JlL2ZpbGVfc3RvcmVfZmFpbGVkX3R4X3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZGOzs7R0FHRztBQUNILHFCQUFhLHdCQUF5QixZQUFXLGVBQWU7SUFJNUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0lBSDVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFTO0lBRTdCLFlBQ21CLFNBQVMsRUFBRSxTQUFTLEVBQ3JDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFHaEI7SUFFWSxZQUFZLENBQUMsRUFBRSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBb0JoRTtJQUVZLFdBQVcsQ0FBQyxHQUFHLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FHaEU7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file_store_failed_tx_store.d.ts","sourceRoot":"","sources":["../../../src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvF;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,eAAe;IAI5D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAH5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,YACmB,SAAS,EAAE,SAAS,EACrC,MAAM,CAAC,EAAE,MAAM,EAGhB;IAEY,YAAY,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAoBhE;IAEY,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAGhE;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
/**
|
|
3
|
+
* L1TxFailedStore implementation using the FileStore abstraction.
|
|
4
|
+
* Supports any backend that FileStore supports (GCS, S3, R2, local filesystem).
|
|
5
|
+
*/ export class FileStoreL1TxFailedStore {
|
|
6
|
+
fileStore;
|
|
7
|
+
log;
|
|
8
|
+
constructor(fileStore, logger){
|
|
9
|
+
this.fileStore = fileStore;
|
|
10
|
+
this.log = logger ?? createLogger('sequencer:l1-tx-failed-store');
|
|
11
|
+
}
|
|
12
|
+
async saveFailedTx(tx) {
|
|
13
|
+
const prefix = tx.receipt ? 'tx' : 'data';
|
|
14
|
+
const path = `${tx.failureType}/${prefix}-${tx.id}.json`;
|
|
15
|
+
const json = JSON.stringify(tx, null, 2);
|
|
16
|
+
const uri = await this.fileStore.save(path, Buffer.from(json), {
|
|
17
|
+
metadata: {
|
|
18
|
+
'content-type': 'application/json',
|
|
19
|
+
actions: tx.context.actions.join(','),
|
|
20
|
+
'failure-type': tx.failureType
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
this.log.info(`Saved failed L1 tx to ${uri}`, {
|
|
24
|
+
id: tx.id,
|
|
25
|
+
failureType: tx.failureType,
|
|
26
|
+
actions: tx.context.actions.join(',')
|
|
27
|
+
});
|
|
28
|
+
return uri;
|
|
29
|
+
}
|
|
30
|
+
async getFailedTx(uri) {
|
|
31
|
+
const data = await this.fileStore.read(uri);
|
|
32
|
+
return JSON.parse(data.toString());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { type FailedL1Tx, type FailedL1TxUri, type L1TxFailedStore } from './failed_tx_store.js';
|
|
2
|
+
export { createL1TxFailedStore } from './factory.js';
|
|
3
|
+
export { FileStoreL1TxFailedStore } from './file_store_failed_tx_store.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaXNoZXIvbDFfdHhfZmFpbGVkX3N0b3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/publisher/l1_tx_failed_store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC"}
|