diff --git a/.changeset/kind-planes-laugh.md b/.changeset/kind-planes-laugh.md new file mode 100644 index 0000000000000..3bd66ab77f9ac --- /dev/null +++ b/.changeset/kind-planes-laugh.md @@ -0,0 +1,5 @@ +--- +'@eth-optimism/data-transport-layer': patch +--- + +Add L1 sync shutoff block diff --git a/packages/data-transport-layer/src/services/l1-ingestion/service.ts b/packages/data-transport-layer/src/services/l1-ingestion/service.ts index ddf812f53705f..0d70b94becea2 100644 --- a/packages/data-transport-layer/src/services/l1-ingestion/service.ts +++ b/packages/data-transport-layer/src/services/l1-ingestion/service.ts @@ -214,11 +214,19 @@ export class L1IngestionService extends BaseService { (await this.state.db.getHighestSyncedL1Block()) || this.state.startingL1BlockNumber const currentL1Block = await this.state.l1RpcProvider.getBlockNumber() - const targetL1Block = Math.min( + let targetL1Block = Math.min( highestSyncedL1Block + this.options.logsPerPollingInterval, currentL1Block - this.options.confirmations ) + // Don't sync beyond the shutoff block! + if (this.options.l1SyncShutoffBlock !== undefined) { + targetL1Block = Math.min( + targetL1Block, + this.options.l1SyncShutoffBlock + ) + } + // We're already at the head, so no point in attempting to sync. if (highestSyncedL1Block === targetL1Block) { await sleep(this.options.pollingInterval) diff --git a/packages/data-transport-layer/src/services/main/service.ts b/packages/data-transport-layer/src/services/main/service.ts index b397a623a246e..98f93c9d87750 100644 --- a/packages/data-transport-layer/src/services/main/service.ts +++ b/packages/data-transport-layer/src/services/main/service.ts @@ -26,6 +26,7 @@ export interface L1DataTransportServiceOptions { l2RpcProvider: string l2RpcProviderUser?: string l2RpcProviderPassword?: string + l1SyncShutoffBlock?: number metrics?: Metrics dbPath: string logsPerPollingInterval: number diff --git a/packages/data-transport-layer/src/services/run.ts b/packages/data-transport-layer/src/services/run.ts index 44d7d7c0aae44..6e2ad9a26fb89 100644 --- a/packages/data-transport-layer/src/services/run.ts +++ b/packages/data-transport-layer/src/services/run.ts @@ -29,6 +29,7 @@ type ethNetwork = 'mainnet' | 'kovan' | 'goerli' l1RpcProviderUser: config.str('l1-rpc-user'), l1RpcProviderPassword: config.str('l1-rpc-password'), addressManager: config.str('address-manager'), + l1SyncShutoffBlock: config.uint('l1-sync-shutoff-block'), pollingInterval: config.uint('polling-interval', 5000), logsPerPollingInterval: config.uint('logs-per-polling-interval', 2000), dangerouslyCatchAllErrors: config.bool(