diff --git a/.eslintrc.js b/.eslintrc.js index b5052e51d..dfc7b7e9b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -38,6 +38,13 @@ module.exports = { "no-duplicate-imports": "error", "@typescript-eslint/no-floating-promises": ["error"], "@typescript-eslint/no-misused-promises": ["error", { checksVoidReturn: false }], + "no-restricted-imports": [ + "error", + { + patterns: [{ group: ["@ethersproject/bignumber"], message: "Use 'src/utils/BNUtils' instead" }], + paths: [{ name: "ethers", importNames: ["BigNumber"], message: "Use 'src/utils/BNUtils' instead" }], + }, + ], }, settings: { node: { diff --git a/package.json b/package.json index 704391dc1..53d1763b6 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", "@google-cloud/kms": "^3.6.0", "@google-cloud/storage": "^6.10.1", "@maticnetwork/maticjs": "^3.6.0", diff --git a/scripts/hubpool.ts b/scripts/hubpool.ts index 3c14fe311..8d5325da5 100644 --- a/scripts/hubpool.ts +++ b/scripts/hubpool.ts @@ -1,14 +1,12 @@ import minimist from "minimist"; import { WETH9__factory as WETH9 } from "@across-protocol/contracts"; import { constants as sdkConsts } from "@across-protocol/sdk"; -import { BigNumber, ethers, Signer } from "ethers"; +import { ethers, Signer } from "ethers"; import { config } from "dotenv"; -import { getNetworkName, getSigner } from "../src/utils"; +import { BigNumber, bnOne, bnUint256Max, formatEther, formatUnits, getNetworkName, getSigner } from "../src/utils"; import * as utils from "./utils"; const { PROTOCOL_DEFAULT_CHAIN_ID_INDICES } = sdkConsts; -const { MaxUint256, One: bnOne } = ethers.constants; -const { formatEther, formatUnits } = ethers.utils; const { NODE_SUCCESS, NODE_INPUT_ERR, NODE_APP_ERR } = utils; @@ -99,7 +97,7 @@ async function dispute(args: Record, signer: Signer): P if (allowance.lt(bondAmount)) { console.log(`Approving ${network} HubPool @ ${hubPool.address} to transfer ${symbol}.`); - const approval = await bondToken.connect(signer).approve(hubPool.address, MaxUint256); + const approval = await bondToken.connect(signer).approve(hubPool.address, bnUint256Max); console.log(`Approval: ${approval.hash}...`); await approval.wait(); } diff --git a/src/adapter/bridges/UsdcCCTPBridge.ts b/src/adapter/bridges/UsdcCCTPBridge.ts index 40cf0e332..c26f4e282 100644 --- a/src/adapter/bridges/UsdcCCTPBridge.ts +++ b/src/adapter/bridges/UsdcCCTPBridge.ts @@ -1,7 +1,7 @@ -import { BigNumber, Contract, Signer } from "ethers"; +import { Contract, Signer } from "ethers"; import { CONTRACT_ADDRESSES, chainIdsToCctpDomains } from "../../common"; import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; -import { EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP, compareAddressesSimple, assert } from "../../utils"; +import { BigNumber, EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP, compareAddressesSimple, assert } from "../../utils"; import { processEvent } from "../utils"; import { cctpAddressToBytes32, retrieveOutstandingCCTPBridgeUSDCTransfers } from "../../utils/CCTPUtils"; diff --git a/src/adapter/bridges/UsdcTokenSplitterBridge.ts b/src/adapter/bridges/UsdcTokenSplitterBridge.ts index 108e688ae..d9f98aa7d 100644 --- a/src/adapter/bridges/UsdcTokenSplitterBridge.ts +++ b/src/adapter/bridges/UsdcTokenSplitterBridge.ts @@ -1,8 +1,8 @@ -import { BigNumber, Signer } from "ethers"; +import { Signer } from "ethers"; import { CONTRACT_ADDRESSES, CANONICAL_BRIDGE } from "../../common"; import { UsdcCCTPBridge } from "./UsdcCCTPBridge"; import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; -import { EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP, compareAddressesSimple, assert } from "../../utils"; +import { BigNumber, EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP, compareAddressesSimple, assert } from "../../utils"; export class UsdcTokenSplitterBridge extends BaseBridgeAdapter { protected cctpBridge: BaseBridgeAdapter; diff --git a/src/adapter/bridges/ZKSyncBridge.ts b/src/adapter/bridges/ZKSyncBridge.ts index 314dfb245..74204a289 100644 --- a/src/adapter/bridges/ZKSyncBridge.ts +++ b/src/adapter/bridges/ZKSyncBridge.ts @@ -176,7 +176,7 @@ export class ZKSyncBridge extends BaseBridgeAdapter { return l2Gas; } - protected getMailboxContract() { + protected getMailboxContract(): Contract { return this.zkSyncMailbox; } } diff --git a/src/adapter/utils.ts b/src/adapter/utils.ts index bd7a76cd1..11de44697 100644 --- a/src/adapter/utils.ts +++ b/src/adapter/utils.ts @@ -1,6 +1,7 @@ -import { BigNumber, Event } from "ethers"; +import { Event } from "ethers"; import { TOKEN_APPROVALS_TO_FIRST_ZERO } from "../common"; import { + BigNumber, spreadEventWithBlockNumber, toBN, MAX_SAFE_ALLOWANCE, diff --git a/src/clients/InventoryClient.ts b/src/clients/InventoryClient.ts index 8b83b28b6..d02f0204a 100644 --- a/src/clients/InventoryClient.ts +++ b/src/clients/InventoryClient.ts @@ -1,4 +1,3 @@ -import { utils as ethersUtils } from "ethers"; import { constants, utils as sdkUtils } from "@across-protocol/sdk"; import WETH_ABI from "../common/abi/Weth.json"; import { @@ -10,6 +9,7 @@ import { createFormatFunction, blockExplorerLink, Contract, + formatUnits, runTransaction, isDefined, DefaultLogLevels, @@ -577,9 +577,9 @@ export class InventoryClient { cumulativeVirtualBalance, cumulativeVirtualBalanceWithShortfall, cumulativeVirtualBalanceWithShortfallPostRefunds, - targetPct: ethersUtils.formatUnits(tokenConfig.targetPct, 18), - targetOverage: ethersUtils.formatUnits(targetOverageBuffer, 18), - effectiveTargetPct: ethersUtils.formatUnits(effectiveTargetPct, 18), + targetPct: formatUnits(tokenConfig.targetPct, 18), + targetOverage: formatUnits(targetOverageBuffer, 18), + effectiveTargetPct: formatUnits(effectiveTargetPct, 18), expectedPostRelayAllocation, chainsToEvaluate, } diff --git a/src/clients/MultiCallerClient.ts b/src/clients/MultiCallerClient.ts index 8769b518b..42bbbe26b 100644 --- a/src/clients/MultiCallerClient.ts +++ b/src/clients/MultiCallerClient.ts @@ -1,7 +1,7 @@ import { utils as sdkUtils } from "@across-protocol/sdk"; -import { BigNumber } from "ethers"; import { DEFAULT_MULTICALL_CHUNK_SIZE, Multicall2Call } from "../common"; import { + BigNumber, winston, bnZero, getNetworkName, @@ -633,7 +633,8 @@ export class TryMulticallClient extends MultiCallerClient { mrkdwn: mrkdwn.join(""), }; }; - txnRequestsToSubmit.push(...txnCalldataToRebuild.map(rebuildTryMulticall)); + const tryMulticallTxns = txnCalldataToRebuild.filter((txn) => txn.calldata.length !== 0).map(rebuildTryMulticall); + txnRequestsToSubmit.push(...tryMulticallTxns); } if (simulate) { diff --git a/src/clients/bridges/op-stack/OpStackAdapter.ts b/src/clients/bridges/op-stack/OpStackAdapter.ts index f47c07acb..0091ec93b 100644 --- a/src/clients/bridges/op-stack/OpStackAdapter.ts +++ b/src/clients/bridges/op-stack/OpStackAdapter.ts @@ -5,10 +5,10 @@ import { Contract, BigNumber, BigNumberish, + bnZero, TransactionResponse, Event, checkAddressChecksum, - ethers, spreadEventWithBlockNumber, assign, winston, @@ -146,7 +146,7 @@ export class OpStackAdapter extends BaseAdapter { method, args, gasLimitMultiplier, - ethers.constants.Zero, + bnZero, simMode ); } diff --git a/src/clients/bridges/op-stack/UsdcCCTPBridge.ts b/src/clients/bridges/op-stack/UsdcCCTPBridge.ts index c9144dff0..37ac2f932 100644 --- a/src/clients/bridges/op-stack/UsdcCCTPBridge.ts +++ b/src/clients/bridges/op-stack/UsdcCCTPBridge.ts @@ -1,7 +1,7 @@ -import { BigNumber, Contract, Signer } from "ethers"; +import { Contract, Signer } from "ethers"; import { CONTRACT_ADDRESSES, chainIdsToCctpDomains } from "../../../common"; import { BridgeTransactionDetails, OpStackBridge, OpStackEvents } from "./OpStackBridgeInterface"; -import { EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP } from "../../../utils"; +import { BigNumber, EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP } from "../../../utils"; import { cctpAddressToBytes32, retrieveOutstandingCCTPBridgeUSDCTransfers } from "../../../utils/CCTPUtils"; export class UsdcCCTPBridge extends OpStackBridge { diff --git a/src/clients/bridges/op-stack/UsdcTokenSplitterBridge.ts b/src/clients/bridges/op-stack/UsdcTokenSplitterBridge.ts index 887ea3560..310148178 100644 --- a/src/clients/bridges/op-stack/UsdcTokenSplitterBridge.ts +++ b/src/clients/bridges/op-stack/UsdcTokenSplitterBridge.ts @@ -1,7 +1,14 @@ -import { BigNumber, Signer } from "ethers"; +import { Signer } from "ethers"; import { DefaultERC20Bridge } from "./DefaultErc20Bridge"; import { UsdcCCTPBridge } from "./UsdcCCTPBridge"; -import { EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP, assert, compareAddressesSimple } from "../../../utils"; +import { + BigNumber, + EventSearchConfig, + Provider, + TOKEN_SYMBOLS_MAP, + assert, + compareAddressesSimple, +} from "../../../utils"; import { BridgeTransactionDetails, OpStackBridge, OpStackEvents } from "./OpStackBridgeInterface"; import { CONTRACT_ADDRESSES } from "../../../common"; diff --git a/src/clients/bridges/utils.ts b/src/clients/bridges/utils.ts index db3c02a1d..f1ea8cb9c 100644 --- a/src/clients/bridges/utils.ts +++ b/src/clients/bridges/utils.ts @@ -1,6 +1,7 @@ -import { BigNumber, Contract, Event } from "ethers"; +import { Contract, Event } from "ethers"; import { TOKEN_APPROVALS_TO_FIRST_ZERO } from "../../common"; import { + BigNumber, MAX_SAFE_ALLOWANCE, blockExplorerLink, bnZero, diff --git a/src/finalizer/index.ts b/src/finalizer/index.ts index e15f5072c..4cedb298f 100644 --- a/src/finalizer/index.ts +++ b/src/finalizer/index.ts @@ -1,6 +1,6 @@ import { utils as sdkUtils } from "@across-protocol/sdk"; import assert from "assert"; -import { BigNumber, Contract, constants } from "ethers"; +import { Contract } from "ethers"; import { getAddress } from "ethers/lib/utils"; import { groupBy, uniq } from "lodash"; import { AugmentedTransaction, HubPoolClient, MultiCallerClient, TransactionClient } from "../clients"; @@ -17,6 +17,8 @@ import { import { DataworkerConfig } from "../dataworker/DataworkerConfig"; import { SpokePoolClientsByChain } from "../interfaces"; import { + BigNumber, + bnZero, Signer, blockExplorerLink, config, @@ -253,7 +255,7 @@ export async function finalize( const txnClient = new TransactionClient(logger); - let gasEstimation = constants.Zero; + let gasEstimation = bnZero; const batchGasLimit = BigNumber.from(10_000_000); // @dev To avoid running into block gas limit in case the # of finalizations gets too high, keep a running // counter of the approximate gas estimation and cut off the list of finalizations if it gets too high. diff --git a/src/interfaces/InventoryManagement.ts b/src/interfaces/InventoryManagement.ts index 4f2e76c11..37ef2899f 100644 --- a/src/interfaces/InventoryManagement.ts +++ b/src/interfaces/InventoryManagement.ts @@ -1,5 +1,5 @@ -import { BigNumber, utils as ethersUtils } from "ethers"; -import { TOKEN_SYMBOLS_MAP } from "../utils"; +import { utils as ethersUtils } from "ethers"; +import { BigNumber, TOKEN_SYMBOLS_MAP } from "../utils"; export type TokenBalanceConfig = { targetOverageBuffer: BigNumber; // Max multiplier for targetPct, to give flexibility in repayment chain selection. diff --git a/src/interfaces/Report.ts b/src/interfaces/Report.ts index a9a81b6ff..61146b332 100644 --- a/src/interfaces/Report.ts +++ b/src/interfaces/Report.ts @@ -1,4 +1,4 @@ -import { BigNumber } from "ethers"; +import { BigNumber } from "../utils"; export enum BundleAction { PROPOSED = "proposed", diff --git a/src/interfaces/Token.ts b/src/interfaces/Token.ts index a4b6a9354..c8acb7d53 100644 --- a/src/interfaces/Token.ts +++ b/src/interfaces/Token.ts @@ -1,4 +1,4 @@ -import { BigNumber } from "ethers"; +import { BigNumber } from "../utils"; import { SortableEvent } from "."; export interface TokenTransfer extends SortableEvent { diff --git a/src/interfaces/index.ts b/src/interfaces/index.ts index 5d3bfc8e4..fb346ae95 100644 --- a/src/interfaces/index.ts +++ b/src/interfaces/index.ts @@ -1,5 +1,5 @@ -import { BigNumber } from "ethers"; import { interfaces } from "@across-protocol/sdk"; +import { BigNumber } from "../utils"; export * from "./InventoryManagement"; export * from "./SpokePool"; diff --git a/src/monitor/Monitor.ts b/src/monitor/Monitor.ts index 168506624..b7ca6e791 100644 --- a/src/monitor/Monitor.ts +++ b/src/monitor/Monitor.ts @@ -17,16 +17,17 @@ import { convertFromWei, createFormatFunction, ERC20, - ethers, fillStatusArray, blockExplorerLink, blockExplorerLinks, + formatUnits, getNativeTokenAddressForChain, getGasPrice, getNativeTokenSymbol, getNetworkName, getUnfilledDeposits, mapAsync, + parseUnits, providers, toBN, toBNWei, @@ -42,11 +43,9 @@ import { MonitorClients, updateMonitorClients } from "./MonitorClientHelper"; import { MonitorConfig } from "./MonitorConfig"; import { CombinedRefunds } from "../dataworker/DataworkerUtils"; -export const REBALANCE_FINALIZE_GRACE_PERIOD = process.env.REBALANCE_FINALIZE_GRACE_PERIOD - ? Number(process.env.REBALANCE_FINALIZE_GRACE_PERIOD) - : 60 * 60; // 60 minutes, which is the length of the challenge window, so if a rebalance takes longer than this to finalize, // then its finalizing after the subsequent challenge period has started, which is sub-optimal. +export const REBALANCE_FINALIZE_GRACE_PERIOD = Number(process.env.REBALANCE_FINALIZE_GRACE_PERIOD ?? 60 * 60); // bundle frequency. export const ALL_CHAINS_NAME = "All chains"; @@ -381,8 +380,8 @@ export class Monitor { token, account, currentBalance: balances[i].toString(), - warnThreshold: ethers.utils.parseUnits(warnThreshold.toString(), decimalValues[i]), - errorThreshold: ethers.utils.parseUnits(errorThreshold.toString(), decimalValues[i]), + warnThreshold: parseUnits(warnThreshold.toString(), decimalValues[i]), + errorThreshold: parseUnits(errorThreshold.toString(), decimalValues[i]), }; }), }); @@ -397,10 +396,10 @@ export class Monitor { const decimals = decimalValues[i]; let trippedThreshold: { level: "warn" | "error"; threshold: number } | null = null; - if (warnThreshold !== null && balance.lt(ethers.utils.parseUnits(warnThreshold.toString(), decimals))) { + if (warnThreshold !== null && balance.lt(parseUnits(warnThreshold.toString(), decimals))) { trippedThreshold = { level: "warn", threshold: warnThreshold }; } - if (errorThreshold !== null && balance.lt(ethers.utils.parseUnits(errorThreshold.toString(), decimals))) { + if (errorThreshold !== null && balance.lt(parseUnits(errorThreshold.toString(), decimals))) { trippedThreshold = { level: "error", threshold: errorThreshold }; } if (trippedThreshold !== null) { @@ -418,7 +417,7 @@ export class Monitor { text: ` ${getNetworkName(chainId)} ${symbol} balance for ${blockExplorerLink( account, chainId - )} is ${ethers.utils.formatUnits(balance, decimals)}. Threshold: ${trippedThreshold.threshold}`, + )} is ${formatUnits(balance, decimals)}. Threshold: ${trippedThreshold.threshold}`, }; } } @@ -456,7 +455,7 @@ export class Monitor { token, account, currentBalance: currentBalances[i].toString(), - target: ethers.utils.parseUnits(target.toString(), decimalValues[i]), + target: parseUnits(target.toString(), decimalValues[i]), }; }), }); @@ -467,11 +466,11 @@ export class Monitor { refillEnabledBalances.map(async ({ chainId, isHubPool, token, account, target, trigger }, i) => { const currentBalance = currentBalances[i]; const decimals = decimalValues[i]; - const balanceTrigger = ethers.utils.parseUnits(trigger.toString(), decimals); + const balanceTrigger = parseUnits(trigger.toString(), decimals); const isBelowTrigger = currentBalance.lte(balanceTrigger); if (isBelowTrigger) { // Fill balance back to target, not trigger. - const balanceTarget = ethers.utils.parseUnits(target.toString(), decimals); + const balanceTarget = parseUnits(target.toString(), decimals); const deficit = balanceTarget.sub(currentBalance); let canRefill = await this.balanceAllocator.requestBalanceAllocation( chainId, @@ -541,7 +540,7 @@ export class Monitor { method: "loadEthForL2Calls", args: [], message: "Reloaded ETH in HubPool 🫡!", - mrkdwn: `Loaded ${ethers.utils.formatUnits(deficit, decimals)} ETH from ${signerAddress}.`, + mrkdwn: `Loaded ${formatUnits(deficit, decimals)} ETH from ${signerAddress}.`, value: deficit, }); } else { @@ -554,7 +553,7 @@ export class Monitor { const receipt = await tx.wait(); this.logger.info({ at: "Monitor#refillBalances", - message: `Reloaded ${ethers.utils.formatUnits( + message: `Reloaded ${formatUnits( deficit, decimals )} ${nativeSymbolForChain} for ${account} from ${signerAddress} 🫡!`, diff --git a/src/scripts/validateRootBundle.ts b/src/scripts/validateRootBundle.ts index 7de4f866b..b21d3255c 100644 --- a/src/scripts/validateRootBundle.ts +++ b/src/scripts/validateRootBundle.ts @@ -48,7 +48,7 @@ export async function validate(_logger: winston.Logger, baseSigner: Signer): Pro // enough data to limit # of excess historical deposit queries. // - SPOKE_ROOTS_LOOKBACK_COUNT unused in this script so set to something < DATAWORKER_FAST_LOOKBACK_COUNT // to avoid configuration error. - process.env.DATAWORKER_FAST_LOOKBACK_COUNT = "8"; + process.env.DATAWORKER_FAST_LOOKBACK_COUNT = "10"; process.env.SPOKE_ROOTS_LOOKBACK_COUNT = "1"; const { clients, config, dataworker } = await createDataworker(logger, baseSigner); logger[startupLogLevel(config)]({ diff --git a/src/utils/BNUtils.ts b/src/utils/BNUtils.ts index 6fe5d8ad8..ffc1e49be 100644 --- a/src/utils/BNUtils.ts +++ b/src/utils/BNUtils.ts @@ -1,4 +1,8 @@ -import { BigNumber } from "ethers"; +// eslint-disable-next-line no-restricted-imports +import { BigNumber } from "@ethersproject/bignumber"; + +// eslint-disable-next-line no-restricted-imports +export * from "@ethersproject/bignumber"; export function bnComparatorDescending(a: BigNumber, b: BigNumber): -1 | 0 | 1 { if (b.gt(a)) { diff --git a/src/utils/CCTPUtils.ts b/src/utils/CCTPUtils.ts index 172ae3083..69398905e 100644 --- a/src/utils/CCTPUtils.ts +++ b/src/utils/CCTPUtils.ts @@ -1,9 +1,10 @@ import { utils } from "@across-protocol/sdk"; import { TransactionReceipt } from "@ethersproject/abstract-provider"; import axios from "axios"; -import { BigNumber, ethers } from "ethers"; +import { ethers } from "ethers"; import { CONTRACT_ADDRESSES, chainIdsToCctpDomains } from "../common"; import { EventSearchConfig, paginatedEventQuery } from "./EventUtils"; +import { BigNumber } from "./BNUtils"; import { bnZero, compareAddressesSimple } from "./SDKUtils"; import { isDefined } from "./TypeGuards"; import { getProvider } from "./ProviderUtils"; diff --git a/src/utils/SDKUtils.ts b/src/utils/SDKUtils.ts index a417c6de7..f8ccb5287 100644 --- a/src/utils/SDKUtils.ts +++ b/src/utils/SDKUtils.ts @@ -27,7 +27,10 @@ export const { fillStatusArray, fixedPointAdjustment, forEachAsync, + formatEther, + formatUnits, mapAsync, + parseUnits, filterAsync, toBN, bnToHex, diff --git a/src/utils/TokenUtils.ts b/src/utils/TokenUtils.ts index 8e8ddb99e..1ce1c7e63 100644 --- a/src/utils/TokenUtils.ts +++ b/src/utils/TokenUtils.ts @@ -1,7 +1,9 @@ +import { TOKEN_SYMBOLS_MAP } from "@across-protocol/constants"; import { constants, utils } from "@across-protocol/sdk"; import { CONTRACT_ADDRESSES } from "../common"; -import { BigNumberish, utils as ethersUtils } from "ethers"; -import { TOKEN_SYMBOLS_MAP } from "@across-protocol/constants"; +import { BigNumberish } from "./BNUtils"; +import { formatUnits } from "./SDKUtils"; + const { ZERO_ADDRESS } = constants; export const { fetchTokenInfo, getL2TokenAddresses } = utils; @@ -18,5 +20,5 @@ export function getNativeTokenAddressForChain(chainId: number): string { */ export function formatUnitsForToken(symbol: string, amount: BigNumberish): string { const decimals = (TOKEN_SYMBOLS_MAP[symbol]?.decimals as number) ?? 18; - return ethersUtils.formatUnits(amount, decimals); + return formatUnits(amount, decimals); } diff --git a/src/utils/TransactionUtils.ts b/src/utils/TransactionUtils.ts index 494256a63..086d4e47c 100644 --- a/src/utils/TransactionUtils.ts +++ b/src/utils/TransactionUtils.ts @@ -221,6 +221,6 @@ export function getTarget(targetAddress: string): } } -function scaleByNumber(amount: ethers.BigNumber, scaling: number) { +function scaleByNumber(amount: BigNumber, scaling: number) { return amount.mul(toBNWei(scaling)).div(fixedPoint); } diff --git a/src/utils/index.ts b/src/utils/index.ts index 4c3e8f0bc..a2fabbf0f 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -14,8 +14,6 @@ export { providers, utils, BaseContract, - BigNumber, - BigNumberish, Contract, ContractFactory, Event, diff --git a/test/Dataworker.buildRoots.ts b/test/Dataworker.buildRoots.ts index 9dba449f7..3af6f3c13 100644 --- a/test/Dataworker.buildRoots.ts +++ b/test/Dataworker.buildRoots.ts @@ -5,7 +5,6 @@ import { assert, bnZero, fixedPointAdjustment } from "../src/utils"; import { amountToDeposit, destinationChainId, mockTreeRoot, originChainId, repaymentChainId } from "./constants"; import { setupFastDataworker } from "./fixtures/Dataworker.Fixture"; import { - BigNumber, Contract, SignerWithAddress, buildV3SlowRelayLeaves, @@ -279,7 +278,7 @@ describe("Dataworker: Build merkle roots", async function () { const expectedRunningBalances: RunningBalances = { // Note: There should be no origin chain entry here since there were no deposits. [originChainId]: { - [l1Token_1.address]: BigNumber.from(0), + [l1Token_1.address]: bnZero, }, }; expect(expectedRunningBalances).to.deep.equal(merkleRoot1.runningBalances); diff --git a/test/InventoryClient.InventoryRebalance.ts b/test/InventoryClient.InventoryRebalance.ts index 424a9ff4f..d2d55a8cf 100644 --- a/test/InventoryClient.InventoryRebalance.ts +++ b/test/InventoryClient.InventoryRebalance.ts @@ -27,10 +27,11 @@ import { ERC20, fixedPointAdjustment as fixedPoint, getNetworkName, + parseUnits, TOKEN_SYMBOLS_MAP, } from "../src/utils"; -const toMegaWei = (num: string | number | BigNumber) => ethers.utils.parseUnits(num.toString(), 6); +const toMegaWei = (num: string | number | BigNumber) => parseUnits(num.toString(), 6); let hubPoolClient: MockHubPoolClient, adapterManager: MockAdapterManager, tokenClient: MockTokenClient; let bundleDataClient: MockBundleDataClient; diff --git a/test/InventoryClient.RefundChain.ts b/test/InventoryClient.RefundChain.ts index 9906214c4..ed34ac41f 100644 --- a/test/InventoryClient.RefundChain.ts +++ b/test/InventoryClient.RefundChain.ts @@ -19,7 +19,7 @@ import { import { ConfigStoreClient, InventoryClient } from "../src/clients"; // Tested import { CrossChainTransferClient } from "../src/clients/bridges"; import { Deposit, InventoryConfig } from "../src/interfaces"; -import { CHAIN_IDs, ZERO_ADDRESS, bnZero, getNetworkName, TOKEN_SYMBOLS_MAP } from "../src/utils"; +import { CHAIN_IDs, ZERO_ADDRESS, bnZero, getNetworkName, parseUnits, TOKEN_SYMBOLS_MAP } from "../src/utils"; import { MockAdapterManager, MockBundleDataClient, @@ -51,7 +51,7 @@ describe("InventoryClient: Refund chain selection", async function () { l2TokensForUsdc[chainId] = TOKEN_SYMBOLS_MAP["USDC.e"].addresses[chainId]; }); - const toMegaWei = (num: string | number | BigNumber) => ethers.utils.parseUnits(num.toString(), 6); + const toMegaWei = (num: string | number | BigNumber) => parseUnits(num.toString(), 6); // Configure thresholds percentages as 10% optimism, 5% polygon and 5% Arbitrum with a target being threshold +2%. const targetOverageBuffer = toWei(1); const inventoryConfig: InventoryConfig = { diff --git a/test/TransactionClient.ts b/test/TransactionClient.ts index aba9e933e..05f1dfc8b 100644 --- a/test/TransactionClient.ts +++ b/test/TransactionClient.ts @@ -1,6 +1,5 @@ -import { BigNumber } from "ethers"; import { AugmentedTransaction } from "../src/clients"; -import { isDefined, TransactionResponse, TransactionSimulationResult } from "../src/utils"; +import { BigNumber, isDefined, TransactionResponse, TransactionSimulationResult } from "../src/utils"; import { CHAIN_ID_TEST_LIST as chainIds } from "./constants"; import { MockedTransactionClient, txnClientPassResult } from "./mocks/MockTransactionClient"; import { createSpyLogger, Contract, expect, randomAddress, winston, toBN } from "./utils"; diff --git a/test/mocks/MockCrossChainTransferClient.ts b/test/mocks/MockCrossChainTransferClient.ts index 66bb70ecc..a8ca0da2a 100644 --- a/test/mocks/MockCrossChainTransferClient.ts +++ b/test/mocks/MockCrossChainTransferClient.ts @@ -1,7 +1,7 @@ -import { BigNumber } from "ethers"; +import { BigNumber, bnZero } from "../../src/utils"; import { CrossChainTransferClient } from "../../src/clients/bridges"; export class MockCrossChainTransferClient extends CrossChainTransferClient { - crossChainTransferAmount: BigNumber = BigNumber.from(0); + crossChainTransferAmount = bnZero; constructor() { super(null, null, null); } diff --git a/test/mocks/MockInventoryClient.ts b/test/mocks/MockInventoryClient.ts index 944723c3d..2c0b143a2 100644 --- a/test/mocks/MockInventoryClient.ts +++ b/test/mocks/MockInventoryClient.ts @@ -1,11 +1,12 @@ import { Deposit, InventoryConfig } from "../../src/interfaces"; import { BundleDataClient, HubPoolClient, InventoryClient, Rebalance, TokenClient } from "../../src/clients"; import { AdapterManager, CrossChainTransferClient } from "../../src/clients/bridges"; -import { BigNumber } from "ethers"; +import { BigNumber, bnZero } from "../../src/utils"; import winston from "winston"; + export class MockInventoryClient extends InventoryClient { possibleRebalances: Rebalance[] = []; - balanceOnChain: BigNumber | undefined = BigNumber.from(0); + balanceOnChain: BigNumber | undefined = bnZero; excessRunningBalancePcts: { [l1Token: string]: { [chainId: number]: BigNumber } } = {}; constructor( diff --git a/test/mocks/MockTransactionClient.ts b/test/mocks/MockTransactionClient.ts index c337a8b16..e51c86ed4 100644 --- a/test/mocks/MockTransactionClient.ts +++ b/test/mocks/MockTransactionClient.ts @@ -1,7 +1,7 @@ -import { BigNumber, ethers } from "ethers"; +import { ethers } from "ethers"; import { random } from "lodash"; import { AugmentedTransaction, TransactionClient } from "../../src/clients"; -import { TransactionResponse, TransactionSimulationResult } from "../../src/utils"; +import { BigNumber, TransactionResponse, TransactionSimulationResult } from "../../src/utils"; import { toBNWei, winston } from "../utils"; export const txnClientPassResult = "pass"; diff --git a/test/utils/utils.ts b/test/utils/utils.ts index b76f84f88..409210a51 100644 --- a/test/utils/utils.ts +++ b/test/utils/utils.ts @@ -3,14 +3,14 @@ import { TokenRolesEnum } from "@uma/common"; import { SpyTransport, bigNumberFormatter } from "@uma/logger"; import { AcrossConfigStore, FakeContract } from "@across-protocol/contracts"; import { constants, utils as sdkUtils } from "@across-protocol/sdk"; -import { BigNumber, Contract, providers } from "ethers"; +import { Contract, providers } from "ethers"; import chai, { assert, expect } from "chai"; import chaiExclude from "chai-exclude"; import sinon from "sinon"; import winston from "winston"; import { GLOBAL_CONFIG_STORE_KEYS } from "../../src/clients"; import { Deposit, DepositWithBlock, FillWithBlock, SlowFillLeaf } from "../../src/interfaces"; -import { isDefined, spreadEvent, toBN, toBNWei, toWei, utf8ToHex, ZERO_ADDRESS } from "../../src/utils"; +import { BigNumber, isDefined, spreadEvent, toBN, toBNWei, toWei, utf8ToHex, ZERO_ADDRESS } from "../../src/utils"; import { DEFAULT_BLOCK_RANGE_FOR_CHAIN, MAX_L1_TOKENS_PER_POOL_REBALANCE_LEAF,