@pendle/core-v2 5.8.4-beta → 5.8.4-redeem

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 (59) hide show
  1. package/build/artifacts/contracts/interfaces/IPLPWrapperFactory.sol/IPLPWrapperFactory.dbg.json +4 -0
  2. package/build/artifacts/contracts/interfaces/IPLPWrapperFactory.sol/IPLPWrapperFactory.json +56 -0
  3. package/build/artifacts/contracts/interfaces/IPMarketSwapNSeed.sol/IPMarketSwapNSeed.dbg.json +4 -0
  4. package/build/artifacts/contracts/interfaces/IPMarketSwapNSeed.sol/IPMarketSwapNSeed.json +10 -0
  5. package/build/artifacts/contracts/offchain-helpers/ExpiredLpPtRedeemer.sol/ExpiredLpPtRedeemer.dbg.json +4 -0
  6. package/build/artifacts/contracts/offchain-helpers/ExpiredLpPtRedeemer.sol/ExpiredLpPtRedeemer.json +299 -0
  7. package/build/artifacts/contracts/offchain-helpers/PendleLPWrapper.sol/PendleLPWrapper.dbg.json +4 -0
  8. package/build/artifacts/contracts/offchain-helpers/PendleLPWrapper.sol/PendleLPWrapper.json +342 -0
  9. package/build/artifacts/contracts/offchain-helpers/PendleLPWrapperFactory.sol/PendleLPWrapperFactory.dbg.json +4 -0
  10. package/build/artifacts/contracts/offchain-helpers/PendleLPWrapperFactory.sol/PendleLPWrapperFactory.json +308 -0
  11. package/build/artifacts/contracts/offchain-helpers/SwapNSeed.sol/MarketSwapNSeed.dbg.json +4 -0
  12. package/build/artifacts/contracts/offchain-helpers/SwapNSeed.sol/MarketSwapNSeed.json +232 -0
  13. package/build/artifacts/contracts/offchain-helpers/deploy/PendleCommonPoolDeployHelperV2.sol/PendleCommonPoolDeployHelperV2.dbg.json +1 -1
  14. package/build/artifacts/contracts/offchain-helpers/deploy/PendleCommonPoolDeployHelperV2.sol/PendleCommonPoolDeployHelperV2.json +2 -2
  15. package/build/artifacts/contracts/offchain-helpers/deploy/PendleCommonSYFactory.sol/PendleCommonSYFactory.dbg.json +1 -1
  16. package/build/artifacts/contracts/offchain-helpers/deploy/PendleCommonSYFactory.sol/PendleCommonSYFactory.json +2 -21
  17. package/build/artifacts/contracts/offchain-helpers/deploy/PendlePoolDeployHelperV2.sol/PendlePoolDeployHelperV2.dbg.json +1 -1
  18. package/build/artifacts/contracts/offchain-helpers/deploy/PendlePoolDeployHelperV2.sol/PendlePoolDeployHelperV2.json +2 -2
  19. package/build/artifacts/contracts/router/swap-aggregator/OKXScaleHelper.sol/IOKXDexRouter.dbg.json +1 -1
  20. package/build/artifacts/contracts/router/swap-aggregator/OKXScaleHelper.sol/OKXScaleHelper.dbg.json +1 -1
  21. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/IKyberScalingHelper.dbg.json +1 -1
  22. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/IOdosRouterV2.dbg.json +1 -1
  23. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwap.dbg.json +1 -1
  24. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwap.json +2 -191
  25. package/contracts/interfaces/IPLPWrapperFactory.sol +10 -0
  26. package/contracts/interfaces/IPMarketSwapNSeed.sol +10 -0
  27. package/contracts/offchain-helpers/ExpiredLpPtRedeemer.sol +79 -0
  28. package/contracts/offchain-helpers/PendleLPWrapper.sol +43 -0
  29. package/contracts/offchain-helpers/PendleLPWrapperFactory.sol +45 -0
  30. package/contracts/offchain-helpers/SwapNSeed.sol +221 -0
  31. package/contracts/offchain-helpers/deploy/PendleCommonSYFactory.sol +0 -2
  32. package/contracts/offchain-helpers/deploy/PendlePoolDeployHelperV2.sol +5 -1
  33. package/contracts/router/swap-aggregator/OKXScaleHelper.sol +10 -13
  34. package/contracts/router/swap-aggregator/PendleSwap.sol +1 -21
  35. package/deployments/1-core.json +1 -1
  36. package/deployments/146-core.json +8 -7
  37. package/deployments/42161-core.json +2 -2
  38. package/deployments/5000-core.json +1 -1
  39. package/deployments/56-core.json +1 -1
  40. package/deployments/80094-core.json +1 -1
  41. package/deployments/8453-core.json +1 -1
  42. package/package.json +1 -1
  43. package/typechain-types/ExpiredLpPtRedeemer.ts +512 -0
  44. package/typechain-types/IPLPWrapperFactory.ts +151 -0
  45. package/typechain-types/PendleCommonSYFactory.ts +0 -31
  46. package/typechain-types/PendleLPWrapper.ts +482 -0
  47. package/typechain-types/PendleLPWrapperFactory.ts +494 -0
  48. package/typechain-types/PendleSwap.ts +0 -280
  49. package/typechain-types/factories/ExpiredLpPtRedeemer__factory.ts +352 -0
  50. package/typechain-types/factories/IPLPWrapperFactory__factory.ts +71 -0
  51. package/typechain-types/factories/MarketSwapNSeed__factory.ts +1 -1
  52. package/typechain-types/factories/PendleCommonPoolDeployHelperV2__factory.ts +1 -1
  53. package/typechain-types/factories/PendleCommonSYFactory__factory.ts +1 -20
  54. package/typechain-types/factories/PendleLPWrapperFactory__factory.ts +365 -0
  55. package/typechain-types/factories/PendleLPWrapper__factory.ts +411 -0
  56. package/typechain-types/factories/PendlePoolDeployHelperV2__factory.ts +1 -1
  57. package/typechain-types/factories/PendleSwap__factory.ts +1 -190
  58. package/typechain-types/hardhat.d.ts +45 -0
  59. package/typechain-types/index.ts +10 -0
@@ -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
+ }
@@ -28,8 +28,6 @@ contract PendleCommonSYFactory is BoringOwnableUpgradeableV2 {
28
28
 
29
29
  uint256 public nonce;
30
30
 
31
- mapping(bytes32 => address) public implementations;
32
-
33
31
  constructor(address _proxyAdmin) {
34
32
  proxyAdmin = _proxyAdmin;
35
33
  _disableInitializers();
@@ -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
  }
@@ -6,30 +6,27 @@ import "./IPSwapAggregator.sol";
6
6
  import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
7
7
 
8
8
  abstract contract OKXScaleHelper {
9
- address private immutable _tokenApprove = __getTokenApproveForChain(block.chainid);
10
-
11
- function __getTokenApproveForChain(uint256 chainid) private pure returns (address) {
12
- if (chainid == 1) {
9
+ function _okx_getTokenApprove() internal view returns (address) {
10
+ if (block.chainid == 1) {
13
11
  return 0x40aA958dd87FC8305b97f2BA922CDdCa374bcD7f;
14
12
  }
15
- if (chainid == 10) {
13
+ if (block.chainid == 10) {
16
14
  return 0x68D6B739D2020067D1e2F713b999dA97E4d54812;
17
15
  }
18
- if (chainid == 56) {
16
+ if (block.chainid == 56) {
19
17
  return 0x2c34A2Fb1d0b4f55de51E1d0bDEfaDDce6b7cDD6;
20
18
  }
21
- if (chainid == 42161) {
19
+ if (block.chainid == 42161) {
22
20
  return 0x70cBb871E8f30Fc8Ce23609E9E0Ea87B6b222F58;
23
21
  }
24
- if (chainid == 8453 || chainid == 5000 || chainid == 146) {
22
+ if (block.chainid == 8453) {
23
+ return 0x57df6092665eb6058DE53939612413ff4B09114E;
24
+ }
25
+ if (block.chainid == 5000) {
25
26
  return 0x57df6092665eb6058DE53939612413ff4B09114E;
26
27
  }
27
- return address(0);
28
- }
29
28
 
30
- function _okx_getTokenApprove() internal view returns (address) {
31
- require(_tokenApprove != address(0), "PendleSwap: OKX chain not supported");
32
- return _tokenApprove;
29
+ revert("PendleSwap: OKX Chain not supported");
33
30
  }
34
31
 
35
32
  function _okxScaling(
@@ -7,30 +7,12 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
7
7
  import "./OKXScaleHelper.sol";
8
8
  import "./ParaswapScaleHelper.sol";
9
9
 
10
- import "../../core/libraries/BoringOwnableUpgradeable.sol";
11
- import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
12
-
13
- contract PendleSwap is
14
- IPSwapAggregator,
15
- TokenHelper,
16
- OKXScaleHelper,
17
- ParaswapScaleHelper,
18
- BoringOwnableUpgradeable,
19
- UUPSUpgradeable
20
- {
10
+ contract PendleSwap is IPSwapAggregator, TokenHelper, OKXScaleHelper, ParaswapScaleHelper {
21
11
  using Address for address;
22
12
  using SafeERC20 for IERC20;
23
13
 
24
14
  address private constant KYBER_SCALING_HELPER = 0x2f577A41BeC1BE1152AeEA12e73b7391d15f655D;
25
15
 
26
- constructor() {
27
- _disableInitializers();
28
- }
29
-
30
- function initialize() external initializer {
31
- __BoringOwnable_init();
32
- }
33
-
34
16
  function swap(address tokenIn, uint256 amountIn, SwapData calldata data) external payable {
35
17
  _approveForExtRouter(tokenIn, data);
36
18
  data.extRouter.functionCallWithValue(
@@ -104,8 +86,6 @@ contract PendleSwap is
104
86
  }
105
87
 
106
88
  receive() external payable {}
107
-
108
- function _authorizeUpgrade(address) internal virtual override onlyOwner {}
109
89
  }
110
90
 
111
91
  interface IKyberScalingHelper {
@@ -32,7 +32,7 @@
32
32
  "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
33
33
  },
34
34
  "routerStatic": "0x263833d47eA3fA4a30f269323aba6a107f9eB14C",
35
- "pendleSwap": "0xFE6228A3866426e96611ED7A3D0Dee918244fcB3",
35
+ "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
36
36
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
37
37
  "yieldContractFactoryV3": "0xdF3601014686674e53d1Fa52F7602525483F9122",
38
38
  "marketFactoryV3": "0x1A6fCc85557BC4fB7B534ed835a03EF056552D52",
@@ -28,7 +28,7 @@
28
28
  "ActionStorageV4": "0xdED51dca2ECED7a0BAab3D9711A87f214769Da0f"
29
29
  },
30
30
  "routerStatic": "0x0013ACc071f732fd6BF8210AB46A3794a7D8945e",
31
- "pendleSwap": "0xFE6228A3866426e96611ED7A3D0Dee918244fcB3",
31
+ "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
32
32
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
33
33
  "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
34
34
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
@@ -36,15 +36,16 @@
36
36
  "marketFactoryV5": "0xFeE31A6eC6eBefa0b5A594Bf5b1139e3c6fAA0fB",
37
37
  "poolDeployHelperV2": "0x0b692f06CA82e3075dC537224450885Fd138e655",
38
38
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
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
  }
@@ -4,7 +4,7 @@
4
4
  "chainId": 42161,
5
5
  "treasury": "0xCbcb48e22622a3778b6F14C2f5d258Ba026b05e6",
6
6
  "governance": "0x7877AdFaDEd756f3248a0EBfe8Ac2E2eF87b75Ac",
7
- "devMultisig": "0xE6F0489ED91dc27f40f9dbe8f81fccbFC16b9cb1",
7
+ "devMultisig": "0x3c0f8F070E6400C1C4eD10CfF85dE4c643b66bd3",
8
8
  "pendle": "0x0c880f6761F1af8d9Aa9C466984b80DAb9a8c9e8",
9
9
  "lzEndpoint": "0x3c2269811836af69497E5F486A85D7316753cf62",
10
10
  "wrappedNative": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
@@ -31,7 +31,7 @@
31
31
  "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
32
32
  },
33
33
  "routerStatic": "0xAdB09F65bd90d19e3148D9ccb693F3161C6DB3E8",
34
- "pendleSwap": "0xFE6228A3866426e96611ED7A3D0Dee918244fcB3",
34
+ "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
35
35
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
36
36
  "yieldContractFactoryV3": "0xEb38531db128EcA928aea1B1CE9E5609B15ba146",
37
37
  "marketFactoryV3": "0x2FCb47B58350cD377f94d3821e7373Df60bD9Ced",
@@ -29,7 +29,7 @@
29
29
  "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
30
30
  },
31
31
  "routerStatic": "0xCAd502Bb55d1A3F79952F969BFF3f011CF30a94a",
32
- "pendleSwap": "0xFE6228A3866426e96611ED7A3D0Dee918244fcB3",
32
+ "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
33
33
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
34
34
  "yieldContractFactoryV3": "0x964840644B88C583500F473E4B829Ab629aF96A8",
35
35
  "marketFactoryV3": "0xD228EC1f7D4313fe321fab511A872475D07F5bA6",
@@ -31,7 +31,7 @@
31
31
  "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
32
32
  },
33
33
  "routerStatic": "0x2700ADB035F82a11899ce1D3f1BF8451c296eABb",
34
- "pendleSwap": "0xFE6228A3866426e96611ED7A3D0Dee918244fcB3",
34
+ "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
35
35
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
36
36
  "yieldContractFactoryV3": "0x40Ae6da2d92aa3DCb7f8d7a7209FD12BDfcb7C85",
37
37
  "marketFactoryV3": "0xC40fEbF5A33b8C92B187d9be0fD3fe0ac2E4B07c",
@@ -28,7 +28,7 @@
28
28
  "ActionStorageV4": "0xdED51dca2ECED7a0BAab3D9711A87f214769Da0f"
29
29
  },
30
30
  "routerStatic": "0x6813d43782395A1F2AAb42f39aeEDE03ac655e09",
31
- "pendleSwap": "0xFE6228A3866426e96611ED7A3D0Dee918244fcB3",
31
+ "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
32
32
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
33
33
  "yieldContractFactoryV5": "0x2bEa6BfD8fbFF45aA2a893EB3B6d85D10EFcC70E",
34
34
  "marketFactoryV5": "0x8A09574b0401A856d89d1b583eE22E8cb0C5530B",
@@ -28,7 +28,7 @@
28
28
  "ActionStorageV4": "0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC"
29
29
  },
30
30
  "routerStatic": "0xB4205a645c7e920BD8504181B1D7f2c5C955C3e7",
31
- "pendleSwap": "0xFE6228A3866426e96611ED7A3D0Dee918244fcB3",
31
+ "pendleSwap": "0xd4e9B0d466789d7F6201442eecCBA6a75A552db0",
32
32
  "pyYtLpOracle": "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2",
33
33
  "yieldContractFactoryV5": "0x963ddBB35c1AE44e2a159E3b5fb5177E0B32660d",
34
34
  "marketFactoryV5": "0x59968008a703dC13E6beaECed644bdCe4ee45d13",
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": "5.8.4-beta",
5
+ "version": "5.8.4-redeem",
6
6
  "homepage": "https://pendle.finance",
7
7
  "keywords": [
8
8
  "pendle",