@pendle/core-v2 4.5.2 → 4.7.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 (160) hide show
  1. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ethena/PendleSUSDESY.sol/PendleSUSDESY.dbg.json +1 -1
  2. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ethena/PendleSUSDESY.sol/PendleSUSDESY.json +2 -2
  3. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultERC20SY.sol/PendleKarakVaultERC20SY.dbg.json +4 -0
  4. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultERC20SY.sol/PendleKarakVaultERC20SY.json +1070 -0
  5. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultEzETHSY.sol/PendleKarakVaultEzETHSY.dbg.json +4 -0
  6. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultEzETHSY.sol/PendleKarakVaultEzETHSY.json +1144 -0
  7. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSUSDESY.sol/PendleKarakVaultSUSDESY.dbg.json +4 -0
  8. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSUSDESY.sol/PendleKarakVaultSUSDESY.json +1111 -0
  9. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSYBaseUpg.sol/PendleKarakVaultSYBaseUpg.dbg.json +4 -0
  10. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSYBaseUpg.sol/PendleKarakVaultSYBaseUpg.json +1036 -0
  11. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultUSDESY.sol/PendleKarakVaultUSDESY.dbg.json +4 -0
  12. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultUSDESY.sol/PendleKarakVaultUSDESY.json +1096 -0
  13. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultWEETHSY.sol/PendleKarakVaultWEETHSY.dbg.json +4 -0
  14. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultWEETHSY.sol/PendleKarakVaultWEETHSY.json +1116 -0
  15. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleERC4626SY.sol/PendleERC4626SY.dbg.json +1 -1
  16. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleERC4626SY.sol/PendleERC4626SY.json +2 -2
  17. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleERC4626UpgSY.sol/PendleERC4626SYUpg.dbg.json +1 -1
  18. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleERC4626UpgSY.sol/PendleERC4626SYUpg.json +2 -2
  19. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol/PendleGDaiSY.dbg.json +1 -1
  20. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol/PendleGDaiSY.json +2 -2
  21. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleSfrxEthSY.sol/PendleSfrxEthSY.dbg.json +1 -1
  22. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleSfrxEthSY.sol/PendleSfrxEthSY.json +2 -2
  23. package/build/artifacts/contracts/core/StandardizedYield/implementations/PirexETH/PendleApxETHSY.sol/PendleApxETHSY.dbg.json +1 -1
  24. package/build/artifacts/contracts/core/StandardizedYield/implementations/PirexETH/PendleApxETHSY.sol/PendleApxETHSY.json +2 -2
  25. package/build/artifacts/contracts/core/StandardizedYield/implementations/Puffer/PendlePufStETHSY.sol/PendlePufStETHSY.dbg.json +1 -1
  26. package/build/artifacts/contracts/core/StandardizedYield/implementations/Puffer/PendlePufStETHSY.sol/PendlePufStETHSY.json +2 -2
  27. package/build/artifacts/contracts/core/StandardizedYield/implementations/Puffer/PendlePufWETHSY.sol/PendlePufWETHSY.dbg.json +1 -1
  28. package/build/artifacts/contracts/core/StandardizedYield/implementations/Puffer/PendlePufWETHSY.sol/PendlePufWETHSY.json +2 -2
  29. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
  30. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.json +19 -0
  31. package/build/artifacts/contracts/interfaces/IPActionMiscV3.sol/IPActionMiscV3.dbg.json +1 -1
  32. package/build/artifacts/contracts/interfaces/IPActionMiscV3.sol/IPActionMiscV3.json +1200 -34
  33. package/build/artifacts/contracts/interfaces/IPAllActionV3.sol/IPAllActionV3.dbg.json +1 -1
  34. package/build/artifacts/contracts/interfaces/IPAllActionV3.sol/IPAllActionV3.json +1228 -62
  35. package/build/artifacts/contracts/interfaces/IPPYLpOracle.sol/IPPYLpOracle.dbg.json +4 -0
  36. package/build/artifacts/contracts/interfaces/{IPPtLpOracle.sol/IPPtLpOracle.json → IPPYLpOracle.sol/IPPYLpOracle.json} +50 -2
  37. package/build/artifacts/contracts/interfaces/IPReflector.sol/IPReflector.dbg.json +4 -0
  38. package/build/artifacts/contracts/interfaces/IPReflector.sol/IPReflector.json +30 -0
  39. package/build/artifacts/contracts/interfaces/IPTokenWithSupplyCap.sol/IPTokenWithSupplyCap.dbg.json +4 -0
  40. package/build/artifacts/contracts/interfaces/IPTokenWithSupplyCap.sol/IPTokenWithSupplyCap.json +37 -0
  41. package/build/artifacts/contracts/interfaces/Karak/IKarakVault.sol/IKarakVault.dbg.json +4 -0
  42. package/build/artifacts/contracts/interfaces/Karak/IKarakVault.sol/IKarakVault.json +24 -0
  43. package/build/artifacts/contracts/interfaces/Karak/IKarakVaultSupervisor.sol/IKarakVaultSupervisor.dbg.json +4 -0
  44. package/build/artifacts/contracts/interfaces/Karak/IKarakVaultSupervisor.sol/IKarakVaultSupervisor.json +76 -0
  45. package/build/artifacts/contracts/offchain-helpers/PendlePoolDeployHelper.sol/PendlePoolDeployHelper.dbg.json +1 -1
  46. package/build/artifacts/contracts/offchain-helpers/PendlePoolDeployHelper.sol/PendlePoolDeployHelper.json +25 -2
  47. package/build/artifacts/contracts/offchain-helpers/SupplyCapReader.sol/IPossibleSupplyCapInterface.dbg.json +1 -1
  48. package/build/artifacts/contracts/offchain-helpers/SupplyCapReader.sol/SupplyCapReader.dbg.json +1 -1
  49. package/build/artifacts/contracts/oracles/PendleLpOracleLib.sol/PendleLpOracleLib.dbg.json +1 -1
  50. package/build/artifacts/contracts/oracles/PendleLpOracleLib.sol/PendleLpOracleLib.json +2 -2
  51. package/build/artifacts/contracts/oracles/PendlePYLpOracle.sol/PendlePYLpOracle.dbg.json +4 -0
  52. package/build/artifacts/contracts/oracles/PendlePYLpOracle.sol/PendlePYLpOracle.json +422 -0
  53. package/build/artifacts/contracts/oracles/PendlePYOracleLib.sol/PendlePYOracleLib.dbg.json +4 -0
  54. package/build/artifacts/contracts/oracles/{PendlePtOracleLib.sol/PendlePtOracleLib.json → PendlePYOracleLib.sol/PendlePYOracleLib.json} +4 -4
  55. package/build/artifacts/contracts/oracles/samples/BoringLpGlpOracle.sol/BoringLpGlpOracle.dbg.json +1 -1
  56. package/build/artifacts/contracts/oracles/samples/BoringLpGlpOracle.sol/BoringLpGlpOracle.json +2 -2
  57. package/build/artifacts/contracts/oracles/samples/BoringPYUsdChainlinkAssetOracle.sol/BoringPYUsdChainlinkAssetOracle.dbg.json +4 -0
  58. package/build/artifacts/contracts/oracles/samples/BoringPYUsdChainlinkAssetOracle.sol/BoringPYUsdChainlinkAssetOracle.json +183 -0
  59. package/build/artifacts/contracts/oracles/samples/BoringPYUsdChainlinkSYOracle.sol/BoringPYUsdChainlinkSYOracle.dbg.json +4 -0
  60. package/build/artifacts/contracts/oracles/samples/BoringPYUsdChainlinkSYOracle.sol/BoringPYUsdChainlinkSYOracle.json +183 -0
  61. package/build/artifacts/contracts/router/ActionAddRemoveLiqV3.sol/ActionAddRemoveLiqV3.dbg.json +1 -1
  62. package/build/artifacts/contracts/router/ActionAddRemoveLiqV3.sol/ActionAddRemoveLiqV3.json +2 -2
  63. package/build/artifacts/contracts/router/ActionMiscV3.sol/ActionMiscV3.dbg.json +1 -1
  64. package/build/artifacts/contracts/router/ActionMiscV3.sol/ActionMiscV3.json +1202 -36
  65. package/build/artifacts/contracts/router/ActionSwapPTV3.sol/ActionSwapPTV3.dbg.json +1 -1
  66. package/build/artifacts/contracts/router/ActionSwapPTV3.sol/ActionSwapPTV3.json +2 -2
  67. package/build/artifacts/contracts/router/ActionSwapYTV3.sol/ActionSwapYTV3.dbg.json +1 -1
  68. package/build/artifacts/contracts/router/ActionSwapYTV3.sol/ActionSwapYTV3.json +2 -2
  69. package/build/artifacts/contracts/router/Reflector.sol/Reflector.dbg.json +4 -0
  70. package/build/artifacts/contracts/router/Reflector.sol/Reflector.json +34 -0
  71. package/build/artifacts/contracts/router/base/ActionBase.sol/ActionBase.dbg.json +1 -1
  72. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultERC20SY.sol +32 -0
  73. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultEzETHSY.sol +80 -0
  74. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSUSDESY.sol +73 -0
  75. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSYBaseUpg.sol +141 -0
  76. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultUSDESY.sol +18 -0
  77. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultWEETHSY.sol +71 -0
  78. package/contracts/interfaces/IERC4626.sol +2 -0
  79. package/contracts/interfaces/IPActionMiscV3.sol +99 -0
  80. package/contracts/interfaces/{IPPtLpOracle.sol → IPPYLpOracle.sol} +5 -1
  81. package/contracts/interfaces/IPReflector.sol +6 -0
  82. package/contracts/interfaces/IPTokenWithSupplyCap.sol +9 -0
  83. package/contracts/interfaces/Karak/IKarakVault.sol +6 -0
  84. package/contracts/interfaces/Karak/IKarakVaultSupervisor.sol +8 -0
  85. package/contracts/offchain-helpers/PendlePoolDeployHelper.sol +5 -0
  86. package/contracts/oracles/PendleLpOracleLib.sol +4 -4
  87. package/contracts/oracles/{PendlePtLpOracle.sol → PendlePYLpOracle.sol} +51 -21
  88. package/contracts/oracles/{PendlePtOracleLib.sol → PendlePYOracleLib.sol} +31 -1
  89. package/contracts/oracles/samples/BoringLpGlpOracle.sol +2 -2
  90. package/contracts/oracles/samples/{BoringPtUsdChainlinkOracle.sol → BoringPYUsdChainlinkAssetOracle.sol} +36 -12
  91. package/contracts/oracles/samples/BoringPYUsdChainlinkSYOracle.sol +102 -0
  92. package/contracts/router/ActionMiscV3.sol +182 -34
  93. package/contracts/router/ActionSwapYTV3.sol +0 -85
  94. package/contracts/router/Reflector.sol +70 -0
  95. package/contracts/router/base/ActionBase.sol +90 -1
  96. package/deployments/1-core.json +11 -2
  97. package/deployments/1-markets/KARAK-SUSDE-MAINNET-SEP2024.json +14 -0
  98. package/deployments/1-markets/KARAK-USDE-MAINNET-SEP2024.json +14 -0
  99. package/deployments/1-markets/KARAK-WEETH-MAINNET-SEP2024.json +14 -0
  100. package/deployments/10-core.json +11 -2
  101. package/deployments/42161-core.json +11 -2
  102. package/deployments/42161-markets/CAMELOT-PEP-ARBITRUM-JUNE2025.json +14 -0
  103. package/deployments/42161-markets/RSETH-ARBITRUM-SEP2024-NEW.json +11 -0
  104. package/deployments/5000-core.json +11 -2
  105. package/deployments/56-core.json +11 -2
  106. package/package.json +1 -1
  107. package/typechain-types/ActionMiscV3.ts +628 -16
  108. package/typechain-types/IERC4626.ts +34 -0
  109. package/typechain-types/IKarakVault.ts +84 -0
  110. package/typechain-types/IKarakVaultSupervisor.ts +190 -0
  111. package/typechain-types/IPActionMiscV3.ts +628 -16
  112. package/typechain-types/IPAllActionV3.ts +535 -0
  113. package/typechain-types/IPReflector.ts +95 -0
  114. package/typechain-types/IPTokenWithSupplyCap.ts +110 -0
  115. package/typechain-types/PendleKarakVaultERC20SY.ts +1324 -0
  116. package/typechain-types/PendleKarakVaultEzETHSY.ts +1400 -0
  117. package/typechain-types/PendleKarakVaultSUSDESY.ts +1380 -0
  118. package/typechain-types/PendleKarakVaultSYBaseUpg.ts +1312 -0
  119. package/typechain-types/PendleKarakVaultUSDESY.ts +1366 -0
  120. package/typechain-types/PendleKarakVaultWEETHSY.ts +1370 -0
  121. package/typechain-types/PendlePYLpOracle.ts +10 -3
  122. package/typechain-types/PendlePoolDeployHelper.ts +44 -0
  123. package/typechain-types/Reflector.ts +95 -0
  124. package/typechain-types/factories/ActionAddRemoveLiqV3__factory.ts +1 -1
  125. package/typechain-types/factories/ActionMiscV3__factory.ts +1201 -35
  126. package/typechain-types/factories/ActionSwapPTV3__factory.ts +1 -1
  127. package/typechain-types/factories/ActionSwapYTV3__factory.ts +1 -1
  128. package/typechain-types/factories/BoringLpGlpOracle__factory.ts +1 -1
  129. package/typechain-types/factories/IERC4626__factory.ts +19 -0
  130. package/typechain-types/factories/IKarakVaultSupervisor__factory.ts +95 -0
  131. package/typechain-types/factories/IKarakVault__factory.ts +36 -0
  132. package/typechain-types/factories/IPActionMiscV3__factory.ts +1200 -34
  133. package/typechain-types/factories/IPAllActionV3__factory.ts +1228 -62
  134. package/typechain-types/factories/IPReflector__factory.ts +42 -0
  135. package/typechain-types/factories/IPTokenWithSupplyCap__factory.ts +56 -0
  136. package/typechain-types/factories/PendleApxETHSY__factory.ts +1 -1
  137. package/typechain-types/factories/PendleERC4626SYUpg__factory.ts +1 -1
  138. package/typechain-types/factories/PendleERC4626SY__factory.ts +1 -1
  139. package/typechain-types/factories/PendleGDaiSY__factory.ts +1 -1
  140. package/typechain-types/factories/PendleKarakVaultERC20SY__factory.ts +1139 -0
  141. package/typechain-types/factories/PendleKarakVaultEzETHSY__factory.ts +1236 -0
  142. package/typechain-types/factories/PendleKarakVaultSUSDESY__factory.ts +1180 -0
  143. package/typechain-types/factories/PendleKarakVaultSYBaseUpg__factory.ts +1055 -0
  144. package/typechain-types/factories/PendleKarakVaultUSDESY__factory.ts +1165 -0
  145. package/typechain-types/factories/PendleKarakVaultWEETHSY__factory.ts +1189 -0
  146. package/typechain-types/factories/PendlePYLpOracle__factory.ts +12 -24
  147. package/typechain-types/factories/PendlePoolDeployHelper__factory.ts +24 -1
  148. package/typechain-types/factories/PendlePufStETHSY__factory.ts +1 -1
  149. package/typechain-types/factories/PendlePufWETHSY__factory.ts +1 -1
  150. package/typechain-types/factories/PendleSUSDESY__factory.ts +1 -1
  151. package/typechain-types/factories/PendleSfrxEthSY__factory.ts +1 -1
  152. package/typechain-types/factories/Reflector__factory.ts +84 -0
  153. package/typechain-types/hardhat.d.ts +99 -0
  154. package/typechain-types/index.ts +22 -0
  155. package/build/artifacts/contracts/interfaces/IPPtLpOracle.sol/IPPtLpOracle.dbg.json +0 -4
  156. package/build/artifacts/contracts/oracles/PendlePtLpOracle.sol/PendlePtLpOracle.dbg.json +0 -4
  157. package/build/artifacts/contracts/oracles/PendlePtLpOracle.sol/PendlePtLpOracle.json +0 -367
  158. package/build/artifacts/contracts/oracles/PendlePtOracleLib.sol/PendlePtOracleLib.dbg.json +0 -4
  159. package/build/artifacts/contracts/oracles/samples/BoringPtUsdChainlinkOracle.sol/BoringPtUsdChainlinkOracle.dbg.json +0 -4
  160. package/build/artifacts/contracts/oracles/samples/BoringPtUsdChainlinkOracle.sol/BoringPtUsdChainlinkOracle.json +0 -157
@@ -0,0 +1,70 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "../interfaces/IPAllActionV3.sol";
5
+ import "../interfaces/IPReflector.sol";
6
+ import "../core/libraries/TokenHelper.sol";
7
+
8
+ contract Reflector is TokenHelper, IPReflector {
9
+ using SafeERC20 for IERC20;
10
+
11
+ mapping(address => bool) internal approved;
12
+ address internal constant ROUTER = 0x888888888889758F76e7103c6CbF23ABbF58F946;
13
+
14
+ receive() external payable {}
15
+
16
+ function reflect(bytes calldata inputData) external returns (bytes memory result) {
17
+ (uint256 value, bytes memory newCalldata) = _getNewCalldata(inputData);
18
+ bool success;
19
+
20
+ (success, result) = ROUTER.call{value: value}(newCalldata);
21
+ if (!success) {
22
+ assembly {
23
+ // We use Yul's revert() to bubble up errors from the target contract.
24
+ revert(add(32, result), mload(result))
25
+ }
26
+ }
27
+ }
28
+
29
+ function _getNewCalldata(bytes calldata inputData) internal returns (uint256 value, bytes memory newCalldata) {
30
+ bytes4 selector = bytes4(inputData[:4]);
31
+ bytes calldata data = inputData[4:];
32
+
33
+ if (selector == IPActionAddRemoveLiqV3.addLiquiditySingleToken.selector) {
34
+ (
35
+ address v1,
36
+ address v2,
37
+ uint256 v3,
38
+ ApproxParams memory v4,
39
+ TokenInput memory v5,
40
+ LimitOrderData memory v6
41
+ ) = abi.decode(data, (address, address, uint256, ApproxParams, TokenInput, LimitOrderData));
42
+
43
+ value = _scaleTokenInputAndGetValue(v5);
44
+ newCalldata = abi.encodeWithSelector(selector, v1, v2, v3, v4, v5, v6);
45
+ } else if (selector == IPActionAddRemoveLiqV3.addLiquiditySingleTokenKeepYt.selector) {
46
+ (address v1, address v2, uint256 v3, uint256 v4, TokenInput memory v5) = abi.decode(
47
+ data,
48
+ (address, address, uint256, uint256, TokenInput)
49
+ );
50
+
51
+ value = _scaleTokenInputAndGetValue(v5);
52
+ newCalldata = abi.encodeWithSelector(selector, v1, v2, v3, v4, v5);
53
+ } else {
54
+ revert("UNSUPPORTED_SELECTOR");
55
+ }
56
+ }
57
+
58
+ function _scaleTokenInputAndGetValue(TokenInput memory inp) internal returns (uint256 ethValue) {
59
+ require(inp.swapData.swapType == SwapType.NONE, "SWAP_NOT_ALLOWED"); // the exit call should already swap
60
+
61
+ inp.netTokenIn = _selfBalance(inp.tokenIn);
62
+
63
+ if (inp.tokenIn == NATIVE) {
64
+ ethValue = inp.netTokenIn;
65
+ } else if (!approved[inp.tokenIn]) {
66
+ IERC20(inp.tokenIn).forceApprove(ROUTER, type(uint256).max);
67
+ approved[inp.tokenIn] = true;
68
+ }
69
+ }
70
+ }
@@ -10,8 +10,10 @@ import "../../router/base/MarketApproxLib.sol";
10
10
 
11
11
  import "../../core/libraries/Errors.sol";
12
12
  import "../swap-aggregator/IPSwapAggregator.sol";
13
+ import "./CallbackHelper.sol";
13
14
 
14
- abstract contract ActionBase is TokenHelper, IPLimitOrderType {
15
+ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
16
+ using MarketApproxPtInLib for MarketState;
15
17
  using MarketApproxPtOutLib for MarketState;
16
18
  using PMath for uint256;
17
19
  using PYIndexLib for IPYieldToken;
@@ -236,6 +238,93 @@ abstract contract ActionBase is TokenHelper, IPLimitOrderType {
236
238
  if (netPtOut < minPtOut) revert("Slippage: INSUFFICIENT_PT_OUT");
237
239
  }
238
240
 
241
+ // ----------------- YT SWAP -----------------
242
+
243
+ function _entry_swapExactYtForSy(IPYieldToken YT, LimitOrderData calldata limit) internal view returns (address) {
244
+ return !_isEmptyLimit(limit) ? address(this) : address(YT);
245
+ }
246
+
247
+ function _swapExactYtForSy(
248
+ address receiver,
249
+ address market,
250
+ IStandardizedYield SY,
251
+ IPYieldToken YT,
252
+ uint256 exactYtIn,
253
+ uint256 minSyOut,
254
+ LimitOrderData calldata limit
255
+ ) internal returns (uint256 netSyOut, uint256 netSyFee) {
256
+ uint256 netYtLeft = exactYtIn;
257
+ bool doMarketOrder = true;
258
+
259
+ if (!_isEmptyLimit(limit)) {
260
+ (netYtLeft, netSyOut, netSyFee, doMarketOrder) = _fillLimit(receiver, YT, netYtLeft, limit);
261
+ if (doMarketOrder) {
262
+ _transferOut(address(YT), address(YT), netYtLeft);
263
+ }
264
+ }
265
+
266
+ if (doMarketOrder) {
267
+ uint256 preSyBalance = SY.balanceOf(receiver);
268
+
269
+ (, uint256 netSyFeeMarket) = IPMarket(market).swapSyForExactPt(
270
+ address(YT),
271
+ netYtLeft, // exactPtOut = netYtLeft
272
+ _encodeSwapYtForSy(receiver, YT)
273
+ );
274
+
275
+ // avoid stack issue
276
+ netSyFee += netSyFeeMarket;
277
+ netSyOut += SY.balanceOf(receiver) - preSyBalance;
278
+ }
279
+
280
+ if (netSyOut < minSyOut) revert("Slippage: INSUFFICIENT_SY_OUT");
281
+ }
282
+
283
+ function _entry_swapExactSyForYt(IPYieldToken YT, LimitOrderData calldata limit) internal view returns (address) {
284
+ return !_isEmptyLimit(limit) ? address(this) : address(YT);
285
+ }
286
+
287
+ function _swapExactSyForYt(
288
+ address receiver,
289
+ address market,
290
+ IStandardizedYield SY,
291
+ IPYieldToken YT,
292
+ uint256 exactSyIn,
293
+ uint256 minYtOut,
294
+ ApproxParams calldata guessYtOut,
295
+ LimitOrderData calldata limit
296
+ ) internal returns (uint256 netYtOut, uint256 netSyFee) {
297
+ uint256 netSyLeft = exactSyIn;
298
+ bool doMarketOrder = true;
299
+
300
+ if (!_isEmptyLimit(limit)) {
301
+ (netSyLeft, netYtOut, netSyFee, doMarketOrder) = _fillLimit(receiver, SY, netSyLeft, limit);
302
+ if (doMarketOrder) {
303
+ _transferOut(address(SY), address(YT), netSyLeft);
304
+ }
305
+ }
306
+
307
+ if (doMarketOrder) {
308
+ (uint256 netYtOutMarket, ) = _readMarket(market).approxSwapExactSyForYt(
309
+ YT.newIndex(),
310
+ netSyLeft,
311
+ block.timestamp,
312
+ guessYtOut
313
+ );
314
+
315
+ (, uint256 netSyFeeMarket) = IPMarket(market).swapExactPtForSy(
316
+ address(YT),
317
+ netYtOutMarket, // exactPtIn = netYtOut
318
+ _encodeSwapExactSyForYt(receiver, YT)
319
+ );
320
+
321
+ netYtOut += netYtOutMarket;
322
+ netSyFee += netSyFeeMarket;
323
+ }
324
+
325
+ if (netYtOut < minYtOut) revert("Slippage: INSUFFICIENT_YT_OUT");
326
+ }
327
+
239
328
  // ----------------- LIMIT ORDERS -----------------
240
329
  function _fillLimit(
241
330
  address receiver,
@@ -21,10 +21,18 @@
21
21
  "yieldContractFactory": "0x70ee0A6DB4F5a2Dc4d9c0b57bE97B9987e75BAFD",
22
22
  "marketFactory": "0x27b1dAcd74688aF24a64BD3C9C1B143118740784",
23
23
  "router": "0x888888888889758F76e7103c6CbF23ABbF58F946",
24
+ "routerFacets": {
25
+ "ActionAddRemoveLiqV3": "0xb7631b93189900745Db51d960Ba64b8E6C658843",
26
+ "ActionSwapPTV3": "0xbFA3aAD535e1b996396698f89FFeC7ada0df17E8",
27
+ "ActionSwapYTV3": "0x8903dBFFcA66b3Fbc027aC81912ea64Fa61A5219",
28
+ "ActionMiscV3": "0x9afd337e41f59e5c2e6f2be05f32e958a4dbcd9a",
29
+ "ActionCallbackV3": "0x997FBC511a8Ad11F84a400feACD66E2A3fa805d2",
30
+ "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
31
+ },
24
32
  "routerStatic": "0x263833d47eA3fA4a30f269323aba6a107f9eB14C",
25
33
  "pendleSwap": "0x1e8b6Ac39f8A33f46a6Eb2D1aCD1047B99180AD1",
26
34
  "routerHelper": "0x462206b11d185ef6F64B41D344325401C37EC335",
27
- "ptAndLpOracle": "0x66a1096C6366b2529274dF4f5D8247827fe4CEA8",
35
+ "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
28
36
  "yieldContractFactoryV3": "0xdF3601014686674e53d1Fa52F7602525483F9122",
29
37
  "marketFactoryV3": "0x1A6fCc85557BC4fB7B534ed835a03EF056552D52",
30
38
  "poolDeployHelper": "0x1E4c3DE54DecbD51F1F9a6b4eaFd265FAc04e831",
@@ -35,5 +43,6 @@
35
43
  "votingController": "0x44087E105137a5095c008AaB6a6530182821F2F0",
36
44
  "gaugeController": "0x47D74516B33eD5D70ddE7119A40839f6Fcc24e57",
37
45
  "feeDistributor": "0xd7b34a6fDCb2A7ceD2115FF7f5fdD72aa6aA4dE2",
38
- "feeDistributorV2": "0x8C237520a8E14D658170A633D96F8e80764433b9"
46
+ "feeDistributorV2": "0x8C237520a8E14D658170A633D96F8e80764433b9",
47
+ "reflector": "0x5a04b737D770Ed478cb9b65D1864c24d2E9Ca227"
39
48
  }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "SY Karak sUSDe",
3
+ "SY": "0x1b641894e66aec7bf5ab86517e8d81763cc8e19e",
4
+ "YT": "0xdd68f5D26Bf1182d6b241108bfC01f95C030502b",
5
+ "PT": "0xd351de53277c4218CC29f793263FB60E2fcFC1dC",
6
+ "market": "0xB1f587B354a4a363f5332e88effbbC2E4961250A",
7
+ "expiry": 1727308800,
8
+ "scalarRoot": "3480095243000000000",
9
+ "initAnchor": "1243231806000000000",
10
+ "lnFeeRateRoot": "2995508979000000",
11
+ "deployTxHash": "0xb133757035e5f335a6070099cca7dfc7f34b3d2078cb3929db627a5e5228f50b",
12
+ "deployBlockNumber": 19967918,
13
+ "reversedFee": 0.2999999999199199
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "SY Karak USDe",
3
+ "SY": "0xfe2d379117895fa6144b209c13894a17ab18c86c",
4
+ "YT": "0x2e40D7Cfee1e7D31d1F4875e6F33B2c9a17038fF",
5
+ "PT": "0x791c1E9D38029092E8aD1E252d0Bb97261809A2c",
6
+ "market": "0x1BCBDB8c8652345A5ACF04e6E74f70086c68FEfC",
7
+ "expiry": 1727308800,
8
+ "scalarRoot": "3070185566000000000",
9
+ "initAnchor": "1247051504000000000",
10
+ "lnFeeRateRoot": "2995508979000000",
11
+ "deployTxHash": "0xa74e87ad2f48154eb1192498122c80d99c11c2938cc2fd8bf3d6330132e9f520",
12
+ "deployBlockNumber": 19967899,
13
+ "reversedFee": 0.2999999999199199
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "SY Karak eETH",
3
+ "SY": "0x8db42af6b2de9e8aee47f3423570d8e9c3873796",
4
+ "YT": "0x5439c3Ef0072e4A19C44478CDF947F5d957e66C7",
5
+ "PT": "0x5E9e4bFd81c8c03F8289b827C9B92332789b6fe1",
6
+ "market": "0x18bAFcaBf2d5898956AE6AC31543d9657a604165",
7
+ "expiry": 1727308800,
8
+ "scalarRoot": "3612434850000000000",
9
+ "initAnchor": "1216826907000000000",
10
+ "lnFeeRateRoot": "2995508979000000",
11
+ "deployTxHash": "0x26bba852c4385f67503265fb85d16df41325aeec85668cea7a8b062d7d1fbe7a",
12
+ "deployBlockNumber": 19967933,
13
+ "reversedFee": 0.2999999999199199
14
+ }
@@ -20,10 +20,18 @@
20
20
  "yieldContractFactory": "0xf5a7De2D276dbda3EEf1b62A9E718EFf4d29dDC8",
21
21
  "marketFactory": "0x17F100fB4bE2707675c6439468d38249DD993d58",
22
22
  "router": "0x888888888889758F76e7103c6CbF23ABbF58F946",
23
+ "routerFacets": {
24
+ "ActionAddRemoveLiqV3": "0xb7631b93189900745Db51d960Ba64b8E6C658843",
25
+ "ActionSwapPTV3": "0xbFA3aAD535e1b996396698f89FFeC7ada0df17E8",
26
+ "ActionSwapYTV3": "0x8903dBFFcA66b3Fbc027aC81912ea64Fa61A5219",
27
+ "ActionMiscV3": "0x9afd337e41f59e5c2e6f2be05f32e958a4dbcd9a",
28
+ "ActionCallbackV3": "0x997FBC511a8Ad11F84a400feACD66E2A3fa805d2",
29
+ "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
30
+ },
23
31
  "routerStatic": "0x704478Dd72FD7F9B83d1F1e0fc18C14B54F034d0",
24
32
  "pendleSwap": "0x9B9f96786B1051F5c72c517e7DEB189CF66E704F",
25
33
  "routerHelper": "0x462206b11d185ef6F64B41D344325401C37EC335",
26
- "ptAndLpOracle": "0x15Aab5C1ab800A9e457d9f4335e8A2Dc9f6Ad707",
34
+ "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
27
35
  "yieldContractFactoryV3": "0xfa6B22FC4c3Ad88B68c16b3061a16b1714F6Bd57",
28
36
  "marketFactoryV3": "0x4A2B38b9cBd83c86F261a4d64c243795D4d44aBC",
29
37
  "poolDeployHelper": "0xc4A9d8b486f388CC0E4168d2904277e8C8372FA3",
@@ -31,5 +39,6 @@
31
39
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
32
40
  "receiverEndpoint": "0xED18de5442297a4Ec1ce59C7c7d9427Adc2A012b",
33
41
  "vePendle": "0xd5C47D2383Fddc19596489280C0A33AC42b2bB18",
34
- "gaugeController": "0x6875e4A945E498FE1B90BbB13CFbAF0b68658C9C"
42
+ "gaugeController": "0x6875e4A945E498FE1B90BbB13CFbAF0b68658C9C",
43
+ "reflector": "0x5a04b737D770Ed478cb9b65D1864c24d2E9Ca227"
35
44
  }
@@ -20,10 +20,18 @@
20
20
  "yieldContractFactory": "0x28dE02Ac3c3F5ef427e55c321F73fDc7F192e8E4",
21
21
  "marketFactory": "0xf5a7De2D276dbda3EEf1b62A9E718EFf4d29dDC8",
22
22
  "router": "0x888888888889758F76e7103c6CbF23ABbF58F946",
23
+ "routerFacets": {
24
+ "ActionAddRemoveLiqV3": "0xb7631b93189900745Db51d960Ba64b8E6C658843",
25
+ "ActionSwapPTV3": "0xbFA3aAD535e1b996396698f89FFeC7ada0df17E8",
26
+ "ActionSwapYTV3": "0x8903dBFFcA66b3Fbc027aC81912ea64Fa61A5219",
27
+ "ActionMiscV3": "0x9afd337e41f59e5c2e6f2be05f32e958a4dbcd9a",
28
+ "ActionCallbackV3": "0x997FBC511a8Ad11F84a400feACD66E2A3fa805d2",
29
+ "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
30
+ },
23
31
  "routerStatic": "0xAdB09F65bd90d19e3148D9ccb693F3161C6DB3E8",
24
32
  "pendleSwap": "0x63a45E0B2686F7be77Bb85735c35704D1046459a",
25
33
  "routerHelper": "0x462206b11d185ef6F64B41D344325401C37EC335",
26
- "ptAndLpOracle": "0x1Fd95db7B7C0067De8D45C0cb35D59796adfD187",
34
+ "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
27
35
  "yieldContractFactoryV3": "0xEb38531db128EcA928aea1B1CE9E5609B15ba146",
28
36
  "marketFactoryV3": "0x2FCb47B58350cD377f94d3821e7373Df60bD9Ced",
29
37
  "poolDeployHelper": "0x644f83C584E9B109518726d5bEa3FF615548f88b",
@@ -33,5 +41,6 @@
33
41
  "vePendle": "0x3209E9412cca80B18338f2a56ADA59c484c39644",
34
42
  "gaugeController": "0x1e56299ebc8a1010cec26005d12e3e5c5cc2db00",
35
43
  "arbMerkleDistribution": "0x23a102e78D1FF1645a3666691495174764a5FCAF",
36
- "linearDistributor": "0x83d85AEDD308261d847C3eb8d7146457bD8F38E8"
44
+ "linearDistributor": "0x83d85AEDD308261d847C3eb8d7146457bD8F38E8",
45
+ "reflector": "0x5a04b737D770Ed478cb9b65D1864c24d2E9Ca227"
37
46
  }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "SY Camelot",
3
+ "SY": "0xc79d8a2aa6d769138e599d4dbc30569c9870a6ee",
4
+ "YT": "0x6382276be546b4816a72a9ef08c52575e569dda0",
5
+ "PT": "0xcef75d0914d183c8eadfafaea9dfef688aaffcf3",
6
+ "market": "0xe9e114d1b119bbdeb7a35e1ce3c82db01622ada2",
7
+ "expiry": 1750896000,
8
+ "scalarRoot": "13559889929000000000",
9
+ "initAnchor": "1206279539000000000",
10
+ "lnFeeRateRoot": "999500333000000",
11
+ "deployTxHash": "0x3da72680ebb07a420f9e62854769dff7391abd72448916014bc95ef120a65b51",
12
+ "deployBlockNumber": 217875356,
13
+ "reversedFee": 0.09999999999164011
14
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "SY rsETH",
3
+ "SY": "0xf176fB51F4eB826136a54FDc71C50fCd2202E272",
4
+ "YT": "0x2FDc424946AA72D42E2F897447d7c335E64845F0",
5
+ "PT": "0x30c98c0139B62290E26aC2a2158AC341Dcaf1333",
6
+ "market": "0xED99fC8bdB8E9e7B8240f62f69609a125A0Fbf14",
7
+ "expiry": 1727308800,
8
+ "scalarRoot": "7770558179000000000",
9
+ "initAnchor": "1110275954000000000",
10
+ "lnFeeRateRoot": "2995508979000000"
11
+ }
@@ -17,9 +17,17 @@
17
17
  "baseCodeSplitter": "0x3d622b0ac50552d6283C7efE6EAdfc98aD0f6cB7",
18
18
  "PENDLE": "0xd27B18915e7acc8FD6Ac75DB6766a80f8D2f5729",
19
19
  "router": "0x888888888889758F76e7103c6CbF23ABbF58F946",
20
+ "routerFacets": {
21
+ "ActionAddRemoveLiqV3": "0xb7631b93189900745Db51d960Ba64b8E6C658843",
22
+ "ActionSwapPTV3": "0xbFA3aAD535e1b996396698f89FFeC7ada0df17E8",
23
+ "ActionSwapYTV3": "0x8903dBFFcA66b3Fbc027aC81912ea64Fa61A5219",
24
+ "ActionMiscV3": "0x9afd337e41f59e5c2e6f2be05f32e958a4dbcd9a",
25
+ "ActionCallbackV3": "0x997FBC511a8Ad11F84a400feACD66E2A3fa805d2",
26
+ "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
27
+ },
20
28
  "routerStatic": "0xCAd502Bb55d1A3F79952F969BFF3f011CF30a94a",
21
29
  "pendleSwap": "0x30d1dBD3CC0bD3217fA048596a7cd6932D205438",
22
- "ptAndLpOracle": "0xADC3285cFC28c21b59A1C2d177eEb9ED323178dC",
30
+ "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
23
31
  "yieldContractFactoryV3": "0x964840644B88C583500F473E4B829Ab629aF96A8",
24
32
  "marketFactoryV3": "0xD228EC1f7D4313fe321fab511A872475D07F5bA6",
25
33
  "poolDeployHelper": "0x01D0A833C3aD951e37E6f9bf5ecE86e519fF8a0c",
@@ -27,5 +35,6 @@
27
35
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
28
36
  "receiverEndpoint": "0xf799E4c029d14f41Dc1918C9A4C67242F565710e",
29
37
  "vePendle": "0x30c6d4e892871220B5Ab66c10db577da96Fb974b",
30
- "gaugeController": "0x428f2f93afAc3F96B0DE59854038c585e06165C8"
38
+ "gaugeController": "0x428f2f93afAc3F96B0DE59854038c585e06165C8",
39
+ "reflector": "0x5a04b737D770Ed478cb9b65D1864c24d2E9Ca227"
31
40
  }
@@ -20,10 +20,18 @@
20
20
  "yieldContractFactory": "0xa2530b4cfBF271e2B409A05C2CE520e4cB5fCc88",
21
21
  "marketFactory": "0x2bEa6BfD8fbFF45aA2a893EB3B6d85D10EFcC70E",
22
22
  "router": "0x888888888889758F76e7103c6CbF23ABbF58F946",
23
+ "routerFacets": {
24
+ "ActionAddRemoveLiqV3": "0xb7631b93189900745Db51d960Ba64b8E6C658843",
25
+ "ActionSwapPTV3": "0xbFA3aAD535e1b996396698f89FFeC7ada0df17E8",
26
+ "ActionSwapYTV3": "0x8903dBFFcA66b3Fbc027aC81912ea64Fa61A5219",
27
+ "ActionMiscV3": "0x9afd337e41f59e5c2e6f2be05f32e958a4dbcd9a",
28
+ "ActionCallbackV3": "0x997FBC511a8Ad11F84a400feACD66E2A3fa805d2",
29
+ "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
30
+ },
23
31
  "routerStatic": "0x2700ADB035F82a11899ce1D3f1BF8451c296eABb",
24
32
  "pendleSwap": "0x439B4d66255eFf74e621FBacb00D7162b588Ff4b",
25
33
  "routerHelper": "0x09D65812dCD0f276e052583d41885cA5C7Dd0086",
26
- "ptAndLpOracle": "0x30c6d4e892871220B5Ab66c10db577da96Fb974b",
34
+ "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
27
35
  "yieldContractFactoryV3": "0x40Ae6da2d92aa3DCb7f8d7a7209FD12BDfcb7C85",
28
36
  "marketFactoryV3": "0xC40fEbF5A33b8C92B187d9be0fD3fe0ac2E4B07c",
29
37
  "poolDeployHelper": "0x73Be47237F12F36203823BAc9A4d80dC798B7015",
@@ -31,5 +39,6 @@
31
39
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
32
40
  "receiverEndpoint": "0x998CF52b2585e05494BF9F2bF502351a9C7FdA8f",
33
41
  "vePendle": "0x8A09574b0401A856d89d1b583eE22E8cb0C5530B",
34
- "gaugeController": "0x704478Dd72FD7F9B83d1F1e0fc18C14B54F034d0"
42
+ "gaugeController": "0x704478Dd72FD7F9B83d1F1e0fc18C14B54F034d0",
43
+ "reflector": "0x5a04b737D770Ed478cb9b65D1864c24d2E9Ca227"
35
44
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@pendle/core-v2",
3
3
  "description": "Core smart contracts of Pendle Protocol.",
4
4
  "license": "BUSL-1.1",
5
- "version": "4.5.2",
5
+ "version": "4.7.0",
6
6
  "homepage": "https://pendle.finance",
7
7
  "keywords": [
8
8
  "pendle",