@pendle/core-v2 4.0.5 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/build/artifacts/contracts/core/StandardizedYield/implementations/AaveV3/PendleAaveV3SY.sol/PendleAaveV3SY.dbg.json +1 -1
  2. package/build/artifacts/contracts/core/StandardizedYield/implementations/AaveV3/PendleAaveV3SY.sol/PendleAaveV3SY.json +2 -2
  3. package/build/artifacts/contracts/core/StandardizedYield/implementations/EtherFi/PendleWEEthSY.sol/PendleWEEthSY.dbg.json +1 -1
  4. package/build/artifacts/contracts/core/StandardizedYield/implementations/EtherFi/PendleWEEthSY.sol/PendleWEEthSY.json +2 -2
  5. package/build/artifacts/contracts/core/StandardizedYield/implementations/KelpDAO/PendleRsETHSY.sol/PendleRsETHSY.dbg.json +1 -1
  6. package/build/artifacts/contracts/core/StandardizedYield/implementations/KelpDAO/PendleRsETHSY.sol/PendleRsETHSY.json +20 -2
  7. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleL2LRTSY.sol/PendleL2LRTSY.dbg.json +4 -0
  8. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleL2LRTSY.sol/PendleL2LRTSY.json +1054 -0
  9. package/build/artifacts/contracts/core/StandardizedYield/implementations/Renzo/PendleEzETHSY.sol/PendleEzETHSY.dbg.json +4 -0
  10. package/build/artifacts/contracts/core/StandardizedYield/implementations/Renzo/PendleEzETHSY.sol/PendleEzETHSY.json +1141 -0
  11. package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleRswETHSY.sol/PendleRswETHSY.dbg.json +4 -0
  12. package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleRswETHSY.sol/PendleRswETHSY.json +1044 -0
  13. package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol/SwETHSY.dbg.json +1 -1
  14. package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol/SwETHSY.json +2 -2
  15. package/build/artifacts/contracts/interfaces/IPActionMarketCoreStatic.sol/IPActionMarketCoreStatic.dbg.json +1 -1
  16. package/build/artifacts/contracts/interfaces/IPActionMarketCoreStatic.sol/IPActionMarketCoreStatic.json +0 -45
  17. package/build/artifacts/contracts/interfaces/IPActionMintRedeemStatic.sol/IPActionMintRedeemStatic.dbg.json +1 -1
  18. package/build/artifacts/contracts/interfaces/IPActionMintRedeemStatic.sol/IPActionMintRedeemStatic.json +0 -69
  19. package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.dbg.json +1 -1
  20. package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.json +0 -26
  21. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
  22. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.json +0 -140
  23. package/build/artifacts/contracts/interfaces/Renzo/IRenzoOracle.sol/IRenzoOracle.dbg.json +4 -0
  24. package/build/artifacts/contracts/interfaces/Renzo/IRenzoOracle.sol/IRenzoOracle.json +64 -0
  25. package/build/artifacts/contracts/interfaces/Renzo/IRenzoRestakeManager.sol/IRenzoRestakeManager.dbg.json +4 -0
  26. package/build/artifacts/contracts/interfaces/Renzo/IRenzoRestakeManager.sol/IRenzoRestakeManager.json +102 -0
  27. package/build/artifacts/contracts/interfaces/Swell/IRswETH.sol/IRswETH.dbg.json +4 -0
  28. package/build/artifacts/contracts/interfaces/Swell/IRswETH.sol/IRswETH.json +44 -0
  29. package/build/artifacts/contracts/interfaces/Swell/ISwETH.sol/ISwETH.dbg.json +4 -0
  30. package/build/artifacts/contracts/interfaces/{ISwETH.sol → Swell/ISwETH.sol}/ISwETH.json +8 -8
  31. package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.dbg.json +4 -0
  32. package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.json +30 -0
  33. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.dbg.json +4 -0
  34. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.json +307 -0
  35. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.dbg.json +4 -0
  36. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.json +409 -0
  37. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.dbg.json +4 -0
  38. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.json +1352 -0
  39. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.dbg.json +4 -0
  40. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.json +247 -0
  41. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.dbg.json +4 -0
  42. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.json +202 -0
  43. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.dbg.json +4 -0
  44. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.json +93 -0
  45. package/build/artifacts/contracts/offchain-helpers/router-static/base/StorageLayout.sol/StorageLayout.dbg.json +4 -0
  46. package/build/artifacts/contracts/offchain-helpers/router-static/base/StorageLayout.sol/StorageLayout.json +10 -0
  47. package/build/artifacts/contracts/oracles/PendleRedStoneRateOracle.sol/PendleRedStoneRateOracle.dbg.json +4 -0
  48. package/build/artifacts/contracts/oracles/PendleRedStoneRateOracle.sol/PendleRedStoneRateOracle.json +66 -0
  49. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwapBase.dbg.json +1 -1
  50. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwapL1.dbg.json +1 -1
  51. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwapL1.json +2 -2
  52. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwapL2.dbg.json +1 -1
  53. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwapL2.json +2 -2
  54. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelper.sol/IExecutorHelper.dbg.json +1 -1
  55. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelper.sol/IExecutorHelper.json +168 -0
  56. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperL2.sol/IExecutorHelperL2.dbg.json +1 -1
  57. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperL2.sol/IExecutorHelperL2.json +378 -0
  58. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l1-contracts/InputScalingHelper.sol/InputScalingHelper.dbg.json +1 -1
  59. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l1-contracts/InputScalingHelper.sol/InputScalingHelper.json +2 -2
  60. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l1-contracts/ScalingDataLib.sol/ScalingDataLib.dbg.json +1 -1
  61. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l1-contracts/ScalingDataLib.sol/ScalingDataLib.json +2 -2
  62. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataReader.sol/CalldataReader.dbg.json +1 -1
  63. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataReader.sol/CalldataReader.json +2 -2
  64. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataWriter.sol/CalldataWriter.dbg.json +1 -1
  65. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataWriter.sol/CalldataWriter.json +2 -2
  66. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/Common.sol/Common.dbg.json +1 -1
  67. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/Common.sol/Common.json +2 -2
  68. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/DexScaler.sol/DexScaler.dbg.json +1 -1
  69. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/DexScaler.sol/DexScaler.json +2 -2
  70. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/ExecutorReader.sol/ExecutorReader.dbg.json +1 -1
  71. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/ExecutorReader.sol/ExecutorReader.json +2 -2
  72. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/InputScalingHelperL2.sol/InputScalingHelperL2.dbg.json +1 -1
  73. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/InputScalingHelperL2.sol/InputScalingHelperL2.json +2 -2
  74. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/ScalingDataL2Lib.sol/ScalingDataL2Lib.dbg.json +1 -1
  75. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/ScalingDataL2Lib.sol/ScalingDataL2Lib.json +2 -2
  76. package/contracts/core/StandardizedYield/implementations/AaveV3/PendleAaveV3SY.sol +1 -1
  77. package/contracts/core/StandardizedYield/implementations/EtherFi/PendleWEEthSY.sol +1 -1
  78. package/contracts/core/StandardizedYield/implementations/KelpDAO/PendleRsETHSY.sol +18 -9
  79. package/contracts/core/StandardizedYield/implementations/PendleL2LRTSY.sol +93 -0
  80. package/contracts/core/StandardizedYield/implementations/Renzo/PendleEzETHSY.sol +139 -0
  81. package/contracts/core/StandardizedYield/implementations/Swell/PendleRswETHSY.sol +101 -0
  82. package/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol +1 -1
  83. package/contracts/interfaces/IPActionMarketCoreStatic.sol +8 -17
  84. package/contracts/interfaces/IPActionMintRedeemStatic.sol +4 -16
  85. package/contracts/interfaces/IPActionStorageStatic.sol +0 -4
  86. package/contracts/interfaces/Renzo/IRenzoOracle.sol +8 -0
  87. package/contracts/interfaces/Renzo/IRenzoRestakeManager.sol +14 -0
  88. package/contracts/interfaces/Swell/IRswETH.sol +10 -0
  89. package/contracts/interfaces/{ISwETH.sol → Swell/ISwETH.sol} +2 -2
  90. package/contracts/offchain-helpers/router-static/PendleRouterStatic.sol +19 -0
  91. package/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol +109 -0
  92. package/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol +182 -0
  93. package/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol +672 -0
  94. package/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol +116 -0
  95. package/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol +64 -0
  96. package/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol +55 -0
  97. package/contracts/offchain-helpers/router-static/base/StorageLayout.sol +20 -0
  98. package/contracts/oracles/PendleRedStoneRateOracle.sol +23 -0
  99. package/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelper.sol +58 -1
  100. package/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperL2.sol +107 -1
  101. package/contracts/router/swap-aggregator/kyberswap/l1-contracts/InputScalingHelper.sol +14 -0
  102. package/contracts/router/swap-aggregator/kyberswap/l1-contracts/ScalingDataLib.sol +32 -0
  103. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataReader.sol +6 -0
  104. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/DexScaler.sol +59 -2
  105. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/InputScalingHelperL2.sol +22 -1
  106. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/ScalingDataL2Lib.sol +24 -0
  107. package/deployments/1-core.json +1 -1
  108. package/deployments/1-markets/EZETH-JUNE2024.json +11 -0
  109. package/deployments/1-markets/RSETH-KELP-JUNE2024.json +11 -0
  110. package/deployments/10-core.json +1 -1
  111. package/deployments/42161-core.json +1 -1
  112. package/deployments/42161-markets/RSETH-APR2024-ARBITRUM.json +11 -0
  113. package/deployments/42161-markets/WEETH-APR2024.json +11 -0
  114. package/deployments/56-core.json +1 -1
  115. package/deployments/merkle-distribution/2024-01-25.json +9615 -0
  116. package/package.json +1 -1
  117. package/typechain-types/IExecutorHelper.ts +273 -0
  118. package/typechain-types/IExecutorHelperL2.ts +455 -0
  119. package/typechain-types/IPActionMarketCoreStatic.ts +18 -63
  120. package/typechain-types/IPActionMintRedeemStatic.ts +10 -102
  121. package/typechain-types/IPActionStorageStatic.ts +0 -55
  122. package/typechain-types/IPRouterStatic.ts +28 -220
  123. package/typechain-types/IRenzoOracle.ts +152 -0
  124. package/typechain-types/IRenzoRestakeManager.ts +219 -0
  125. package/typechain-types/IRswETH.ts +138 -0
  126. package/typechain-types/ISwETH.ts +24 -9
  127. package/typechain-types/PendleEzETHSY.ts +1471 -0
  128. package/typechain-types/PendleL2LRTSY.ts +1323 -0
  129. package/typechain-types/PendleRedStoneRateOracle.ts +113 -0
  130. package/typechain-types/PendleRsETHSY.ts +21 -0
  131. package/typechain-types/PendleRswETHSY.ts +1294 -0
  132. package/typechain-types/factories/ActionInfoStatic__factory.ts +1 -1
  133. package/typechain-types/factories/ActionMarketAuxStatic__factory.ts +1 -1
  134. package/typechain-types/factories/ActionMarketCoreStatic__factory.ts +1 -1
  135. package/typechain-types/factories/ActionMintRedeemStatic__factory.ts +1 -1
  136. package/typechain-types/factories/ActionStorageStatic__factory.ts +1 -1
  137. package/typechain-types/factories/ActionVePendleStatic__factory.ts +1 -1
  138. package/typechain-types/factories/IExecutorHelperL2__factory.ts +378 -0
  139. package/typechain-types/factories/IExecutorHelper__factory.ts +168 -0
  140. package/typechain-types/factories/IPActionMarketCoreStatic__factory.ts +0 -45
  141. package/typechain-types/factories/IPActionMintRedeemStatic__factory.ts +0 -69
  142. package/typechain-types/factories/IPActionStorageStatic__factory.ts +0 -26
  143. package/typechain-types/factories/IPRouterStatic__factory.ts +0 -140
  144. package/typechain-types/factories/IRenzoOracle__factory.ts +76 -0
  145. package/typechain-types/factories/IRenzoRestakeManager__factory.ts +121 -0
  146. package/typechain-types/factories/IRswETH__factory.ts +56 -0
  147. package/typechain-types/factories/ISwETH__factory.ts +7 -7
  148. package/typechain-types/factories/PendleAaveV3SY__factory.ts +1 -1
  149. package/typechain-types/factories/PendleEzETHSY__factory.ts +1218 -0
  150. package/typechain-types/factories/PendleL2LRTSY__factory.ts +1139 -0
  151. package/typechain-types/factories/PendleRedStoneRateOracle__factory.ts +142 -0
  152. package/typechain-types/factories/PendleRouterStatic__factory.ts +1 -1
  153. package/typechain-types/factories/PendleRsETHSY__factory.ts +23 -1
  154. package/typechain-types/factories/PendleRswETHSY__factory.ts +1117 -0
  155. package/typechain-types/factories/PendleSwapL1__factory.ts +1 -1
  156. package/typechain-types/factories/PendleSwapL2__factory.ts +1 -1
  157. package/typechain-types/factories/PendleWEEthSY__factory.ts +1 -1
  158. package/typechain-types/factories/SwETHSY__factory.ts +1 -1
  159. package/typechain-types/hardhat.d.ts +135 -0
  160. package/typechain-types/index.ts +28 -0
  161. package/build/artifacts/contracts/interfaces/ISwETH.sol/ISwETH.dbg.json +0 -4
@@ -0,0 +1,109 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "../../../interfaces/IPMarket.sol";
5
+ import "../../../interfaces/IPRouterStatic.sol";
6
+ import "../../../interfaces/IPYieldContractFactory.sol";
7
+ import "../../../interfaces/IPMarketFactory.sol";
8
+
9
+ // solhint-disable no-empty-blocks
10
+ contract ActionInfoStatic is IPActionInfoStatic {
11
+ function getPY(address py) public view returns (address pt, address yt) {
12
+ try IPYieldToken(py).PT() returns (address _pt) {
13
+ pt = _pt;
14
+ yt = py;
15
+ } catch {
16
+ pt = py;
17
+ yt = IPPrincipalToken(py).YT();
18
+ }
19
+ }
20
+
21
+ /// can be SY, PY or Market
22
+ function getTokensInOut(
23
+ address token
24
+ ) external view returns (address[] memory tokensIn, address[] memory tokensOut) {
25
+ try IStandardizedYield(token).getTokensIn() returns (address[] memory res) {
26
+ return (res, IStandardizedYield(token).getTokensOut());
27
+ } catch {}
28
+
29
+ try IPYieldToken(token).SY() returns (address SY) {
30
+ return (IStandardizedYield(SY).getTokensIn(), IStandardizedYield(SY).getTokensOut());
31
+ } catch {}
32
+
33
+ try IPMarket(token).readTokens() returns (IStandardizedYield SY, IPPrincipalToken, IPYieldToken) {
34
+ return (SY.getTokensIn(), SY.getTokensOut());
35
+ } catch {}
36
+
37
+ revert("invalid token");
38
+ }
39
+
40
+ function getUserSYInfo(address sy, address user) external returns (UserSYInfo memory res) {
41
+ IStandardizedYield SY = IStandardizedYield(sy);
42
+
43
+ // SY
44
+ res.syBalance = TokenAmount(sy, _balanceOf(sy, user));
45
+
46
+ // Rewards
47
+ uint256[] memory rewardsOut = SY.claimRewards(user);
48
+ address[] memory rewardTokens = SY.getRewardTokens();
49
+
50
+ res.unclaimedRewards = _zipTokenAmounts(rewardTokens, rewardsOut);
51
+ }
52
+
53
+ function getUserPYInfo(address py, address user) external returns (UserPYInfo memory res) {
54
+ (address _PT, address _YT) = getPY(py);
55
+ IPYieldToken YT = IPYieldToken(_YT);
56
+
57
+ // PT / YT
58
+ res.ytBalance = TokenAmount(_YT, _balanceOf(_YT, user));
59
+ res.ptBalance = TokenAmount(_PT, _balanceOf(_PT, user));
60
+
61
+ // interest
62
+ (uint256 interestOut, uint256[] memory rewardsOut) = YT.redeemDueInterestAndRewards(user, true, true);
63
+
64
+ res.unclaimedInterest = TokenAmount(YT.SY(), interestOut);
65
+
66
+ // Rewards
67
+ address[] memory rewardTokens = YT.getRewardTokens();
68
+ res.unclaimedRewards = _zipTokenAmounts(rewardTokens, rewardsOut);
69
+ }
70
+
71
+ function getUserMarketInfo(address market, address user) external returns (UserMarketInfo memory res) {
72
+ IPMarket _market = IPMarket(market);
73
+ MarketState memory state = _market.readState(address(this));
74
+
75
+ if (uint256(state.totalLp) == 0) return res; // market not initialized
76
+
77
+ // LP PT SY
78
+ (IStandardizedYield SY, IPPrincipalToken PT, ) = _market.readTokens();
79
+
80
+ uint256 userLp = _balanceOf(market, user);
81
+ uint256 userPt = (userLp * uint256(state.totalPt)) / uint256(state.totalLp);
82
+ uint256 userSy = (userLp * uint256(state.totalSy)) / uint256(state.totalLp);
83
+
84
+ res.lpBalance = TokenAmount(market, userLp);
85
+ res.ptBalance = TokenAmount(address(PT), userPt);
86
+ res.syBalance = TokenAmount(address(SY), userSy);
87
+
88
+ // Rewards
89
+ uint256[] memory rewardsOut = _market.redeemRewards(user);
90
+ address[] memory rewardTokens = _market.getRewardTokens();
91
+
92
+ res.unclaimedRewards = _zipTokenAmounts(rewardTokens, rewardsOut);
93
+ }
94
+
95
+ function _zipTokenAmounts(
96
+ address[] memory tokens,
97
+ uint256[] memory amounts
98
+ ) internal pure returns (TokenAmount[] memory res) {
99
+ res = new TokenAmount[](tokens.length);
100
+
101
+ for (uint256 i = 0; i < tokens.length; i++) {
102
+ res[i] = TokenAmount(tokens[i], amounts[i]);
103
+ }
104
+ }
105
+
106
+ function _balanceOf(address token, address user) internal view returns (uint256) {
107
+ return IERC20(token).balanceOf(user);
108
+ }
109
+ }
@@ -0,0 +1,182 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "../../../interfaces/IPMarket.sol";
5
+ import "../../../interfaces/IPRouterStatic.sol";
6
+ import "./StorageLayout.sol";
7
+
8
+ contract ActionMarketAuxStatic is IPActionMarketAuxStatic {
9
+ using MarketMathCore for MarketState;
10
+ using PMath for int256;
11
+ using PMath for uint256;
12
+ using LogExpMath for int256;
13
+ using PYIndexLib for PYIndex;
14
+ using PYIndexLib for IPYieldToken;
15
+
16
+ function getMarketState(
17
+ address market
18
+ )
19
+ public
20
+ view
21
+ returns (
22
+ address pt,
23
+ address yt,
24
+ address sy,
25
+ int256 impliedYield,
26
+ uint256 marketExchangeRateExcludeFee,
27
+ MarketState memory state
28
+ )
29
+ {
30
+ (IStandardizedYield SY, IPPrincipalToken PT, IPYieldToken YT) = _readTokens(market);
31
+ pt = address(PT);
32
+ yt = address(YT);
33
+ sy = address(SY);
34
+ state = _readState(market);
35
+ impliedYield = _getPtImpliedYield(market);
36
+ marketExchangeRateExcludeFee = getTradeExchangeRateExcludeFee(market, state);
37
+ }
38
+
39
+ function getTradeExchangeRateExcludeFee(address market, MarketState memory state) public view returns (uint256) {
40
+ if (IPMarket(market).isExpired()) return PMath.ONE;
41
+
42
+ MarketPreCompute memory comp = state.getMarketPreCompute(_pyIndex(market), block.timestamp);
43
+ int256 preFeeExchangeRate = MarketMathCore._getExchangeRate(
44
+ state.totalPt,
45
+ comp.totalAsset,
46
+ comp.rateScalar,
47
+ comp.rateAnchor,
48
+ 0
49
+ );
50
+ return preFeeExchangeRate.Uint();
51
+ }
52
+
53
+ function getTradeExchangeRateIncludeFee(address market, int256 netPtOut) public view returns (uint256) {
54
+ if (IPMarket(market).isExpired()) return PMath.ONE;
55
+
56
+ int256 netPtToAccount = netPtOut;
57
+ MarketState memory state = _readState(market);
58
+ MarketPreCompute memory comp = state.getMarketPreCompute(_pyIndex(market), block.timestamp);
59
+
60
+ int256 preFeeExchangeRate = MarketMathCore._getExchangeRate(
61
+ state.totalPt,
62
+ comp.totalAsset,
63
+ comp.rateScalar,
64
+ comp.rateAnchor,
65
+ netPtToAccount
66
+ );
67
+
68
+ if (netPtToAccount > 0) {
69
+ int256 postFeeExchangeRate = preFeeExchangeRate.divDown(comp.feeRate);
70
+ if (postFeeExchangeRate < PMath.IONE) revert Errors.MarketExchangeRateBelowOne(postFeeExchangeRate);
71
+ return postFeeExchangeRate.Uint();
72
+ } else {
73
+ return preFeeExchangeRate.mulDown(comp.feeRate).Uint();
74
+ }
75
+ }
76
+
77
+ function calcPriceImpactPt(address market, int256 netPtOut) public view returns (uint256 priceImpact) {
78
+ uint256 preTradeRate = getTradeExchangeRateIncludeFee(market, _getSign(netPtOut));
79
+ uint256 tradedRate = getTradeExchangeRateIncludeFee(market, netPtOut);
80
+ priceImpact = _calculateImpact(preTradeRate, tradedRate);
81
+ }
82
+
83
+ function calcPriceImpactYt(address market, int256 netPtOut) public view returns (uint256 priceImpact) {
84
+ uint256 ytPreTradeRate = _calcVirtualYTPrice(getTradeExchangeRateIncludeFee(market, _getSign(netPtOut)));
85
+ uint256 ytTradedRate = _calcVirtualYTPrice(getTradeExchangeRateIncludeFee(market, netPtOut));
86
+ priceImpact = _calculateImpact(ytPreTradeRate, ytTradedRate);
87
+ }
88
+
89
+ function calcPriceImpactPY(address market, int256 netPtOut) public view returns (uint256 priceImpact) {
90
+ uint256 ptPreTradeRate = getTradeExchangeRateIncludeFee(market, _getSign(netPtOut));
91
+ uint256 ptTradeRate = getTradeExchangeRateIncludeFee(market, netPtOut);
92
+
93
+ uint256 ptPreTradePrice = PMath.ONE.divDown(ptPreTradeRate);
94
+ uint256 ptTradePrice = PMath.ONE.divDown(ptTradeRate);
95
+
96
+ uint256 ytPreTradePrice = _calcVirtualYTPrice(ptPreTradeRate);
97
+ uint256 ytTradePrice = _calcVirtualYTPrice(ptTradeRate);
98
+
99
+ uint256 pyPreTradeRate = ytPreTradePrice.divDown(ptPreTradePrice);
100
+ uint256 pyTradeRate = ytTradePrice.divDown(ptTradePrice);
101
+ priceImpact = _calculateImpact(pyPreTradeRate, pyTradeRate);
102
+ }
103
+
104
+ function getLpToSyRate(address market) public view returns (uint256) {
105
+ (IStandardizedYield SY, , ) = _readTokens(market);
106
+ return getLpToAssetRate(market).divDown(SY.exchangeRate());
107
+ }
108
+
109
+ function getPtToSyRate(address market) public view returns (uint256) {
110
+ (IStandardizedYield SY, , ) = _readTokens(market);
111
+ return getPtToAssetRate(market).divDown(SY.exchangeRate());
112
+ }
113
+
114
+ function getLpToAssetRate(address market) public view returns (uint256) {
115
+ MarketState memory state = _readState(market);
116
+ PYIndex pyIndexCurrent = _pyIndex(market);
117
+ MarketPreCompute memory comp = state.getMarketPreCompute(pyIndexCurrent, block.timestamp);
118
+
119
+ int256 totalHypotheticalAsset = comp.totalAsset +
120
+ state.totalPt.mulDown(int256(_getPtToAssetRate(market, state, pyIndexCurrent)));
121
+
122
+ return uint256(totalHypotheticalAsset.divDown(state.totalLp));
123
+ }
124
+
125
+ function getPtToAssetRate(address market) public view returns (uint256) {
126
+ MarketState memory state = _readState(market);
127
+ return _getPtToAssetRate(market, state, _pyIndex(market));
128
+ }
129
+
130
+ function _getPtToAssetRate(
131
+ address market,
132
+ MarketState memory state,
133
+ PYIndex pyIndexCurrent
134
+ ) internal view returns (uint256 ptToAssetRate) {
135
+ if (state.expiry <= block.timestamp) {
136
+ (IStandardizedYield SY, , ) = _readTokens(market);
137
+ return (SY.exchangeRate().divDown(PYIndex.unwrap(pyIndexCurrent)));
138
+ }
139
+ uint256 timeToExpiry = state.expiry - block.timestamp;
140
+ int256 assetToPtRate = MarketMathCore._getExchangeRateFromImpliedRate(state.lastLnImpliedRate, timeToExpiry);
141
+
142
+ ptToAssetRate = uint256(PMath.IONE.divDown(assetToPtRate));
143
+ }
144
+
145
+ function _getPtImpliedYield(address market) internal view returns (int256) {
146
+ MarketState memory state = _readState(market);
147
+
148
+ int256 lnImpliedRate = (state.lastLnImpliedRate).Int();
149
+ return lnImpliedRate.exp();
150
+ }
151
+
152
+ function _calcVirtualYTPrice(uint256 ptAssetExchangeRate) private pure returns (uint256 ytAssetExchangeRate) {
153
+ // 1 asset = EX pt
154
+ // 1 pt = 1/EX Asset
155
+ // 1 yt + 1/EX Asset = 1 Asset
156
+ // 1 yt = 1 Asset - 1/EX Asset
157
+ // 1 yt = (EX - 1) / EX Asset
158
+ return (ptAssetExchangeRate - PMath.ONE).divDown(ptAssetExchangeRate);
159
+ }
160
+
161
+ function _readState(address market) internal view returns (MarketState memory) {
162
+ return IPMarket(market).readState(address(this));
163
+ }
164
+
165
+ function _readTokens(
166
+ address market
167
+ ) internal view returns (IStandardizedYield _SY, IPPrincipalToken _PT, IPYieldToken _YT) {
168
+ return IPMarket(market).readTokens();
169
+ }
170
+
171
+ function _getSign(int256 netPtOut) private pure returns (int256) {
172
+ return netPtOut > 0 ? int256(1) : int256(-1);
173
+ }
174
+
175
+ function _calculateImpact(uint256 rateBefore, uint256 rateTraded) private pure returns (uint256 impact) {
176
+ impact = (rateBefore.Int() - rateTraded.Int()).abs().divDown(rateBefore);
177
+ }
178
+
179
+ function _pyIndex(address market) private view returns (PYIndex) {
180
+ return PYIndex.wrap(IPRouterStatic(address(this)).pyIndexCurrentViewMarket(market));
181
+ }
182
+ }