github.com/ethereum-optimism/optimism@v1.7.2/packages/common-ts/src/common/provider.ts (about)

     1  import { Provider } from '@ethersproject/abstract-provider'
     2  import { sleep } from '@eth-optimism/core-utils'
     3  
     4  import { Logger } from './logger'
     5  
     6  /**
     7   * Waits for an Ethers provider to be connected.
     8   *
     9   * @param provider Ethers provider to check.
    10   * @param opts Options for the function.
    11   * @param opts.logger Logger to use.
    12   * @param opts.intervalMs Interval to wait between checks.
    13   * @param opts.name Name of the provider for logs.
    14   */
    15  export const waitForProvider = async (
    16    provider: Provider,
    17    opts?: {
    18      logger?: Logger
    19      intervalMs?: number
    20      name?: string
    21    }
    22  ) => {
    23    const name = opts?.name || 'target'
    24    opts?.logger?.info(`waiting for ${name} provider...`)
    25    let connected = false
    26    while (!connected) {
    27      try {
    28        await provider.getBlockNumber()
    29        connected = true
    30      } catch (e) {
    31        opts?.logger?.info(`${name} provider not connected, retrying...`)
    32        await sleep(opts?.intervalMs || 15000)
    33      }
    34    }
    35    opts?.logger?.info(`${name} provider connected`)
    36  }