diff --git a/test/integration/aaveGovernanceV2Module.spec.ts b/test/integration/aaveGovernanceV2Module.spec.ts index 531b5c8cd..7ae8eaff9 100644 --- a/test/integration/aaveGovernanceV2Module.spec.ts +++ b/test/integration/aaveGovernanceV2Module.spec.ts @@ -15,10 +15,10 @@ import { getAccounts, getWaffleExpect, getSystemFixture, - getAaveFixture, increaseTimeAsync, + getAaveV2Fixture, } from "@utils/test/index"; -import { AaveFixture, SystemFixture } from "@utils/fixtures"; +import { AaveV2Fixture, SystemFixture } from "@utils/fixtures"; const expect = getWaffleExpect(); @@ -27,7 +27,7 @@ describe("AaveGovernanceV2Module", () => { let deployer: DeployHelper; let setup: SystemFixture; - let aaveSetup: AaveFixture; + let aaveSetup: AaveV2Fixture; let governanceModule: GovernanceModule; let aaveGovernanceV2Adapter: AaveGovernanceV2Adapter; @@ -45,8 +45,8 @@ describe("AaveGovernanceV2Module", () => { await setup.initialize(); // Aave setup - aaveSetup = getAaveFixture(owner.address); - await aaveSetup.initialize(); + aaveSetup = getAaveV2Fixture(owner.address); + await aaveSetup.initialize(setup.weth.address, setup.dai.address); // GovernanceModule setup governanceModule = await deployer.modules.deployGovernanceModule(setup.controller.address); diff --git a/test/protocol/integration/governance/aaveGovernanceV2Adapter.spec.ts b/test/protocol/integration/governance/aaveGovernanceV2Adapter.spec.ts index 4dc76ee5e..eff5fbc17 100644 --- a/test/protocol/integration/governance/aaveGovernanceV2Adapter.spec.ts +++ b/test/protocol/integration/governance/aaveGovernanceV2Adapter.spec.ts @@ -10,10 +10,11 @@ import { addSnapshotBeforeRestoreAfterEach, getAccounts, getWaffleExpect, - getAaveFixture, - getRandomAddress + getAaveV2Fixture, + getRandomAddress, + getSystemFixture } from "@utils/test/index"; -import { AaveFixture } from "@utils/fixtures"; +import { AaveV2Fixture, SystemFixture } from "@utils/fixtures"; const expect = getWaffleExpect(); @@ -23,7 +24,8 @@ describe("AaveGovernanceAdapter", () => { let deployer: DeployHelper; let aaveGovernanceV2Adapter: AaveGovernanceV2Adapter; let mockSetToken: Account; - let aaveSetup: AaveFixture; + let setV2Setup: SystemFixture; + let aaveSetup: AaveV2Fixture; before(async () => { [ @@ -33,8 +35,11 @@ describe("AaveGovernanceAdapter", () => { deployer = new DeployHelper(owner.wallet); - aaveSetup = getAaveFixture(owner.address); - await aaveSetup.initialize(); + setV2Setup = getSystemFixture(owner.address); + await setV2Setup.initialize(); + + aaveSetup = getAaveV2Fixture(owner.address); + await aaveSetup.initialize(setV2Setup.weth.address, setV2Setup.dai.address); aaveGovernanceV2Adapter = await deployer.adapters.deployAaveGovernanceV2Adapter( aaveSetup.aaveGovernanceV2.address, diff --git a/utils/contracts/aave.ts b/utils/contracts/aave.ts index 91a3b9665..af41fd95d 100644 --- a/utils/contracts/aave.ts +++ b/utils/contracts/aave.ts @@ -1,6 +1,7 @@ // External Aave Contracts export { AavePropositionPower } from "../../typechain/AavePropositionPower"; export { AaveProtoGovernance } from "../../typechain/AaveProtoGovernance"; +export { AaveTokenV2Mintable } from "../../typechain/AaveTokenV2Mintable"; export { AssetVotingWeightProvider } from "../../typechain/AssetVotingWeightProvider"; export { AToken } from "../../typechain/AToken"; export { DefaultReserveInterestRateStrategy } from "../../typechain/DefaultReserveInterestRateStrategy"; @@ -12,10 +13,4 @@ export { CoreLibrary } from "../../typechain/CoreLibrary"; export { LendingPoolConfigurator } from "../../typechain/LendingPoolConfigurator"; export { LendingRateOracle } from "../../typechain/LendingRateOracle"; export { LendingPoolDataProvider } from "../../typechain/LendingPoolDataProvider"; -export { LendToAaveMigrator } from "../../typechain/LendToAaveMigrator"; - -// Governance V2 -export { AaveGovernanceV2 } from "../../typechain/AaveGovernanceV2"; -export { AaveTokenV2Mintable } from "../../typechain/AaveTokenV2Mintable"; -export { GovernanceStrategy } from "../../typechain/GovernanceStrategy"; -export { Executor } from "../../typechain/Executor"; \ No newline at end of file +export { LendToAaveMigrator } from "../../typechain/LendToAaveMigrator"; \ No newline at end of file diff --git a/utils/contracts/aaveV2.ts b/utils/contracts/aaveV2.ts index b1445265d..49ba032ba 100644 --- a/utils/contracts/aaveV2.ts +++ b/utils/contracts/aaveV2.ts @@ -12,6 +12,12 @@ export { AaveV2StableDebtToken } from "../../typechain/AaveV2StableDebtToken"; export { AaveV2StakedTokenIncentivesController } from "../../typechain/AaveV2StakedTokenIncentivesController"; export { AaveV2VariableDebtToken } from "../../typechain/AaveV2VariableDebtToken"; +// Governance V2 +export { AaveGovernanceV2 } from "../../typechain/AaveGovernanceV2"; +export { AaveTokenV2Mintable } from "../../typechain/AaveTokenV2Mintable"; +export { GovernanceStrategy } from "../../typechain/GovernanceStrategy"; +export { Executor } from "../../typechain/Executor"; + // Libraries export { GenericLogic } from "../../typechain/GenericLogic"; export { ReserveLogic } from "../../typechain/ReserveLogic"; diff --git a/utils/deploys/deployExternal.ts b/utils/deploys/deployExternal.ts index bf91b95e7..3b4d198d7 100644 --- a/utils/deploys/deployExternal.ts +++ b/utils/deploys/deployExternal.ts @@ -39,15 +39,12 @@ import { WhitePaperInterestRateModel__factory } from "../../typechain/factories/ import { LendingPoolAddressesProvider__factory } from "../../typechain/factories/LendingPoolAddressesProvider__factory"; import { - AaveGovernanceV2, AavePropositionPower, AaveProtoGovernance, AaveTokenV2Mintable, AssetVotingWeightProvider, CoreLibrary, DefaultReserveInterestRateStrategy, - Executor, - GovernanceStrategy, GovernanceParamsProvider, LendingPool, LendingPoolAddressesProvider, @@ -57,10 +54,7 @@ import { LendToAaveMigrator } from "../contracts/aave"; -import { AaveGovernanceV2__factory } from "../../typechain/factories/AaveGovernanceV2__factory"; import { AaveTokenV2Mintable__factory } from "../../typechain/factories/AaveTokenV2Mintable__factory"; -import { Executor__factory } from "../../typechain/factories/Executor__factory"; -import { GovernanceStrategy__factory } from "../../typechain/factories/GovernanceStrategy__factory"; import { AavePropositionPower__factory } from "../../typechain/factories/AavePropositionPower__factory"; import { AaveProtoGovernance__factory } from "../../typechain/factories/AaveProtoGovernance__factory"; import { AssetVotingWeightProvider__factory } from "../../typechain/factories/AssetVotingWeightProvider__factory"; @@ -168,9 +162,7 @@ import { Quoter__factory } from "../../typechain/factories/Quoter__factory"; import { NFTDescriptor__factory } from "../../typechain/factories/NFTDescriptor__factory"; import { - GenericLogic, - ValidationLogic, - ReserveLogic, + AaveGovernanceV2, AaveV2AToken, AaveV2StakedTokenIncentivesController, AaveV2StableDebtToken, @@ -183,7 +175,12 @@ import { AaveV2DefaultReserveInterestRateStrategy, AaveV2LendingRateOracle, AaveV2Oracle, - AaveV2PriceOracle + AaveV2PriceOracle, + Executor, + GovernanceStrategy, + GenericLogic, + ReserveLogic, + ValidationLogic } from "../contracts/aaveV2"; import { AaveV2LendingPool__factory } from "../../typechain/factories/AaveV2LendingPool__factory"; import { AaveV2LendingPoolAddressesProvider__factory } from "../../typechain/factories/AaveV2LendingPoolAddressesProvider__factory"; @@ -201,6 +198,9 @@ import { ReserveLogic__factory } from "../../typechain/factories/ReserveLogic__f import { AaveV2LendingRateOracle__factory } from "../../typechain/factories/AaveV2LendingRateOracle__factory"; import { AaveV2Oracle__factory } from "../../typechain/factories/AaveV2Oracle__factory"; import { AaveV2PriceOracle__factory } from "../../typechain/factories/AaveV2PriceOracle__factory"; +import { AaveGovernanceV2__factory } from "../../typechain/factories/AaveGovernanceV2__factory"; +import { Executor__factory } from "../../typechain/factories/Executor__factory"; +import { GovernanceStrategy__factory } from "../../typechain/factories/GovernanceStrategy__factory"; export default class DeployExternalContracts { private _deployerSigner: Signer; diff --git a/utils/fixtures/aaveFixture.ts b/utils/fixtures/aaveFixture.ts index 8d30328ec..bbad2bb98 100644 --- a/utils/fixtures/aaveFixture.ts +++ b/utils/fixtures/aaveFixture.ts @@ -19,17 +19,13 @@ import { LendingRateOracle, LendingPoolDataProvider, LendToAaveMigrator, - AaveGovernanceV2, - Executor, - GovernanceStrategy } from "../contracts/aave"; import { StandardTokenMock } from "../contracts"; -import { ether, getRandomAddress } from "../common"; +import { ether } from "../common"; import { AToken__factory } from "../../typechain/factories/AToken__factory"; -import { MAX_UINT_256 } from "../constants"; import { AaveTokenV2Mintable } from "../../typechain/AaveTokenV2Mintable"; export class AaveFixture { @@ -47,16 +43,12 @@ export class AaveFixture { public lendToAaveMigrator: LendToAaveMigrator; public lendToken: StandardTokenMock; public aaveToken: AaveTokenV2Mintable; - public stkAaveToken: AaveTokenV2Mintable; public aaveExchangeRatio: BigNumber; public ethTokenAddress: Address = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; public aaveProtoGovernance: AaveProtoGovernance; public aavePropositionPower: AavePropositionPower; public assetVotingWeightPower: AssetVotingWeightProvider; public governanceParamsProvider: GovernanceParamsProvider; - public aaveGovernanceV2: AaveGovernanceV2; - public executor: Executor; - public governanceStrategy: GovernanceStrategy; constructor(provider: Web3Provider | JsonRpcProvider, ownerAddress: Address) { this._ownerSigner = provider.getSigner(ownerAddress); @@ -133,30 +125,6 @@ export class AaveFixture { await this.aaveToken.transfer(this.lendToAaveMigrator.address, ether(100)); await this.lendToAaveMigrator.initialize(); - - // Deploy governance V2 - this.executor = await this._deployer.external.deployExecutor( - await this._ownerSigner.getAddress(), - BigNumber.from(0), - BigNumber.from(0), - BigNumber.from(0), - MAX_UINT_256, - BigNumber.from(50), - BigNumber.from(100), - BigNumber.from(50), - ether(100) - ); - this.stkAaveToken = await this._deployer.external.deployAaveTokenV2Mintable(); - this.stkAaveToken.mint(await this._ownerSigner.getAddress(), ether(100000)); - this.governanceStrategy = await this._deployer.external.deployGovernanceStrategy(this.aaveToken.address, this.stkAaveToken.address); - this.aaveGovernanceV2 = await this._deployer.external.deployAaveGovernanceV2( - this.governanceStrategy.address, - BigNumber.from(0), - await this._ownerSigner.getAddress(), - [this.executor.address] - ); - this.aaveToken.connect(this._ownerSigner).transfer(await getRandomAddress(), 100); - this.stkAaveToken.connect(this._ownerSigner).transfer(await getRandomAddress(), 100); } public async deployAToken(_underlyingAsset: Address, _decimals: BigNumberish = 18): Promise { diff --git a/utils/fixtures/aaveV2Fixture.ts b/utils/fixtures/aaveV2Fixture.ts index e0cdf0ec6..b9717c51a 100644 --- a/utils/fixtures/aaveV2Fixture.ts +++ b/utils/fixtures/aaveV2Fixture.ts @@ -5,6 +5,8 @@ import { Address } from "../types"; import { BigNumber, BigNumberish } from "@ethersproject/bignumber"; import { + AaveGovernanceV2, + AaveTokenV2Mintable, AaveV2Oracle, AaveV2PriceOracle, AaveV2LendingPool, @@ -16,18 +18,15 @@ import { AaveV2LendingRateOracle, AaveV2AToken, AaveV2StableDebtToken, - AaveV2VariableDebtToken + AaveV2VariableDebtToken, + Executor, + GovernanceStrategy } from "../contracts/aaveV2"; -// import { -// Executor, -// AaveGovernanceV2, -// AaveTokenV2Mintable -// } from "../contracts/aave"; import { ether, getRandomAddress } from "../common"; -import { ADDRESS_ZERO } from "../constants"; +import { ADDRESS_ZERO, MAX_UINT_256 } from "../constants"; export interface ReserveTokens { aToken: AaveV2AToken; @@ -57,16 +56,12 @@ export class AaveV2Fixture { public treasuryAddress: Address; public incentivesControllerAddress: Address; - // TODO: move governance to this fixture - // public executor: Executor; - // public aaveGovernanceV2: AaveGovernanceV2; - // public aaveToken: AaveTokenV2Mintable; - // public stkAaveToken: AaveTokenV2Mintable; - // public governanceStrategy: GovernanceStrategy; - // public aaveProtoGovernance: AaveProtoGovernance; - // public aavePropositionPower: AavePropositionPower; - // public assetVotingWeightPower: AssetVotingWeightProvider; - // public governanceParamsProvider: GovernanceParamsProvider; + public aaveToken: AaveTokenV2Mintable; + public stkAaveToken: AaveTokenV2Mintable; + + public aaveGovernanceV2: AaveGovernanceV2; + public executor: Executor; + public governanceStrategy: GovernanceStrategy; constructor(provider: Web3Provider | JsonRpcProvider, ownerAddress: Address) { this._ownerSigner = provider.getSigner(ownerAddress); @@ -155,6 +150,9 @@ export class AaveV2Fixture { true, // enable borrowing on reserve true // enable stable debts ); + + // Initialize governance + await this.initializeGovernance(); } public async createAndEnableReserve( @@ -232,10 +230,9 @@ export class AaveV2Fixture { public async setMarketBorrowRate(asset: Address, rate: BigNumberish): Promise { this.lendingRateOracle.setMarketBorrowRate(asset, rate); } - /* + private async initializeGovernance(): Promise { - TODO: Move governance to this fixture. // Deploy Executor this.executor = await this._deployer.external.deployExecutor( await this._ownerSigner.getAddress(), @@ -249,11 +246,13 @@ export class AaveV2Fixture { ether(100) ); + // Deploy Aave and stkAave this.aaveToken = await this._deployer.external.deployAaveTokenV2Mintable(); await this.aaveToken.mint(await this._ownerSigner.getAddress(), ether(100000)); this.stkAaveToken = await this._deployer.external.deployAaveTokenV2Mintable(); await this.stkAaveToken.mint(await this._ownerSigner.getAddress(), ether(100000)); + // Deploy core gov contracts this.governanceStrategy = await this._deployer.external.deployGovernanceStrategy(this.aaveToken.address, this.stkAaveToken.address); this.aaveGovernanceV2 = await this._deployer.external.deployAaveGovernanceV2( this.governanceStrategy.address, @@ -262,15 +261,17 @@ export class AaveV2Fixture { [this.executor.address] ); + // send some aave and stkAave to random addresses to initialize the vote snapshots this.aaveToken.connect(this._ownerSigner).transfer(await getRandomAddress(), 100); this.stkAaveToken.connect(this._ownerSigner).transfer(await getRandomAddress(), 100); + + // Deploy inventive controller await this._deployer.external.deployAaveV2StakedTokenIncentivesController( this.stkAaveToken.address, this.executor.address - ) + ); this.incentivesControllerAddress = (await this._deployer.external.deployAaveV2StakedTokenIncentivesController( this.stkAaveToken.address, this.executor.address )).address; } - */ }