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 }