UNPKG

@hyperlane-xyz/cli

Version:

A command-line utility for common Hyperlane operations

39 lines 2 kB
import { ethers } from 'ethers'; import { ProtocolType } from '@hyperlane-xyz/utils'; import { autoConfirm } from '../config/prompts.js'; import { logBlue, logGray, logGreen, logRed, warnYellow } from '../logger.js'; export async function nativeBalancesAreSufficient(multiProvider, chains, minGas, skipConfirmation) { const sufficientBalances = []; for (const chain of chains) { // Only Ethereum chains are supported if (multiProvider.getProtocol(chain) !== ProtocolType.Ethereum) { logGray(`Skipping balance check for non-EVM chain: ${chain}`); continue; } const address = await multiProvider.getSigner(chain).getAddress(); const provider = multiProvider.getProvider(chain); const gasPrice = await provider.getGasPrice(); const minBalanceWei = gasPrice.mul(minGas).toString(); const minBalance = ethers.utils.formatEther(minBalanceWei.toString()); const balanceWei = await multiProvider .getProvider(chain) .getBalance(address); const balance = ethers.utils.formatEther(balanceWei.toString()); if (balanceWei.lt(minBalanceWei)) { const symbol = multiProvider.getChainMetadata(chain).nativeToken?.symbol ?? 'ETH'; logRed(`WARNING: ${address} has low balance on ${chain}. At least ${minBalance} ${symbol} recommended but found ${balance} ${symbol}`); sufficientBalances.push(false); } } const allSufficient = sufficientBalances.every((sufficient) => sufficient); if (allSufficient) { logGreen('✅ Balances are sufficient'); } else { warnYellow(`Deployment may fail due to insufficient balance(s)`); const isResume = await autoConfirm('Continue?', skipConfirmation, () => logBlue('Continuing deployment with insufficient balances')); if (!isResume) throw new Error('Canceled deployment due to low balance'); } } //# sourceMappingURL=balances.js.map