Skip to content

Commit 2d7d378

Browse files
authored
test: phaseOne update post-payload deployment (#27)
* test: update centrifuge whitelisting; phaseOne update tests * fix: skip post-execution tests * test: post-exec fork tests * fix: PR comments * fix: clean up relevant fork tests
1 parent 9b4a562 commit 2d7d378

File tree

2 files changed

+79
-12
lines changed

2 files changed

+79
-12
lines changed

tests/deployments/HorizonPhaseOneListing.t.sol

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ abstract contract HorizonListingBaseTest is Test {
118118
test_aaveDaoExecutor(this.AAVE_DAO_EXECUTOR_ADDRESS());
119119
}
120120

121-
function test_listing(address token, TokenListingParams memory params) internal {
121+
function test_listing(address token, TokenListingParams memory params) internal virtual {
122122
test_getConfiguration(token, params);
123123
test_interestRateStrategy(token, params);
124124
test_aToken(token, params);
@@ -913,7 +913,7 @@ abstract contract HorizonListingMainnetTest is HorizonListingBaseTest {
913913
address a,
914914
address b,
915915
address c
916-
) private pure returns (address[] memory) {
916+
) internal pure returns (address[] memory) {
917917
address[] memory array = new address[](3);
918918
array[0] = a;
919919
array[1] = b;
@@ -932,8 +932,8 @@ contract HorizonPhaseOneListingTest is HorizonListingMainnetTest, Default {
932932

933933
address internal constant SUPERSTATE_ALLOWLIST_V2 = 0x02f1fA8B196d21c7b733EB2700B825611d8A38E5;
934934
uint256 internal constant SUPERSTATE_ROOT_ENTITY_ID = 1;
935-
address internal constant CENTRIFUGE_HOOK = 0x4737C3f62Cc265e786b280153fC666cEA2fBc0c0;
936-
address internal constant CENTRIFUGE_WARD = 0x09ab10a9c3E6Eac1d18270a2322B6113F4C7f5E8;
935+
address internal constant CENTRIFUGE_HOOK = 0xa2C98F0F76Da0C97039688CA6280d082942d0b48;
936+
address internal constant CENTRIFUGE_WARD = 0xFEE13c017693a4706391D516ACAbF6789D5c3157;
937937
uint8 internal constant CIRCLE_INVESTOR_SDYF_INTERNATIONAL_ROLE = 3;
938938
address internal constant CIRCLE_SET_USER_ROLE_AUTHORIZED_CALLER =
939939
0xDbE01f447040F78ccbC8Dfd101BEc1a2C21f800D;
@@ -979,7 +979,6 @@ contract HorizonPhaseOneListingTest is HorizonListingMainnetTest, Default {
979979
}
980980

981981
function initEnvironment() internal override {
982-
vm.skip(true);
983982
super.initEnvironment();
984983

985984
whitelistSuperstateRwa(pool.getReserveAToken(USTB_ADDRESS));

tests/deployments/HorizonPhaseOneUpdate.t.sol

Lines changed: 75 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
// SPDX-License-Identifier: BUSL-1.1
22
pragma solidity ^0.8.0;
33

4-
import {HorizonPhaseOneListingTest, IDefaultInterestRateStrategyV2, ReserveConfiguration, DataTypes, EModeConfiguration} from './HorizonPhaseOneListing.t.sol';
4+
import './HorizonPhaseOneListing.t.sol';
55
import {DeployHorizonPhaseOneUpdatePayload} from '../../scripts/misc/DeployHorizonPhaseOneUpdatePayload.sol';
66

77
/// forge-config: default.evm_version = "cancun"
88
contract HorizonPhaseOneUpdateTest is HorizonPhaseOneListingTest {
99
using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
1010
using EModeConfiguration for uint128;
11+
using PercentageMath for uint256;
1112

1213
// horizon addresses
1314
DeploymentInfo internal deploymentInfo =
@@ -40,9 +41,20 @@ contract HorizonPhaseOneUpdateTest is HorizonPhaseOneListingTest {
4041
return deploymentInfo;
4142
}
4243

44+
function test_listing(address token, TokenListingParams memory params) internal virtual override {
45+
super.test_listing(token, params);
46+
if (params.isRwa) {
47+
test_nonEMode_collateralization(
48+
token,
49+
params,
50+
_toDynamicAddressArray(USDC_ADDRESS, RLUSD_ADDRESS, GHO_ADDRESS)
51+
);
52+
}
53+
}
54+
4355
function setUp() public virtual override {
44-
vm.skip(true);
45-
super.setUp();
56+
vm.createSelectFork('mainnet', 23220361);
57+
initEnvironment();
4658
loadUpdatedParams();
4759
}
4860

@@ -253,16 +265,69 @@ contract HorizonPhaseOneUpdateTest is HorizonPhaseOneListingTest {
253265
assertEq(pool.getEModeCategoryCollateralBitmap(eModeCategory), 0, 'emode.collateralBitmap');
254266
assertEq(pool.getEModeCategoryBorrowableBitmap(eModeCategory), 0, 'emode.borrowableBitmap');
255267
}
268+
269+
function test_nonEMode_collateralization(
270+
address token,
271+
TokenListingParams memory params,
272+
address[] memory borrowableAssets
273+
) private {
274+
address poolConfigurator = pool.ADDRESSES_PROVIDER().getPoolConfigurator();
275+
vm.prank(poolAdmin);
276+
IPoolConfigurator(poolConfigurator).setPoolPause(false);
277+
278+
IAaveOracle oracle = IAaveOracle(pool.ADDRESSES_PROVIDER().getPriceOracle());
279+
uint256 amountInBaseCurrency = 1e5 * 1e8;
280+
281+
uint256 supplyAmount = (amountInBaseCurrency * 10 ** IERC20Detailed(token).decimals()) /
282+
oracle.getAssetPrice(token) +
283+
1;
284+
deal(token, alice, supplyAmount);
285+
286+
vm.startPrank(alice);
287+
IERC20Detailed(token).approve(address(pool), supplyAmount);
288+
pool.supply(token, supplyAmount, alice, 0);
289+
vm.stopPrank();
290+
291+
for (uint256 j = 0; j < borrowableAssets.length; j++) {
292+
address borrowAsset = borrowableAssets[j];
293+
uint256 borrowAmount = (amountInBaseCurrency.percentMul(params.ltv) *
294+
10 ** IERC20Detailed(borrowAsset).decimals()) /
295+
oracle.getAssetPrice(borrowAsset) -
296+
1;
297+
298+
deal(borrowAsset, bob, borrowAmount);
299+
300+
vm.startPrank(bob);
301+
IERC20Detailed(borrowAsset).approve(address(pool), borrowAmount);
302+
pool.supply(borrowAsset, borrowAmount, bob, 0);
303+
vm.stopPrank();
304+
305+
vm.prank(alice);
306+
pool.borrow(borrowAsset, borrowAmount, 2, 0, alice);
307+
308+
vm.startPrank(alice);
309+
IERC20Detailed(borrowAsset).approve(address(pool), borrowAmount);
310+
pool.repay(borrowAsset, borrowAmount, 2, alice);
311+
vm.stopPrank();
312+
313+
vm.prank(bob);
314+
pool.withdraw(borrowAsset, borrowAmount, bob);
315+
}
316+
317+
vm.prank(alice);
318+
pool.withdraw(token, supplyAmount, alice);
319+
}
256320
}
257321

322+
/// forge-config: default.evm_version = "cancun"
323+
// can be run after payload has been deployed but before execution via multisig
258324
contract HorizonPhaseOneUpdatePostDeploymentForkTest is HorizonPhaseOneUpdateTest {
259325
function setUp() public override {
260-
vm.skip(true, 'post-payload deployment');
261326
super.setUp();
262327
}
263328

264329
function loadDeployment() internal override returns (DeploymentInfo memory) {
265-
address horizonPhaseOneUpdate; // TODO: deployed payload address
330+
address horizonPhaseOneUpdate = 0xb14fbFcFDC5d725B6624Cb076dF617eE90aD7A6b; // deployed payload address
266331
vm.prank(EMERGENCY_MULTISIG);
267332
(bool success, ) = LISTING_EXECUTOR_ADDRESS.call(
268333
abi.encodeWithSignature(
@@ -280,10 +345,13 @@ contract HorizonPhaseOneUpdatePostDeploymentForkTest is HorizonPhaseOneUpdateTes
280345
}
281346
}
282347

348+
/// forge-config: default.evm_version = "cancun"
349+
// can be run after payload has been executed
283350
contract HorizonPhaseOneUpdatePostExecutionForkTest is HorizonPhaseOneUpdateTest {
284351
function setUp() public override {
285-
vm.skip(true, 'post-payload execution');
286-
super.setUp();
352+
vm.createSelectFork('mainnet', 23229020);
353+
initEnvironment();
354+
loadUpdatedParams();
287355
}
288356

289357
function loadDeployment() internal view override returns (DeploymentInfo memory) {

0 commit comments

Comments
 (0)