1+ // SPDX-License-Identifier: AGPL-3.0
2+ pragma solidity 0.7.5 ;
3+ pragma abicoder v2;
4+
5+ import {DataTypes} from '../utils/DataTypes.sol ' ;
6+ import {IAaveEcosystemReserveController} from '../interfaces/IAaveEcosystemReserveController.sol ' ;
7+ import {IAaveIncentivesController} from '../interfaces/IAaveIncentivesController.sol ' ;
8+ import {ILendingPoolData} from '../interfaces/ILendingPoolData.sol ' ;
9+
10+ contract IncentiveUpdateExecutor {
11+
12+ address constant AAVE_TOKEN = 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9 ;
13+ address constant CONTROLLER_ECO_RESERVE = 0x1E506cbb6721B83B1549fa1558332381Ffa61A93 ;
14+ address constant LENDING_POOL = 0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9 ;
15+ address constant INCENTIVES_CONTROLLER_PROXY_ADDRESS = 0xd784927Ff2f95ba542BfC824c8a8a98F3495f6b5 ;
16+
17+ uint256 constant DISTRIBUTION_DURATION = 7776000 ; // 90 days
18+ uint256 constant DISTRIBUTION_AMOUNT = 97020 ether ;
19+
20+ uint256 constant PROPOSER_GAS_REFUND = 35 ether ;
21+ address constant PROPOSER_REFUND_ADDRESS = 0x6904110f17feD2162a11B5FA66B188d801443Ea4 ;
22+
23+ function execute () external {
24+
25+ IAaveEcosystemReserveController ecosystemReserveController = IAaveEcosystemReserveController (CONTROLLER_ECO_RESERVE);
26+ IAaveIncentivesController incentivesController = IAaveIncentivesController (INCENTIVES_CONTROLLER_PROXY_ADDRESS);
27+
28+ address payable [20 ] memory reserves = [
29+ 0x6B175474E89094C44Da98b954EedeAC495271d0F , // DAI
30+ 0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd , // GUSD
31+ 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 , // USDC
32+ 0xdAC17F958D2ee523a2206206994597C13D831ec7 , // USDT
33+ 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 , // WBTC
34+ 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 , // WETH
35+ 0x514910771AF9Ca656af840dff83E8264EcF986CA , // LINK
36+ 0x57Ab1ec28D129707052df4dF418D58a2D46d5f51 , // sUSD
37+ 0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e , // YFI
38+ 0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272 , // xSUSHI
39+ 0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984 , // UNI
40+ 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2 , // MKR
41+ 0x0000000000085d4780B73119b644AE5ecd22b376 , // TUSD
42+ 0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919 , // RAI
43+ 0xba100000625a3754423978a60c9317c58a424e3D , // BAL
44+ 0x8E870D67F660D95d5be530380D0eC0bd388289E1 , // USDP
45+ 0x853d955aCEf822Db058eb8505911ED77F175b99e , // FRAX
46+ 0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b , // DPI
47+ 0x4Fabb145d64652a948d72533023f6E7A623C7C53 , // BUSD
48+ 0xD533a949740bb3306d119CC777fa900bA034cd52 // CRV
49+ ];
50+
51+ uint256 [] memory emissions = new uint256 [](40 );
52+
53+ emissions[0 ] = 860629828674028 ; // aDAI
54+ emissions[1 ] = 1721259657348060 ; // vDebtDAI
55+ emissions[2 ] = 0 ; // aGUSD
56+ emissions[3 ] = 0 ; // vDebtGUSD
57+ emissions[4 ] = 1903258773510960 ; // aUSDC
58+ emissions[5 ] = 3806517547021920 ; // vDebtUSDC
59+ emissions[6 ] = 694765960976989 ; // aUSDT
60+ emissions[7 ] = 1389531921953980 ; // vDebtUSDT
61+ emissions[8 ] = 252193044534425 ; // aWBTC
62+ emissions[9 ] = 0 ; // vDebtWBTC
63+ emissions[10 ] = 933007096551141 ; // aWETH
64+ emissions[11 ] = 0 ; // vDebtWETH
65+ emissions[12 ] = 272977322986304 ; // aLINK
66+ emissions[13 ] = 0 ; // vDebtLINK
67+ emissions[14 ] = 23046648361494 ; // aSUSD
68+ emissions[15 ] = 46093296722988 ; // vDebtSUSD
69+ emissions[16 ] = 23204645595171 ; // aYFI
70+ emissions[17 ] = 0 ; // vDebtYFI
71+ emissions[18 ] = 28653877437482 ; // aXSUSHI
72+ emissions[19 ] = 0 ; // vDebtXSUSHI
73+ emissions[20 ] = 0 ; // aUNI
74+ emissions[21 ] = 0 ; // vDebtUNI
75+ emissions[22 ] = 109957713960904 ; // aMKR
76+ emissions[23 ] = 0 ; // vDebtMKR
77+ emissions[24 ] = 64158288472709 ; // aTUSD
78+ emissions[25 ] = 128316576945418 ; // vDebtTUSD
79+ emissions[26 ] = 9846555646706 ; // aRAI
80+ emissions[27 ] = 19693111293413 ; // vDebtRAI
81+ emissions[28 ] = 4875116344638 ; // aBAL
82+ emissions[29 ] = 0 ; // vDebtBAL
83+ emissions[30 ] = 9398984935492 ; // aUSDP
84+ emissions[31 ] = 18797969870985 ; // vDebtUSP
85+ emissions[32 ] = 8333031502505 ; // aFRAX
86+ emissions[33 ] = 16666063005009 ; // vDebtFRAX
87+ emissions[34 ] = 22409965951501 ; // aDPI
88+ emissions[35 ] = 0 ; // vDebtDPI
89+ emissions[36 ] = 21223932856405 ; // aBUSD
90+ emissions[37 ] = 42447865712811 ; // vDebtBUSD
91+ emissions[38 ] = 44508547226299 ; // aCRV
92+ emissions[39 ] = 0 ; // vDebtCRV
93+
94+ address [] memory assets = new address [](40 );
95+
96+ for (uint256 i = 0 ; i < reserves.length ; i++ ) {
97+ DataTypes.ReserveData memory reserveData = ILendingPoolData (LENDING_POOL).getReserveData (reserves[i]);
98+
99+ assets[2 * i] = reserveData.aTokenAddress;
100+ assets[2 * i+1 ] = reserveData.variableDebtTokenAddress;
101+ }
102+
103+ // Transfer AAVE funds to the Incentives Controller
104+ ecosystemReserveController.transfer (
105+ AAVE_TOKEN,
106+ INCENTIVES_CONTROLLER_PROXY_ADDRESS,
107+ DISTRIBUTION_AMOUNT
108+ );
109+
110+ // Transfer AAVE funds to the proposer to reimburse gas costs
111+ ecosystemReserveController.transfer (
112+ AAVE_TOKEN,
113+ PROPOSER_REFUND_ADDRESS,
114+ PROPOSER_GAS_REFUND
115+ );
116+
117+ // Enable incentives in aTokens and Variable Debt tokens
118+ incentivesController.configureAssets (assets, emissions);
119+
120+ // Sets the end date for the distribution
121+ incentivesController.setDistributionEnd (block .timestamp + DISTRIBUTION_DURATION);
122+ }
123+ }
0 commit comments