Skip to content
This repository was archived by the owner on Oct 21, 2025. It is now read-only.

Commit d1e68c4

Browse files
committed
scripts: Update deployment scripts to be compatible with @aave/[email protected]
1 parent b8f98a3 commit d1e68c4

File tree

5 files changed

+95
-51
lines changed

5 files changed

+95
-51
lines changed

hardhat.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ const config: HardhatUserConfig = {
8181
'@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol',
8282
'@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol',
8383
'@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol',
84+
'@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol',
8485
],
8586
keep: false,
8687
},

helpers/contracts-deployments.ts

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { FlashLoanLogic } from './../types/FlashLoanLogic.d';
12
import { DRE } from './misc-utils';
23
import { eContractid, tEthereumAddress, TokenContractId, tStringTokenSmallUnits } from './types';
34
import { getFirstSigner } from './wallet-helpers';
@@ -57,8 +58,8 @@ export const deployMintableERC20 = async (
5758
verify
5859
);
5960

60-
export const deployGenericATokenImpl = async () =>
61-
withSave(await new AToken__factory(await getFirstSigner()).deploy(), eContractid.AToken);
61+
export const deployGenericATokenImpl = async (pool: tEthereumAddress) =>
62+
withSave(await new AToken__factory(await getFirstSigner()).deploy(pool), eContractid.AToken);
6263

6364
export const deployPoolAddressesProvider = async (marketId: string, verify?: boolean) =>
6465
withSaveAndVerify(
@@ -166,12 +167,32 @@ export const deployEModeLogic = async () => {
166167
return withSave(eModeLogic, eContractid.EModeLogic);
167168
};
168169

170+
export const deployFlashLoanLogic = async (borrowLogicAddress: tEthereumAddress) => {
171+
const flashLoanLogicArtifact = await readArtifact(eContractid.FlashLoanLogic);
172+
173+
const linkedFlashLoanLogicByteCode = linkBytecode(flashLoanLogicArtifact, {
174+
[eContractid.BorrowLogic]: borrowLogicAddress,
175+
});
176+
177+
const flashLoanLogicFactory = await DRE.ethers.getContractFactory(
178+
flashLoanLogicArtifact.abi,
179+
linkedFlashLoanLogicByteCode
180+
);
181+
182+
const flashLoanLogic = await (
183+
await flashLoanLogicFactory.connect(await getFirstSigner()).deploy()
184+
).deployed();
185+
186+
return withSave(flashLoanLogic, eContractid.FlashLoanLogic);
187+
};
188+
169189
export const deployAaveLibraries = async (): Promise<PoolLibraryAddresses> => {
170190
const supplyLogic = await deploySupplyLogic();
171191
const borrowLogic = await deployBorrowLogic();
172192
const liquidationLogic = await deployLiquidationLogic();
173193
const bridgeLogic = await deployBridgeLogic();
174194
const eModeLogic = await deployEModeLogic();
195+
const flashLoanLogic = await deployFlashLoanLogic(borrowLogic.address);
175196
// Hardcoded solidity placeholders, if any library changes path this will fail.
176197
// The '__$PLACEHOLDER$__ can be calculated via solidity keccak, but the PoolLibraryAddresses Type seems to
177198
// require a hardcoded string.
@@ -190,6 +211,8 @@ export const deployAaveLibraries = async (): Promise<PoolLibraryAddresses> => {
190211
['contracts/protocol/libraries/logic/EModeLogic.sol:EModeLogic']: eModeLogic.address,
191212
['contracts/protocol/libraries/logic/BorrowLogic.sol:BorrowLogic']: borrowLogic.address,
192213
['contracts/protocol/libraries/logic/BridgeLogic.sol:BridgeLogic']: bridgeLogic.address,
214+
['contracts/protocol/libraries/logic/FlashLoanLogic.sol:FlashLoanLogic']:
215+
flashLoanLogic.address,
193216
};
194217
};
195218

@@ -246,7 +269,14 @@ export const deployMockAggregator = async (price: tStringTokenSmallUnits, verify
246269
);
247270

248271
export const deployAaveOracle = async (
249-
args: [tEthereumAddress[], tEthereumAddress[], tEthereumAddress, tEthereumAddress, string],
272+
args: [
273+
tEthereumAddress,
274+
tEthereumAddress[],
275+
tEthereumAddress[],
276+
tEthereumAddress,
277+
tEthereumAddress,
278+
string
279+
],
250280
verify?: boolean
251281
) =>
252282
withSaveAndVerify(
@@ -296,7 +326,7 @@ export const deployWalletBalancerProvider = async (verify?: boolean) =>
296326

297327
export const deployDefaultReserveInterestRateStrategy = async (
298328
args: [tEthereumAddress, string, string, string, string, string, string, string, string, string],
299-
verify: boolean
329+
verify?: boolean
300330
) =>
301331
withSaveAndVerify(
302332
await new DefaultReserveInterestRateStrategy__factory(await getFirstSigner()).deploy(...args),
@@ -311,28 +341,28 @@ export const deployReservesSetupHelper = async () =>
311341
eContractid.ReservesSetupHelper
312342
);
313343

314-
export const deployDelegationAwareATokenImpl = async (verify?: boolean) =>
344+
export const deployDelegationAwareATokenImpl = async (pool: tEthereumAddress, verify?: boolean) =>
315345
withSaveAndVerify(
316-
await new DelegationAwareAToken__factory(await getFirstSigner()).deploy(),
346+
await new DelegationAwareAToken__factory(await getFirstSigner()).deploy(pool),
317347
eContractid.DelegationAwareAToken,
318-
[],
348+
[pool],
319349
verify
320350
);
321351

322-
export const deployGenericStableDebtToken = async () =>
352+
export const deployGenericStableDebtToken = async (pool: tEthereumAddress, verify?: boolean) =>
323353
withSaveAndVerify(
324-
await new StableDebtToken__factory(await getFirstSigner()).deploy(),
354+
await new StableDebtToken__factory(await getFirstSigner()).deploy(pool),
325355
eContractid.StableDebtToken,
326-
[],
327-
false
356+
[pool],
357+
verify
328358
);
329359

330-
export const deployGenericVariableDebtToken = async () =>
360+
export const deployGenericVariableDebtToken = async (pool: tEthereumAddress, verify?: boolean) =>
331361
withSaveAndVerify(
332-
await new VariableDebtToken__factory(await getFirstSigner()).deploy(),
362+
await new VariableDebtToken__factory(await getFirstSigner()).deploy(pool),
333363
eContractid.VariableDebtToken,
334-
[],
335-
false
364+
[pool],
365+
verify
336366
);
337367

338368
export const deployAllMockTokens = async () => {

helpers/init-helpers.ts

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { eContractid, iMultiPoolsAssets, IReserveParams, tEthereumAddress } from
22
import { chunk, waitForTx } from './misc-utils';
33
import {
44
getACLManager,
5+
getPool,
56
getPoolAddressesProvider,
67
getPoolConfiguratorProxy,
78
getReservesSetupHelper,
@@ -18,7 +19,7 @@ import {
1819
import { WETHGateway__factory } from '../types';
1920
import { getFirstSigner } from './wallet-helpers';
2021

21-
import { AaveProtocolDataProvider } from '@aave/core-v3/types';
22+
import { AaveProtocolDataProvider } from '../types';
2223

2324
export const initReservesByHelper = async (
2425
reservesParams: iMultiPoolsAssets<IReserveParams>,
@@ -34,9 +35,10 @@ export const initReservesByHelper = async (
3435
let gasUsage = BigNumber.from('0');
3536

3637
const addressProvider = await getPoolAddressesProvider();
38+
const pool = await getPool();
3739

3840
// CHUNK CONFIGURATION
39-
const initChunks = 4;
41+
const initChunks = 5;
4042

4143
// Initialize variables for future reserves initialization
4244
let reserveTokens: string[] = [];
@@ -95,10 +97,13 @@ export const initReservesByHelper = async (
9597
// rawInsertContractAddressInDb(`variableDebtTokenImpl`, variableDebtTokenImplementationAddress);
9698
// });
9799
//gasUsage = gasUsage.add(tx1.gasUsed);
98-
stableDebtTokenImplementationAddress = await (await deployGenericStableDebtToken()).address;
99-
variableDebtTokenImplementationAddress = await (await deployGenericVariableDebtToken()).address;
100+
stableDebtTokenImplementationAddress = await (await deployGenericStableDebtToken(pool.address))
101+
.address;
102+
variableDebtTokenImplementationAddress = await (
103+
await deployGenericVariableDebtToken(pool.address)
104+
).address;
100105

101-
const aTokenImplementation = await deployGenericATokenImpl();
106+
const aTokenImplementation = await deployGenericATokenImpl(pool.address);
102107
aTokenImplementationAddress = aTokenImplementation.address;
103108
rawInsertContractAddressInDb(`aTokenImpl`, aTokenImplementationAddress);
104109

@@ -107,7 +112,7 @@ export const initReservesByHelper = async (
107112
) as [string, IReserveParams][];
108113

109114
if (delegatedAwareReserves.length > 0) {
110-
const delegationAwareATokenImplementation = await deployDelegationAwareATokenImpl();
115+
const delegationAwareATokenImplementation = await deployDelegationAwareATokenImpl(pool.address);
111116
delegationAwareATokenImplementationAddress = delegationAwareATokenImplementation.address;
112117
rawInsertContractAddressInDb(
113118
`delegationAwareATokenImpl`,
@@ -220,7 +225,6 @@ export const initReservesByHelper = async (
220225

221226
return gasUsage; // Deprecated
222227
};
223-
224228
export const configureReservesByHelper = async (
225229
reservesParams: iMultiPoolsAssets<IReserveParams>,
226230
tokenAddresses: { [symbol: string]: tEthereumAddress },
@@ -323,10 +327,5 @@ export const configureReservesByHelper = async (
323327
}
324328
};
325329

326-
export const authorizeWETHGateway = async (
327-
wethGateWay: tEthereumAddress,
328-
pool: tEthereumAddress
329-
) =>
330-
await new WETHGateway__factory(await getFirstSigner())
331-
.attach(wethGateWay)
332-
.authorizePool(pool);
330+
export const authorizeWETHGateway = async (wethGateWay: tEthereumAddress, pool: tEthereumAddress) =>
331+
await new WETHGateway__factory(await getFirstSigner()).attach(wethGateWay).authorizePool(pool);

helpers/types.ts

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ export enum eContractid {
8989
ACLManager = 'ACLManager',
9090
ReservesSetupHelper = 'ReservesSetupHelper',
9191
MockIncentivesController = 'MockIncentivesController',
92+
FlashLoanLogic = 'FlashLoanLogic',
9293
}
9394

9495
export type tEthereumAddress = string;
@@ -329,27 +330,25 @@ export interface ICommonConfiguration {
329330
ProviderId: number;
330331
ProtocolGlobalParams: IProtocolGlobalConfig;
331332
Mocks: IMocksConfig;
332-
ProviderRegistry: iParamsPerNetwork<tEthereumAddress | undefined>;
333-
ProviderRegistryOwner: iParamsPerNetwork<tEthereumAddress | undefined>;
334-
PoolConfigurator: iParamsPerNetwork<tEthereumAddress>;
335-
Pool: iParamsPerNetwork<tEthereumAddress>;
336-
RateOracleRatesCommon: iMultiPoolsAssets<IMarketRates>;
337-
RateOracle: iParamsPerNetwork<tEthereumAddress>;
338-
TokenDistributor: iParamsPerNetwork<tEthereumAddress>;
339-
AaveOracle: iParamsPerNetwork<tEthereumAddress>;
340-
FallbackOracle: iParamsPerNetwork<tEthereumAddress>;
341-
ChainlinkAggregator: iParamsPerNetwork<ITokenAddress>;
342-
PoolAdmin: iParamsPerNetwork<tEthereumAddress | undefined>;
333+
ProviderRegistry: tEthereumAddress | undefined;
334+
ProviderRegistryOwner: tEthereumAddress | undefined;
335+
PoolConfigurator: tEthereumAddress | undefined;
336+
Pool: tEthereumAddress | undefined;
337+
TokenDistributor: tEthereumAddress | undefined;
338+
AaveOracle: tEthereumAddress | undefined;
339+
FallbackOracle: tEthereumAddress | undefined;
340+
ChainlinkAggregator: tEthereumAddress | undefined;
341+
PoolAdmin: tEthereumAddress | undefined;
343342
PoolAdminIndex: number;
344-
EmergencyAdmin: iParamsPerNetwork<tEthereumAddress | undefined>;
343+
EmergencyAdmin: tEthereumAddress | undefined;
345344
EmergencyAdminIndex: number;
346-
ReserveAssets: iParamsPerNetwork<SymbolMap<tEthereumAddress>>;
345+
ReserveAssets: SymbolMap<tEthereumAddress> | SymbolMap<undefined>;
347346
ReservesConfig: iMultiPoolsAssets<IReserveParams>;
348-
ATokenDomainSeparator: iParamsPerNetwork<string>;
349-
WETH: iParamsPerNetwork<tEthereumAddress>;
350-
WrappedNativeToken: iParamsPerNetwork<tEthereumAddress>;
351-
ReserveFactorTreasuryAddress: iParamsPerNetwork<tEthereumAddress>;
352-
IncentivesController: iParamsPerNetwork<tEthereumAddress>;
347+
ATokenDomainSeparator: string;
348+
WETH: tEthereumAddress | undefined;
349+
WrappedNativeToken: tEthereumAddress | undefined;
350+
ReserveFactorTreasuryAddress: tEthereumAddress;
351+
IncentivesController: tEthereumAddress | undefined;
353352
}
354353

355354
export interface IAaveConfiguration extends ICommonConfiguration {

test/__setup.spec.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { ZERO_ADDRESS } from './../helpers/constants';
12
import rawHRE from 'hardhat';
23
import { ethers, Signer } from 'ethers';
34
import { waitForTx } from '../helpers/misc-utils';
@@ -61,6 +62,8 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
6162

6263
await waitForTx(await aclManager.addPoolAdmin(aaveAdmin));
6364

65+
await waitForTx(await aclManager.addAssetListingAdmin(aaveAdmin));
66+
6467
//setting users[1] as emergency admin, which is in position 2 in the DRE addresses list
6568
const addressList = await getEthersSignersAddresses();
6669

@@ -165,6 +168,7 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
165168
const [tokens, aggregators] = getPairsTokenAggregator(allTokenAddresses, allAggregatorsAddresses);
166169

167170
await deployAaveOracle([
171+
addressesProvider.address,
168172
tokens,
169173
aggregators,
170174
fallbackOracle.address,
@@ -180,11 +184,17 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
180184

181185
const reservesParams = AaveConfig.ReservesConfig;
182186

183-
const testHelpers = await deployAaveProtocolDataProvider(addressesProvider.address);
187+
const protocolDataProvider = await deployAaveProtocolDataProvider(addressesProvider.address);
188+
console.log(5);
184189

185-
await insertContractAddressInDb(eContractid.AaveProtocolDataProvider, testHelpers.address);
190+
await insertContractAddressInDb(
191+
eContractid.AaveProtocolDataProvider,
192+
protocolDataProvider.address
193+
);
186194
const admin = await deployer.getAddress();
187195

196+
await addressesProvider.setPoolDataProvider(protocolDataProvider.address);
197+
188198
console.log('Initialize configuration');
189199

190200
const config = AaveConfig;
@@ -208,11 +218,16 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
208218
VariableDebtTokenNamePrefix,
209219
SymbolPrefix,
210220
admin,
211-
treasuryAddress,
221+
ZERO_ADDRESS,
212222
mockIncentivesController.address // ZERO_ADDRESS
213223
);
214224

215-
await configureReservesByHelper(reservesParams, allReservesAddresses, testHelpers, admin);
225+
await configureReservesByHelper(
226+
reservesParams,
227+
allReservesAddresses,
228+
protocolDataProvider,
229+
admin
230+
);
216231

217232
await deployMockFlashLoanReceiver(addressesProvider.address);
218233

0 commit comments

Comments
 (0)