aave-protocol-v2/tasks/deployments/deploy-CurveTreasury.ts
2021-07-14 14:58:34 +02:00

54 lines
2.0 KiB
TypeScript

import { task } from 'hardhat/config';
import { CRV_TOKEN, CURVE_CONFIG } from '../../helpers/external/curve/constants';
import { ZERO_ADDRESS } from '../../helpers/constants';
import {
deployCurveTreasury,
deployInitializableAdminUpgradeabilityProxy,
} from '../../helpers/contracts-deployments';
import { waitForTx } from '../../helpers/misc-utils';
import { registerContractInJsonDb } from '../../helpers/contracts-helpers';
import { eContractid } from '../../helpers/types';
task(`deploy-curve-treasury`, `Deploys the CurveTreasury contract`)
.addParam('proxyAdmin')
.addParam('treasuryAdmin')
.addOptionalParam('collector')
.addFlag('verify', `Verify contract via Etherscan API.`)
.setAction(async ({ verify, proxyAdmin, treasuryAdmin, collector }, localBRE) => {
await localBRE.run('set-DRE');
const net = process.env.FORK ? process.env.FORK : localBRE.network.name;
console.log(`\n- Curve Treasury deployment`);
const aaveCollector = collector || ZERO_ADDRESS;
// Deploy implementation
const implementation = await deployCurveTreasury(
CURVE_CONFIG.votingEscrow[net],
CRV_TOKEN[net],
CURVE_CONFIG.curveFeeDistributor[net],
CURVE_CONFIG.gaugeController[net],
aaveCollector,
verify
);
// Freeze implementatation
await waitForTx(await implementation.initialize(ZERO_ADDRESS));
// Deploy proxy
const proxy = await deployInitializableAdminUpgradeabilityProxy(verify);
const encoded = implementation.interface.encodeFunctionData('initialize', [treasuryAdmin]);
await waitForTx(
await proxy['initialize(address,address,bytes)'](implementation.address, proxyAdmin, encoded)
);
await registerContractInJsonDb(eContractid.CurveTreasury, proxy);
await registerContractInJsonDb(`${eContractid.CurveTreasury}Impl`, implementation);
console.log(`\tFinished CurveTreasury deployment`);
console.log(`\tProxy:`, proxy.address);
console.log(`\tImpl:`, implementation.address);
return { implementation: implementation.address, proxy: proxy.address };
});