@pendle/core-v2 5.8.2 → 5.8.3-factory

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 (173) hide show
  1. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiqV3.sol/IPActionAddRemoveLiqV3.dbg.json +1 -1
  2. package/build/artifacts/contracts/interfaces/IPActionMarketAuxStatic.sol/IPActionMarketAuxStatic.dbg.json +1 -1
  3. package/build/artifacts/contracts/interfaces/IPActionMiscV3.sol/IPActionMiscV3.dbg.json +1 -1
  4. package/build/artifacts/contracts/interfaces/IPActionSimple.sol/IPActionSimple.dbg.json +1 -1
  5. package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.dbg.json +1 -1
  6. package/build/artifacts/contracts/interfaces/IPActionStorageV4.sol/IPActionStorageV4.dbg.json +1 -1
  7. package/build/artifacts/contracts/interfaces/IPActionSwapPTV3.sol/IPActionSwapPTV3.dbg.json +1 -1
  8. package/build/artifacts/contracts/interfaces/IPActionSwapYTV3.sol/IPActionSwapYTV3.dbg.json +1 -1
  9. package/build/artifacts/contracts/interfaces/IPAllActionV3.sol/IPAllActionV3.dbg.json +1 -1
  10. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionAddRemoveLiqV3Events.dbg.json +1 -1
  11. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionMiscV3Events.dbg.json +1 -1
  12. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionStorageEvents.dbg.json +1 -1
  13. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionSwapPTV3Events.dbg.json +1 -1
  14. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionSwapYTV3Events.dbg.json +1 -1
  15. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPAllEventsV3.dbg.json +1 -1
  16. package/build/artifacts/contracts/interfaces/IPCommonSYFactory.sol/IPCommonSYFactory.dbg.json +1 -1
  17. package/build/artifacts/contracts/interfaces/IPCommonSYFactory.sol/IPCommonSYFactory.json +34 -0
  18. package/build/artifacts/contracts/interfaces/IPMarketSwapNSeed.sol/IPMarketSwapNSeed.dbg.json +4 -0
  19. package/build/artifacts/contracts/interfaces/IPMarketSwapNSeed.sol/IPMarketSwapNSeed.json +10 -0
  20. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
  21. package/build/artifacts/contracts/offchain-helpers/SwapNSeed.sol/MarketSwapNSeed.dbg.json +4 -0
  22. package/build/artifacts/contracts/offchain-helpers/SwapNSeed.sol/MarketSwapNSeed.json +232 -0
  23. package/build/artifacts/contracts/offchain-helpers/deploy/PendleCommonPoolDeployHelperV2.sol/PendleCommonPoolDeployHelperV2.dbg.json +1 -1
  24. package/build/artifacts/contracts/offchain-helpers/deploy/PendleCommonPoolDeployHelperV2.sol/PendleCommonPoolDeployHelperV2.json +320 -2
  25. package/build/artifacts/contracts/offchain-helpers/deploy/PendleCommonSYFactory.sol/PendleCommonSYFactory.dbg.json +1 -1
  26. package/build/artifacts/contracts/offchain-helpers/deploy/PendleCommonSYFactory.sol/PendleCommonSYFactory.json +56 -3
  27. package/build/artifacts/contracts/offchain-helpers/deploy/PendlePoolDeployHelper.sol/PendlePoolDeployHelper.dbg.json +1 -1
  28. package/build/artifacts/contracts/offchain-helpers/deploy/PendlePoolDeployHelper.sol/PendlePoolDeployHelper.json +2 -2
  29. package/build/artifacts/contracts/offchain-helpers/deploy/PendlePoolDeployHelperV2.sol/PendlePoolDeployHelperV2.dbg.json +1 -1
  30. package/build/artifacts/contracts/offchain-helpers/deploy/PendlePoolDeployHelperV2.sol/PendlePoolDeployHelperV2.json +2 -2
  31. package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.dbg.json +1 -1
  32. package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.json +2 -2
  33. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.dbg.json +1 -1
  34. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.json +2 -2
  35. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.dbg.json +1 -1
  36. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.json +2 -2
  37. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.dbg.json +1 -1
  38. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.json +2 -2
  39. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.dbg.json +1 -1
  40. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.json +2 -2
  41. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.dbg.json +1 -1
  42. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.json +2 -2
  43. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.dbg.json +1 -1
  44. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.json +2 -2
  45. package/build/artifacts/contracts/offchain-helpers/router-static/base/MarketApproxLibV1.sol/MarketApproxPtInLibV1.dbg.json +1 -1
  46. package/build/artifacts/contracts/offchain-helpers/router-static/base/MarketApproxLibV1.sol/MarketApproxPtInLibV1.json +2 -2
  47. package/build/artifacts/contracts/offchain-helpers/router-static/base/MarketApproxLibV1.sol/MarketApproxPtOutLibV1.dbg.json +1 -1
  48. package/build/artifacts/contracts/offchain-helpers/router-static/base/MarketApproxLibV1.sol/MarketApproxPtOutLibV1.json +2 -2
  49. package/build/artifacts/contracts/offchain-helpers/router-static/base/StorageLayout.sol/StorageLayout.dbg.json +1 -1
  50. package/build/artifacts/contracts/router/ActionAddRemoveLiqV3.sol/ActionAddRemoveLiqV3.dbg.json +1 -1
  51. package/build/artifacts/contracts/router/ActionAddRemoveLiqV3.sol/ActionAddRemoveLiqV3.json +2 -2
  52. package/build/artifacts/contracts/router/ActionMiscV3.sol/ActionMiscV3.dbg.json +1 -1
  53. package/build/artifacts/contracts/router/ActionMiscV3.sol/ActionMiscV3.json +2 -2
  54. package/build/artifacts/contracts/router/ActionSimple.sol/ActionSimple.dbg.json +1 -1
  55. package/build/artifacts/contracts/router/ActionSimple.sol/ActionSimple.json +2 -2
  56. package/build/artifacts/contracts/router/ActionStorageV4.sol/ActionStorageV4.dbg.json +1 -1
  57. package/build/artifacts/contracts/router/ActionStorageV4.sol/ActionStorageV4.json +2 -2
  58. package/build/artifacts/contracts/router/ActionSwapPTV3.sol/ActionSwapPTV3.dbg.json +1 -1
  59. package/build/artifacts/contracts/router/ActionSwapPTV3.sol/ActionSwapPTV3.json +2 -2
  60. package/build/artifacts/contracts/router/ActionSwapYTV3.sol/ActionSwapYTV3.dbg.json +1 -1
  61. package/build/artifacts/contracts/router/ActionSwapYTV3.sol/ActionSwapYTV3.json +2 -2
  62. package/build/artifacts/contracts/router/PendleRouterV4.sol/PendleRouterV4.dbg.json +1 -1
  63. package/build/artifacts/contracts/router/PendleRouterV4.sol/PendleRouterV4.json +2 -2
  64. package/build/artifacts/contracts/router/Reflector.sol/Reflector.dbg.json +1 -1
  65. package/build/artifacts/contracts/router/Reflector.sol/Reflector.json +2 -2
  66. package/build/artifacts/contracts/router/base/ActionBase.sol/ActionBase.dbg.json +1 -1
  67. package/build/artifacts/contracts/router/base/ActionDelegateBase.sol/ActionDelegateBase.dbg.json +1 -1
  68. package/build/artifacts/contracts/router/base/ActionDelegateBase.sol/ActionDelegateBase.json +2 -2
  69. package/build/artifacts/contracts/router/math/ApproxStateLib.sol/ApproxStateLib.dbg.json +1 -1
  70. package/build/artifacts/contracts/router/math/ApproxStateLib.sol/ApproxStateLib.json +2 -2
  71. package/build/artifacts/contracts/router/math/MarketApproxLibOnchain.sol/MarketApproxPtInLibOnchain.dbg.json +1 -1
  72. package/build/artifacts/contracts/router/math/MarketApproxLibOnchain.sol/MarketApproxPtInLibOnchain.json +2 -2
  73. package/build/artifacts/contracts/router/math/MarketApproxLibOnchain.sol/MarketApproxPtOutLibOnchain.dbg.json +1 -1
  74. package/build/artifacts/contracts/router/math/MarketApproxLibOnchain.sol/MarketApproxPtOutLibOnchain.json +2 -2
  75. package/build/artifacts/contracts/router/math/MarketApproxLibV2.sol/MarketApproxPtInLibV2.dbg.json +1 -1
  76. package/build/artifacts/contracts/router/math/MarketApproxLibV2.sol/MarketApproxPtInLibV2.json +2 -2
  77. package/build/artifacts/contracts/router/math/MarketApproxLibV2.sol/MarketApproxPtOutLibV2.dbg.json +1 -1
  78. package/build/artifacts/contracts/router/math/MarketApproxLibV2.sol/MarketApproxPtOutLibV2.json +2 -2
  79. package/build/artifacts/contracts/router/swap-aggregator/IPSwapAggregator.sol/IPSwapAggregator.dbg.json +1 -1
  80. package/build/artifacts/contracts/router/swap-aggregator/OKXScaleHelper.sol/IOKXDexRouter.dbg.json +1 -1
  81. package/build/artifacts/contracts/router/swap-aggregator/OKXScaleHelper.sol/OKXScaleHelper.dbg.json +1 -1
  82. package/build/artifacts/contracts/router/swap-aggregator/OneInchScaleHelper.sol/I1inchAggregationRouterV6.dbg.json +4 -0
  83. package/build/artifacts/contracts/router/swap-aggregator/OneInchScaleHelper.sol/I1inchAggregationRouterV6.json +214 -0
  84. package/build/artifacts/contracts/router/swap-aggregator/OneInchScaleHelper.sol/I1inchCommonType.dbg.json +4 -0
  85. package/build/artifacts/contracts/router/swap-aggregator/OneInchScaleHelper.sol/I1inchCommonType.json +10 -0
  86. package/build/artifacts/contracts/router/swap-aggregator/OneInchScaleHelper.sol/OneInchScaleHelper.dbg.json +4 -0
  87. package/build/artifacts/contracts/router/swap-aggregator/OneInchScaleHelper.sol/OneInchScaleHelper.json +10 -0
  88. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/IKyberScalingHelper.dbg.json +1 -1
  89. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/IOdosRouterV2.dbg.json +1 -1
  90. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwap.dbg.json +1 -1
  91. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwap.json +2 -2
  92. package/contracts/interfaces/IPCommonSYFactory.sol +7 -0
  93. package/contracts/interfaces/IPMarketSwapNSeed.sol +10 -0
  94. package/contracts/offchain-helpers/SwapNSeed.sol +221 -0
  95. package/contracts/offchain-helpers/deploy/PendleCommonPoolDeployHelperV2.sol +55 -0
  96. package/contracts/offchain-helpers/deploy/PendleCommonSYFactory.sol +34 -1
  97. package/contracts/offchain-helpers/deploy/PendlePoolDeployHelperV2.sol +5 -1
  98. package/contracts/router/swap-aggregator/IPSwapAggregator.sol +1 -1
  99. package/contracts/router/swap-aggregator/OneInchScaleHelper.sol +120 -0
  100. package/contracts/router/swap-aggregator/PendleSwap.sol +4 -4
  101. package/deployments/1-core.json +2 -2
  102. package/deployments/10-core.json +2 -2
  103. package/deployments/146-core.json +9 -8
  104. package/deployments/42161-core.json +2 -2
  105. package/deployments/5000-core.json +2 -2
  106. package/deployments/56-core.json +2 -2
  107. package/deployments/80094-core.json +2 -2
  108. package/deployments/8453-core.json +2 -2
  109. package/deployments/merkle-distribution/2023-04-27.json +3342 -0
  110. package/deployments/merkle-distribution/2023-05-25.json +3749 -0
  111. package/deployments/merkle-distribution/2023-06-29.json +4729 -0
  112. package/deployments/merkle-distribution/2023-07-27.json +5525 -0
  113. package/deployments/merkle-distribution/2023-08-31.json +6135 -0
  114. package/deployments/merkle-distribution/2023-09-28.json +6770 -0
  115. package/deployments/merkle-distribution/2023-10-26.json +7300 -0
  116. package/deployments/merkle-distribution/2023-11-30.json +7730 -0
  117. package/deployments/merkle-distribution/2023-12-28.json +8225 -0
  118. package/deployments/merkle-distribution/2024-01-25.json +9615 -0
  119. package/deployments/merkle-distribution/2024-02-29.json +12125 -0
  120. package/deployments/merkle-distribution/2024-03-28.json +12725 -0
  121. package/deployments/merkle-distribution/2024-04-25.json +14930 -0
  122. package/deployments/merkle-distribution/2024-05-30.json +17255 -0
  123. package/deployments/merkle-distribution/2024-06-27.json +18995 -0
  124. package/deployments/merkle-distribution/2024-07-25.json +20365 -0
  125. package/deployments/merkle-distribution/2024-08-29.json +21525 -0
  126. package/deployments/merkle-distribution/2024-09-26-retroactive.json +21525 -0
  127. package/deployments/merkle-distribution/2024-09-26.json +22340 -0
  128. package/deployments/merkle-distribution/2024-10-31.json +23370 -0
  129. package/deployments/merkle-distribution/2024-11-28.json +24040 -0
  130. package/deployments/merkle-distribution/2024-12-26.json +25555 -0
  131. package/deployments/merkle-distribution/2024-12-31-snapshot.json +65767 -0
  132. package/deployments/merkle-distribution/2025-01-30.json +28060 -0
  133. package/deployments/merkle-distribution/2025-02-27.json +29930 -0
  134. package/package.json +1 -1
  135. package/typechain-types/ERC1967Proxy.ts +97 -0
  136. package/typechain-types/IPCommonSYFactory.ts +49 -0
  137. package/typechain-types/ITransparentUpgradeableProxy.ts +235 -0
  138. package/typechain-types/MarketSwapNSeed.ts +222 -0
  139. package/typechain-types/PendleCommonPoolDeployHelperV2.ts +267 -0
  140. package/typechain-types/PendleCommonSYFactory.ts +65 -0
  141. package/typechain-types/TransparentUpgradeableProxy.ts +97 -0
  142. package/typechain-types/factories/ActionAddRemoveLiqV3__factory.ts +1 -1
  143. package/typechain-types/factories/ActionInfoStatic__factory.ts +1 -1
  144. package/typechain-types/factories/ActionMarketAuxStatic__factory.ts +1 -1
  145. package/typechain-types/factories/ActionMarketCoreStatic__factory.ts +1 -1
  146. package/typechain-types/factories/ActionMintRedeemStatic__factory.ts +1 -1
  147. package/typechain-types/factories/ActionMiscV3__factory.ts +1 -1
  148. package/typechain-types/factories/ActionSimple__factory.ts +1 -1
  149. package/typechain-types/factories/ActionStorageStatic__factory.ts +1 -1
  150. package/typechain-types/factories/ActionStorageV4__factory.ts +1 -1
  151. package/typechain-types/factories/ActionSwapPTV3__factory.ts +1 -1
  152. package/typechain-types/factories/ActionSwapYTV3__factory.ts +1 -1
  153. package/typechain-types/factories/ActionVePendleStatic__factory.ts +1 -1
  154. package/typechain-types/factories/ERC1967Proxy__factory.ts +145 -0
  155. package/typechain-types/factories/IPCommonSYFactory__factory.ts +34 -0
  156. package/typechain-types/factories/ITransparentUpgradeableProxy__factory.ts +145 -0
  157. package/typechain-types/factories/MarketSwapNSeed__factory.ts +287 -0
  158. package/typechain-types/factories/PendleCommonPoolDeployHelperV2__factory.ts +319 -1
  159. package/typechain-types/factories/PendleCommonSYFactory__factory.ts +62 -4
  160. package/typechain-types/factories/PendlePoolDeployHelperV2__factory.ts +1 -1
  161. package/typechain-types/factories/PendlePoolDeployHelper__factory.ts +1 -1
  162. package/typechain-types/factories/PendleRouterStatic__factory.ts +1 -1
  163. package/typechain-types/factories/PendleRouterV4__factory.ts +1 -1
  164. package/typechain-types/factories/PendleSwap__factory.ts +1 -1
  165. package/typechain-types/factories/Reflector__factory.ts +1 -1
  166. package/typechain-types/factories/TransparentUpgradeableProxy__factory.ts +160 -0
  167. package/typechain-types/hardhat.d.ts +45 -0
  168. package/typechain-types/index.ts +10 -0
  169. package/build/artifacts/contracts/router/swap-aggregator/ParaswapScaleHelper.sol/IAugustusV6.dbg.json +0 -4
  170. package/build/artifacts/contracts/router/swap-aggregator/ParaswapScaleHelper.sol/IAugustusV6.json +0 -577
  171. package/build/artifacts/contracts/router/swap-aggregator/ParaswapScaleHelper.sol/ParaswapScaleHelper.dbg.json +0 -4
  172. package/build/artifacts/contracts/router/swap-aggregator/ParaswapScaleHelper.sol/ParaswapScaleHelper.json +0 -10
  173. package/contracts/router/swap-aggregator/ParaswapScaleHelper.sol +0 -252
@@ -0,0 +1,221 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.17;
4
+
5
+ import "../interfaces/IPMarket.sol";
6
+ import "../router/math/MarketApproxLibOnchain.sol";
7
+ import "../router/base/ActionBase.sol";
8
+ import "../interfaces/IPMarketSwapNSeed.sol";
9
+
10
+ contract MarketSwapNSeed is ActionBase, IPMarketSwapNSeed {
11
+ using PMath for uint256;
12
+ using PMath for int256;
13
+ using PYIndexLib for PYIndex;
14
+ using MarketMathCore for MarketState;
15
+ using PYIndexLib for IPYieldToken;
16
+
17
+ address public immutable router;
18
+
19
+ uint256 public constant MAX_ITERATIONS = 30;
20
+
21
+ struct MarketTokens {
22
+ IStandardizedYield SY;
23
+ IPPrincipalToken PT;
24
+ IPYieldToken YT;
25
+ }
26
+
27
+ constructor(address _router) {
28
+ router = _router;
29
+ }
30
+
31
+ function swapNSeed(
32
+ address receiver,
33
+ address market,
34
+ uint256 minLpOut,
35
+ uint256 minYtOut,
36
+ TokenInput calldata input,
37
+ SwapNSeedData calldata snsData
38
+ ) external payable returns (int256 amountPYToAccount, uint256 netLpOut, uint256 netYtOut) {
39
+ MarketTokens memory tokens;
40
+ (tokens.SY, tokens.PT, tokens.YT) = IPMarket(market).readTokens();
41
+
42
+ _mintSyFromToken(address(this), address(tokens.SY), 1, input);
43
+ amountPYToAccount = _swapBeforeSeeding(receiver, market, tokens, snsData);
44
+ (netLpOut, netYtOut, ) = _addLiquiditySingleSyKeepYt(
45
+ receiver,
46
+ market,
47
+ tokens.SY,
48
+ tokens.YT,
49
+ _selfBalance(tokens.SY),
50
+ minLpOut,
51
+ minYtOut
52
+ );
53
+ }
54
+
55
+ function _addLiquiditySingleSyKeepYt(
56
+ address receiver,
57
+ address market,
58
+ IStandardizedYield SY,
59
+ IPYieldToken YT,
60
+ uint256 netSyIn,
61
+ uint256 minLpOut,
62
+ uint256 minYtOut
63
+ ) internal returns (uint256 netLpOut, uint256 netYtOut, uint256 netSyMintPy) {
64
+ MarketState memory state = _readMarket(market);
65
+
66
+ PYIndex pyIndex = YT.newIndex();
67
+
68
+ netSyMintPy =
69
+ (netSyIn * state.totalPt.Uint()) /
70
+ (state.totalPt.Uint() + pyIndex.syToAsset(state.totalSy.Uint()));
71
+
72
+ uint256 netSyAddLiquidity = netSyIn - netSyMintPy;
73
+
74
+ // transfer SY to mint PY
75
+ _transferOut(address(SY), address(YT), netSyMintPy);
76
+
77
+ // the rest of SY goes to market
78
+ _transferOut(address(SY), market, netSyAddLiquidity);
79
+
80
+ // PT goes to market, YT goes to receiver
81
+ netYtOut = YT.mintPY(market, receiver);
82
+
83
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netSyAddLiquidity, netYtOut);
84
+
85
+ if (netLpOut < minLpOut) revert("Slippage: INSUFFICIENT_LP_OUT");
86
+ if (netYtOut < minYtOut) revert("Slippage: INSUFFICIENT_YT_OUT");
87
+ }
88
+
89
+ function _swapBeforeSeeding(
90
+ address receiver,
91
+ address market,
92
+ MarketTokens memory tokens,
93
+ SwapNSeedData memory snsData
94
+ ) internal returns (int256 amountPYToAccount) {
95
+ PYIndex index = _getPYIndex(market);
96
+ MarketState memory state = _readMarket(market);
97
+ MarketPreCompute memory comp = state.getMarketPreCompute(index, block.timestamp);
98
+
99
+ if (state.lastLnImpliedRate > snsData.targetLnImpliedRate) {
100
+ // Normalize maxPtToSwap
101
+ snsData.maxPtToSwap = PMath.min(
102
+ snsData.maxPtToSwap,
103
+ MarketApproxPtInLibOnchain.calcSoftMaxPtIn(state, comp)
104
+ );
105
+
106
+ (int256 amountPtToBuy, int256 amountSyToAccount) = _calcAmountPtToBuy(state, comp, index, snsData);
107
+ amountPYToAccount = amountPtToBuy;
108
+
109
+ _transferOut(address(tokens.SY), market, amountSyToAccount.abs());
110
+ IPMarket(market).swapSyForExactPt(receiver, amountPtToBuy.abs(), EMPTY_BYTES);
111
+ } else {
112
+ // Normalize maxPtToSwap
113
+ snsData.maxPtToSwap = PMath.min(
114
+ snsData.maxPtToSwap,
115
+ MarketApproxPtOutLibOnchain.calcMaxPtOut(comp, state.totalPt)
116
+ );
117
+
118
+ amountPYToAccount = _calcAmountPtToSell(state, comp, index, snsData);
119
+ uint256 amountPtToSell = amountPYToAccount.abs();
120
+ uint256 netPyOut = _mintPyFromSy(
121
+ address(this),
122
+ address(tokens.SY),
123
+ address(tokens.YT),
124
+ index.assetToSyUp(amountPtToSell),
125
+ amountPtToSell,
126
+ false
127
+ );
128
+
129
+ _transferOut(address(tokens.PT), market, netPyOut);
130
+ _transferOut(address(tokens.YT), receiver, netPyOut);
131
+
132
+ // this amount of SY will be used to add liquidity in later step
133
+ IPMarket(market).swapExactPtForSy(address(this), amountPtToSell, EMPTY_BYTES);
134
+ }
135
+ }
136
+
137
+ function _calcAmountPtToBuy(
138
+ MarketState memory state,
139
+ MarketPreCompute memory comp,
140
+ PYIndex index,
141
+ SwapNSeedData memory snsData
142
+ ) internal pure returns (int256 amountPtToSwapToAccount, int256 amountSyToAccount) {
143
+ int256 refAmt = snsData.maxPtToSwap.Int();
144
+ int256 accPtToAccount = 0;
145
+
146
+ int256 lastGoodAmountSyToAccount = 0;
147
+ uint256 lastGoodRate = state.lastLnImpliedRate;
148
+
149
+ for (uint256 iter = 0; iter < MAX_ITERATIONS; ++iter) {
150
+ refAmt /= 2;
151
+ MarketState memory localState = _deepCopy(state);
152
+ int256 curPtToAccount = accPtToAccount + refAmt;
153
+
154
+ // Will not revert. maxPtToBuy should already be normalized
155
+ (int256 localAmountSyToAccount, , ) = localState.calcTrade(comp, index, curPtToAccount);
156
+
157
+ if (localState.lastLnImpliedRate > snsData.targetLnImpliedRate) {
158
+ accPtToAccount += refAmt;
159
+ lastGoodRate = localState.lastLnImpliedRate;
160
+ lastGoodAmountSyToAccount = localAmountSyToAccount;
161
+ }
162
+ }
163
+
164
+ if (PMath.isAApproxB(snsData.targetLnImpliedRate, lastGoodRate, snsData.eps)) {
165
+ amountPtToSwapToAccount = accPtToAccount;
166
+ amountSyToAccount = lastGoodAmountSyToAccount;
167
+ } else {
168
+ revert("_calcAmountPtToBuy: failed");
169
+ }
170
+ }
171
+
172
+ function _calcAmountPtToSell(
173
+ MarketState memory state,
174
+ MarketPreCompute memory comp,
175
+ PYIndex index,
176
+ SwapNSeedData memory snsData
177
+ ) internal pure returns (int256 amountPtToSwapToAccount) {
178
+ int256 refAmt = snsData.maxPtToSwap.Int();
179
+ int256 accPtToAccount = 0;
180
+ uint256 lastGoodRate = state.lastLnImpliedRate;
181
+
182
+ for (uint256 iter = 0; iter < MAX_ITERATIONS; ++iter) {
183
+ refAmt /= 2;
184
+ MarketState memory localState = _deepCopy(state);
185
+ int256 curPtToAccount = accPtToAccount - refAmt;
186
+
187
+ // Will not revert. maxPtToSell should already be normalized
188
+ localState.calcTrade(comp, index, curPtToAccount);
189
+
190
+ if (localState.lastLnImpliedRate < snsData.targetLnImpliedRate) {
191
+ accPtToAccount -= refAmt;
192
+ lastGoodRate = localState.lastLnImpliedRate;
193
+ }
194
+ }
195
+
196
+ if (PMath.isAApproxB(snsData.targetLnImpliedRate, lastGoodRate, snsData.eps)) {
197
+ amountPtToSwapToAccount = accPtToAccount;
198
+ } else {
199
+ revert("_calcAmountPtToSell: failed");
200
+ }
201
+ }
202
+
203
+ function _getPYIndex(address market) internal returns (PYIndex) {
204
+ (, , IPYieldToken YT) = IPMarket(market).readTokens();
205
+ return PYIndex.wrap(YT.pyIndexCurrent());
206
+ }
207
+
208
+ function _deepCopy(MarketState memory state) internal pure returns (MarketState memory copiedState) {
209
+ copiedState.totalPt = state.totalPt;
210
+ copiedState.totalSy = state.totalSy;
211
+ copiedState.totalLp = state.totalLp;
212
+ copiedState.treasury = state.treasury;
213
+
214
+ copiedState.scalarRoot = state.scalarRoot;
215
+ copiedState.expiry = state.expiry;
216
+
217
+ copiedState.lnFeeRateRoot = state.lnFeeRateRoot;
218
+ copiedState.reserveFeePercent = state.reserveFeePercent;
219
+ copiedState.lastLnImpliedRate = state.lastLnImpliedRate;
220
+ }
221
+ }
@@ -11,6 +11,10 @@ contract PendleCommonPoolDeployHelperV2 is PendlePoolDeployHelperV2, BoringOwnab
11
11
  bytes32 public constant ERC4626_NOT_REDEEMABLE_DEPLOY_ID = keccak256("PendleERC4626NotRedeemableToAssetSYV2");
12
12
  bytes32 public constant ERC20_DEPLOY_ID = keccak256("PendleERC20SY");
13
13
 
14
+ bytes32 public constant ERC4626_WITH_ADAPTER_ID = keccak256("PendleERC4626WithAdapterSY");
15
+ bytes32 public constant ERC4626_NO_REDEEM_WITH_ADAPTER_ID = keccak256("PendleERC4626NoRedeemWithAdapterSY");
16
+ bytes32 public constant ERC20_WITH_ADAPTER_ID = keccak256("PendleERC20WithAdapterSY");
17
+
14
18
  address public immutable syFactory;
15
19
 
16
20
  constructor(
@@ -65,4 +69,55 @@ contract PendleCommonPoolDeployHelperV2 is PendlePoolDeployHelperV2, BoringOwnab
65
69
  address SY = IPCommonSYFactory(syFactory).deploySY(ERC20_DEPLOY_ID, constructorParams, syOwner);
66
70
  return deploy5115MarketAndSeedLiquidity(SY, config, tokenToSeedLiqudity, amountToSeed);
67
71
  }
72
+
73
+ function deployERC4626WithAdapterMarket(
74
+ bytes memory constructorParams,
75
+ bytes memory initData,
76
+ PoolConfig memory config,
77
+ address tokenToSeedLiqudity,
78
+ uint256 amountToSeed,
79
+ address syOwner
80
+ ) external returns (PoolDeploymentAddrs memory) {
81
+ address SY = IPCommonSYFactory(syFactory).deployUpgradableSY(
82
+ ERC4626_WITH_ADAPTER_ID,
83
+ constructorParams,
84
+ initData,
85
+ syOwner
86
+ );
87
+ return deploy5115MarketAndSeedLiquidity(SY, config, tokenToSeedLiqudity, amountToSeed);
88
+ }
89
+
90
+ function deployERC4626NoRedeemWithAdapterMarket(
91
+ bytes memory constructorParams,
92
+ bytes memory initData,
93
+ PoolConfig memory config,
94
+ address tokenToSeedLiqudity,
95
+ uint256 amountToSeed,
96
+ address syOwner
97
+ ) external returns (PoolDeploymentAddrs memory) {
98
+ address SY = IPCommonSYFactory(syFactory).deployUpgradableSY(
99
+ ERC4626_NO_REDEEM_WITH_ADAPTER_ID,
100
+ constructorParams,
101
+ initData,
102
+ syOwner
103
+ );
104
+ return deploy5115MarketAndSeedLiquidity(SY, config, tokenToSeedLiqudity, amountToSeed);
105
+ }
106
+
107
+ function deployERC20WithAdapterMarket(
108
+ bytes memory constructorParams,
109
+ bytes memory initData,
110
+ PoolConfig memory config,
111
+ address tokenToSeedLiqudity,
112
+ uint256 amountToSeed,
113
+ address syOwner
114
+ ) external returns (PoolDeploymentAddrs memory) {
115
+ address SY = IPCommonSYFactory(syFactory).deployUpgradableSY(
116
+ ERC20_WITH_ADAPTER_ID,
117
+ constructorParams,
118
+ initData,
119
+ syOwner
120
+ );
121
+ return deploy5115MarketAndSeedLiquidity(SY, config, tokenToSeedLiqudity, amountToSeed);
122
+ }
68
123
  }
@@ -4,6 +4,7 @@ pragma solidity ^0.8.17;
4
4
  import "../../core/libraries/BoringOwnableUpgradeableV2.sol";
5
5
  import "../../core/libraries/BaseSplitCodeFactory.sol";
6
6
  import "../../interfaces/IOwnable.sol";
7
+ import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
7
8
 
8
9
  contract PendleCommonSYFactory is BoringOwnableUpgradeableV2 {
9
10
  error InvalidCreationCode(bytes32 id, CreationCode code);
@@ -21,11 +22,14 @@ contract PendleCommonSYFactory is BoringOwnableUpgradeableV2 {
21
22
 
22
23
  event DeployedSY(bytes32 id, bytes constructorParams, address SY);
23
24
 
25
+ address public immutable proxyAdmin;
26
+
24
27
  mapping(bytes32 => CreationCode) public creationCodes;
25
28
 
26
29
  uint256 public nonce;
27
30
 
28
- constructor() {
31
+ constructor(address _proxyAdmin) {
32
+ proxyAdmin = _proxyAdmin;
29
33
  _disableInitializers();
30
34
  }
31
35
 
@@ -66,4 +70,33 @@ contract PendleCommonSYFactory is BoringOwnableUpgradeableV2 {
66
70
  emit DeployedSY(id, constructorParams, SY);
67
71
  IOwnable(SY).transferOwnership(syOwner, true, false);
68
72
  }
73
+
74
+ function deployUpgradableSY(
75
+ bytes32 id,
76
+ bytes memory constructorParams,
77
+ bytes memory initData,
78
+ address syOwner
79
+ ) external returns (address) {
80
+ CreationCode memory code = creationCodes[id];
81
+
82
+ if (code.creationCodeContractA == address(0)) {
83
+ revert InvalidSYId(id);
84
+ }
85
+
86
+ address implementation = BaseSplitCodeFactory._create2(
87
+ 0,
88
+ keccak256(abi.encode(block.chainid, nonce++)),
89
+ constructorParams,
90
+ code.creationCodeContractA,
91
+ code.creationCodeSizeA,
92
+ code.creationCodeContractB,
93
+ code.creationCodeSizeB
94
+ );
95
+ address proxy = address(new TransparentUpgradeableProxy(implementation, proxyAdmin, initData));
96
+
97
+ emit DeployedSY(id, constructorParams, proxy);
98
+
99
+ IOwnable(proxy).transferOwnership(syOwner, true, false);
100
+ return proxy;
101
+ }
69
102
  }
@@ -95,7 +95,11 @@ contract PendlePoolDeployHelperV2 is TokenHelper {
95
95
  function _createPYIfNotExist(address SY, uint32 expiry) internal returns (address PT, address YT) {
96
96
  PT = IPYieldContractFactory(yieldContractFactory).getPT(SY, uint256(expiry));
97
97
  if (PT == address(0)) {
98
- (PT, YT) = IPYieldContractFactory(yieldContractFactory).createYieldContract(SY, expiry, doCacheIndexSameBlock);
98
+ (PT, YT) = IPYieldContractFactory(yieldContractFactory).createYieldContract(
99
+ SY,
100
+ expiry,
101
+ doCacheIndexSameBlock
102
+ );
99
103
  } else {
100
104
  YT = IPYieldContractFactory(yieldContractFactory).getYT(SY, expiry);
101
105
  }
@@ -23,7 +23,7 @@ enum SwapType {
23
23
  ETH_WETH,
24
24
  OKX,
25
25
  ONE_INCH,
26
- PARASWAP,
26
+ RESERVE_1,
27
27
  RESERVE_2,
28
28
  RESERVE_3,
29
29
  RESERVE_4,
@@ -0,0 +1,120 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity ^0.8.17;
3
+ import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
4
+
5
+ interface I1inchCommonType {
6
+ type Address256 is uint256;
7
+ }
8
+
9
+ abstract contract OneInchScaleHelper is I1inchCommonType {
10
+ function _rescaleMinAmount(
11
+ uint256 minAmount,
12
+ uint256 oldAmount,
13
+ uint256 newAmount
14
+ ) internal pure returns (uint256) {
15
+ return (minAmount * newAmount) / oldAmount;
16
+ }
17
+
18
+ function _oneInchScaling(bytes calldata rawCallData, uint256 actualAmount) internal pure returns (bytes memory) {
19
+ bytes4 selector = bytes4(rawCallData[:4]);
20
+ bytes memory args = rawCallData[4:];
21
+
22
+ if (selector == I1inchAggregationRouterV6.unoswapTo.selector) {
23
+ (Address256 to, Address256 token, uint256 amount, uint256 minReturn, Address256 dex) = abi.decode(
24
+ args,
25
+ (Address256, Address256, uint256, uint256, Address256)
26
+ );
27
+
28
+ minReturn = (minReturn * actualAmount) / amount;
29
+ amount = actualAmount;
30
+ return abi.encodeWithSelector(selector, to, token, amount, minReturn, dex);
31
+ }
32
+
33
+ if (selector == I1inchAggregationRouterV6.unoswapTo2.selector) {
34
+ (Address256 to, Address256 token, uint256 amount, uint256 minReturn, Address256 dex, Address256 dex2) = abi
35
+ .decode(args, (Address256, Address256, uint256, uint256, Address256, Address256));
36
+
37
+ minReturn = (minReturn * actualAmount) / amount;
38
+ amount = actualAmount;
39
+
40
+ return abi.encodeWithSelector(selector, to, token, amount, minReturn, dex, dex2);
41
+ }
42
+
43
+ if (selector == I1inchAggregationRouterV6.unoswapTo3.selector) {
44
+ (
45
+ Address256 to,
46
+ Address256 token,
47
+ uint256 amount,
48
+ uint256 minReturn,
49
+ Address256 dex,
50
+ Address256 dex2,
51
+ Address256 dex3
52
+ ) = abi.decode(args, (Address256, Address256, uint256, uint256, Address256, Address256, Address256));
53
+
54
+ minReturn = (minReturn * actualAmount) / amount;
55
+ amount = actualAmount;
56
+
57
+ return abi.encodeWithSelector(selector, to, token, amount, minReturn, dex, dex2, dex3);
58
+ }
59
+
60
+ if (selector == I1inchAggregationRouterV6.swap.selector) {
61
+ (address executor, I1inchAggregationRouterV6.SwapDescription memory desc, bytes memory data) = abi.decode(
62
+ args,
63
+ (address, I1inchAggregationRouterV6.SwapDescription, bytes)
64
+ );
65
+
66
+ desc.minReturnAmount = (desc.minReturnAmount * actualAmount) / desc.amount;
67
+ desc.amount = actualAmount;
68
+ return abi.encodeWithSelector(selector, executor, desc, data);
69
+ }
70
+
71
+ revert("1inch: unsupported selector");
72
+ }
73
+ }
74
+
75
+ interface I1inchAggregationRouterV6 is I1inchCommonType {
76
+ struct SwapDescription {
77
+ IERC20 srcToken;
78
+ IERC20 dstToken;
79
+ address payable srcReceiver;
80
+ address payable dstReceiver;
81
+ uint256 amount;
82
+ uint256 minReturnAmount;
83
+ uint256 flags;
84
+ }
85
+
86
+ // we ignore the non-to version since it's guarantee this contract won't receive tokens
87
+
88
+ function unoswapTo(
89
+ Address256 to,
90
+ Address256 token,
91
+ uint256 amount,
92
+ uint256 minReturn,
93
+ Address256 dex
94
+ ) external returns (uint256 returnAmount);
95
+
96
+ function unoswapTo2(
97
+ Address256 to,
98
+ Address256 token,
99
+ uint256 amount,
100
+ uint256 minReturn,
101
+ Address256 dex,
102
+ Address256 dex2
103
+ ) external returns (uint256 returnAmount);
104
+
105
+ function unoswapTo3(
106
+ Address256 to,
107
+ Address256 token,
108
+ uint256 amount,
109
+ uint256 minReturn,
110
+ Address256 dex,
111
+ Address256 dex2,
112
+ Address256 dex3
113
+ ) external returns (uint256 returnAmount);
114
+
115
+ function swap(
116
+ address executor,
117
+ SwapDescription calldata desc,
118
+ bytes calldata data
119
+ ) external payable returns (uint256 returnAmount, uint256 spentAmount);
120
+ }
@@ -5,9 +5,9 @@ import "../../core/libraries/TokenHelper.sol";
5
5
  import "./IPSwapAggregator.sol";
6
6
  import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
7
7
  import "./OKXScaleHelper.sol";
8
- import "./ParaswapScaleHelper.sol";
8
+ import "./OneInchScaleHelper.sol";
9
9
 
10
- contract PendleSwap is IPSwapAggregator, TokenHelper, OKXScaleHelper, ParaswapScaleHelper {
10
+ contract PendleSwap is IPSwapAggregator, TokenHelper, OKXScaleHelper, OneInchScaleHelper {
11
11
  using Address for address;
12
12
  using SafeERC20 for IERC20;
13
13
 
@@ -54,10 +54,10 @@ contract PendleSwap is IPSwapAggregator, TokenHelper, OKXScaleHelper, ParaswapSc
54
54
  require(isSuccess, "PendleSwap: Kyber scaling failed");
55
55
  } else if (swapType == SwapType.ODOS) {
56
56
  scaledCallData = _odosScaling(rawCallData, amountIn);
57
- } else if (swapType == SwapType.PARASWAP) {
58
- scaledCallData = _paraswapScaling(rawCallData, amountIn);
59
57
  } else if (swapType == SwapType.OKX) {
60
58
  scaledCallData = _okxScaling(rawCallData, amountIn);
59
+ } else if (swapType == SwapType.ONE_INCH) {
60
+ scaledCallData = _oneInchScaling(rawCallData, amountIn);
61
61
  } else {
62
62
  assert(false);
63
63
  }
@@ -32,7 +32,7 @@
32
32
  "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
33
33
  },
34
34
  "routerStatic": "0x263833d47eA3fA4a30f269323aba6a107f9eB14C",
35
- "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
35
+ "pendleSwap": "0x313e7Ef7d52f5C10aC04ebaa4d33CDc68634c212",
36
36
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
37
37
  "yieldContractFactoryV3": "0xdF3601014686674e53d1Fa52F7602525483F9122",
38
38
  "marketFactoryV3": "0x1A6fCc85557BC4fB7B534ed835a03EF056552D52",
@@ -44,7 +44,7 @@
44
44
  "poolDeployHelperV2": "0xF642d8Daa026B8aEd6dFE82FACbA2E077AF199E2",
45
45
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
46
46
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
47
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
47
+ "reflector": "0x5039Da22E5126e7c4e9284376116716A91782faF",
48
48
  "commonDeploy": "0x2Ed473F528E5B320f850d17ADfe0e558f0298aA9",
49
49
  "syFactory": "0x466CeD3b33045Ea986B2f306C8D0aA8067961CF8",
50
50
  "sparkLinearDiscountOracleFactory": "0x34C91651A070664279866E5f3d6B4d5F65cbbFFb",
@@ -31,7 +31,7 @@
31
31
  "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
32
32
  },
33
33
  "routerStatic": "0x704478Dd72FD7F9B83d1F1e0fc18C14B54F034d0",
34
- "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
34
+ "pendleSwap": "0x313e7Ef7d52f5C10aC04ebaa4d33CDc68634c212",
35
35
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
36
36
  "yieldContractFactoryV3": "0xfa6B22FC4c3Ad88B68c16b3061a16b1714F6Bd57",
37
37
  "marketFactoryV3": "0x4A2B38b9cBd83c86F261a4d64c243795D4d44aBC",
@@ -42,7 +42,7 @@
42
42
  "poolDeployHelper": "0x439B4d66255eFf74e621FBacb00D7162b588Ff4b",
43
43
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
44
44
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
45
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
45
+ "reflector": "0x5039Da22E5126e7c4e9284376116716A91782faF",
46
46
  "vePendleAirdropDistributor": "0x3942F7B55094250644cFfDa7160226Caa349A38E",
47
47
  "externalRewardsDistributor": "0xae898a7d07f8e27f25e13d0f351a7401f9a5bf9d",
48
48
  "commonDeploy": "0x2Ed473F528E5B320f850d17ADfe0e558f0298aA9",
@@ -30,21 +30,22 @@
30
30
  "routerStatic": "0x0013ACc071f732fd6BF8210AB46A3794a7D8945e",
31
31
  "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
32
32
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
33
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
34
- "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
35
33
  "yieldContractFactoryV5": "0x0582D93FD9c9d42f26bE5D86a5f75291F92102C2",
36
34
  "marketFactoryV5": "0xFeE31A6eC6eBefa0b5A594Bf5b1139e3c6fAA0fB",
37
35
  "poolDeployHelperV2": "0x0b692f06CA82e3075dC537224450885Fd138e655",
36
+ "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
38
37
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
38
+ "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
39
+ "vePendleAirdropDistributor": "0x3942F7B55094250644cFfDa7160226Caa349A38E",
40
+ "externalRewardsDistributor": "0xae898a7d07f8e27f25e13d0f351a7401f9a5bf9d",
39
41
  "commonDeploy": "0x2Ed473F528E5B320f850d17ADfe0e558f0298aA9",
40
42
  "syFactory": "0x466CeD3b33045Ea986B2f306C8D0aA8067961CF8",
41
- "receiverEndpoint": "0x3209E9412cca80B18338f2a56ADA59c484c39644",
42
- "vePendle": "0xE017CCC08505Ac8fbb5a364680e459d9fBaEE74d",
43
- "gaugeController": "0xeE708FC793a02F1eDd5BB9DBD7fD13010D1F7136",
44
43
  "sparkLinearDiscountOracleFactory": "0x34C91651A070664279866E5f3d6B4d5F65cbbFFb",
45
- "vePendleAirdropDistributor": "0x3942F7B55094250644cFfDa7160226Caa349A38E",
46
- "externalRewardsDistributor": "0xae898a7d07f8e27f25e13d0f351a7401f9a5bf9d",
47
44
  "beta": {
48
45
  "PendleChainlinkOracleFactory": "0x0000000000000000000000000000000000000000"
49
- }
46
+ },
47
+ "receiverEndpoint": "0x3209E9412cca80B18338f2a56ADA59c484c39644",
48
+ "vePendle": "0xE017CCC08505Ac8fbb5a364680e459d9fBaEE74d",
49
+ "gaugeController": "0xeE708FC793a02F1eDd5BB9DBD7fD13010D1F7136",
50
+ "commonDeployTest": "0x8cbF9190b6EA4BeD4655888273e2A313a77400fD"
50
51
  }
@@ -31,7 +31,7 @@
31
31
  "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
32
32
  },
33
33
  "routerStatic": "0xAdB09F65bd90d19e3148D9ccb693F3161C6DB3E8",
34
- "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
34
+ "pendleSwap": "0x313e7Ef7d52f5C10aC04ebaa4d33CDc68634c212",
35
35
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
36
36
  "yieldContractFactoryV3": "0xEb38531db128EcA928aea1B1CE9E5609B15ba146",
37
37
  "marketFactoryV3": "0x2FCb47B58350cD377f94d3821e7373Df60bD9Ced",
@@ -42,7 +42,7 @@
42
42
  "poolDeployHelper": "0xEE2eF4ADaf5Bd61FD107fD169CAe3AB79958B928",
43
43
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
44
44
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
45
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
45
+ "reflector": "0x5039Da22E5126e7c4e9284376116716A91782faF",
46
46
  "vePendleAirdropDistributor": "0x3942F7B55094250644cFfDa7160226Caa349A38E",
47
47
  "externalRewardsDistributor": "0xae898a7d07f8e27f25e13d0f351a7401f9a5bf9d",
48
48
  "commonDeploy": "0x2Ed473F528E5B320f850d17ADfe0e558f0298aA9",
@@ -29,7 +29,7 @@
29
29
  "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
30
30
  },
31
31
  "routerStatic": "0xCAd502Bb55d1A3F79952F969BFF3f011CF30a94a",
32
- "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
32
+ "pendleSwap": "0x313e7Ef7d52f5C10aC04ebaa4d33CDc68634c212",
33
33
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
34
34
  "yieldContractFactoryV3": "0x964840644B88C583500F473E4B829Ab629aF96A8",
35
35
  "marketFactoryV3": "0xD228EC1f7D4313fe321fab511A872475D07F5bA6",
@@ -41,7 +41,7 @@
41
41
  "poolDeployHelperV2": "0x6E716B682D0b63E7BF2C7b1cD20F2Fc2F3596fc7",
42
42
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
43
43
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
44
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
44
+ "reflector": "0x5039Da22E5126e7c4e9284376116716A91782faF",
45
45
  "commonDeploy": "0x2Ed473F528E5B320f850d17ADfe0e558f0298aA9",
46
46
  "syFactory": "0x466CeD3b33045Ea986B2f306C8D0aA8067961CF8",
47
47
  "receiverEndpoint": "0xf799E4c029d14f41Dc1918C9A4C67242F565710e",
@@ -31,7 +31,7 @@
31
31
  "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
32
32
  },
33
33
  "routerStatic": "0x2700ADB035F82a11899ce1D3f1BF8451c296eABb",
34
- "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
34
+ "pendleSwap": "0x313e7Ef7d52f5C10aC04ebaa4d33CDc68634c212",
35
35
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
36
36
  "yieldContractFactoryV3": "0x40Ae6da2d92aa3DCb7f8d7a7209FD12BDfcb7C85",
37
37
  "marketFactoryV3": "0xC40fEbF5A33b8C92B187d9be0fD3fe0ac2E4B07c",
@@ -42,7 +42,7 @@
42
42
  "poolDeployHelper": "0xF536323e5825dCb1Bc9b4DE74D63111189532b5f",
43
43
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
44
44
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
45
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
45
+ "reflector": "0x5039Da22E5126e7c4e9284376116716A91782faF",
46
46
  "commonDeploy": "0x2Ed473F528E5B320f850d17ADfe0e558f0298aA9",
47
47
  "syFactory": "0x466CeD3b33045Ea986B2f306C8D0aA8067961CF8",
48
48
  "sparkLinearDiscountOracleFactory": "0x34C91651A070664279866E5f3d6B4d5F65cbbFFb",
@@ -28,14 +28,14 @@
28
28
  "ActionStorageV4": "0xdED51dca2ECED7a0BAab3D9711A87f214769Da0f"
29
29
  },
30
30
  "routerStatic": "0x6813d43782395A1F2AAb42f39aeEDE03ac655e09",
31
- "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
31
+ "pendleSwap": "0x313e7Ef7d52f5C10aC04ebaa4d33CDc68634c212",
32
32
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
33
33
  "yieldContractFactoryV5": "0x2bEa6BfD8fbFF45aA2a893EB3B6d85D10EFcC70E",
34
34
  "marketFactoryV5": "0x8A09574b0401A856d89d1b583eE22E8cb0C5530B",
35
35
  "poolDeployHelperV2": "0x96F77F24b3d17166FcaF3a9E3B8330fF38B966F9",
36
36
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
37
37
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
38
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
38
+ "reflector": "0xFAa7aD6258b1aa40F2cC414E49033dc77183ba76",
39
39
  "commonDeploy": "0x2Ed473F528E5B320f850d17ADfe0e558f0298aA9",
40
40
  "syFactory": "0x466CeD3b33045Ea986B2f306C8D0aA8067961CF8",
41
41
  "sparkLinearDiscountOracleFactory": "0x34C91651A070664279866E5f3d6B4d5F65cbbFFb",