Skip to content

Commit f08a333

Browse files
authored
add PT-USDe-27Nov25 tests (#125)
1 parent b3fb687 commit f08a333

File tree

3 files changed

+1138
-0
lines changed

3 files changed

+1138
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
// SPDX-License-Identifier: UNLICENSED
2+
pragma solidity ^0.8.13;
3+
4+
import "forge-std/Test.sol";
5+
import "./MarketBaseForkTest.sol";
6+
import {NavBeforeMaturityFeed} from "src/feeds/NavBeforeMaturityFeed.sol";
7+
import {ChainlinkBasePriceFeed} from "src/feeds/ChainlinkBasePriceFeed.sol";
8+
import {FeedSwitch} from "src/util/FeedSwitch.sol";
9+
import {PendleNAVFeed} from "src/feeds/PendleNAVFeed.sol";
10+
11+
contract PendlePTUSDe27Nov25MarketForkTest is MarketBaseForkTest {
12+
address pendlePT = address(0x62C6E813b9589C3631Ba0Cdb013acdB8544038B7); // PT USDe 27 Nov 25
13+
address pendlePTHolder =
14+
address(0xAc5CE72d29836f41d235F643F6f0190E8c12db8A);
15+
16+
ChainlinkBasePriceFeed usdeWrappedFeed = ChainlinkBasePriceFeed(0xB3C1D801A02d88adC96A294123c2Daa382345058); // USDe/USD wrapped
17+
NavBeforeMaturityFeed beforeMaturityFeed;
18+
ChainlinkBasePriceFeed afterMaturityFeed = ChainlinkBasePriceFeed(0xB3C1D801A02d88adC96A294123c2Daa382345058);
19+
address navFeed;
20+
21+
uint256 baseDiscount = 0.20 ether; // 20%
22+
FeedSwitch feedSwitch;
23+
24+
address feedAddr; //FeedSwitch
25+
address marketAddr;
26+
27+
function setUp() public virtual {
28+
//This will fail if there's no mainnet variable in foundry.toml
29+
string memory url = vm.rpcUrl("mainnet");
30+
vm.createSelectFork(url, 23225429);
31+
32+
feedAddr = _deployFeed();
33+
34+
marketAddr = address(
35+
new Market(
36+
gov,
37+
lender,
38+
pauseGuardian,
39+
simpleERC20EscrowAddr,
40+
IDolaBorrowingRights(dbrAddr),
41+
IERC20(pendlePT),
42+
IOracle(oracleAddr),
43+
9150,
44+
5000,
45+
500,
46+
false
47+
)
48+
);
49+
_advancedInit(marketAddr, feedAddr, false);
50+
}
51+
52+
function _deployFeed() internal returns (address feed) {
53+
navFeed = address(new PendleNAVFeed(pendlePT, baseDiscount));
54+
beforeMaturityFeed = new NavBeforeMaturityFeed(
55+
address(usdeWrappedFeed),
56+
address(navFeed)
57+
);
58+
59+
feedSwitch = new FeedSwitch(
60+
address(navFeed),
61+
address(beforeMaturityFeed),
62+
address(afterMaturityFeed),
63+
18 hours,
64+
pendlePT,
65+
pauseGuardian
66+
);
67+
return address(feedSwitch);
68+
}
69+
70+
// Override the function to use the PendlePTHolder to avoid error revert: stdStorage find(StdStorage): Slot(s) not found
71+
function gibCollateral(
72+
address _address,
73+
uint _amount
74+
) internal virtual override {
75+
vm.prank(pendlePTHolder);
76+
IERC20(pendlePT).transfer(_address, _amount);
77+
}
78+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.18;
3+
4+
import {FeedSwitch, IChainlinkFeed} from "src/util/FeedSwitch.sol";
5+
import {BaseFeedSwitchNavForkTest} from "test/util/BaseFeedSwitchNavFork.t.sol";
6+
import {NavBeforeMaturityFeed} from "src/feeds/NavBeforeMaturityFeed.sol";
7+
import {PendleNAVFeed} from "src/feeds/PendleNAVFeed.sol";
8+
import {console2} from "forge-std/console2.sol";
9+
10+
contract FeedSwitchNavUSDe27Nov25Test is BaseFeedSwitchNavForkTest {
11+
address usdeWrapper = address(0xB3C1D801A02d88adC96A294123c2Daa382345058);
12+
NavBeforeMaturityFeed _beforeMaturityFeed;
13+
address _afterMaturityFeed = address(0xB3C1D801A02d88adC96A294123c2Daa382345058); // USDe Chainlink Wrapper
14+
address _pendlePT = address(0x62C6E813b9589C3631Ba0Cdb013acdB8544038B7); // PT USDe 27 Nov 25
15+
uint256 _baseDiscount = 0.22 ether; // 22%
16+
17+
function setUp() public {
18+
string memory url = vm.rpcUrl("mainnet");
19+
vm.createSelectFork(url);
20+
21+
PendleNAVFeed _navFeed = new PendleNAVFeed(_pendlePT, _baseDiscount);
22+
_beforeMaturityFeed = new NavBeforeMaturityFeed(usdeWrapper,address(_navFeed)); // USDeBeforeMaturityFeed: USDe/USD Feed using USDe Chainlink wrapper and NAV
23+
24+
initialize(address(_beforeMaturityFeed), address(_afterMaturityFeed), _pendlePT , _baseDiscount, address(_navFeed));
25+
}
26+
}

0 commit comments

Comments
 (0)