mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
Initial implementation of Tenderly plugin
This commit is contained in:
parent
23c5d9af29
commit
d1c6943cd3
|
@ -129,6 +129,29 @@ export const AaveConfig: IAaveConfiguration = {
|
|||
YFI: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e',
|
||||
ZRX: '0xe41d2489571d322189246dafa5ebde1f4699f498',
|
||||
},
|
||||
[EthereumNetwork.tenderlyMain]: {
|
||||
AAVE: '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9',
|
||||
BAT: '0x0d8775f648430679a709e98d2b0cb6250d2887ef',
|
||||
BUSD: '0x4Fabb145d64652a948d72533023f6E7A623C7C53',
|
||||
DAI: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
||||
ENJ: '0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c',
|
||||
KNC: '0xdd974d5c2e2928dea5f71b9825b8b646686bd200',
|
||||
LINK: '0x514910771af9ca656af840dff83e8264ecf986ca',
|
||||
MANA: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942',
|
||||
MKR: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2',
|
||||
REN: '0x408e41876cCCDC0F92210600ef50372656052a38',
|
||||
REP: '0x1985365e9f78359a9B6AD760e32412f4a445E862',
|
||||
SNX: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F',
|
||||
SUSD: '0x57ab1ec28d129707052df4df418d58a2d46d5f51',
|
||||
TUSD: '0x0000000000085d4780B73119b644AE5ecd22b376',
|
||||
UNI: '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984',
|
||||
USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
|
||||
USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7',
|
||||
WBTC: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',
|
||||
WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
||||
YFI: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e',
|
||||
ZRX: '0xe41d2489571d322189246dafa5ebde1f4699f498',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -141,6 +141,7 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[eEthereumNetwork.kovan]: undefined,
|
||||
[eEthereumNetwork.ropsten]: undefined,
|
||||
[eEthereumNetwork.main]: undefined,
|
||||
[eEthereumNetwork.tenderlyMain]: undefined,
|
||||
},
|
||||
PoolAdminIndex: 0,
|
||||
EmergencyAdmin: {
|
||||
|
@ -150,6 +151,7 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[eEthereumNetwork.kovan]: undefined,
|
||||
[eEthereumNetwork.ropsten]: undefined,
|
||||
[eEthereumNetwork.main]: undefined,
|
||||
[eEthereumNetwork.tenderlyMain]: undefined,
|
||||
},
|
||||
EmergencyAdminIndex: 1,
|
||||
ProviderRegistry: {
|
||||
|
@ -159,6 +161,7 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[eEthereumNetwork.coverage]: '',
|
||||
[eEthereumNetwork.hardhat]: '',
|
||||
[eEthereumNetwork.buidlerevm]: '',
|
||||
[eEthereumNetwork.tenderlyMain]: '',
|
||||
},
|
||||
LendingRateOracle: {
|
||||
[eEthereumNetwork.coverage]: '',
|
||||
|
@ -166,7 +169,8 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[eEthereumNetwork.buidlerevm]: '',
|
||||
[eEthereumNetwork.kovan]: '0xdCde9Bb6a49e37fA433990832AB541AE2d4FEB4a',
|
||||
[eEthereumNetwork.ropsten]: '0x05dcca805a6562c1bdd0423768754acb6993241b',
|
||||
[eEthereumNetwork.main]: '0x4d728a4496e4de35f218d5a214366bde3a62b51c',
|
||||
[eEthereumNetwork.main]: '',
|
||||
[eEthereumNetwork.tenderlyMain]: '',
|
||||
},
|
||||
TokenDistributor: {
|
||||
[eEthereumNetwork.coverage]: '',
|
||||
|
@ -175,6 +179,7 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[EthereumNetwork.kovan]: '0x971efe90088f21dc6a36f610ffed77fc19710708',
|
||||
[EthereumNetwork.ropsten]: '0xeba2ea67942b8250d870b12750b594696d02fc9c',
|
||||
[EthereumNetwork.main]: '0xe3d9988f676457123c5fd01297605efdd0cba1ae',
|
||||
[EthereumNetwork.tenderlyMain]: '0xe3d9988f676457123c5fd01297605efdd0cba1ae',
|
||||
},
|
||||
ChainlinkProxyPriceProvider: {
|
||||
[eEthereumNetwork.coverage]: '',
|
||||
|
@ -182,7 +187,8 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[eEthereumNetwork.buidlerevm]: '',
|
||||
[EthereumNetwork.kovan]: '0x276C4793F2EE3D5Bf18C5b879529dD4270BA4814',
|
||||
[EthereumNetwork.ropsten]: '0x657372A559c30d236F011239fF9fbB6D76718271',
|
||||
[EthereumNetwork.main]: '0x76B47460d7F7c5222cFb6b6A75615ab10895DDe4',
|
||||
[EthereumNetwork.main]: '',
|
||||
[EthereumNetwork.tenderlyMain]: '',
|
||||
},
|
||||
FallbackOracle: {
|
||||
[eEthereumNetwork.coverage]: '',
|
||||
|
@ -190,7 +196,8 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[eEthereumNetwork.buidlerevm]: '',
|
||||
[EthereumNetwork.kovan]: '0x50913E8E1c650E790F8a1E741FF9B1B1bB251dfe',
|
||||
[EthereumNetwork.ropsten]: '0xAD1a978cdbb8175b2eaeC47B01404f8AEC5f4F0d',
|
||||
[EthereumNetwork.main]: '0xf67a8b0e3e0ee303422f78b4c5b8da60df80a59c',
|
||||
[EthereumNetwork.main]: '',
|
||||
[EthereumNetwork.tenderlyMain]: '',
|
||||
},
|
||||
ChainlinkAggregator: {
|
||||
[eEthereumNetwork.coverage]: {},
|
||||
|
@ -259,7 +266,36 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
BAT: '0x9b4e2579895efa2b4765063310Dc4109a7641129',
|
||||
BUSD: '0x5d4BB541EED49D0290730b4aB332aA46bd27d888',
|
||||
DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c',
|
||||
ENJ: '0x24D9aB51950F3d62E9144fdC2f3135DAA6Ce8D1B',
|
||||
ENJ: '0x24D9aB51950F3d62E9 144fdC2f3135DAA6Ce8D1B',
|
||||
KNC: '0xd0e785973390fF8E77a83961efDb4F271E6B8152',
|
||||
LINK: '0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07',
|
||||
MANA: '0xc89c4ed8f52Bb17314022f6c0dCB26210C905C97',
|
||||
MKR: '0xda3d675d50ff6c555973c4f0424964e1f6a4e7d3',
|
||||
REN: '0x3147D7203354Dc06D9fd350c7a2437bcA92387a4',
|
||||
REP: '0xb8b513d9cf440C1b6f5C7142120d611C94fC220c',
|
||||
SNX: '0xE23d1142dE4E83C08bb048bcab54d50907390828',
|
||||
SUSD: '0x6d626Ff97f0E89F6f983dE425dc5B24A18DE26Ea',
|
||||
TUSD: '0x73ead35fd6A572EF763B13Be65a9db96f7643577',
|
||||
UNI: '0xD6aA3D25116d8dA79Ea0246c4826EB951872e02e',
|
||||
USDC: '0xdE54467873c3BCAA76421061036053e371721708',
|
||||
USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE',
|
||||
WBTC: '0x0133Aa47B6197D0BA090Bf2CD96626Eb71fFd13c',
|
||||
YFI: '0x7c5d4F8345e66f68099581Db340cd65B078C41f4',
|
||||
ZRX: '0xA0F9D94f060836756FFC84Db4C78d097cA8C23E8',
|
||||
UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b',
|
||||
UNI_LEND_ETH: '0xF4C8Db2d999b024bBB6c6022566503eD41f2AC1E',
|
||||
UNI_LINK_ETH: '0xE2A639Beb647d7F709ca805ABa760bBEfdbE37e3',
|
||||
UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c',
|
||||
UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10',
|
||||
UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0',
|
||||
USD: '0x59b826c214aBa7125bFA52970d97736c105Cc375',
|
||||
},
|
||||
[EthereumNetwork.tenderlyMain]: {
|
||||
AAVE: '0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012',
|
||||
BAT: '0x9b4e2579895efa2b4765063310Dc4109a7641129',
|
||||
BUSD: '0x5d4BB541EED49D0290730b4aB332aA46bd27d888',
|
||||
DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c',
|
||||
ENJ: '0x24D9aB51950F3d62E9 144fdC2f3135DAA6Ce8D1B',
|
||||
KNC: '0xd0e785973390fF8E77a83961efDb4F271E6B8152',
|
||||
LINK: '0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07',
|
||||
MANA: '0xc89c4ed8f52Bb17314022f6c0dCB26210C905C97',
|
||||
|
@ -291,6 +327,7 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[EthereumNetwork.main]: {},
|
||||
[EthereumNetwork.kovan]: {},
|
||||
[EthereumNetwork.ropsten]: {},
|
||||
[EthereumNetwork.tenderlyMain]: {},
|
||||
},
|
||||
ReservesConfig: {},
|
||||
ATokenDomainSeparator: {
|
||||
|
@ -303,6 +340,7 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[eEthereumNetwork.kovan]: '',
|
||||
[eEthereumNetwork.ropsten]: '',
|
||||
[eEthereumNetwork.main]: '',
|
||||
[eEthereumNetwork.tenderlyMain]: '',
|
||||
},
|
||||
ProxyPriceProvider: {
|
||||
[eEthereumNetwork.coverage]: '',
|
||||
|
@ -311,6 +349,7 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[eEthereumNetwork.kovan]: '0xB8bE51E6563BB312Cbb2aa26e352516c25c26ac1',
|
||||
[eEthereumNetwork.ropsten]: '',
|
||||
[eEthereumNetwork.main]: '',
|
||||
[eEthereumNetwork.tenderlyMain]: '',
|
||||
},
|
||||
WETH: {
|
||||
[eEthereumNetwork.coverage]: '', // deployed in local evm
|
||||
|
@ -319,5 +358,6 @@ export const CommonsConfig: ICommonConfiguration = {
|
|||
[eEthereumNetwork.kovan]: '0xd0a1e359811322d97991e03f863a0c30c2cf029c',
|
||||
[eEthereumNetwork.ropsten]: '0xc778417e063141139fce010982780140aa0cd5ab',
|
||||
[eEthereumNetwork.main]: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
||||
[eEthereumNetwork.tenderlyMain]: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
||||
},
|
||||
};
|
||||
|
|
|
@ -181,6 +181,17 @@ export const UniswapConfig: IUniswapConfiguration = {
|
|||
UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10',
|
||||
UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0',
|
||||
},
|
||||
[EthereumNetwork.tenderlyMain]: {
|
||||
DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c',
|
||||
USDC: '0xdE54467873c3BCAA76421061036053e371721708',
|
||||
USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE',
|
||||
UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b',
|
||||
UNI_LEND_ETH: '0xF4C8Db2d999b024bBB6c6022566503eD41f2AC1E',
|
||||
UNI_LINK_ETH: '0xE2A639Beb647d7F709ca805ABa760bBEfdbE37e3',
|
||||
UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c',
|
||||
UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10',
|
||||
UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0',
|
||||
},
|
||||
},
|
||||
ReserveAssets: {
|
||||
[eEthereumNetwork.hardhat]: {},
|
||||
|
@ -222,5 +233,17 @@ export const UniswapConfig: IUniswapConfiguration = {
|
|||
UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244',
|
||||
UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126',
|
||||
},
|
||||
[EthereumNetwork.tenderlyMain]: {
|
||||
DAI: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
||||
USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
|
||||
USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7',
|
||||
WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
||||
UNI_DAI_ETH: '0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667',
|
||||
UNI_LEND_ETH: '0xcaa7e4656f6a2b59f5f99c745f91ab26d1210dce',
|
||||
UNI_LINK_ETH: '0xf173214c720f58e03e194085b1db28b50acdeead',
|
||||
UNI_MKR_ETH: '0x2c4bd064b998838076fa341a83d007fc2fa50957',
|
||||
UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244',
|
||||
UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -10,6 +10,7 @@ services:
|
|||
command: npm run run-env
|
||||
volumes:
|
||||
- ./:/src
|
||||
- $HOME/.tenderly/config.yaml:/root/.tenderly/config.yaml
|
||||
environment:
|
||||
MNEMONIC: ${MNEMONIC}
|
||||
ETHERSCAN_KEY: ${ETHERSCAN_KEY}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import {HardhatUserConfig} from 'hardhat/config';
|
||||
// @ts-ignore
|
||||
import {accounts} from './test-wallets.js';
|
||||
import {eEthereumNetwork} from './helpers/types';
|
||||
|
@ -11,6 +10,7 @@ import '@nomiclabs/hardhat-waffle';
|
|||
import 'temp-hardhat-etherscan';
|
||||
import 'hardhat-gas-reporter';
|
||||
import 'hardhat-typechain';
|
||||
import '@tenderly/hardhat-tenderly';
|
||||
|
||||
const SKIP_LOAD = process.env.SKIP_LOAD === 'true';
|
||||
const DEFAULT_BLOCK_GAS_LIMIT = 12450000;
|
||||
|
@ -75,8 +75,8 @@ const buidlerConfig = {
|
|||
timeout: 0,
|
||||
},
|
||||
tenderly: {
|
||||
project: process.env.TENDERLY_PROJECT,
|
||||
username: process.env.TENDERLY_USERNAME,
|
||||
// project: process.env.TENDERLY_PROJECT,
|
||||
//username: process.env.TENDERLY_USERNAME,
|
||||
forkNetwork: '1', //Network id of the network we want to fork
|
||||
},
|
||||
networks: {
|
||||
|
@ -87,6 +87,7 @@ const buidlerConfig = {
|
|||
kovan: getCommonNetworkConfig(eEthereumNetwork.kovan, 42),
|
||||
ropsten: getCommonNetworkConfig(eEthereumNetwork.ropsten, 3),
|
||||
main: getCommonNetworkConfig(eEthereumNetwork.main, 1),
|
||||
tenderlyMain: getCommonNetworkConfig(eEthereumNetwork.main, 1),
|
||||
hardhat: {
|
||||
hardfork: 'istanbul',
|
||||
blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT,
|
||||
|
|
|
@ -2,6 +2,7 @@ import {
|
|||
AaveProtocolDataProviderFactory,
|
||||
ATokenFactory,
|
||||
ATokensAndRatesHelperFactory,
|
||||
ChainlinkProxyPriceProviderFactory,
|
||||
DefaultReserveInterestRateStrategyFactory,
|
||||
GenericLogicFactory,
|
||||
InitializableAdminUpgradeabilityProxyFactory,
|
||||
|
@ -23,12 +24,10 @@ import {
|
|||
StableDebtTokenFactory,
|
||||
VariableDebtTokenFactory,
|
||||
WalletBalanceProviderFactory,
|
||||
Weth9Factory,
|
||||
Weth9MockedFactory,
|
||||
WethGatewayFactory,
|
||||
} from '../types';
|
||||
import {Ierc20DetailedFactory} from '../types/Ierc20DetailedFactory';
|
||||
import {UpgradeabilityProxy} from '../types/UpgradeabilityProxy';
|
||||
import {MockTokenMap} from './contracts-helpers';
|
||||
import {DRE, getDb} from './misc-utils';
|
||||
import {eContractid, PoolConfiguration, tEthereumAddress, TokenContractId} from './types';
|
||||
|
@ -323,3 +322,11 @@ export const getLendingPoolCollateralManager = async (address?: tEthereumAddress
|
|||
|
||||
export const getAddressById = async (id: string) =>
|
||||
(await getDb().get(`${id}.${DRE.network.name}`).value()).address;
|
||||
|
||||
export const getChainlinkPriceProvider = async (address?: tEthereumAddress) =>
|
||||
await ChainlinkProxyPriceProviderFactory.connect(
|
||||
address ||
|
||||
(await getDb().get(`${eContractid.ChainlinkProxyPriceProvider}.${DRE.network.name}`).value())
|
||||
.address,
|
||||
await getFirstSigner()
|
||||
);
|
||||
|
|
|
@ -124,7 +124,7 @@ export const linkBytecode = (artifact: BuidlerArtifact | Artifact, libraries: an
|
|||
};
|
||||
|
||||
export const getParamPerNetwork = <T>(
|
||||
{kovan, ropsten, main, buidlerevm, coverage}: iParamsPerNetwork<T>,
|
||||
{kovan, ropsten, main, buidlerevm, coverage, tenderlyMain}: iParamsPerNetwork<T>,
|
||||
network: eEthereumNetwork
|
||||
) => {
|
||||
switch (network) {
|
||||
|
@ -140,6 +140,8 @@ export const getParamPerNetwork = <T>(
|
|||
return ropsten;
|
||||
case eEthereumNetwork.main:
|
||||
return main;
|
||||
case eEthereumNetwork.tenderlyMain:
|
||||
return tenderlyMain;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ export enum eEthereumNetwork {
|
|||
main = 'main',
|
||||
coverage = 'coverage',
|
||||
hardhat = 'hardhat',
|
||||
tenderlyMain = 'tenderlyMain',
|
||||
}
|
||||
|
||||
export enum EthereumNetworkNames {
|
||||
|
@ -324,6 +325,7 @@ export interface iParamsPerNetwork<T> {
|
|||
[eEthereumNetwork.ropsten]: T;
|
||||
[eEthereumNetwork.main]: T;
|
||||
[eEthereumNetwork.hardhat]: T;
|
||||
[eEthereumNetwork.tenderlyMain]: T;
|
||||
}
|
||||
|
||||
export interface iParamsPerPool<T> {
|
||||
|
@ -352,6 +354,7 @@ export enum EthereumNetwork {
|
|||
development = 'development',
|
||||
main = 'main',
|
||||
coverage = 'soliditycoverage',
|
||||
tenderlyMain = 'tenderlyMain',
|
||||
}
|
||||
|
||||
export interface IProtocolGlobalConfig {
|
||||
|
|
32
modules/tenderly/tenderly.d.ts
vendored
Normal file
32
modules/tenderly/tenderly.d.ts
vendored
Normal file
|
@ -0,0 +1,32 @@
|
|||
import 'hardhat/types/config';
|
||||
import 'hardhat/types/runtime';
|
||||
|
||||
import {TenderlyConfig} from './types';
|
||||
|
||||
declare module 'hardhat/types/runtime' {
|
||||
export interface HardhatRuntimeEnvironment {
|
||||
tenderly: {
|
||||
verify: (...contracts) => Promise<void>;
|
||||
push: (...contracts) => Promise<void>;
|
||||
persistArtifacts: (...contracts) => Promise<void>;
|
||||
};
|
||||
tenderlyRPC: {
|
||||
verify: (...contracts) => Promise<void>;
|
||||
resetFork: () => string | undefined;
|
||||
getHead: () => string | undefined;
|
||||
setHead: (head: string | undefined) => void;
|
||||
getFork: () => string | undefined;
|
||||
setFork: (fork: string | undefined) => void;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
declare module 'hardhat/types/config' {
|
||||
export interface HardhatUserConfig {
|
||||
tenderly?: TenderlyConfig;
|
||||
}
|
||||
|
||||
export interface HardhatConfig {
|
||||
tenderly: TenderlyConfig;
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@
|
|||
"run-env": "npm i && tail -f /dev/null",
|
||||
"hardhat": "hardhat",
|
||||
"hardhat:kovan": "hardhat --network kovan",
|
||||
"hardhat:tenderly-main": "hardhat --network tenderlyMain",
|
||||
"hardhat:ropsten": "hardhat--network ropsten",
|
||||
"hardhat:main": "hardhat --network main",
|
||||
"hardhat:docker": "hardhat --network hardhatevm_docker",
|
||||
|
@ -21,6 +22,7 @@
|
|||
"aave:kovan:full:initialize": "npm run hardhat:kovan -- full:initialize-lending-pool --verify --pool Aave",
|
||||
"aave:ropsten:dev:migration": "npm run hardhat:ropsten -- aave:dev --verify",
|
||||
"aave:ropsten:full:migration": "npm run hardhat:ropsten -- aave:full --verify",
|
||||
"aave:fork:main:migration": "npm run hardhat:tenderly-main -- aave:full:fork",
|
||||
"aave:main:dev:migration": "npm run hardhat:main -- aave:dev --verify",
|
||||
"aave:main:full:migration": "npm run hardhat:main -- aave:full --verify",
|
||||
"uniswap:evm:dev:migration": "hardhat uniswap:dev",
|
||||
|
|
|
@ -28,7 +28,9 @@ task(
|
|||
|
||||
const providerRegistryAddress = getParamPerNetwork(poolConfig.ProviderRegistry, network);
|
||||
// Deploy address provider and set genesis manager
|
||||
console.log('addres provider');
|
||||
const addressesProvider = await deployLendingPoolAddressesProvider(verify);
|
||||
|
||||
await waitForTx(await addressesProvider.setPoolAdmin(await getGenesisPoolAdmin(poolConfig)));
|
||||
const admin = await getEmergencyAdmin(poolConfig);
|
||||
console.log('Admin is ', admin);
|
||||
|
@ -46,18 +48,4 @@ task(
|
|||
ProviderId
|
||||
)
|
||||
);
|
||||
|
||||
//register the proxy price provider on the addressesProvider
|
||||
const proxyProvider = getParamPerNetwork(poolConfig.ProxyPriceProvider, network);
|
||||
|
||||
if (proxyProvider && proxyProvider !== '') {
|
||||
await waitForTx(await addressesProvider.setPriceOracle(proxyProvider));
|
||||
}
|
||||
|
||||
//register the lending rate oracle
|
||||
const lendingRateOracle = getParamPerNetwork(poolConfig.LendingRateOracle, network);
|
||||
|
||||
if (lendingRateOracle && lendingRateOracle !== '') {
|
||||
await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle));
|
||||
}
|
||||
});
|
|
@ -7,10 +7,18 @@ import {
|
|||
import {setInitialMarketRatesInRatesOracleByHelper} from '../../helpers/oracles-helpers';
|
||||
import {ICommonConfiguration, eEthereumNetwork, SymbolMap} from '../../helpers/types';
|
||||
import {waitForTx, filterMapBy} from '../../helpers/misc-utils';
|
||||
import {ConfigNames, loadPoolConfig, getWethAddress} from '../../helpers/configuration';
|
||||
import {
|
||||
ConfigNames,
|
||||
loadPoolConfig,
|
||||
getWethAddress,
|
||||
getGenesisPoolAdmin,
|
||||
} from '../../helpers/configuration';
|
||||
import {exit} from 'process';
|
||||
import {
|
||||
getAddressById,
|
||||
getChainlinkPriceProvider,
|
||||
getLendingPoolAddressesProvider,
|
||||
getLendingRateOracle,
|
||||
getPairsTokenAggregator,
|
||||
} from '../../helpers/contracts-getters';
|
||||
|
||||
|
@ -33,8 +41,9 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment')
|
|||
Object.keys(ReserveAssets[network]).includes(key)
|
||||
);
|
||||
const addressesProvider = await getLendingPoolAddressesProvider();
|
||||
const admin = await addressesProvider.getPoolAdmin();
|
||||
|
||||
const admin = await getGenesisPoolAdmin(poolConfig);
|
||||
const proxyPriceProviderAddress = getParamPerNetwork(poolConfig.ProxyPriceProvider, network);
|
||||
const lendingRateOracleAddress = getParamPerNetwork(poolConfig.LendingRateOracle, network);
|
||||
const fallbackOracle = await getParamPerNetwork(FallbackOracle, network);
|
||||
const reserveAssets = await getParamPerNetwork(ReserveAssets, network);
|
||||
const chainlinkAggregators = await getParamPerNetwork(ChainlinkAggregator, network);
|
||||
|
@ -45,24 +54,33 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment')
|
|||
};
|
||||
const [tokens, aggregators] = getPairsTokenAggregator(tokensToWatch, chainlinkAggregators);
|
||||
|
||||
const chainlinkProviderPriceProvider = await deployChainlinkProxyPriceProvider(
|
||||
[tokens, aggregators, fallbackOracle, await getWethAddress(poolConfig)],
|
||||
verify
|
||||
);
|
||||
const chainlinkProviderPriceProvider = proxyPriceProviderAddress
|
||||
? await getChainlinkPriceProvider(proxyPriceProviderAddress)
|
||||
: await deployChainlinkProxyPriceProvider(
|
||||
[tokens, aggregators, fallbackOracle, await getWethAddress(poolConfig)],
|
||||
verify
|
||||
);
|
||||
|
||||
const lendingRateOracle = lendingRateOracleAddress
|
||||
? await getLendingRateOracle(lendingRateOracleAddress)
|
||||
: await deployLendingRateOracle(verify);
|
||||
|
||||
const {USD, ...tokensAddressesWithoutUsd} = tokensToWatch;
|
||||
|
||||
if (!lendingRateOracleAddress) {
|
||||
await setInitialMarketRatesInRatesOracleByHelper(
|
||||
lendingRateOracles,
|
||||
tokensAddressesWithoutUsd,
|
||||
lendingRateOracle,
|
||||
admin
|
||||
);
|
||||
}
|
||||
|
||||
// Register the proxy price provider on the addressesProvider
|
||||
await waitForTx(
|
||||
await addressesProvider.setPriceOracle(chainlinkProviderPriceProvider.address)
|
||||
);
|
||||
|
||||
const lendingRateOracle = await deployLendingRateOracle(verify);
|
||||
await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle.address));
|
||||
|
||||
const {USD, ...tokensAddressesWithoutUsd} = tokensToWatch;
|
||||
await setInitialMarketRatesInRatesOracleByHelper(
|
||||
lendingRateOracles,
|
||||
tokensAddressesWithoutUsd,
|
||||
lendingRateOracle,
|
||||
admin
|
||||
);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
exit(1);
|
||||
|
|
|
@ -54,6 +54,20 @@ task('full:initialize-lending-pool', 'Initialize lending pool configuration.')
|
|||
const lendingPoolAddress = await addressesProvider.getLendingPool();
|
||||
|
||||
await deployWETHGateway([wethAddress, lendingPoolAddress]);
|
||||
|
||||
//register the proxy price provider on the addressesProvider
|
||||
const proxyProvider = getParamPerNetwork(poolConfig.ProxyPriceProvider, network);
|
||||
|
||||
if (proxyProvider && proxyProvider !== '') {
|
||||
await waitForTx(await addressesProvider.setPriceOracle(proxyProvider));
|
||||
}
|
||||
|
||||
//register the lending rate oracle
|
||||
const lendingRateOracle = getParamPerNetwork(poolConfig.LendingRateOracle, network);
|
||||
|
||||
if (lendingRateOracle && lendingRateOracle !== '') {
|
||||
await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle));
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
exit(1);
|
||||
|
|
55
tasks/migrations/aave.mainnet.fork.ts
Normal file
55
tasks/migrations/aave.mainnet.fork.ts
Normal file
|
@ -0,0 +1,55 @@
|
|||
import {task} from 'hardhat/config';
|
||||
import {ExternalProvider} from '@ethersproject/providers';
|
||||
import {checkVerification} from '../../helpers/etherscan-verification';
|
||||
import {ConfigNames} from '../../helpers/configuration';
|
||||
import {EthereumNetworkNames} from '../../helpers/types';
|
||||
import {printContracts} from '../../helpers/misc-utils';
|
||||
|
||||
task('aave:full:fork', 'Deploy development enviroment')
|
||||
.addFlag('verify', 'Verify contracts at Etherscan')
|
||||
.setAction(async ({verify}, DRE) => {
|
||||
const POOL_NAME = ConfigNames.Aave;
|
||||
const network = <EthereumNetworkNames>DRE.network.name;
|
||||
if (!network.includes('tenderly')) {
|
||||
throw 'This task only supports tenderly networks: tenderlyMain, tenderlyKovan';
|
||||
}
|
||||
await DRE.run('set-DRE');
|
||||
|
||||
// Prevent loss of gas verifying all the needed ENVs for Etherscan verification
|
||||
if (verify) {
|
||||
checkVerification();
|
||||
}
|
||||
console.log('- Setting up Tenderly provider');
|
||||
DRE.ethers.provider = new DRE.ethers.providers.Web3Provider(
|
||||
DRE.tenderlyRPC as ExternalProvider
|
||||
);
|
||||
|
||||
//Set the ethers provider to the one we initialized so it targets the correct backend
|
||||
console.log('Migration started\n');
|
||||
|
||||
console.log('1. Deploy address provider');
|
||||
await DRE.run('full:deploy-address-provider', {pool: POOL_NAME});
|
||||
|
||||
console.log('2. Deploy lending pool');
|
||||
await DRE.run('full:deploy-lending-pool');
|
||||
|
||||
console.log('3. Deploy oracles');
|
||||
await DRE.run('full:deploy-oracles', {pool: POOL_NAME});
|
||||
|
||||
console.log('4. Initialize lending pool');
|
||||
await DRE.run('full:initialize-lending-pool', {pool: POOL_NAME});
|
||||
|
||||
if (verify) {
|
||||
printContracts();
|
||||
console.log('4. Veryfing contracts');
|
||||
await DRE.run('verify:general', {all: true, pool: POOL_NAME});
|
||||
|
||||
console.log('5. Veryfing aTokens and debtTokens');
|
||||
await DRE.run('verify:tokens', {pool: POOL_NAME});
|
||||
}
|
||||
const postDeployHead = DRE.tenderlyRPC.getHead();
|
||||
console.log('HEAD', postDeployHead);
|
||||
|
||||
console.log('\nFinished migrations');
|
||||
printContracts();
|
||||
});
|
|
@ -4,11 +4,13 @@
|
|||
"module": "commonjs",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"outDir": "dist"
|
||||
"outDir": "dist",
|
||||
"noImplicitAny": false
|
||||
},
|
||||
"include": ["./scripts", "./test"],
|
||||
"include": ["./scripts", "./test", "./tasks"],
|
||||
"files": [
|
||||
"./hardhat.config.ts",
|
||||
"./modules/tenderly/tenderly.d.ts",
|
||||
"node_modules/@nomiclabs/buidler-ethers/src/type-extensions.d.ts",
|
||||
"node_modules/buidler-typechain/src/type-extensions.d.ts",
|
||||
"node_modules/@nomiclabs/buidler-waffle/src/type-extensions.d.ts",
|
||||
|
|
Loading…
Reference in New Issue
Block a user