provider.ts 993 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import { Provider } from '@ethersproject/abstract-provider'
import { sleep } from '@eth-optimism/core-utils'

import { Logger } from './logger'

/**
 * Waits for an Ethers provider to be connected.
 *
 * @param provider Ethers provider to check.
 * @param opts Options for the function.
 * @param opts.logger Logger to use.
 * @param opts.intervalMs Interval to wait between checks.
 * @param opts.name Name of the provider for logs.
 */
export const waitForProvider = async (
  provider: Provider,
  opts?: {
    logger?: Logger
    intervalMs?: number
    name?: string
  }
) => {
23 24
  const name = opts?.name || 'target'
  opts?.logger?.info(`waiting for ${name} provider...`)
25 26 27 28 29 30
  let connected = false
  while (!connected) {
    try {
      await provider.getBlockNumber()
      connected = true
    } catch (e) {
31
      opts?.logger?.info(`${name} provider not connected, retrying...`)
32 33 34
      await sleep(opts?.intervalMs || 15000)
    }
  }
35
  opts?.logger?.info(`${name} provider connected`)
36
}