diff --git a/yarn-project/archiver/src/archiver/archiver.ts b/yarn-project/archiver/src/archiver/archiver.ts index 03f46a81ec41..f415811f4a59 100644 --- a/yarn-project/archiver/src/archiver/archiver.ts +++ b/yarn-project/archiver/src/archiver/archiver.ts @@ -522,8 +522,22 @@ export class Archiver extends EventEmitter implements ArchiveSource, Traceable { } } - private retrieveL1ToL2Message(leaf: Fr): Promise { - return retrieveL1ToL2Message(this.inbox.getContract(), leaf, this.l1constants.l1StartBlock); + private async retrieveL1ToL2Message(leaf: Fr): Promise { + const currentL1BlockNumber = await this.publicClient.getBlockNumber(); + let searchStartBlock: bigint = 0n; + let searchEndBlock: bigint = this.l1constants.l1StartBlock - 1n; + + do { + [searchStartBlock, searchEndBlock] = this.nextRange(searchEndBlock, currentL1BlockNumber); + + const message = await retrieveL1ToL2Message(this.inbox.getContract(), leaf, searchStartBlock, searchEndBlock); + + if (message) { + return message; + } + } while (searchEndBlock < currentL1BlockNumber); + + return undefined; } private async rollbackL1ToL2Messages(localLastMessage: InboxMessage, messagesSyncPoint: L1BlockId) { diff --git a/yarn-project/archiver/src/archiver/data_retrieval.ts b/yarn-project/archiver/src/archiver/data_retrieval.ts index 7ef9f1679d23..c50ca812f346 100644 --- a/yarn-project/archiver/src/archiver/data_retrieval.ts +++ b/yarn-project/archiver/src/archiver/data_retrieval.ts @@ -345,14 +345,17 @@ async function getBlockFromRollupTx( }; } -/** Given an L1 to L2 message, retrieves its corresponding event from the Inbox. */ +/** Given an L1 to L2 message, retrieves its corresponding event from the Inbox within a specific block range. */ export async function retrieveL1ToL2Message( inbox: GetContractReturnType, leaf: Fr, fromBlock: bigint, + toBlock: bigint, ): Promise { - const logs = await inbox.getEvents.MessageSent({ hash: leaf.toString() }, { fromBlock }); - return mapLogsInboxMessage(logs)[0]; + const logs = await inbox.getEvents.MessageSent({ hash: leaf.toString() }, { fromBlock, toBlock }); + + const messages = mapLogsInboxMessage(logs); + return messages.length > 0 ? messages[0] : undefined; } /**