Skip to content

getTimeToNextGame

Returns the time until the next L2 dispute game (after the provided block number) is submitted. Used for the Withdrawal flow.

Usage

example.ts
import { optimism } from 'viem/chains'
import { account, publicClientL1, publicClientL2 } from './config'
 
const l2BlockNumber = publicClientL2.getBlockNumber()
 
const { 
  interval, 
  seconds, 
  timestamp
} = await publicClientL1.getTimeToNextGame({ 
  l2BlockNumber, 
  targetChain: publicClientL2.chain, 
}) 

Returns

{ interval: number, seconds: number, timestamp: number }

  • Estimated interval between dispute games – the max time to wait for transaction to be proved.
  • Estimated seconds until the next dispute game is submitted.
  • Estimated timestamp of the next dispute game.

Parameters

l2BlockNumber

  • Type: bigint

The latest L2 block number.

const l2BlockNumber = publicClientL2.getBlockNumber() 
const { seconds } = await publicClientL1.getTimeToNextGame({ 
  l2BlockNumber, 
  targetChain: optimism, 
}) 

targetChain

The L2 chain.

const { seconds } = await publicClientL1.getTimeToNextGame({
  l2BlockNumber,
  targetChain: optimism, 
})

disputeGameFactoryAddress (optional)

  • Type: Address
  • Default: targetChain.contracts.disputeGameFactory[chainId].address

The address of the DisputeGameFactory contract. Defaults to the DisputeGameFactory contract specified on the targetChain.

If a disputeGameFactoryAddress is provided, the targetChain parameter becomes optional.

const { seconds } = await publicClientL1.getTimeToNextGame({
  l2BlockNumber,
  disputeGameFactoryAddress: '0xbEb5Fc579115071764c7423A4f12eDde41f106Ed'
})

intervalBuffer (optional)

  • Type: number
  • Default: 1.1

The buffer to account for discrepencies between non-deterministic time intervals.

const { seconds } = await publicClientL1.getTimeToNextGame({ 
  intervalBuffer: 1.2, 
  l2BlockNumber,
  targetChain: optimism, 
}) 

portalAddress (optional)

  • Type: Address
  • Default: targetChain.contracts.portal[chainId].address

The address of the Portal contract. Defaults to the Portal contract specified on the targetChain.

If a portalAddress is provided, the targetChain parameter becomes optional.

const { seconds } = await publicClientL1.getTimeToNextGame({
  l2BlockNumber,
  portalAddress: '0xbEb5Fc579115071764c7423A4f12eDde41f106Ed'
})