Skip to content

Commit aa61964

Browse files
committed
feat: initial deposits
1 parent eb52ad2 commit aa61964

File tree

2 files changed

+58
-9
lines changed

2 files changed

+58
-9
lines changed

src/deployments/inputs/HorizonPhaseOneListing.sol

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,40 @@
11
// SPDX-License-Identifier: BUSL-1.1
22
pragma solidity ^0.8.0;
33

4+
import {SafeERC20} from '../../contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';
5+
import {IERC20} from '../../contracts/dependencies/openzeppelin/contracts/IERC20.sol';
46
import {ACLManager} from '../../contracts/protocol/configuration/ACLManager.sol';
57
import {IPoolConfigurator} from '../../contracts/interfaces/IPoolConfigurator.sol';
8+
import {IPool} from '../../contracts/interfaces/IPool.sol';
69
import {MarketReport} from '../interfaces/IMarketReportTypes.sol';
710
import {IAaveV3ConfigEngine as IEngine} from '../../contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
811
import {EngineFlags} from '../../contracts/extensions/v3-config-engine/EngineFlags.sol';
912
import {AaveV3Payload} from '../../contracts/extensions/v3-config-engine/AaveV3Payload.sol';
1013

1114
contract HorizonPhaseOneListing is AaveV3Payload {
15+
using SafeERC20 for IERC20;
16+
1217
address public immutable ATOKEN_IMPLEMENTATION;
1318
address public immutable RWA_ATOKEN_IMPLEMENTATION;
1419
address public immutable VARIABLE_DEBT_TOKEN_IMPLEMENTATION;
1520

1621
ACLManager public immutable ACL_MANAGER;
1722
IPoolConfigurator public immutable CONFIGURATOR;
23+
IPool public immutable POOL;
24+
25+
address public immutable DUST_BIN;
1826

1927
address public immutable GHO_ADDRESS;
2028
address public immutable GHO_PRICE_FEED;
29+
uint256 public immutable GHO_INITIAL_DEPOSIT;
2130

2231
address public immutable USDC_ADDRESS;
2332
address public immutable USDC_PRICE_FEED;
33+
uint256 public immutable USDC_INITIAL_DEPOSIT;
2434

2535
address public immutable RLUSD_ADDRESS;
2636
address public immutable RLUSD_PRICE_FEED;
37+
uint256 public immutable RLUSD_INITIAL_DEPOSIT;
2738

2839
address public immutable USTB_ADDRESS;
2940
address public immutable USTB_PRICE_FEED_ADAPTER;
@@ -50,15 +61,21 @@ contract HorizonPhaseOneListing is AaveV3Payload {
5061
ACL_MANAGER = ACLManager(report.aclManager);
5162
require(report.poolConfiguratorProxy == address(CONFIG_ENGINE.POOL_CONFIGURATOR()));
5263
CONFIGURATOR = IPoolConfigurator(report.poolConfiguratorProxy);
64+
POOL = IPool(report.poolProxy);
65+
66+
DUST_BIN = 0x31a0Ba3C2242a095dBF58A7C53751eCBd27dBA9b;
5367

5468
GHO_ADDRESS = 0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f;
5569
GHO_PRICE_FEED = 0xD110cac5d8682A3b045D5524a9903E031d70FCCd;
70+
GHO_INITIAL_DEPOSIT = 100e18;
5671

5772
USDC_ADDRESS = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
5873
USDC_PRICE_FEED = 0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6;
74+
USDC_INITIAL_DEPOSIT = 100e6;
5975

6076
RLUSD_ADDRESS = 0x8292Bb45bf1Ee4d140127049757C2E0fF06317eD;
6177
RLUSD_PRICE_FEED = 0x26C46B7aD0012cA71F2298ada567dC9Af14E7f2A;
78+
RLUSD_INITIAL_DEPOSIT = 100e18;
6279

6380
USTB_ADDRESS = 0x43415eB6ff9DB7E26A15b704e7A3eDCe97d31C4e;
6481
USTB_PRICE_FEED_ADAPTER = 0x5Ae4D93B9b9626Dc3289e1Afb14b821FD3C95F44;
@@ -78,7 +95,7 @@ contract HorizonPhaseOneListing is AaveV3Payload {
7895

7996
function eModeCategoriesUpdates()
8097
public
81-
pure
98+
view
8299
override
83100
returns (IEngine.EModeCategoryUpdate[] memory)
84101
{
@@ -613,7 +630,15 @@ contract HorizonPhaseOneListing is AaveV3Payload {
613630
}
614631

615632
function _postExecute() internal override {
633+
deposit(GHO_ADDRESS, GHO_INITIAL_DEPOSIT);
634+
deposit(USDC_ADDRESS, USDC_INITIAL_DEPOSIT);
635+
deposit(RLUSD_ADDRESS, RLUSD_INITIAL_DEPOSIT);
616636
CONFIGURATOR.setPoolPause(true);
617637
ACLManager(ACL_MANAGER).renounceRole(EMERGENCY_ADMIN_ROLE, address(this));
618638
}
639+
640+
function deposit(address asset, uint256 amount) internal {
641+
IERC20(asset).safeApprove(address(POOL), amount);
642+
POOL.supply(asset, amount, DUST_BIN, 0);
643+
}
619644
}

tests/deployments/HorizonPhaseOneListing.t.sol

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ abstract contract HorizonListingBaseTest is Test {
7575
uint256 debtCeiling;
7676
uint256 liqProtocolFee;
7777
IDefaultInterestRateStrategyV2.InterestRateDataRay interestRateData;
78+
uint256 initialDeposit;
7879
}
7980

8081
struct EModeCategoryParams {
@@ -106,6 +107,7 @@ abstract contract HorizonListingBaseTest is Test {
106107
function EMERGENCY_MULTISIG_ADDRESS() external view virtual returns (address);
107108
function AAVE_DAO_EXECUTOR_ADDRESS() external view virtual returns (address);
108109
function LISTING_EXECUTOR_ADDRESS() external view virtual returns (address);
110+
function DUST_BIN() external view virtual returns (address);
109111

110112
function check_permissions() internal {
111113
test_rwaATokenManager();
@@ -248,6 +250,15 @@ abstract contract HorizonListingBaseTest is Test {
248250
'reserveTreasuryAddress'
249251
);
250252

253+
if (params.initialDeposit > 0) {
254+
assertEq(
255+
IERC20Detailed(aToken).balanceOf(this.DUST_BIN()),
256+
params.initialDeposit,
257+
'initialDeposit'
258+
);
259+
assertEq(IERC20Detailed(aToken).totalSupply(), params.initialDeposit, 'aToken totalSupply');
260+
}
261+
251262
address currentATokenImpl = ProxyHelpers.getInitializableAdminUpgradeabilityProxyImplementation(
252263
vm,
253264
aToken
@@ -481,7 +492,8 @@ abstract contract HorizonListingMainnetTest is HorizonListingBaseTest {
481492
baseVariableBorrowRate: 0.0475e27,
482493
variableRateSlope1: 0,
483494
variableRateSlope2: 0
484-
})
495+
}),
496+
initialDeposit: 100e18
485497
});
486498

487499
TokenListingParams internal USDC_TOKEN_LISTING_PARAMS =
@@ -510,7 +522,8 @@ abstract contract HorizonListingMainnetTest is HorizonListingBaseTest {
510522
baseVariableBorrowRate: 0,
511523
variableRateSlope1: 0.05e27,
512524
variableRateSlope2: 0.25e27
513-
})
525+
}),
526+
initialDeposit: 100e6
514527
});
515528

516529
TokenListingParams internal RLUSD_TOKEN_LISTING_PARAMS =
@@ -539,7 +552,8 @@ abstract contract HorizonListingMainnetTest is HorizonListingBaseTest {
539552
baseVariableBorrowRate: 0,
540553
variableRateSlope1: 0.05e27,
541554
variableRateSlope2: 0.25e27
542-
})
555+
}),
556+
initialDeposit: 100e18
543557
});
544558

545559
TokenListingParams internal USTB_TOKEN_LISTING_PARAMS =
@@ -568,7 +582,8 @@ abstract contract HorizonListingMainnetTest is HorizonListingBaseTest {
568582
baseVariableBorrowRate: 0,
569583
variableRateSlope1: 0,
570584
variableRateSlope2: 0
571-
})
585+
}),
586+
initialDeposit: 0
572587
});
573588

574589
EModeCategoryParams internal USTB_STABLECOINS_EMODE_PARAMS =
@@ -617,7 +632,8 @@ abstract contract HorizonListingMainnetTest is HorizonListingBaseTest {
617632
baseVariableBorrowRate: 0,
618633
variableRateSlope1: 0,
619634
variableRateSlope2: 0
620-
})
635+
}),
636+
initialDeposit: 0
621637
});
622638

623639
EModeCategoryParams internal USCC_STABLECOINS_EMODE_PARAMS =
@@ -666,7 +682,8 @@ abstract contract HorizonListingMainnetTest is HorizonListingBaseTest {
666682
baseVariableBorrowRate: 0,
667683
variableRateSlope1: 0,
668684
variableRateSlope2: 0
669-
})
685+
}),
686+
initialDeposit: 0
670687
});
671688

672689
EModeCategoryParams internal USYC_STABLECOINS_EMODE_PARAMS =
@@ -715,7 +732,8 @@ abstract contract HorizonListingMainnetTest is HorizonListingBaseTest {
715732
baseVariableBorrowRate: 0,
716733
variableRateSlope1: 0,
717734
variableRateSlope2: 0
718-
})
735+
}),
736+
initialDeposit: 0
719737
});
720738

721739
EModeCategoryParams internal JTRSY_STABLECOINS_EMODE_PARAMS =
@@ -764,7 +782,8 @@ abstract contract HorizonListingMainnetTest is HorizonListingBaseTest {
764782
baseVariableBorrowRate: 0,
765783
variableRateSlope1: 0,
766784
variableRateSlope2: 0
767-
})
785+
}),
786+
initialDeposit: 0
768787
});
769788

770789
EModeCategoryParams internal JAAA_STABLECOINS_EMODE_PARAMS =
@@ -888,6 +907,7 @@ contract HorizonPhaseOneListingTest is HorizonListingMainnetTest, Default {
888907
address public constant override EMERGENCY_MULTISIG_ADDRESS = EMERGENCY_MULTISIG;
889908
address public constant override AAVE_DAO_EXECUTOR_ADDRESS = AAVE_DAO_EXECUTOR;
890909
address public constant override LISTING_EXECUTOR_ADDRESS = PHASE_ONE_LISTING_EXECUTOR;
910+
address public constant override DUST_BIN = 0x31a0Ba3C2242a095dBF58A7C53751eCBd27dBA9b;
891911

892912
address internal constant SUPERSTATE_ALLOWLIST_V2 = 0x02f1fA8B196d21c7b733EB2700B825611d8A38E5;
893913
uint256 internal constant SUPERSTATE_ROOT_ENTITY_ID = 1;
@@ -907,6 +927,10 @@ contract HorizonPhaseOneListingTest is HorizonListingMainnetTest, Default {
907927

908928
address horizonPhaseOneListing = new DeployHorizonPhaseOnePayload().run(reportFilePath);
909929

930+
deal(GHO_ADDRESS, LISTING_EXECUTOR_ADDRESS, 100e18);
931+
deal(USDC_ADDRESS, LISTING_EXECUTOR_ADDRESS, 100e6);
932+
deal(RLUSD_ADDRESS, LISTING_EXECUTOR_ADDRESS, 100e18);
933+
910934
vm.prank(EMERGENCY_MULTISIG);
911935
(bool success, ) = LISTING_EXECUTOR_ADDRESS.call(
912936
abi.encodeWithSignature(

0 commit comments

Comments
 (0)