diff --git a/pkg/deployments/package.json b/pkg/deployments/package.json index dd6524b910..ab331c2938 100644 --- a/pkg/deployments/package.json +++ b/pkg/deployments/package.json @@ -34,6 +34,7 @@ "devDependencies": { "@balancer-labs/balancer-js": "workspace:*", "@balancer-labs/v2-helpers": "workspace:*", + "@nomicfoundation/hardhat-network-helpers": "^1.0.6", "@nomiclabs/hardhat-ethers": "^2.2.1", "@nomiclabs/hardhat-etherscan": "^3.1.2", "@solidity-parser/parser": "^0.14.5", diff --git a/pkg/deployments/src/signers.ts b/pkg/deployments/src/signers.ts index 6490751741..b560a33d9c 100644 --- a/pkg/deployments/src/signers.ts +++ b/pkg/deployments/src/signers.ts @@ -1,49 +1,27 @@ import { BigNumber } from 'ethers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; -import { getForkedNetwork } from './test'; - -const WHALES: { [key: string]: string } = { - mainnet: '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503', -}; +import { impersonateAccount, setBalance as setAccountBalance } from '@nomicfoundation/hardhat-network-helpers'; +import { fp } from '@balancer-labs/v2-helpers/src/numbers'; export async function getSigners(): Promise { const { ethers } = await import('hardhat'); return ethers.getSigners(); } -export async function getSigner(indexOrAddress: number | string = 0): Promise { - if (typeof indexOrAddress === 'string') { - const { ethers } = await import('hardhat'); - const signer = ethers.provider.getSigner(indexOrAddress); - return SignerWithAddress.create(signer); - } else { - const signers = await getSigners(); - return signers[indexOrAddress]; - } +export async function getSigner(index = 0): Promise { + return (await getSigners())[index]; } -export async function impersonate(address: string, balance?: BigNumber): Promise { - if (balance) { - await setBalance(address, balance); - } - - return getSigner(address); -} +export async function impersonate(address: string, balance = fp(100)): Promise { + await impersonateAccount(address); + await setBalance(address, balance); -export async function impersonateWhale(balance?: BigNumber): Promise { - const hre = await import('hardhat'); - const network = getForkedNetwork(hre); - const address = WHALES[network]; - if (!address) throw Error(`Could not find whale address for network ${network}`); - return impersonate(address, balance); + const { ethers } = await import('hardhat'); + const signer = ethers.provider.getSigner(address); + return SignerWithAddress.create(signer); } export async function setBalance(address: string, balance: BigNumber): Promise { - const hre = await import('hardhat'); - await hre.network.provider.request({ method: 'hardhat_impersonateAccount', params: [address] }); - - const rawHexBalance = hre.ethers.utils.hexlify(balance); - const hexBalance = rawHexBalance.replace('0x0', '0x'); - await hre.network.provider.request({ method: 'hardhat_setBalance', params: [address, hexBalance] }); + await setAccountBalance(address, balance); } diff --git a/pkg/deployments/tasks/20211202-no-protocol-fee-lbp/test/task.fork.ts b/pkg/deployments/tasks/20211202-no-protocol-fee-lbp/test/task.fork.ts index 60f60762d0..46f38f14ec 100644 --- a/pkg/deployments/tasks/20211202-no-protocol-fee-lbp/test/task.fork.ts +++ b/pkg/deployments/tasks/20211202-no-protocol-fee-lbp/test/task.fork.ts @@ -13,15 +13,7 @@ import { advanceToTimestamp, currentTimestamp, DAY, MINUTE, MONTH } from '@balan import { actionId } from '@balancer-labs/v2-helpers/src/models/misc/actions'; -import { - describeForkTest, - getSigner, - impersonate, - impersonateWhale, - getForkedNetwork, - Task, - TaskMode, -} from '../../../src'; +import { describeForkTest, getSigner, impersonate, getForkedNetwork, Task, TaskMode } from '../../../src'; describeForkTest('NoProtocolFeeLiquidityBootstrappingPoolFactory', 'mainnet', 14850000, function () { let owner: SignerWithAddress, whale: SignerWithAddress; @@ -45,6 +37,8 @@ describeForkTest('NoProtocolFeeLiquidityBootstrappingPoolFactory', 'mainnet', 14 const initialBalanceUSDC = fp(1e6).div(1e12); // 6 digits const initialBalances = [initialBalanceDAI, initialBalanceUSDC]; + const LARGE_TOKEN_HOLDER = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503'; + before('run task', async () => { task = new Task('20211202-no-protocol-fee-lbp', TaskMode.TEST, getForkedNetwork(hre)); await task.run({ force: true }); @@ -53,7 +47,7 @@ describeForkTest('NoProtocolFeeLiquidityBootstrappingPoolFactory', 'mainnet', 14 before('load signers', async () => { owner = await getSigner(); - whale = await impersonateWhale(fp(100)); + whale = await impersonate(LARGE_TOKEN_HOLDER); }); before('load vault and tokens', async () => { @@ -164,7 +158,7 @@ describeForkTest('NoProtocolFeeLiquidityBootstrappingPoolFactory', 'mainnet', 14 const authorizer = await vaultTask.instanceAt('Authorizer', await vault.getAuthorizer()); const DEFAULT_ADMIN_ROLE = await authorizer.DEFAULT_ADMIN_ROLE(); - const admin = await impersonate(await authorizer.getRoleMember(DEFAULT_ADMIN_ROLE, 0), fp(100)); + const admin = await impersonate(await authorizer.getRoleMember(DEFAULT_ADMIN_ROLE, 0)); await authorizer.connect(admin).grantRole(await actionId(factory, 'disable'), admin.address); await factory.connect(admin).disable(); diff --git a/pkg/deployments/tasks/20220513-double-entrypoint-fix-relayer/test/task.fork.ts b/pkg/deployments/tasks/20220513-double-entrypoint-fix-relayer/test/task.fork.ts index 09ac1ac861..3988beaea6 100644 --- a/pkg/deployments/tasks/20220513-double-entrypoint-fix-relayer/test/task.fork.ts +++ b/pkg/deployments/tasks/20220513-double-entrypoint-fix-relayer/test/task.fork.ts @@ -3,7 +3,6 @@ import { expect } from 'chai'; import { Contract } from 'ethers'; import { defaultAbiCoder } from '@ethersproject/abi'; -import { fp } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import { actionId } from '@balancer-labs/v2-helpers/src/models/misc/actions'; import { WeightedPoolEncoder } from '@balancer-labs/balancer-js'; @@ -60,7 +59,7 @@ describeForkTest('DoubleEntrypointFixRelayer', 'mainnet', 14770592, function () }); before('grant permissions', async () => { - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + govMultisig = await impersonate(GOV_MULTISIG); const vaultTask = new Task('20210418-vault', TaskMode.READ_ONLY, getForkedNetwork(hre)); authorizer = await vaultTask.instanceAt('Authorizer', await vault.getAuthorizer()); @@ -71,10 +70,10 @@ describeForkTest('DoubleEntrypointFixRelayer', 'mainnet', 14770592, function () await authorizer.connect(govMultisig).grantRoles([exitPoolRole, withdrawCollectedFeesRole], relayer.address); // User approval for relayer - btcBptHolder = await impersonate(BTC_STABLE_POOL_GAUGE, fp(100)); + btcBptHolder = await impersonate(BTC_STABLE_POOL_GAUGE); await vault.connect(btcBptHolder).setRelayerApproval(btcBptHolder.address, relayer.address, true); - snxBptHolder = await impersonate(SNX_WEIGHTED_POOL_GAUGE, fp(100)); + snxBptHolder = await impersonate(SNX_WEIGHTED_POOL_GAUGE); await vault.connect(snxBptHolder).setRelayerApproval(snxBptHolder.address, relayer.address, true); }); diff --git a/pkg/deployments/tasks/20220530-preseeded-voting-escrow-delegation/test/test.fork.ts b/pkg/deployments/tasks/20220530-preseeded-voting-escrow-delegation/test/test.fork.ts index 8936ca41af..57427d21b3 100644 --- a/pkg/deployments/tasks/20220530-preseeded-voting-escrow-delegation/test/test.fork.ts +++ b/pkg/deployments/tasks/20220530-preseeded-voting-escrow-delegation/test/test.fork.ts @@ -2,7 +2,6 @@ import hre from 'hardhat'; import { BigNumber, Contract } from 'ethers'; import { expect } from 'chai'; -import { fp } from '@balancer-labs/v2-helpers/src/numbers'; import * as expectEvent from '@balancer-labs/v2-helpers/src/test/expectEvent'; import { ZERO_ADDRESS } from '@balancer-labs/v2-helpers/src/constants'; @@ -47,7 +46,7 @@ describeForkTest('PreseededVotingEscrowDelegation', 'mainnet', 14850000, functio getForkedNetwork(hre) ).deployedInstance('Authorizer'); - const govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + const govMultisig = await impersonate(GOV_MULTISIG); await authorizer .connect(govMultisig) .grantRole(await actionId(delegationProxy, 'setDelegation'), govMultisig.address); @@ -111,7 +110,7 @@ describeForkTest('PreseededVotingEscrowDelegation', 'mainnet', 14850000, functio const TRIBE_DAO = '0xc4EAc760C2C631eE0b064E39888b89158ff808B2'; const TRIBE_OPERATOR = '0x66977ce30049cd0e443216bf26377966c3a109e2'; - const operator = await impersonate(TRIBE_OPERATOR, fp(100)); + const operator = await impersonate(TRIBE_OPERATOR); const receipt = await ( await delegation.connect(operator).create_boost(TRIBE_DAO, receiver.address, 1000, 0, await fromNow(MONTH), 0) diff --git a/pkg/deployments/tasks/20220609-stable-pool-v2/test/task.fork.ts b/pkg/deployments/tasks/20220609-stable-pool-v2/test/task.fork.ts index 3b12db66dd..64aaab61be 100644 --- a/pkg/deployments/tasks/20220609-stable-pool-v2/test/task.fork.ts +++ b/pkg/deployments/tasks/20220609-stable-pool-v2/test/task.fork.ts @@ -10,15 +10,7 @@ import { actionId } from '@balancer-labs/v2-helpers/src/models/misc/actions'; import { MAX_UINT256 } from '@balancer-labs/v2-helpers/src/constants'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; -import { - describeForkTest, - getSigner, - impersonate, - impersonateWhale, - getForkedNetwork, - Task, - TaskMode, -} from '../../../src'; +import { describeForkTest, getSigner, impersonate, getForkedNetwork, Task, TaskMode } from '../../../src'; describeForkTest('StablePoolFactory', 'mainnet', 14850000, function () { let owner: SignerWithAddress, whale: SignerWithAddress, govMultisig: SignerWithAddress; @@ -39,6 +31,7 @@ describeForkTest('StablePoolFactory', 'mainnet', 14850000, function () { const upscaledInitialBalances = [initialBalanceDAI, initialBalanceUSDC.mul(1e12)]; const GOV_MULTISIG = '0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'; + const LARGE_TOKEN_HOLDER = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503'; before('run task', async () => { task = new Task('20220609-stable-pool-v2', TaskMode.TEST, getForkedNetwork(hre)); @@ -48,9 +41,9 @@ describeForkTest('StablePoolFactory', 'mainnet', 14850000, function () { before('load signers', async () => { owner = await getSigner(); - whale = await impersonateWhale(fp(100)); + whale = await impersonate(LARGE_TOKEN_HOLDER); - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + govMultisig = await impersonate(GOV_MULTISIG); }); before('setup contracts', async () => { diff --git a/pkg/deployments/tasks/20220707-distribution-scheduler/test/test.fork.ts b/pkg/deployments/tasks/20220707-distribution-scheduler/test/test.fork.ts index 4b3058ff5b..b6b9de96dc 100644 --- a/pkg/deployments/tasks/20220707-distribution-scheduler/test/test.fork.ts +++ b/pkg/deployments/tasks/20220707-distribution-scheduler/test/test.fork.ts @@ -35,8 +35,8 @@ describeForkTest('DistributionScheduler', 'mainnet', 14850000, function () { }); before('setup accounts', async () => { - lmCommittee = await impersonate(LM_COMMITTEE_ADDRESS, fp(100)); - distributor = await impersonate(DISTRIBUTOR_ADDRESS, fp(100)); + lmCommittee = await impersonate(LM_COMMITTEE_ADDRESS); + distributor = await impersonate(DISTRIBUTOR_ADDRESS); }); before('setup contracts', async () => { diff --git a/pkg/deployments/tasks/20220714-fee-distributor-v2/test/test.fork.ts b/pkg/deployments/tasks/20220714-fee-distributor-v2/test/test.fork.ts index 4df496fa0a..be7384f45a 100644 --- a/pkg/deployments/tasks/20220714-fee-distributor-v2/test/test.fork.ts +++ b/pkg/deployments/tasks/20220714-fee-distributor-v2/test/test.fork.ts @@ -45,10 +45,10 @@ describeForkTest('FeeDistributor', 'mainnet', 15130000, function () { }); before('setup accounts', async () => { - veBALHolder = await impersonate(VEBAL_HOLDER, fp(100)); - veBALHolder2 = await impersonate(VEBAL_HOLDER_2, fp(100)); - feeCollector = await impersonate(PROTOCOL_FEE_COLLECTOR, fp(100)); - voterProxyAdmin = await impersonate(VOTER_PROXY_ADMIN, fp(100)); + veBALHolder = await impersonate(VEBAL_HOLDER); + veBALHolder2 = await impersonate(VEBAL_HOLDER_2); + feeCollector = await impersonate(PROTOCOL_FEE_COLLECTOR); + voterProxyAdmin = await impersonate(VOTER_PROXY_ADMIN); }); before('setup contracts', async () => { diff --git a/pkg/deployments/tasks/20220725-protocol-fee-percentages-provider/test/task.fork.ts b/pkg/deployments/tasks/20220725-protocol-fee-percentages-provider/test/task.fork.ts index 70fe80211b..50f56724bb 100644 --- a/pkg/deployments/tasks/20220725-protocol-fee-percentages-provider/test/task.fork.ts +++ b/pkg/deployments/tasks/20220725-protocol-fee-percentages-provider/test/task.fork.ts @@ -42,7 +42,7 @@ describeForkTest('ProtocolFeePercentagesProvider', 'mainnet', 15130000, function before('setup admin', async () => { const DEFAULT_ADMIN_ROLE = await authorizer.DEFAULT_ADMIN_ROLE(); - admin = await impersonate(await authorizer.getRoleMember(DEFAULT_ADMIN_ROLE, 0), fp(100)); + admin = await impersonate(await authorizer.getRoleMember(DEFAULT_ADMIN_ROLE, 0)); }); context('without permissions', () => { diff --git a/pkg/deployments/tasks/20220822-mainnet-gauge-factory-v2/test/task.fork.ts b/pkg/deployments/tasks/20220822-mainnet-gauge-factory-v2/test/task.fork.ts index 01b6eb763d..65815f5cc3 100644 --- a/pkg/deployments/tasks/20220822-mainnet-gauge-factory-v2/test/task.fork.ts +++ b/pkg/deployments/tasks/20220822-mainnet-gauge-factory-v2/test/task.fork.ts @@ -58,8 +58,8 @@ describeForkTest('LiquidityGaugeFactoryV2', 'mainnet', 15397200, function () { before('setup accounts', async () => { admin = await getSigner(0); - veBALHolder = await impersonate(VEBAL_HOLDER, fp(100)); - lpTokenHolder = await impersonate(LP_TOKEN_HOLDER, fp(100)); + veBALHolder = await impersonate(VEBAL_HOLDER); + lpTokenHolder = await impersonate(LP_TOKEN_HOLDER); }); before('setup contracts', async () => { @@ -110,7 +110,7 @@ describeForkTest('LiquidityGaugeFactoryV2', 'mainnet', 15397200, function () { it('grant permissions', async () => { // We need to grant permission to the admin to add the LiquidityGaugeFactory to the GaugeAdder, and also to add // gauges from said factory to the GaugeController. - const govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + const govMultisig = await impersonate(GOV_MULTISIG); await Promise.all( ['addGaugeFactory', 'addEthereumGauge'].map( diff --git a/pkg/deployments/tasks/20220823-arbitrum-root-gauge-factory-v2/test/task.fork.ts b/pkg/deployments/tasks/20220823-arbitrum-root-gauge-factory-v2/test/task.fork.ts index 468666e431..39c00079ab 100644 --- a/pkg/deployments/tasks/20220823-arbitrum-root-gauge-factory-v2/test/task.fork.ts +++ b/pkg/deployments/tasks/20220823-arbitrum-root-gauge-factory-v2/test/task.fork.ts @@ -48,7 +48,7 @@ describeForkTest('ArbitrumRootGaugeFactoryV2', 'mainnet', 15397200, function () admin = await getSigner(0); recipient = await getSigner(1); - veBALHolder = await impersonate(VEBAL_HOLDER, fp(100)); + veBALHolder = await impersonate(VEBAL_HOLDER); }); before('setup contracts', async () => { @@ -95,7 +95,7 @@ describeForkTest('ArbitrumRootGaugeFactoryV2', 'mainnet', 15397200, function () it('grant permissions', async () => { // We need to grant permission to the admin to add the Arbitrum factory to the GaugeAdder, and also to then add // gauges from said factory to the GaugeController. - const govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + const govMultisig = await impersonate(GOV_MULTISIG); await Promise.all( ['addGaugeFactory', 'addArbitrumGauge'].map( diff --git a/pkg/deployments/tasks/20220823-optimism-root-gauge-factory-v2/test/task.fork.ts b/pkg/deployments/tasks/20220823-optimism-root-gauge-factory-v2/test/task.fork.ts index 7bc22bab4b..8d738a6182 100644 --- a/pkg/deployments/tasks/20220823-optimism-root-gauge-factory-v2/test/task.fork.ts +++ b/pkg/deployments/tasks/20220823-optimism-root-gauge-factory-v2/test/task.fork.ts @@ -50,7 +50,7 @@ describeForkTest('OptimismRootGaugeFactoryV2', 'mainnet', 15397200, function () admin = await getSigner(0); recipient = await getSigner(1); - veBALHolder = await impersonate(VEBAL_HOLDER, fp(100)); + veBALHolder = await impersonate(VEBAL_HOLDER); }); before('setup contracts', async () => { @@ -85,7 +85,7 @@ describeForkTest('OptimismRootGaugeFactoryV2', 'mainnet', 15397200, function () it('grant permissions', async () => { // We need to grant permission to the admin to add the Optimism factory to the GaugeAdder, and also to then add // gauges from said factory to the GaugeController. - const govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + const govMultisig = await impersonate(GOV_MULTISIG); await Promise.all( ['addGaugeFactory', 'addOptimismGauge'].map( diff --git a/pkg/deployments/tasks/20220823-polygon-root-gauge-factory-v2/test/task.fork.ts b/pkg/deployments/tasks/20220823-polygon-root-gauge-factory-v2/test/task.fork.ts index 0a8beb06b4..002ea4aa82 100644 --- a/pkg/deployments/tasks/20220823-polygon-root-gauge-factory-v2/test/task.fork.ts +++ b/pkg/deployments/tasks/20220823-polygon-root-gauge-factory-v2/test/task.fork.ts @@ -48,7 +48,7 @@ describeForkTest('PolygonRootGaugeFactoryV2', 'mainnet', 15397200, function () { admin = await getSigner(0); recipient = await getSigner(1); - veBALHolder = await impersonate(VEBAL_HOLDER, fp(100)); + veBALHolder = await impersonate(VEBAL_HOLDER); }); before('setup contracts', async () => { @@ -95,7 +95,7 @@ describeForkTest('PolygonRootGaugeFactoryV2', 'mainnet', 15397200, function () { it('grant permissions', async () => { // We need to grant permission to the admin to add the Polygon factory to the GaugeAdder, and also to then add // gauges from said factory to the GaugeController. - const govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + const govMultisig = await impersonate(GOV_MULTISIG); await Promise.all( ['addGaugeFactory', 'addPolygonGauge'].map( diff --git a/pkg/deployments/tasks/20220916-batch-relayer-v4/test/test.fork.ts b/pkg/deployments/tasks/20220916-batch-relayer-v4/test/test.fork.ts index b9fd6b1c2e..85e776e847 100644 --- a/pkg/deployments/tasks/20220916-batch-relayer-v4/test/test.fork.ts +++ b/pkg/deployments/tasks/20220916-batch-relayer-v4/test/test.fork.ts @@ -2,7 +2,7 @@ import hre from 'hardhat'; import { expect } from 'chai'; import { BigNumber, Contract } from 'ethers'; -import { BigNumberish, fp } from '@balancer-labs/v2-helpers/src/numbers'; +import { BigNumberish } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { WeightedPoolEncoder } from '@balancer-labs/balancer-js'; @@ -53,7 +53,7 @@ describeForkTest('BatchRelayerLibrary', 'mainnet', 15485000, function () { before('load signers', async () => { // We impersonate an account that holds staked BPT for the ETH_STETH Pool. - sender = await impersonate(STAKED_ETH_STETH_HOLDER, fp(100)); + sender = await impersonate(STAKED_ETH_STETH_HOLDER); }); before('approve relayer at the authorizer', async () => { @@ -65,7 +65,7 @@ describeForkTest('BatchRelayerLibrary', 'mainnet', 15485000, function () { // We impersonate an account with the default admin role in order to be able to approve the relayer. This assumes // such an account exists. - const admin = await impersonate(await authorizer.getRoleMember(await authorizer.DEFAULT_ADMIN_ROLE(), 0), fp(100)); + const admin = await impersonate(await authorizer.getRoleMember(await authorizer.DEFAULT_ADMIN_ROLE(), 0)); // Grant relayer permission to call all relayer functions await authorizer.connect(admin).grantRoles(relayerActionIds, relayer.address); diff --git a/pkg/deployments/tasks/20221021-managed-pool/test/task.fork.ts b/pkg/deployments/tasks/20221021-managed-pool/test/task.fork.ts index 8d12f01788..985d92624d 100644 --- a/pkg/deployments/tasks/20221021-managed-pool/test/task.fork.ts +++ b/pkg/deployments/tasks/20221021-managed-pool/test/task.fork.ts @@ -11,15 +11,7 @@ import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-wit import { ManagedPoolParams } from '@balancer-labs/v2-helpers/src/models/pools/weighted/types'; import { ProtocolFee } from '@balancer-labs/v2-helpers/src/models/vault/types'; -import { - getSigner, - impersonate, - impersonateWhale, - getForkedNetwork, - Task, - TaskMode, - describeForkTest, -} from '../../../src'; +import { getSigner, impersonate, getForkedNetwork, Task, TaskMode, describeForkTest } from '../../../src'; describeForkTest('ManagedPoolFactory', 'mainnet', 15634000, function () { let owner: SignerWithAddress, whale: SignerWithAddress, govMultisig: SignerWithAddress; @@ -44,6 +36,7 @@ describeForkTest('ManagedPoolFactory', 'mainnet', 15634000, function () { const initialBalances = [initialBalanceUNI, initialBalanceAAVE, initialBalanceCOMP]; const GOV_MULTISIG = '0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'; + const LARGE_TOKEN_HOLDER = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503'; const NAME = 'Balancer Pool Token'; const SYMBOL = 'BPT'; @@ -60,9 +53,9 @@ describeForkTest('ManagedPoolFactory', 'mainnet', 15634000, function () { before('load signers', async () => { owner = await getSigner(); - whale = await impersonateWhale(fp(100)); + whale = await impersonate(LARGE_TOKEN_HOLDER); - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + govMultisig = await impersonate(GOV_MULTISIG); }); before('setup contracts', async () => { diff --git a/pkg/deployments/tasks/deprecated/20210624-stable-pool/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20210624-stable-pool/test/task.fork.ts index 91b1444103..0fad315730 100644 --- a/pkg/deployments/tasks/deprecated/20210624-stable-pool/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20210624-stable-pool/test/task.fork.ts @@ -8,13 +8,11 @@ import { bn, fp } from '@balancer-labs/v2-helpers/src/numbers'; import { calculateInvariant } from '@balancer-labs/v2-helpers/src/models/pools/stable/math'; import { expectEqualWithError } from '@balancer-labs/v2-helpers/src/test/relativeError'; -import { describeForkTest } from '../../../../src/forkTests'; -import Task, { TaskMode } from '../../../../src/task'; -import { getForkedNetwork } from '../../../../src/test'; -import { getSigner, impersonateWhale } from '../../../../src/signers'; import { MAX_UINT256 } from '@balancer-labs/v2-helpers/src/constants'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; +import { getSigner, impersonate, getForkedNetwork, Task, TaskMode, describeForkTest } from '../../../../src'; + describeForkTest('StablePoolFactory', 'mainnet', 14850000, function () { let owner: SignerWithAddress, whale: SignerWithAddress; let pool: Contract, factory: Contract, vault: Contract, usdc: Contract, dai: Contract; @@ -31,6 +29,8 @@ describeForkTest('StablePoolFactory', 'mainnet', 14850000, function () { const initialBalanceUSDC = fp(1e6).div(1e12); // 6 digits const initialBalances = [initialBalanceDAI, initialBalanceUSDC]; + const LARGE_TOKEN_HOLDER = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503'; + before('run task', async () => { task = new Task('20210624-stable-pool', TaskMode.TEST, getForkedNetwork(hre)); await task.run({ force: true }); @@ -39,7 +39,7 @@ describeForkTest('StablePoolFactory', 'mainnet', 14850000, function () { before('load signers', async () => { owner = await getSigner(); - whale = await impersonateWhale(fp(100)); + whale = await impersonate(LARGE_TOKEN_HOLDER); }); before('load vault and tokens', async () => { diff --git a/pkg/deployments/tasks/deprecated/20210721-liquidity-bootstrapping-pool/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20210721-liquidity-bootstrapping-pool/test/task.fork.ts index afe960fdcf..bb9c67ff35 100644 --- a/pkg/deployments/tasks/deprecated/20210721-liquidity-bootstrapping-pool/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20210721-liquidity-bootstrapping-pool/test/task.fork.ts @@ -11,7 +11,7 @@ import { calculateInvariant } from '@balancer-labs/v2-helpers/src/models/pools/w import { expectEqualWithError } from '@balancer-labs/v2-helpers/src/test/relativeError'; import { advanceToTimestamp, currentTimestamp, DAY, MINUTE, MONTH } from '@balancer-labs/v2-helpers/src/time'; -import { describeForkTest, getSigner, impersonateWhale, getForkedNetwork, Task, TaskMode } from '../../../../src'; +import { describeForkTest, getSigner, getForkedNetwork, Task, TaskMode, impersonate } from '../../../../src'; describeForkTest('LiquidityBootstrappingPoolFactory', 'mainnet', 14850000, function () { let owner: SignerWithAddress, whale: SignerWithAddress; @@ -35,6 +35,8 @@ describeForkTest('LiquidityBootstrappingPoolFactory', 'mainnet', 14850000, funct const initialBalanceUSDC = fp(1e6).div(1e12); // 6 digits const initialBalances = [initialBalanceDAI, initialBalanceUSDC]; + const LARGE_TOKEN_HOLDER = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503'; + before('run task', async () => { task = new Task('20210721-liquidity-bootstrapping-pool', TaskMode.TEST, getForkedNetwork(hre)); await task.run({ force: true }); @@ -43,7 +45,7 @@ describeForkTest('LiquidityBootstrappingPoolFactory', 'mainnet', 14850000, funct before('load signers', async () => { owner = await getSigner(); - whale = await impersonateWhale(fp(100)); + whale = await impersonate(LARGE_TOKEN_HOLDER); }); before('load vault and tokens', async () => { diff --git a/pkg/deployments/tasks/deprecated/20210727-meta-stable-pool/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20210727-meta-stable-pool/test/task.fork.ts index b85b39c24c..c0b5d6452f 100644 --- a/pkg/deployments/tasks/deprecated/20210727-meta-stable-pool/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20210727-meta-stable-pool/test/task.fork.ts @@ -10,7 +10,7 @@ import { expectEqualWithError } from '@balancer-labs/v2-helpers/src/test/relativ import { MAX_UINT256, ZERO_ADDRESS } from '@balancer-labs/v2-helpers/src/constants'; import { StablePoolEncoder, SwapKind } from '@balancer-labs/balancer-js'; -import { describeForkTest, getSigner, impersonateWhale, getForkedNetwork, Task, TaskMode } from '../../../../src'; +import { describeForkTest, getSigner, getForkedNetwork, Task, TaskMode, impersonate } from '../../../../src'; describeForkTest('MetaStablePoolFactory', 'mainnet', 14850000, function () { let owner: SignerWithAddress, whale: SignerWithAddress; @@ -31,6 +31,8 @@ describeForkTest('MetaStablePoolFactory', 'mainnet', 14850000, function () { const initialBalanceUSDC = fp(1e6).div(1e12); // 6 digits const initialBalances = [initialBalanceDAI, initialBalanceUSDC]; + const LARGE_TOKEN_HOLDER = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503'; + before('run task', async () => { task = new Task('20210727-meta-stable-pool', TaskMode.TEST, getForkedNetwork(hre)); await task.run({ force: true }); @@ -39,7 +41,7 @@ describeForkTest('MetaStablePoolFactory', 'mainnet', 14850000, function () { before('load signers', async () => { owner = await getSigner(); - whale = await impersonateWhale(fp(100)); + whale = await impersonate(LARGE_TOKEN_HOLDER); }); before('load vault and tokens', async () => { diff --git a/pkg/deployments/tasks/deprecated/20210811-ldo-merkle/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20210811-ldo-merkle/test/task.fork.ts index 7580092aa4..84be0d04a3 100644 --- a/pkg/deployments/tasks/deprecated/20210811-ldo-merkle/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20210811-ldo-merkle/test/task.fork.ts @@ -33,7 +33,7 @@ describeForkTest('MerkleRedeem', 'mainnet', 14850000, function () { before('load signers and transfer ownership', async () => { lp = await getSigner(2); other = await getSigner(3); - whale = await impersonate(LDO_WHALE_ADDRESS, fp(100)); + whale = await impersonate(LDO_WHALE_ADDRESS); token = await task.instanceAt('IERC20', LDO_TOKEN_ADDRESS); await distributor.transferOwnership(whale.address); diff --git a/pkg/deployments/tasks/deprecated/20210907-investment-pool/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20210907-investment-pool/test/task.fork.ts index d06ead7cc7..5d151f653a 100644 --- a/pkg/deployments/tasks/deprecated/20210907-investment-pool/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20210907-investment-pool/test/task.fork.ts @@ -11,7 +11,7 @@ import { calculateInvariant } from '@balancer-labs/v2-helpers/src/models/pools/w import { expectEqualWithError } from '@balancer-labs/v2-helpers/src/test/relativeError'; import { advanceToTimestamp, currentTimestamp, DAY, MINUTE, MONTH } from '@balancer-labs/v2-helpers/src/time'; -import { describeForkTest, getSigners, impersonateWhale, getForkedNetwork, Task, TaskMode } from '../../../../src'; +import { describeForkTest, getSigners, getForkedNetwork, Task, TaskMode, impersonate } from '../../../../src'; describeForkTest('InvestmentPoolFactory', 'mainnet', 14850000, function () { let owner: SignerWithAddress, wallet: SignerWithAddress, whale: SignerWithAddress; @@ -36,6 +36,8 @@ describeForkTest('InvestmentPoolFactory', 'mainnet', 14850000, function () { const initialBalanceUSDC = fp(1e6).div(1e12); // 6 digits const initialBalances = [initialBalanceDAI, initialBalanceUSDC]; + const LARGE_TOKEN_HOLDER = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503'; + before('run task', async () => { task = new Task('20210907-investment-pool', TaskMode.TEST, getForkedNetwork(hre)); await task.run({ force: true }); @@ -44,7 +46,7 @@ describeForkTest('InvestmentPoolFactory', 'mainnet', 14850000, function () { before('load signers', async () => { [owner, wallet] = await getSigners(); - whale = await impersonateWhale(fp(100)); + whale = await impersonate(LARGE_TOKEN_HOLDER); }); before('load vault and tokens', async () => { diff --git a/pkg/deployments/tasks/deprecated/20210913-bal-arbitrum-merkle/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20210913-bal-arbitrum-merkle/test/task.fork.ts index 9e63a2b2b1..26d1bf7b2d 100644 --- a/pkg/deployments/tasks/deprecated/20210913-bal-arbitrum-merkle/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20210913-bal-arbitrum-merkle/test/task.fork.ts @@ -33,7 +33,7 @@ describeForkTest('MerkleRedeem', 'arbitrum', 846769, function () { before('load signers and transfer ownership', async () => { lp = await getSigner(2); other = await getSigner(3); - whale = await impersonate(BAL_WHALE_ADDRESS, fp(100)); + whale = await impersonate(BAL_WHALE_ADDRESS); token = await task.instanceAt('IERC20', BAL_TOKEN_ADDRESS); await distributor.transferOwnership(whale.address); diff --git a/pkg/deployments/tasks/deprecated/20210928-mcb-arbitrum-merkle/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20210928-mcb-arbitrum-merkle/test/task.fork.ts index 46d8eeab6f..ec58e14f9e 100644 --- a/pkg/deployments/tasks/deprecated/20210928-mcb-arbitrum-merkle/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20210928-mcb-arbitrum-merkle/test/task.fork.ts @@ -33,7 +33,7 @@ describeForkTest('MerkleRedeem', 'arbitrum', 1731663, function () { before('load signers and transfer ownership', async () => { lp = await getSigner(2); other = await getSigner(3); - whale = await impersonate(REWARD_WHALE_ADDRESS, fp(100)); + whale = await impersonate(REWARD_WHALE_ADDRESS); token = await task.instanceAt('IERC20', REWARD_TOKEN_ADDRESS); await distributor.transferOwnership(whale.address); diff --git a/pkg/deployments/tasks/deprecated/20211203-batch-relayer/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20211203-batch-relayer/test/task.fork.ts index 0fba9567da..8cd4ff83f9 100644 --- a/pkg/deployments/tasks/deprecated/20211203-batch-relayer/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20211203-batch-relayer/test/task.fork.ts @@ -2,23 +2,14 @@ import hre from 'hardhat'; import { expect } from 'chai'; import { BigNumber, Contract } from 'ethers'; -import { BigNumberish, fp } from '@balancer-labs/v2-helpers/src/numbers'; +import { BigNumberish } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { RelayerAuthorization, SwapKind, WeightedPoolEncoder } from '@balancer-labs/balancer-js'; import { fromNow, MINUTE } from '@balancer-labs/v2-helpers/src/time'; import { MAX_UINT256 } from '@balancer-labs/v2-helpers/src/constants'; -import { - describeForkTest, - getSigner, - impersonate, - impersonateWhale, - getForkedNetwork, - setBalance, - Task, - TaskMode, -} from '../../../../src'; +import { describeForkTest, impersonate, getForkedNetwork, Task, TaskMode, getSigner } from '../../../../src'; describeForkTest('BatchRelayerLibrary', 'mainnet', 14850000, function () { let task: Task; @@ -30,6 +21,8 @@ describeForkTest('BatchRelayerLibrary', 'mainnet', 14850000, function () { const DAI = '0x6b175474e89094c44da98b954eedeac495271d0f'; const USDC = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'; + const LARGE_TOKEN_HOLDER = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503'; + const DAI_USDC_USDT_POOL = '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063'; const ETH_DAI_POOL = '0x0b09dea16768f0799065c475be02919503cb2a3500020000000000000000001a'; @@ -61,16 +54,15 @@ describeForkTest('BatchRelayerLibrary', 'mainnet', 14850000, function () { before('load signers', async () => { // We impersonate a whale that holds large token amounts, but can't use it directly as impersonation doesn't let us // sign messages. Therefore, we transfer its tokens to our sender. - const whale = await impersonateWhale(fp(100)); + const whale = await impersonate(LARGE_TOKEN_HOLDER); // The sender begins with just USDC and ETH sender = await getSigner(); await usdc.connect(whale).transfer(sender.address, await usdc.balanceOf(whale.address)); - await setBalance(sender.address, fp(100)); // We impersonate an account with the default admin role in order to be able to approve the relayer. This assumes // such an account exists. - admin = await impersonate(await authorizer.getRoleMember(await authorizer.DEFAULT_ADMIN_ROLE(), 0), fp(100)); + admin = await impersonate(await authorizer.getRoleMember(await authorizer.DEFAULT_ADMIN_ROLE(), 0)); }); before('approve tokens by sender', async () => { diff --git a/pkg/deployments/tasks/deprecated/20220413-arbitrum-root-gauge-factory/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20220413-arbitrum-root-gauge-factory/test/task.fork.ts index fb8662c7f0..eefa763986 100644 --- a/pkg/deployments/tasks/deprecated/20220413-arbitrum-root-gauge-factory/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20220413-arbitrum-root-gauge-factory/test/task.fork.ts @@ -2,7 +2,7 @@ import hre, { ethers } from 'hardhat'; import { expect } from 'chai'; import { Contract } from 'ethers'; -import { BigNumber, fp, FP_ONE } from '@balancer-labs/v2-helpers/src/numbers'; +import { BigNumber, FP_ONE } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import { advanceTime, currentWeekTimestamp, DAY, WEEK } from '@balancer-labs/v2-helpers/src/time'; import * as expectEvent from '@balancer-labs/v2-helpers/src/test/expectEvent'; @@ -45,7 +45,7 @@ describeForkTest('ArbitrumRootGaugeFactory', 'mainnet', 14600000, function () { admin = await getSigner(0); recipient = await getSigner(1); - veBALHolder = await impersonate(VEBAL_HOLDER, fp(100)); + veBALHolder = await impersonate(VEBAL_HOLDER); }); before('setup contracts', async () => { @@ -95,7 +95,7 @@ describeForkTest('ArbitrumRootGaugeFactory', 'mainnet', 14600000, function () { it('grant permissions', async () => { // We need to grant permission to the admin to add the Arbitrum factory to the GaugeAdder, and also to then add // gauges from said factory to the GaugeController. - const govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + const govMultisig = await impersonate(GOV_MULTISIG); const selectors = ['addGaugeFactory', 'addArbitrumGauge'].map((method) => gaugeAdder.interface.getSighash(method)); await Promise.all( diff --git a/pkg/deployments/tasks/deprecated/20220413-polygon-root-gauge-factory/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20220413-polygon-root-gauge-factory/test/task.fork.ts index 8e6b5ec069..c1a6517ef7 100644 --- a/pkg/deployments/tasks/deprecated/20220413-polygon-root-gauge-factory/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20220413-polygon-root-gauge-factory/test/task.fork.ts @@ -3,7 +3,7 @@ import { expect } from 'chai'; import { Contract } from 'ethers'; import { range } from 'lodash'; -import { BigNumber, fp, FP_ONE } from '@balancer-labs/v2-helpers/src/numbers'; +import { BigNumber, FP_ONE } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import { advanceTime, currentWeekTimestamp, DAY, WEEK } from '@balancer-labs/v2-helpers/src/time'; import * as expectEvent from '@balancer-labs/v2-helpers/src/test/expectEvent'; @@ -45,7 +45,7 @@ describeForkTest('PolygonRootGaugeFactory', 'mainnet', 14600000, function () { admin = await getSigner(0); recipient = await getSigner(1); - veBALHolder = await impersonate(VEBAL_HOLDER, fp(100)); + veBALHolder = await impersonate(VEBAL_HOLDER); }); before('setup contracts', async () => { @@ -95,7 +95,7 @@ describeForkTest('PolygonRootGaugeFactory', 'mainnet', 14600000, function () { it('grant permissions', async () => { // We need to grant permission to the admin to add the Polygon factory to the GaugeAdder, and also to then add // gauges from said factory to the GaugeController. - const govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + const govMultisig = await impersonate(GOV_MULTISIG); const selectors = ['addGaugeFactory', 'addPolygonGauge'].map((method) => gaugeAdder.interface.getSighash(method)); await Promise.all( diff --git a/pkg/deployments/tasks/deprecated/20220420-fee-distributor/test/test.fork.ts b/pkg/deployments/tasks/deprecated/20220420-fee-distributor/test/test.fork.ts index f7306d5e49..02071a10be 100644 --- a/pkg/deployments/tasks/deprecated/20220420-fee-distributor/test/test.fork.ts +++ b/pkg/deployments/tasks/deprecated/20220420-fee-distributor/test/test.fork.ts @@ -37,9 +37,9 @@ describeForkTest('FeeDistributor', 'mainnet', 14623150, function () { }); before('setup accounts', async () => { - veBALHolder = await impersonate(VEBAL_HOLDER, fp(100)); - veBALHolder2 = await impersonate(VEBAL_HOLDER_2, fp(100)); - feeCollector = await impersonate(PROTOCOL_FEE_COLLECTOR, fp(100)); + veBALHolder = await impersonate(VEBAL_HOLDER); + veBALHolder2 = await impersonate(VEBAL_HOLDER_2); + feeCollector = await impersonate(PROTOCOL_FEE_COLLECTOR); }); before('setup contracts', async () => { diff --git a/pkg/deployments/tasks/deprecated/20220628-optimism-root-gauge-factory/test/task.fork.ts b/pkg/deployments/tasks/deprecated/20220628-optimism-root-gauge-factory/test/task.fork.ts index 248b1eb960..1fdeeb18b6 100644 --- a/pkg/deployments/tasks/deprecated/20220628-optimism-root-gauge-factory/test/task.fork.ts +++ b/pkg/deployments/tasks/deprecated/20220628-optimism-root-gauge-factory/test/task.fork.ts @@ -3,7 +3,7 @@ import { expect } from 'chai'; import { Contract } from 'ethers'; import { range } from 'lodash'; -import { BigNumber, fp, FP_ONE } from '@balancer-labs/v2-helpers/src/numbers'; +import { BigNumber, FP_ONE } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import { advanceTime, currentWeekTimestamp, DAY, WEEK } from '@balancer-labs/v2-helpers/src/time'; import * as expectEvent from '@balancer-labs/v2-helpers/src/test/expectEvent'; @@ -51,7 +51,7 @@ describeForkTest('OptimismRootGaugeFactory', 'mainnet', 14850000, function () { admin = await getSigner(0); recipient = await getSigner(1); - veBALHolder = await impersonate(VEBAL_HOLDER, fp(100)); + veBALHolder = await impersonate(VEBAL_HOLDER); }); before('setup contracts', async () => { @@ -92,7 +92,7 @@ describeForkTest('OptimismRootGaugeFactory', 'mainnet', 14850000, function () { it('grant permissions', async () => { // We need to grant permission to the admin to add the Optimism factory to the GaugeAdder, and also to then add // gauges from said factory to the GaugeController. - const govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + const govMultisig = await impersonate(GOV_MULTISIG); const selectors = ['addGaugeFactory', 'addArbitrumGauge'].map((method) => gaugeAdder.interface.getSighash(method)); await Promise.all( diff --git a/pkg/deployments/tasks/deprecated/20220720-batch-relayer-v3/test/test.fork.ts b/pkg/deployments/tasks/deprecated/20220720-batch-relayer-v3/test/test.fork.ts index 34e702132d..a0eb99a428 100644 --- a/pkg/deployments/tasks/deprecated/20220720-batch-relayer-v3/test/test.fork.ts +++ b/pkg/deployments/tasks/deprecated/20220720-batch-relayer-v3/test/test.fork.ts @@ -2,7 +2,7 @@ import hre from 'hardhat'; import { expect } from 'chai'; import { BigNumber, Contract } from 'ethers'; -import { BigNumberish, fp } from '@balancer-labs/v2-helpers/src/numbers'; +import { BigNumberish } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { WeightedPoolEncoder } from '@balancer-labs/balancer-js'; @@ -52,7 +52,7 @@ describeForkTest('BatchRelayerLibrary', 'mainnet', 15150000, function () { before('load signers', async () => { // We impersonate an account that holds staked BPT for the ETH_STETH Pool. - sender = await impersonate(STAKED_ETH_STETH_HOLDER, fp(100)); + sender = await impersonate(STAKED_ETH_STETH_HOLDER); }); before('approve relayer at the authorizer', async () => { @@ -64,7 +64,7 @@ describeForkTest('BatchRelayerLibrary', 'mainnet', 15150000, function () { // We impersonate an account with the default admin role in order to be able to approve the relayer. This assumes // such an account exists. - const admin = await impersonate(await authorizer.getRoleMember(await authorizer.DEFAULT_ADMIN_ROLE(), 0), fp(100)); + const admin = await impersonate(await authorizer.getRoleMember(await authorizer.DEFAULT_ADMIN_ROLE(), 0)); // Grant relayer permission to call all relayer functions await authorizer.connect(admin).grantRoles(relayerActionIds, relayer.address); diff --git a/pkg/deployments/tasks/deprecated/20220817-aave-rebalanced-linear-pool/test/test.fork.ts b/pkg/deployments/tasks/deprecated/20220817-aave-rebalanced-linear-pool/test/test.fork.ts index f5b1db1eca..9ba80633c5 100644 --- a/pkg/deployments/tasks/deprecated/20220817-aave-rebalanced-linear-pool/test/test.fork.ts +++ b/pkg/deployments/tasks/deprecated/20220817-aave-rebalanced-linear-pool/test/test.fork.ts @@ -44,7 +44,7 @@ describeForkTest('AaveLinearPoolFactory', 'mainnet', 15225000, function () { before('load signers', async () => { [, owner, other] = await getSigners(); - holder = await impersonate(USDC_HOLDER, fp(100)); + holder = await impersonate(USDC_HOLDER); }); before('setup contracts', async () => { diff --git a/pkg/deployments/tasks/scripts/20220325-veBAL-deployment-coordinator/test/task.fork.ts b/pkg/deployments/tasks/scripts/20220325-veBAL-deployment-coordinator/test/task.fork.ts index 167e4a1d99..e84b5c6543 100644 --- a/pkg/deployments/tasks/scripts/20220325-veBAL-deployment-coordinator/test/task.fork.ts +++ b/pkg/deployments/tasks/scripts/20220325-veBAL-deployment-coordinator/test/task.fork.ts @@ -2,7 +2,6 @@ import hre from 'hardhat'; import { expect } from 'chai'; import { Contract } from 'ethers'; -import { fp } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import { advanceToTimestamp, DAY } from '@balancer-labs/v2-helpers/src/time'; @@ -28,8 +27,8 @@ describeForkTest('veBALDeploymentCoordinator', 'mainnet', 14458084, function () }); before('grant permissions', async () => { - balMultisig = await impersonate(BAL_MULTISIG, fp(100)); - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + balMultisig = await impersonate(BAL_MULTISIG); + govMultisig = await impersonate(GOV_MULTISIG); const vaultTask = new Task('20210418-vault', TaskMode.READ_ONLY, getForkedNetwork(hre)); authorizer = await vaultTask.instanceAt('Authorizer', await coordinator.getAuthorizer()); diff --git a/pkg/deployments/tasks/scripts/20220415-veBAL-L2-gauge-setup-coordinator/test/task.fork.ts b/pkg/deployments/tasks/scripts/20220415-veBAL-L2-gauge-setup-coordinator/test/task.fork.ts index 8eb30d6293..dcaecd50cb 100644 --- a/pkg/deployments/tasks/scripts/20220415-veBAL-L2-gauge-setup-coordinator/test/task.fork.ts +++ b/pkg/deployments/tasks/scripts/20220415-veBAL-L2-gauge-setup-coordinator/test/task.fork.ts @@ -2,7 +2,6 @@ import hre, { ethers } from 'hardhat'; import { expect } from 'chai'; import { Contract } from 'ethers'; -import { fp } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import * as expectEvent from '@balancer-labs/v2-helpers/src/test/expectEvent'; @@ -79,8 +78,8 @@ describeForkTest('veBALL2GaugeSetupCoordinator', 'mainnet', 14616219, function ( }); before('grant permissions', async () => { - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); - checkpointMultisig = await impersonate(await coordinator.GAUGE_CHECKPOINTER_MULTISIG(), fp(100)); + govMultisig = await impersonate(GOV_MULTISIG); + checkpointMultisig = await impersonate(await coordinator.GAUGE_CHECKPOINTER_MULTISIG()); const vaultTask = new Task('20210418-vault', TaskMode.READ_ONLY, getForkedNetwork(hre)); authorizer = await vaultTask.instanceAt('Authorizer', await coordinator.getAuthorizer()); diff --git a/pkg/deployments/tasks/scripts/20220418-veBAL-gauge-fix-coordinator/test/task.fork.ts b/pkg/deployments/tasks/scripts/20220418-veBAL-gauge-fix-coordinator/test/task.fork.ts index 74b5d4aed8..1952445ddc 100644 --- a/pkg/deployments/tasks/scripts/20220418-veBAL-gauge-fix-coordinator/test/task.fork.ts +++ b/pkg/deployments/tasks/scripts/20220418-veBAL-gauge-fix-coordinator/test/task.fork.ts @@ -2,7 +2,7 @@ import hre from 'hardhat'; import { expect } from 'chai'; import { Contract, ContractReceipt } from 'ethers'; -import { bn, fp } from '@balancer-labs/v2-helpers/src/numbers'; +import { bn } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import { expectTransferEvent } from '@balancer-labs/v2-helpers/src/test/expectTransfer'; @@ -51,7 +51,7 @@ describeForkTest('veBALGaugeFixCoordinator', 'mainnet', 14850000, function () { }); before('grant permissions', async () => { - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + govMultisig = await impersonate(GOV_MULTISIG); const vaultTask = new Task('20210418-vault', TaskMode.READ_ONLY, getForkedNetwork(hre)); authorizer = await vaultTask.instanceAt('Authorizer', await coordinator.getAuthorizer()); diff --git a/pkg/deployments/tasks/scripts/20220421-smart-wallet-checker-coordinator/test/task.fork.ts b/pkg/deployments/tasks/scripts/20220421-smart-wallet-checker-coordinator/test/task.fork.ts index 08815ecdaf..e95c781592 100644 --- a/pkg/deployments/tasks/scripts/20220421-smart-wallet-checker-coordinator/test/task.fork.ts +++ b/pkg/deployments/tasks/scripts/20220421-smart-wallet-checker-coordinator/test/task.fork.ts @@ -2,7 +2,6 @@ import hre from 'hardhat'; import { expect } from 'chai'; import { Contract } from 'ethers'; -import { fp } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import * as expectEvent from '@balancer-labs/v2-helpers/src/test/expectEvent'; @@ -46,7 +45,7 @@ describeForkTest('SmartWalletCheckerCoordinator', 'mainnet', 14850000, function }); before('grant permissions', async () => { - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + govMultisig = await impersonate(GOV_MULTISIG); other = await getSigner(1); const vaultTask = new Task('20210418-vault', TaskMode.READ_ONLY, getForkedNetwork(hre)); diff --git a/pkg/deployments/tasks/scripts/20220606-tribe-bal-minter-coordinator/test/task.fork.ts b/pkg/deployments/tasks/scripts/20220606-tribe-bal-minter-coordinator/test/task.fork.ts index 821c493a84..d46165c08c 100644 --- a/pkg/deployments/tasks/scripts/20220606-tribe-bal-minter-coordinator/test/task.fork.ts +++ b/pkg/deployments/tasks/scripts/20220606-tribe-bal-minter-coordinator/test/task.fork.ts @@ -2,7 +2,6 @@ import hre from 'hardhat'; import { expect } from 'chai'; import { Contract } from 'ethers'; -import { fp } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import { describeForkTest } from '../../../../src/forkTests'; @@ -47,7 +46,7 @@ describeForkTest('TribeBALMinterCoordinator', 'mainnet', 14850000, function () { }); before('grant permissions', async () => { - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + govMultisig = await impersonate(GOV_MULTISIG); const balancerTokenAdminTask = new Task('20220325-balancer-token-admin', TaskMode.READ_ONLY, getForkedNetwork(hre)); const balancerTokenAdmin = await balancerTokenAdminTask.deployedInstance('BalancerTokenAdmin'); diff --git a/pkg/deployments/tasks/scripts/20220610-snx-recovery-coordinator/test/task.fork.ts b/pkg/deployments/tasks/scripts/20220610-snx-recovery-coordinator/test/task.fork.ts index 96cfd58b32..3de72d75c9 100644 --- a/pkg/deployments/tasks/scripts/20220610-snx-recovery-coordinator/test/task.fork.ts +++ b/pkg/deployments/tasks/scripts/20220610-snx-recovery-coordinator/test/task.fork.ts @@ -3,7 +3,6 @@ import { expect } from 'chai'; import { Contract } from 'ethers'; import { defaultAbiCoder } from '@ethersproject/abi'; -import { fp } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import { describeForkTest } from '../../../../src/forkTests'; @@ -60,7 +59,7 @@ describeForkTest('SNXRecoveryCoordinator', 'mainnet', 14945041, function () { }); before('grant permissions', async () => { - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + govMultisig = await impersonate(GOV_MULTISIG); const protocolFeeWithdrawerTask = new Task( '20220517-protocol-fee-withdrawer', @@ -84,7 +83,7 @@ describeForkTest('SNXRecoveryCoordinator', 'mainnet', 14945041, function () { const poolContract = await testBALTokenTask.instanceAt('TestBalancerToken', BTC_STABLE_POOL_ADDRESS); const EXACT_BPT_IN_FOR_TOKENS_OUT = 1; - const whale = await impersonate(BTC_STABLE_POOL_WHALE, fp(100)); + const whale = await impersonate(BTC_STABLE_POOL_WHALE); await expect( vault.connect(whale).exitPool(BTC_STABLE_POOL_ID, BTC_STABLE_POOL_WHALE, BTC_STABLE_POOL_WHALE, { assets: [wBTC, renBTC, sBTC], @@ -103,7 +102,7 @@ describeForkTest('SNXRecoveryCoordinator', 'mainnet', 14945041, function () { const testBALTokenTask = new Task('20220325-test-balancer-token', TaskMode.READ_ONLY, getForkedNetwork(hre)); const poolContract = await testBALTokenTask.instanceAt('TestBalancerToken', SNX_WEIGHTED_POOL_ADDRESS); - const whale = await impersonate(SNX_WEIGHTED_POOL_WHALE, fp(100)); + const whale = await impersonate(SNX_WEIGHTED_POOL_WHALE); await expect( vault.connect(whale).exitPool(SNX_WEIGHTED_POOL_ID, SNX_WEIGHTED_POOL_WHALE, SNX_WEIGHTED_POOL_WHALE, { assets: [SNX, WETH], @@ -151,7 +150,7 @@ describeForkTest('SNXRecoveryCoordinator', 'mainnet', 14945041, function () { const poolContract = await testBALTokenTask.instanceAt('TestBalancerToken', BTC_STABLE_POOL_ADDRESS); const EXACT_BPT_IN_FOR_TOKENS_OUT = 1; - const whale = await impersonate(BTC_STABLE_POOL_WHALE, fp(100)); + const whale = await impersonate(BTC_STABLE_POOL_WHALE); await vault.connect(whale).exitPool(BTC_STABLE_POOL_ID, BTC_STABLE_POOL_WHALE, BTC_STABLE_POOL_WHALE, { assets: [wBTC, renBTC, sBTC], minAmountsOut: [0, 0, 0], @@ -168,7 +167,7 @@ describeForkTest('SNXRecoveryCoordinator', 'mainnet', 14945041, function () { const testBALTokenTask = new Task('20220325-test-balancer-token', TaskMode.READ_ONLY, getForkedNetwork(hre)); const poolContract = await testBALTokenTask.instanceAt('TestBalancerToken', SNX_WEIGHTED_POOL_ADDRESS); - const whale = await impersonate(SNX_WEIGHTED_POOL_WHALE, fp(100)); + const whale = await impersonate(SNX_WEIGHTED_POOL_WHALE); await vault.connect(whale).exitPool(SNX_WEIGHTED_POOL_ID, SNX_WEIGHTED_POOL_WHALE, SNX_WEIGHTED_POOL_WHALE, { assets: [SNX, WETH], minAmountsOut: [0, 0], diff --git a/pkg/deployments/tasks/scripts/20220721-gauge-adder-migration-coordinator/test/task.fork.ts b/pkg/deployments/tasks/scripts/20220721-gauge-adder-migration-coordinator/test/task.fork.ts index 0b6d5dc365..0ddbb1176c 100644 --- a/pkg/deployments/tasks/scripts/20220721-gauge-adder-migration-coordinator/test/task.fork.ts +++ b/pkg/deployments/tasks/scripts/20220721-gauge-adder-migration-coordinator/test/task.fork.ts @@ -2,7 +2,6 @@ import hre from 'hardhat'; import { expect } from 'chai'; import { Contract } from 'ethers'; -import { fp } from '@balancer-labs/v2-helpers/src/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; import { describeForkTest } from '../../../../src/forkTests'; @@ -66,7 +65,7 @@ describeForkTest('GaugeAdderMigrationCoordinator', 'mainnet', 15150000, function }); before('grant permissions', async () => { - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + govMultisig = await impersonate(GOV_MULTISIG); await authorizer.connect(govMultisig).grantRole(await authorizer.DEFAULT_ADMIN_ROLE(), coordinator.address); }); diff --git a/pkg/pool-utils/package.json b/pkg/pool-utils/package.json index 7a0bf59a46..8998978162 100644 --- a/pkg/pool-utils/package.json +++ b/pkg/pool-utils/package.json @@ -34,6 +34,7 @@ "@balancer-labs/v2-interfaces": "workspace:*", "@balancer-labs/v2-solidity-utils": "workspace:*", "@balancer-labs/v2-vault": "workspace:*", + "@nomicfoundation/hardhat-network-helpers": "^1.0.6", "@nomiclabs/hardhat-ethers": "^2.2.1", "@nomiclabs/hardhat-waffle": "^2.0.3", "@types/chai": "^4.3.3", diff --git a/pkg/pool-utils/test/NewBasePool.test.ts b/pkg/pool-utils/test/NewBasePool.test.ts index 90a7c9a320..5c0440bcf0 100644 --- a/pkg/pool-utils/test/NewBasePool.test.ts +++ b/pkg/pool-utils/test/NewBasePool.test.ts @@ -23,11 +23,11 @@ import { BigNumberish, bn, fp } from '@balancer-labs/v2-helpers/src/numbers'; import { ANY_ADDRESS, DELEGATE_OWNER, MAX_UINT256, ZERO_ADDRESS } from '@balancer-labs/v2-helpers/src/constants'; import { Account } from '@balancer-labs/v2-helpers/src/models/types/types'; import TypesConverter from '@balancer-labs/v2-helpers/src/models/types/TypesConverter'; -import { impersonate } from '@balancer-labs/v2-deployments/src/signers'; import { random } from 'lodash'; import { defaultAbiCoder } from 'ethers/lib/utils'; import { sharedBeforeEach } from '@balancer-labs/v2-common/sharedBeforeEach'; import Vault from '@balancer-labs/v2-helpers/src/models/vault/Vault'; +import { impersonateAccount, setBalance } from '@nomicfoundation/hardhat-network-helpers'; describe('NewBasePool', function () { let admin: SignerWithAddress, @@ -51,7 +51,12 @@ describe('NewBasePool', function () { sharedBeforeEach(async () => { ({ instance: vault, authorizer } = await Vault.create({ admin })); - vaultSigner = await impersonate(vault.address, fp(100)); + // We want to call Pools manually from the Vault address for some tests, so we impersonate the Vault and send it + // some ETH in order to be able to have it send transactions. + await impersonateAccount(vault.address); + await setBalance(vault.address, fp(100)); + vaultSigner = await SignerWithAddress.create(ethers.provider.getSigner(vault.address)); + tokens = await TokenList.create(['DAI', 'MKR', 'SNX'], { sorted: true }); }); diff --git a/pvt/common/network.ts b/pvt/common/network.ts deleted file mode 100644 index 4677e7769c..0000000000 --- a/pvt/common/network.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { EthereumProvider } from 'hardhat/types'; - -export async function takeSnapshot(provider: EthereumProvider): Promise { - return (await provider.request({ - method: 'evm_snapshot', - })) as string; -} - -export async function revert(provider: EthereumProvider, snapshotId: string): Promise { - await provider.request({ - method: 'evm_revert', - params: [snapshotId], - }); -} - -export async function getProvider(): Promise { - const hre = await import('hardhat'); - return hre.network.provider; -} diff --git a/pvt/common/package.json b/pvt/common/package.json index 8097403014..5471fa38d0 100644 --- a/pvt/common/package.json +++ b/pvt/common/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@balancer-labs/v2-helpers": "workspace:*", + "@nomicfoundation/hardhat-network-helpers": "^1.0.6", "typescript": "^4.0.2" }, "devDependencies": { diff --git a/pvt/common/sharedBeforeEach.ts b/pvt/common/sharedBeforeEach.ts index d33aad2665..c476ac5e3e 100644 --- a/pvt/common/sharedBeforeEach.ts +++ b/pvt/common/sharedBeforeEach.ts @@ -1,8 +1,7 @@ import { AsyncFunc } from 'mocha'; +import { takeSnapshot, SnapshotRestorer } from '@nomicfoundation/hardhat-network-helpers'; -import { takeSnapshot, revert, getProvider } from './network'; - -const SNAPSHOTS: string[] = []; +const SNAPSHOTS: Array = []; /** * This Mocha helper acts as a `beforeEach`, but executes the initializer @@ -21,23 +20,22 @@ export function sharedBeforeEach(nameOrFn: string | AsyncFunc, maybeFn?: AsyncFu let initialized = false; beforeEach(wrapWithTitle(name, 'Running shared before each or reverting'), async function () { - const provider = await getProvider(); if (!initialized) { const prevSnapshot = SNAPSHOTS.pop(); if (prevSnapshot !== undefined) { - await revert(provider, prevSnapshot); - SNAPSHOTS.push(await takeSnapshot(provider)); + await prevSnapshot.restore(); + SNAPSHOTS.push(await takeSnapshot()); } await fn.call(this); - SNAPSHOTS.push(await takeSnapshot(provider)); + SNAPSHOTS.push(await takeSnapshot()); initialized = true; } else { - const snapshotId = SNAPSHOTS.pop(); - if (snapshotId === undefined) throw Error('Missing snapshot ID'); - await revert(provider, snapshotId); - SNAPSHOTS.push(await takeSnapshot(provider)); + const shapshot = SNAPSHOTS.pop(); + if (shapshot === undefined) throw Error('Missing sharedBeforeEach snapshot'); + await shapshot.restore(); + SNAPSHOTS.push(await takeSnapshot()); } }); diff --git a/pvt/helpers/package.json b/pvt/helpers/package.json index 2c749c7f48..272da726a7 100644 --- a/pvt/helpers/package.json +++ b/pvt/helpers/package.json @@ -9,6 +9,7 @@ "lint:typescript": "eslint . --ext .ts --ignore-path ../../.eslintignore --max-warnings 0" }, "dependencies": { + "@nomicfoundation/hardhat-network-helpers": "^1.0.6", "@nomiclabs/hardhat-ethers": "^2.2.1", "@types/lodash": "^4.14.186", "@types/node": "^14.14.31", diff --git a/pvt/helpers/src/time.ts b/pvt/helpers/src/time.ts index e9ff0bdb1c..ddb1f50f10 100644 --- a/pvt/helpers/src/time.ts +++ b/pvt/helpers/src/time.ts @@ -1,11 +1,12 @@ import { BigNumber, ContractReceipt } from 'ethers'; -import { ethers, network } from 'hardhat'; +import { ethers } from 'hardhat'; import { BigNumberish, bn } from './numbers'; +import { time } from '@nomicfoundation/hardhat-network-helpers'; + export const currentTimestamp = async (): Promise => { - const { timestamp } = await network.provider.send('eth_getBlockByNumber', ['latest', true]); - return bn(timestamp); + return bn(await time.latest()); }; export const currentWeekTimestamp = async (): Promise => { @@ -18,20 +19,18 @@ export const fromNow = async (seconds: number): Promise => { }; export const advanceTime = async (seconds: BigNumberish): Promise => { - await ethers.provider.send('evm_increaseTime', [parseInt(seconds.toString())]); - await ethers.provider.send('evm_mine', []); + await time.increase(seconds); }; export const advanceToTimestamp = async (timestamp: BigNumberish): Promise => { - await setNextBlockTimestamp(timestamp); - await ethers.provider.send('evm_mine', []); + await time.increaseTo(timestamp); }; export const setNextBlockTimestamp = async (timestamp: BigNumberish): Promise => { - await ethers.provider.send('evm_setNextBlockTimestamp', [parseInt(timestamp.toString())]); + await time.setNextBlockTimestamp(timestamp); }; -export const lastBlockNumber = async (): Promise => Number(await network.provider.send('eth_blockNumber')); +export const lastBlockNumber = async (): Promise => await time.latestBlock(); export const receiptTimestamp = async (receipt: ContractReceipt | Promise): Promise => { const blockHash = (await receipt).blockHash; diff --git a/yarn.lock b/yarn.lock index 4380c51200..94c63b7429 100644 --- a/yarn.lock +++ b/yarn.lock @@ -146,6 +146,7 @@ __metadata: resolution: "@balancer-labs/v2-common@workspace:pvt/common" dependencies: "@balancer-labs/v2-helpers": "workspace:*" + "@nomicfoundation/hardhat-network-helpers": ^1.0.6 "@typescript-eslint/eslint-plugin": ^5.41.0 "@typescript-eslint/parser": ^5.41.0 eslint: ^8.26.0 @@ -161,6 +162,7 @@ __metadata: dependencies: "@balancer-labs/balancer-js": "workspace:*" "@balancer-labs/v2-helpers": "workspace:*" + "@nomicfoundation/hardhat-network-helpers": ^1.0.6 "@nomiclabs/hardhat-ethers": ^2.2.1 "@nomiclabs/hardhat-etherscan": ^3.1.2 "@solidity-parser/parser": ^0.14.5 @@ -267,6 +269,7 @@ __metadata: version: 0.0.0-use.local resolution: "@balancer-labs/v2-helpers@workspace:pvt/helpers" dependencies: + "@nomicfoundation/hardhat-network-helpers": ^1.0.6 "@nomiclabs/hardhat-ethers": ^2.2.1 "@types/lodash": ^4.14.186 "@types/node": ^14.14.31 @@ -457,6 +460,7 @@ __metadata: "@balancer-labs/v2-interfaces": "workspace:*" "@balancer-labs/v2-solidity-utils": "workspace:*" "@balancer-labs/v2-vault": "workspace:*" + "@nomicfoundation/hardhat-network-helpers": ^1.0.6 "@nomiclabs/hardhat-ethers": ^2.2.1 "@nomiclabs/hardhat-waffle": ^2.0.3 "@types/chai": ^4.3.3 @@ -2139,6 +2143,17 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/hardhat-network-helpers@npm:^1.0.6": + version: 1.0.6 + resolution: "@nomicfoundation/hardhat-network-helpers@npm:1.0.6" + dependencies: + ethereumjs-util: ^7.1.4 + peerDependencies: + hardhat: ^2.9.5 + checksum: e237b65fbcbe9deb97080c389ca3a778fe004b41d9e9e4c31d92557ccc10b3da19a10316b25ee6acc63729ba48aee46494cce76b3abfd6d957cfed8380191059 + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.0": version: 0.1.0 resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.0" @@ -6665,7 +6680,7 @@ __metadata: languageName: node linkType: hard -"ethereumjs-util@npm:^7.1.5": +"ethereumjs-util@npm:^7.1.4, ethereumjs-util@npm:^7.1.5": version: 7.1.5 resolution: "ethereumjs-util@npm:7.1.5" dependencies: