import { BigNumber, Bytes, ethers } from 'ethers'
import { formatUnits } from '@ethersproject/units'

export function exponentialDelay(retryNumber: number) {
  const delay = Math.pow(2, retryNumber) * 1000
  const randomSum = delay * 0.2 * Math.random() // 0-20% of the delay
  return delay + randomSum
}

export async function randomHashBytes(): Promise<Bytes> {
  return ethers.utils.randomBytes(32)
}

export function delay(ms: number) {
  return new Promise(resolve => setTimeout(resolve, ms))
}

export function toNumWei(val: BigNumber) {
  return parseFloat(formatUnits(val, 'wei'))
}