From 8f72064d3ead67041e6537b22c9a90b09681a405 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 4 Feb 2022 14:07:32 -0800 Subject: [PATCH] dtl: handle errors in context api Both `GET /eth/context/latest` and `GET /eth/context/blocknumber/:number` rely on fetching a remote block to pull the timestamp, blocknumber and blockhash from. If the fetched block is not found, then properties on `null` will be attempted to be accessed which will result in a runtime error. This commit adds handling for this case to prevent that kind of bug. --- .changeset/warm-news-punch.md | 5 +++++ .../data-transport-layer/src/services/server/service.ts | 7 +++++++ 2 files changed, 12 insertions(+) create mode 100644 .changeset/warm-news-punch.md diff --git a/.changeset/warm-news-punch.md b/.changeset/warm-news-punch.md new file mode 100644 index 0000000000000..67a1dfcd1f136 --- /dev/null +++ b/.changeset/warm-news-punch.md @@ -0,0 +1,5 @@ +--- +'@eth-optimism/data-transport-layer': patch +--- + +Handle case where the remote block isn't found for `GET /eth/context/latest` and `GET /eth/context/blocknumber/:number` diff --git a/packages/data-transport-layer/src/services/server/service.ts b/packages/data-transport-layer/src/services/server/service.ts index c5647cdc8cfd6..19b05cfbf9c93 100644 --- a/packages/data-transport-layer/src/services/server/service.ts +++ b/packages/data-transport-layer/src/services/server/service.ts @@ -340,6 +340,9 @@ export class L1TransportServer extends BaseService { const blockNumber = Math.max(0, tip - this.options.confirmations) const block = await this.state.l1RpcProvider.getBlock(blockNumber) + if (block === null) { + throw new Error(`Cannot GET /eth/context/latest at ${blockNumber}`) + } return { blockNumber: block.number, @@ -366,6 +369,10 @@ export class L1TransportServer extends BaseService { } const block = await this.state.l1RpcProvider.getBlock(number) + if (block === null) { + throw new Error(`Cannot GET /eth/context/blocknumber/${number}`) + } + return { blockNumber: block.number, timestamp: block.timestamp,