Commit 778a047a authored by OptimismBot's avatar OptimismBot Committed by GitHub

Merge pull request #6427 from ethereum-optimism/jm/startblock

feat(chain-mon): Default wd-mon scan from start of FPW
parents 5cac5c42 75749414
import { Provider } from '@ethersproject/abstract-provider'
import { Logger } from '@eth-optimism/common-ts'
/**
* Finds
*
* @param
* @param
* @param
* @returns
*/
export const getLastFinalizedBlock = async (
l1RpcProvider: Provider,
faultProofWindow: number,
logger: Logger
): Promise<number> => {
let guessWindowStartBlock
try {
const l1Block = await l1RpcProvider.getBlock('latest')
// The time corresponding to the start of the FPW, based on the current block.
const windowStartTime = l1Block.timestamp - faultProofWindow
// Use the FPW to find the block number that is the start of the FPW.
guessWindowStartBlock = l1Block.number - faultProofWindow / 12
let block = await l1RpcProvider.getBlock(guessWindowStartBlock)
while (block.timestamp > windowStartTime) {
guessWindowStartBlock--
block = await l1RpcProvider.getBlock(guessWindowStartBlock)
}
return block.number
} catch (err) {
logger.fatal('error when calling querying for block', {
errors: err,
})
throw new Error(
`unable to find block number ${guessWindowStartBlock || 'latest'}`
)
}
}
...@@ -13,6 +13,7 @@ import { Event } from 'ethers' ...@@ -13,6 +13,7 @@ import { Event } from 'ethers'
import dateformat from 'dateformat' import dateformat from 'dateformat'
import { version } from '../../package.json' import { version } from '../../package.json'
import { getLastFinalizedBlock as getLastFinalizedBlock } from './helpers'
type Options = { type Options = {
l1RpcProvider: Provider l1RpcProvider: Provider
...@@ -30,7 +31,7 @@ type Metrics = { ...@@ -30,7 +31,7 @@ type Metrics = {
type State = { type State = {
messenger: CrossChainMessenger messenger: CrossChainMessenger
highestUncheckedBlockNumber: number highestUncheckedBlockNumber: number
finalizationWindow: number faultProofWindow: number
forgeryDetected: boolean forgeryDetected: boolean
} }
...@@ -109,10 +110,20 @@ export class WithdrawalMonitor extends BaseServiceV2<Options, Metrics, State> { ...@@ -109,10 +110,20 @@ export class WithdrawalMonitor extends BaseServiceV2<Options, Metrics, State> {
// Not detected by default. // Not detected by default.
this.state.forgeryDetected = false this.state.forgeryDetected = false
// For now we'll just start take it from the env or the tip of the chain this.state.faultProofWindow =
await this.state.messenger.getChallengePeriodSeconds()
this.logger.info(
`fault proof window is ${this.state.faultProofWindow} seconds`
)
// Set the start block number.
if (this.options.startBlockNumber === -1) { if (this.options.startBlockNumber === -1) {
this.state.highestUncheckedBlockNumber = // We default to starting from the last finalized block.
await this.options.l1RpcProvider.getBlockNumber() this.state.highestUncheckedBlockNumber = await getLastFinalizedBlock(
this.options.l1RpcProvider,
this.state.faultProofWindow,
this.logger
)
} else { } else {
this.state.highestUncheckedBlockNumber = this.options.startBlockNumber this.state.highestUncheckedBlockNumber = this.options.startBlockNumber
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment