@pendle/core-v2 4.0.5 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/artifacts/contracts/core/StandardizedYield/implementations/AaveV3/PendleAaveV3SY.sol/PendleAaveV3SY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/AaveV3/PendleAaveV3SY.sol/PendleAaveV3SY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/EtherFi/PendleWEEthSY.sol/PendleWEEthSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/EtherFi/PendleWEEthSY.sol/PendleWEEthSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/KelpDAO/PendleRsETHSY.sol/PendleRsETHSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/KelpDAO/PendleRsETHSY.sol/PendleRsETHSY.json +20 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleL2LRTSY.sol/PendleL2LRTSY.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleL2LRTSY.sol/PendleL2LRTSY.json +1054 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Renzo/PendleEzETHSY.sol/PendleEzETHSY.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Renzo/PendleEzETHSY.sol/PendleEzETHSY.json +1141 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleRswETHSY.sol/PendleRswETHSY.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleRswETHSY.sol/PendleRswETHSY.json +1044 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol/SwETHSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol/SwETHSY.json +2 -2
- package/build/artifacts/contracts/interfaces/IPActionMarketCoreStatic.sol/IPActionMarketCoreStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMarketCoreStatic.sol/IPActionMarketCoreStatic.json +0 -45
- package/build/artifacts/contracts/interfaces/IPActionMintRedeemStatic.sol/IPActionMintRedeemStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMintRedeemStatic.sol/IPActionMintRedeemStatic.json +0 -69
- package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.json +0 -26
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.json +0 -140
- package/build/artifacts/contracts/interfaces/Renzo/IRenzoOracle.sol/IRenzoOracle.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/Renzo/IRenzoOracle.sol/IRenzoOracle.json +64 -0
- package/build/artifacts/contracts/interfaces/Renzo/IRenzoRestakeManager.sol/IRenzoRestakeManager.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/Renzo/IRenzoRestakeManager.sol/IRenzoRestakeManager.json +102 -0
- package/build/artifacts/contracts/interfaces/Swell/IRswETH.sol/IRswETH.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/Swell/IRswETH.sol/IRswETH.json +44 -0
- package/build/artifacts/contracts/interfaces/Swell/ISwETH.sol/ISwETH.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/{ISwETH.sol → Swell/ISwETH.sol}/ISwETH.json +8 -8
- package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.json +30 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.json +307 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.json +409 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.json +1352 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.json +247 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.json +202 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.json +93 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/StorageLayout.sol/StorageLayout.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/router-static/base/StorageLayout.sol/StorageLayout.json +10 -0
- package/build/artifacts/contracts/oracles/PendleRedStoneRateOracle.sol/PendleRedStoneRateOracle.dbg.json +4 -0
- package/build/artifacts/contracts/oracles/PendleRedStoneRateOracle.sol/PendleRedStoneRateOracle.json +66 -0
- package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwapBase.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwapL1.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwapL1.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwapL2.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwapL2.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelper.sol/IExecutorHelper.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelper.sol/IExecutorHelper.json +168 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperL2.sol/IExecutorHelperL2.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperL2.sol/IExecutorHelperL2.json +378 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l1-contracts/InputScalingHelper.sol/InputScalingHelper.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l1-contracts/InputScalingHelper.sol/InputScalingHelper.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l1-contracts/ScalingDataLib.sol/ScalingDataLib.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l1-contracts/ScalingDataLib.sol/ScalingDataLib.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataReader.sol/CalldataReader.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataReader.sol/CalldataReader.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataWriter.sol/CalldataWriter.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataWriter.sol/CalldataWriter.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/Common.sol/Common.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/Common.sol/Common.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/DexScaler.sol/DexScaler.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/DexScaler.sol/DexScaler.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/ExecutorReader.sol/ExecutorReader.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/ExecutorReader.sol/ExecutorReader.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/InputScalingHelperL2.sol/InputScalingHelperL2.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/InputScalingHelperL2.sol/InputScalingHelperL2.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/ScalingDataL2Lib.sol/ScalingDataL2Lib.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/l2-contracts/ScalingDataL2Lib.sol/ScalingDataL2Lib.json +2 -2
- package/contracts/core/StandardizedYield/implementations/AaveV3/PendleAaveV3SY.sol +1 -1
- package/contracts/core/StandardizedYield/implementations/EtherFi/PendleWEEthSY.sol +1 -1
- package/contracts/core/StandardizedYield/implementations/KelpDAO/PendleRsETHSY.sol +18 -9
- package/contracts/core/StandardizedYield/implementations/PendleL2LRTSY.sol +93 -0
- package/contracts/core/StandardizedYield/implementations/Renzo/PendleEzETHSY.sol +139 -0
- package/contracts/core/StandardizedYield/implementations/Swell/PendleRswETHSY.sol +101 -0
- package/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol +1 -1
- package/contracts/interfaces/IPActionMarketCoreStatic.sol +8 -17
- package/contracts/interfaces/IPActionMintRedeemStatic.sol +4 -16
- package/contracts/interfaces/IPActionStorageStatic.sol +0 -4
- package/contracts/interfaces/Renzo/IRenzoOracle.sol +8 -0
- package/contracts/interfaces/Renzo/IRenzoRestakeManager.sol +14 -0
- package/contracts/interfaces/Swell/IRswETH.sol +10 -0
- package/contracts/interfaces/{ISwETH.sol → Swell/ISwETH.sol} +2 -2
- package/contracts/offchain-helpers/router-static/PendleRouterStatic.sol +19 -0
- package/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol +109 -0
- package/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol +182 -0
- package/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol +672 -0
- package/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol +116 -0
- package/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol +64 -0
- package/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol +55 -0
- package/contracts/offchain-helpers/router-static/base/StorageLayout.sol +20 -0
- package/contracts/oracles/PendleRedStoneRateOracle.sol +23 -0
- package/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelper.sol +58 -1
- package/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperL2.sol +107 -1
- package/contracts/router/swap-aggregator/kyberswap/l1-contracts/InputScalingHelper.sol +14 -0
- package/contracts/router/swap-aggregator/kyberswap/l1-contracts/ScalingDataLib.sol +32 -0
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataReader.sol +6 -0
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/DexScaler.sol +59 -2
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/InputScalingHelperL2.sol +22 -1
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/ScalingDataL2Lib.sol +24 -0
- package/deployments/1-core.json +1 -1
- package/deployments/1-markets/EZETH-JUNE2024.json +11 -0
- package/deployments/1-markets/RSETH-KELP-JUNE2024.json +11 -0
- package/deployments/10-core.json +1 -1
- package/deployments/42161-core.json +1 -1
- package/deployments/42161-markets/RSETH-APR2024-ARBITRUM.json +11 -0
- package/deployments/42161-markets/WEETH-APR2024.json +11 -0
- package/deployments/56-core.json +1 -1
- package/deployments/merkle-distribution/2024-01-25.json +9615 -0
- package/package.json +1 -1
- package/typechain-types/IExecutorHelper.ts +273 -0
- package/typechain-types/IExecutorHelperL2.ts +455 -0
- package/typechain-types/IPActionMarketCoreStatic.ts +18 -63
- package/typechain-types/IPActionMintRedeemStatic.ts +10 -102
- package/typechain-types/IPActionStorageStatic.ts +0 -55
- package/typechain-types/IPRouterStatic.ts +28 -220
- package/typechain-types/IRenzoOracle.ts +152 -0
- package/typechain-types/IRenzoRestakeManager.ts +219 -0
- package/typechain-types/IRswETH.ts +138 -0
- package/typechain-types/ISwETH.ts +24 -9
- package/typechain-types/PendleEzETHSY.ts +1471 -0
- package/typechain-types/PendleL2LRTSY.ts +1323 -0
- package/typechain-types/PendleRedStoneRateOracle.ts +113 -0
- package/typechain-types/PendleRsETHSY.ts +21 -0
- package/typechain-types/PendleRswETHSY.ts +1294 -0
- package/typechain-types/factories/ActionInfoStatic__factory.ts +1 -1
- package/typechain-types/factories/ActionMarketAuxStatic__factory.ts +1 -1
- package/typechain-types/factories/ActionMarketCoreStatic__factory.ts +1 -1
- package/typechain-types/factories/ActionMintRedeemStatic__factory.ts +1 -1
- package/typechain-types/factories/ActionStorageStatic__factory.ts +1 -1
- package/typechain-types/factories/ActionVePendleStatic__factory.ts +1 -1
- package/typechain-types/factories/IExecutorHelperL2__factory.ts +378 -0
- package/typechain-types/factories/IExecutorHelper__factory.ts +168 -0
- package/typechain-types/factories/IPActionMarketCoreStatic__factory.ts +0 -45
- package/typechain-types/factories/IPActionMintRedeemStatic__factory.ts +0 -69
- package/typechain-types/factories/IPActionStorageStatic__factory.ts +0 -26
- package/typechain-types/factories/IPRouterStatic__factory.ts +0 -140
- package/typechain-types/factories/IRenzoOracle__factory.ts +76 -0
- package/typechain-types/factories/IRenzoRestakeManager__factory.ts +121 -0
- package/typechain-types/factories/IRswETH__factory.ts +56 -0
- package/typechain-types/factories/ISwETH__factory.ts +7 -7
- package/typechain-types/factories/PendleAaveV3SY__factory.ts +1 -1
- package/typechain-types/factories/PendleEzETHSY__factory.ts +1218 -0
- package/typechain-types/factories/PendleL2LRTSY__factory.ts +1139 -0
- package/typechain-types/factories/PendleRedStoneRateOracle__factory.ts +142 -0
- package/typechain-types/factories/PendleRouterStatic__factory.ts +1 -1
- package/typechain-types/factories/PendleRsETHSY__factory.ts +23 -1
- package/typechain-types/factories/PendleRswETHSY__factory.ts +1117 -0
- package/typechain-types/factories/PendleSwapL1__factory.ts +1 -1
- package/typechain-types/factories/PendleSwapL2__factory.ts +1 -1
- package/typechain-types/factories/PendleWEEthSY__factory.ts +1 -1
- package/typechain-types/factories/SwETHSY__factory.ts +1 -1
- package/typechain-types/hardhat.d.ts +135 -0
- package/typechain-types/index.ts +28 -0
- package/build/artifacts/contracts/interfaces/ISwETH.sol/ISwETH.dbg.json +0 -4
|
@@ -0,0 +1,672 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity ^0.8.17;
|
|
3
|
+
|
|
4
|
+
import "../../../interfaces/IPMarket.sol";
|
|
5
|
+
import "../../../interfaces/IPRouterStatic.sol";
|
|
6
|
+
import "./StorageLayout.sol";
|
|
7
|
+
|
|
8
|
+
contract ActionMarketCoreStatic is StorageLayout, IPActionMarketCoreStatic {
|
|
9
|
+
using PMath for uint256;
|
|
10
|
+
using PMath for int256;
|
|
11
|
+
|
|
12
|
+
using LogExpMath for int256;
|
|
13
|
+
using PYIndexLib for PYIndex;
|
|
14
|
+
using PYIndexLib for IPYieldToken;
|
|
15
|
+
using MarketApproxPtInLib for MarketState;
|
|
16
|
+
using MarketApproxPtOutLib for MarketState;
|
|
17
|
+
using MarketMathCore for MarketState;
|
|
18
|
+
|
|
19
|
+
// ============ ADD REMOVE LIQUIDITY ============
|
|
20
|
+
|
|
21
|
+
function addLiquidityDualSyAndPtStatic(
|
|
22
|
+
address market,
|
|
23
|
+
uint256 netSyDesired,
|
|
24
|
+
uint256 netPtDesired
|
|
25
|
+
) public view returns (uint256 netLpOut, uint256 netSyUsed, uint256 netPtUsed) {
|
|
26
|
+
MarketState memory state = _readState(market);
|
|
27
|
+
(, netLpOut, netSyUsed, netPtUsed) = state.addLiquidity(netSyDesired, netPtDesired, block.timestamp);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function addLiquidityDualTokenAndPtStatic(
|
|
31
|
+
address market,
|
|
32
|
+
address tokenIn,
|
|
33
|
+
uint256 netTokenDesired,
|
|
34
|
+
uint256 netPtDesired
|
|
35
|
+
)
|
|
36
|
+
public
|
|
37
|
+
view
|
|
38
|
+
returns (
|
|
39
|
+
uint256 netLpOut,
|
|
40
|
+
uint256 netTokenUsed,
|
|
41
|
+
uint256 netPtUsed,
|
|
42
|
+
// extra-info
|
|
43
|
+
uint256 netSyUsed,
|
|
44
|
+
uint256 netSyDesired
|
|
45
|
+
)
|
|
46
|
+
{
|
|
47
|
+
netSyDesired = _mintSyFromTokenStatic(market, tokenIn, netTokenDesired);
|
|
48
|
+
|
|
49
|
+
(netLpOut, netSyUsed, netPtUsed) = addLiquidityDualSyAndPtStatic(market, netSyDesired, netPtDesired);
|
|
50
|
+
|
|
51
|
+
if (netSyUsed != netSyDesired) revert Errors.RouterNotAllSyUsed(netSyDesired, netSyUsed);
|
|
52
|
+
|
|
53
|
+
netTokenUsed = netTokenDesired;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/// @dev netPtToSwap is the parameter to approx
|
|
57
|
+
function addLiquiditySinglePtStatic(
|
|
58
|
+
address market,
|
|
59
|
+
uint256 netPtIn
|
|
60
|
+
)
|
|
61
|
+
public
|
|
62
|
+
view
|
|
63
|
+
returns (
|
|
64
|
+
uint256 netLpOut,
|
|
65
|
+
uint256 netPtToSwap,
|
|
66
|
+
uint256 netSyFee,
|
|
67
|
+
uint256 priceImpact,
|
|
68
|
+
uint256 exchangeRateAfter,
|
|
69
|
+
// extra-info
|
|
70
|
+
uint256 netSyFromSwap
|
|
71
|
+
)
|
|
72
|
+
{
|
|
73
|
+
MarketState memory state = _readState(market);
|
|
74
|
+
|
|
75
|
+
(netPtToSwap, , ) = state.approxSwapPtToAddLiquidity(
|
|
76
|
+
_pyIndex(market),
|
|
77
|
+
netPtIn,
|
|
78
|
+
0,
|
|
79
|
+
block.timestamp,
|
|
80
|
+
defaultApproxParams
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
state = _readState(market); // re-read
|
|
84
|
+
|
|
85
|
+
(netSyFromSwap, netSyFee, ) = state.swapExactPtForSy(_pyIndex(market), netPtToSwap, block.timestamp);
|
|
86
|
+
(, netLpOut, , ) = state.addLiquidity(netSyFromSwap, netPtIn - netPtToSwap, block.timestamp);
|
|
87
|
+
|
|
88
|
+
priceImpact = _calcPriceImpactPt(market, netPtToSwap.neg());
|
|
89
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/// @dev netPtFromSwap is the parameter to approx
|
|
93
|
+
function addLiquiditySingleSyStatic(
|
|
94
|
+
address market,
|
|
95
|
+
uint256 netSyIn
|
|
96
|
+
)
|
|
97
|
+
public
|
|
98
|
+
view
|
|
99
|
+
returns (
|
|
100
|
+
uint256 netLpOut,
|
|
101
|
+
uint256 netPtFromSwap,
|
|
102
|
+
uint256 netSyFee,
|
|
103
|
+
uint256 priceImpact,
|
|
104
|
+
uint256 exchangeRateAfter,
|
|
105
|
+
// extra-info
|
|
106
|
+
uint256 netSyToSwap
|
|
107
|
+
)
|
|
108
|
+
{
|
|
109
|
+
MarketState memory state = _readState(market);
|
|
110
|
+
|
|
111
|
+
(netPtFromSwap, , ) = state.approxSwapSyToAddLiquidity(
|
|
112
|
+
_pyIndex(market),
|
|
113
|
+
netSyIn,
|
|
114
|
+
0,
|
|
115
|
+
block.timestamp,
|
|
116
|
+
defaultApproxParams
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
state = _readState(market); // re-read
|
|
120
|
+
|
|
121
|
+
(netSyToSwap, netSyFee, ) = state.swapSyForExactPt(_pyIndex(market), netPtFromSwap, block.timestamp);
|
|
122
|
+
(, netLpOut, , ) = state.addLiquidity(netSyIn - netSyToSwap, netPtFromSwap, block.timestamp);
|
|
123
|
+
|
|
124
|
+
priceImpact = _calcPriceImpactPt(market, netPtFromSwap.Int());
|
|
125
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function addLiquiditySingleTokenStatic(
|
|
129
|
+
address market,
|
|
130
|
+
address tokenIn,
|
|
131
|
+
uint256 netTokenIn
|
|
132
|
+
)
|
|
133
|
+
public
|
|
134
|
+
view
|
|
135
|
+
returns (
|
|
136
|
+
uint256 netLpOut,
|
|
137
|
+
uint256 netPtFromSwap,
|
|
138
|
+
uint256 netSyFee,
|
|
139
|
+
uint256 priceImpact,
|
|
140
|
+
uint256 exchangeRateAfter,
|
|
141
|
+
// extra-info
|
|
142
|
+
uint256 netSyMinted,
|
|
143
|
+
uint256 netSyToSwap
|
|
144
|
+
)
|
|
145
|
+
{
|
|
146
|
+
netSyMinted = _mintSyFromTokenStatic(market, tokenIn, netTokenIn);
|
|
147
|
+
(netLpOut, netPtFromSwap, netSyFee, priceImpact, exchangeRateAfter, netSyToSwap) = addLiquiditySingleSyStatic(
|
|
148
|
+
market,
|
|
149
|
+
netSyMinted
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function addLiquiditySingleTokenKeepYtStatic(
|
|
154
|
+
address market,
|
|
155
|
+
address tokenIn,
|
|
156
|
+
uint256 netTokenIn
|
|
157
|
+
)
|
|
158
|
+
public
|
|
159
|
+
view
|
|
160
|
+
returns (
|
|
161
|
+
uint256 netLpOut,
|
|
162
|
+
uint256 netYtOut,
|
|
163
|
+
// extra-info
|
|
164
|
+
uint256 netSyMinted,
|
|
165
|
+
uint256 netSyToPY
|
|
166
|
+
)
|
|
167
|
+
{
|
|
168
|
+
netSyMinted = _mintSyFromTokenStatic(market, tokenIn, netTokenIn);
|
|
169
|
+
(netLpOut, netYtOut, netSyToPY) = addLiquiditySingleSyKeepYtStatic(market, netSyMinted);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function addLiquiditySingleSyKeepYtStatic(
|
|
173
|
+
address market,
|
|
174
|
+
uint256 netSyIn
|
|
175
|
+
)
|
|
176
|
+
public
|
|
177
|
+
view
|
|
178
|
+
returns (
|
|
179
|
+
uint256 netLpOut,
|
|
180
|
+
uint256 netYtOut,
|
|
181
|
+
// extra-info
|
|
182
|
+
uint256 netSyToPY
|
|
183
|
+
)
|
|
184
|
+
{
|
|
185
|
+
MarketState memory state = _readState(market);
|
|
186
|
+
PYIndex index = _pyIndex(market);
|
|
187
|
+
|
|
188
|
+
netSyToPY = (netSyIn * state.totalPt.Uint()) / (state.totalPt.Uint() + index.syToAsset(state.totalSy.Uint()));
|
|
189
|
+
|
|
190
|
+
netYtOut = index.syToAsset(netSyToPY);
|
|
191
|
+
|
|
192
|
+
(, netLpOut, , ) = state.addLiquidity(netSyIn - netSyToPY, netYtOut, block.timestamp);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function removeLiquidityDualSyAndPtStatic(
|
|
196
|
+
address market,
|
|
197
|
+
uint256 netLpToRemove
|
|
198
|
+
) public view returns (uint256 netSyOut, uint256 netPtOut) {
|
|
199
|
+
MarketState memory state = _readState(market);
|
|
200
|
+
(netSyOut, netPtOut) = state.removeLiquidity(netLpToRemove);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function removeLiquidityDualTokenAndPtStatic(
|
|
204
|
+
address market,
|
|
205
|
+
uint256 netLpToRemove,
|
|
206
|
+
address tokenOut
|
|
207
|
+
) public view returns (uint256 netTokenOut, uint256 netPtOut, uint256 netSyToRedeem) {
|
|
208
|
+
(netSyToRedeem, netPtOut) = removeLiquidityDualSyAndPtStatic(market, netLpToRemove);
|
|
209
|
+
netTokenOut = _redeemSyToTokenStatic(market, tokenOut, netSyToRedeem);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/// @dev netPtFromSwap is the parameter to approx
|
|
213
|
+
/// @notice should revert post-expiry
|
|
214
|
+
function removeLiquiditySinglePtStatic(
|
|
215
|
+
address market,
|
|
216
|
+
uint256 netLpToRemove
|
|
217
|
+
)
|
|
218
|
+
public
|
|
219
|
+
view
|
|
220
|
+
returns (
|
|
221
|
+
uint256 netPtOut,
|
|
222
|
+
uint256 netPtFromSwap,
|
|
223
|
+
uint256 netSyFee,
|
|
224
|
+
uint256 priceImpact,
|
|
225
|
+
uint256 exchangeRateAfter,
|
|
226
|
+
// extra-info
|
|
227
|
+
uint256 netSyFromBurn,
|
|
228
|
+
uint256 netPtFromBurn
|
|
229
|
+
)
|
|
230
|
+
{
|
|
231
|
+
MarketState memory state = _readState(market);
|
|
232
|
+
|
|
233
|
+
(netSyFromBurn, netPtFromBurn) = state.removeLiquidity(netLpToRemove);
|
|
234
|
+
(netPtFromSwap, netSyFee) = state.approxSwapExactSyForPt(
|
|
235
|
+
_pyIndex(market),
|
|
236
|
+
netSyFromBurn,
|
|
237
|
+
block.timestamp,
|
|
238
|
+
defaultApproxParams
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
netPtOut = netPtFromBurn + netPtFromSwap;
|
|
242
|
+
priceImpact = _calcPriceImpactPt(market, netPtFromSwap.Int());
|
|
243
|
+
|
|
244
|
+
// Execute swap to calculate exchangeRateAfter
|
|
245
|
+
state.swapSyForExactPt(_pyIndex(market), netPtFromSwap, block.timestamp);
|
|
246
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function removeLiquiditySingleSyStatic(
|
|
250
|
+
address market,
|
|
251
|
+
uint256 netLpToRemove
|
|
252
|
+
)
|
|
253
|
+
public
|
|
254
|
+
view
|
|
255
|
+
returns (
|
|
256
|
+
uint256 netSyOut,
|
|
257
|
+
uint256 netSyFee,
|
|
258
|
+
uint256 priceImpact,
|
|
259
|
+
uint256 exchangeRateAfter,
|
|
260
|
+
// extra-info
|
|
261
|
+
uint256 netSyFromBurn,
|
|
262
|
+
uint256 netPtFromBurn,
|
|
263
|
+
uint256 netSyFromSwap
|
|
264
|
+
)
|
|
265
|
+
{
|
|
266
|
+
MarketState memory state = _readState(market);
|
|
267
|
+
|
|
268
|
+
(netSyFromBurn, netPtFromBurn) = state.removeLiquidity(netLpToRemove);
|
|
269
|
+
|
|
270
|
+
if (IPMarket(market).isExpired()) {
|
|
271
|
+
netSyOut = netSyFromBurn + _pyIndex(market).assetToSy(netPtFromBurn);
|
|
272
|
+
netSyFee = 0;
|
|
273
|
+
priceImpact = 0;
|
|
274
|
+
exchangeRateAfter = PMath.ONE;
|
|
275
|
+
} else {
|
|
276
|
+
(netSyFromSwap, netSyFee, ) = state.swapExactPtForSy(_pyIndex(market), netPtFromBurn, block.timestamp);
|
|
277
|
+
|
|
278
|
+
netSyOut = netSyFromBurn + netSyFromSwap;
|
|
279
|
+
priceImpact = _calcPriceImpactPt(market, netPtFromBurn.neg());
|
|
280
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function removeLiquiditySingleTokenStatic(
|
|
285
|
+
address market,
|
|
286
|
+
uint256 netLpToRemove,
|
|
287
|
+
address tokenOut
|
|
288
|
+
)
|
|
289
|
+
public
|
|
290
|
+
view
|
|
291
|
+
returns (
|
|
292
|
+
uint256 netTokenOut,
|
|
293
|
+
uint256 netSyFee,
|
|
294
|
+
uint256 priceImpact,
|
|
295
|
+
uint256 exchangeRateAfter,
|
|
296
|
+
// extra-info
|
|
297
|
+
uint256 netSyOut,
|
|
298
|
+
uint256 netSyFromBurn,
|
|
299
|
+
uint256 netPtFromBurn,
|
|
300
|
+
uint256 netSyFromSwap
|
|
301
|
+
)
|
|
302
|
+
{
|
|
303
|
+
(
|
|
304
|
+
netSyOut,
|
|
305
|
+
netSyFee,
|
|
306
|
+
priceImpact,
|
|
307
|
+
exchangeRateAfter,
|
|
308
|
+
netSyFromBurn,
|
|
309
|
+
netPtFromBurn,
|
|
310
|
+
netSyFromSwap
|
|
311
|
+
) = removeLiquiditySingleSyStatic(market, netLpToRemove);
|
|
312
|
+
|
|
313
|
+
netTokenOut = _redeemSyToTokenStatic(market, tokenOut, netSyOut);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// ============ SWAP PT ============
|
|
317
|
+
|
|
318
|
+
function swapExactPtForSyStatic(
|
|
319
|
+
address market,
|
|
320
|
+
uint256 exactPtIn
|
|
321
|
+
) public view returns (uint256 netSyOut, uint256 netSyFee, uint256 priceImpact, uint256 exchangeRateAfter) {
|
|
322
|
+
MarketState memory state = _readState(market);
|
|
323
|
+
(netSyOut, netSyFee, ) = state.swapExactPtForSy(_pyIndex(market), exactPtIn, block.timestamp);
|
|
324
|
+
priceImpact = _calcPriceImpactPt(market, exactPtIn.neg());
|
|
325
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
function swapSyForExactPtStatic(
|
|
329
|
+
address market,
|
|
330
|
+
uint256 exactPtOut
|
|
331
|
+
) public view returns (uint256 netSyIn, uint256 netSyFee, uint256 priceImpact, uint256 exchangeRateAfter) {
|
|
332
|
+
MarketState memory state = _readState(market);
|
|
333
|
+
(netSyIn, netSyFee, ) = state.swapSyForExactPt(_pyIndex(market), exactPtOut, block.timestamp);
|
|
334
|
+
priceImpact = _calcPriceImpactPt(market, exactPtOut.Int());
|
|
335
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/// @dev netPtOut is the parameter to approx
|
|
339
|
+
function swapExactSyForPtStatic(
|
|
340
|
+
address market,
|
|
341
|
+
uint256 exactSyIn
|
|
342
|
+
) public view returns (uint256 netPtOut, uint256 netSyFee, uint256 priceImpact, uint256 exchangeRateAfter) {
|
|
343
|
+
MarketState memory state = _readState(market);
|
|
344
|
+
(netPtOut, netSyFee) = state.approxSwapExactSyForPt(
|
|
345
|
+
_pyIndex(market),
|
|
346
|
+
exactSyIn,
|
|
347
|
+
block.timestamp,
|
|
348
|
+
defaultApproxParams
|
|
349
|
+
);
|
|
350
|
+
priceImpact = _calcPriceImpactPt(market, netPtOut.Int());
|
|
351
|
+
|
|
352
|
+
// Execute swap to calculate exchangeRateAfter
|
|
353
|
+
state.swapSyForExactPt(_pyIndex(market), netPtOut, block.timestamp);
|
|
354
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/// @dev netPtIn is the parameter to approx
|
|
358
|
+
function swapPtForExactSyStatic(
|
|
359
|
+
address market,
|
|
360
|
+
uint256 exactSyOut
|
|
361
|
+
) public view returns (uint256 netPtIn, uint256 netSyFee, uint256 priceImpact, uint256 exchangeRateAfter) {
|
|
362
|
+
MarketState memory state = _readState(market);
|
|
363
|
+
|
|
364
|
+
(netPtIn, , netSyFee) = state.approxSwapPtForExactSy(
|
|
365
|
+
_pyIndex(market),
|
|
366
|
+
exactSyOut,
|
|
367
|
+
block.timestamp,
|
|
368
|
+
defaultApproxParams
|
|
369
|
+
);
|
|
370
|
+
priceImpact = _calcPriceImpactPt(market, netPtIn.neg());
|
|
371
|
+
|
|
372
|
+
// Execute swap to calculate exchangeRateAfter
|
|
373
|
+
state.swapExactPtForSy(_pyIndex(market), netPtIn, block.timestamp);
|
|
374
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
function swapExactTokenForPtStatic(
|
|
378
|
+
address market,
|
|
379
|
+
address tokenIn,
|
|
380
|
+
uint256 amountTokenIn
|
|
381
|
+
)
|
|
382
|
+
public
|
|
383
|
+
view
|
|
384
|
+
returns (
|
|
385
|
+
uint256 netPtOut,
|
|
386
|
+
uint256 netSyMinted,
|
|
387
|
+
uint256 netSyFee,
|
|
388
|
+
uint256 priceImpact,
|
|
389
|
+
uint256 exchangeRateAfter
|
|
390
|
+
)
|
|
391
|
+
{
|
|
392
|
+
netSyMinted = _mintSyFromTokenStatic(market, tokenIn, amountTokenIn);
|
|
393
|
+
|
|
394
|
+
(netPtOut, netSyFee, priceImpact, exchangeRateAfter) = swapExactSyForPtStatic(market, netSyMinted);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
function swapExactPtForTokenStatic(
|
|
398
|
+
address market,
|
|
399
|
+
uint256 exactPtIn,
|
|
400
|
+
address tokenOut
|
|
401
|
+
)
|
|
402
|
+
public
|
|
403
|
+
view
|
|
404
|
+
returns (
|
|
405
|
+
uint256 netTokenOut,
|
|
406
|
+
uint256 netSyToRedeem,
|
|
407
|
+
uint256 netSyFee,
|
|
408
|
+
uint256 priceImpact,
|
|
409
|
+
uint256 exchangeRateAfter
|
|
410
|
+
)
|
|
411
|
+
{
|
|
412
|
+
(netSyToRedeem, netSyFee, priceImpact, exchangeRateAfter) = swapExactPtForSyStatic(market, exactPtIn);
|
|
413
|
+
|
|
414
|
+
netTokenOut = _redeemSyToTokenStatic(market, tokenOut, netSyToRedeem);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// ============ SWAP YT ============
|
|
418
|
+
|
|
419
|
+
function swapSyForExactYtStatic(
|
|
420
|
+
address market,
|
|
421
|
+
uint256 exactYtOut
|
|
422
|
+
)
|
|
423
|
+
public
|
|
424
|
+
view
|
|
425
|
+
returns (
|
|
426
|
+
uint256 netSyIn,
|
|
427
|
+
uint256 netSyFee,
|
|
428
|
+
uint256 priceImpact,
|
|
429
|
+
uint256 exchangeRateAfter,
|
|
430
|
+
// extra-info
|
|
431
|
+
uint256 netSyReceivedInt,
|
|
432
|
+
uint256 totalSyNeedInt
|
|
433
|
+
)
|
|
434
|
+
{
|
|
435
|
+
priceImpact = _calcPriceImpactYt(market, exactYtOut.neg());
|
|
436
|
+
|
|
437
|
+
MarketState memory state = _readState(market);
|
|
438
|
+
PYIndex index = _pyIndex(market);
|
|
439
|
+
|
|
440
|
+
(netSyReceivedInt, netSyFee, ) = state.swapExactPtForSy(_pyIndex(market), exactYtOut, block.timestamp);
|
|
441
|
+
|
|
442
|
+
totalSyNeedInt = index.assetToSyUp(exactYtOut);
|
|
443
|
+
netSyIn = totalSyNeedInt.subMax0(netSyReceivedInt);
|
|
444
|
+
|
|
445
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/// @dev netYtOut is the parameter to approx
|
|
449
|
+
function swapExactSyForYtStatic(
|
|
450
|
+
address market,
|
|
451
|
+
uint256 exactSyIn
|
|
452
|
+
) public view returns (uint256 netYtOut, uint256 netSyFee, uint256 priceImpact, uint256 exchangeRateAfter) {
|
|
453
|
+
MarketState memory state = _readState(market);
|
|
454
|
+
PYIndex index = _pyIndex(market);
|
|
455
|
+
|
|
456
|
+
(netYtOut, netSyFee) = state.approxSwapExactSyForYt(index, exactSyIn, block.timestamp, defaultApproxParams);
|
|
457
|
+
|
|
458
|
+
priceImpact = _calcPriceImpactYt(market, netYtOut.neg());
|
|
459
|
+
|
|
460
|
+
// Execute swap to calculate exchangeRateAfter
|
|
461
|
+
state.swapExactPtForSy(index, netYtOut, block.timestamp);
|
|
462
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
function swapExactYtForSyStatic(
|
|
466
|
+
address market,
|
|
467
|
+
uint256 exactYtIn
|
|
468
|
+
)
|
|
469
|
+
public
|
|
470
|
+
view
|
|
471
|
+
returns (
|
|
472
|
+
uint256 netSyOut,
|
|
473
|
+
uint256 netSyFee,
|
|
474
|
+
uint256 priceImpact,
|
|
475
|
+
uint256 exchangeRateAfter,
|
|
476
|
+
// extra-info
|
|
477
|
+
uint256 netSyOwedInt,
|
|
478
|
+
uint256 netPYToRepaySyOwedInt,
|
|
479
|
+
uint256 netPYToRedeemSyOutInt
|
|
480
|
+
)
|
|
481
|
+
{
|
|
482
|
+
priceImpact = _calcPriceImpactYt(market, exactYtIn.Int());
|
|
483
|
+
|
|
484
|
+
MarketState memory state = _readState(market);
|
|
485
|
+
|
|
486
|
+
PYIndex index = _pyIndex(market);
|
|
487
|
+
|
|
488
|
+
(netSyOwedInt, netSyFee, ) = state.swapSyForExactPt(index, exactYtIn, block.timestamp);
|
|
489
|
+
|
|
490
|
+
netPYToRepaySyOwedInt = index.syToAssetUp(netSyOwedInt);
|
|
491
|
+
netPYToRedeemSyOutInt = exactYtIn - netPYToRepaySyOwedInt;
|
|
492
|
+
|
|
493
|
+
netSyOut = index.assetToSy(netPYToRedeemSyOutInt);
|
|
494
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
function swapExactYtForTokenStatic(
|
|
498
|
+
address market,
|
|
499
|
+
uint256 exactYtIn,
|
|
500
|
+
address tokenOut
|
|
501
|
+
)
|
|
502
|
+
public
|
|
503
|
+
view
|
|
504
|
+
returns (
|
|
505
|
+
uint256 netTokenOut,
|
|
506
|
+
uint256 netSyFee,
|
|
507
|
+
uint256 priceImpact,
|
|
508
|
+
uint256 exchangeRateAfter,
|
|
509
|
+
// extra-info
|
|
510
|
+
uint256 netSyOut,
|
|
511
|
+
uint256 netSyOwedInt,
|
|
512
|
+
uint256 netPYToRepaySyOwedInt,
|
|
513
|
+
uint256 netPYToRedeemSyOutInt
|
|
514
|
+
)
|
|
515
|
+
{
|
|
516
|
+
(
|
|
517
|
+
netSyOut,
|
|
518
|
+
netSyFee,
|
|
519
|
+
priceImpact,
|
|
520
|
+
exchangeRateAfter,
|
|
521
|
+
netSyOwedInt,
|
|
522
|
+
netPYToRepaySyOwedInt,
|
|
523
|
+
netPYToRedeemSyOutInt
|
|
524
|
+
) = swapExactYtForSyStatic(market, exactYtIn);
|
|
525
|
+
|
|
526
|
+
netTokenOut = _redeemSyToTokenStatic(market, tokenOut, netSyOut);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
/// @dev netYtIn is the parameter to approx
|
|
530
|
+
function swapYtForExactSyStatic(
|
|
531
|
+
address market,
|
|
532
|
+
uint256 exactSyOut
|
|
533
|
+
) public view returns (uint256 netYtIn, uint256 netSyFee, uint256 priceImpact, uint256 exchangeRateAfter) {
|
|
534
|
+
MarketState memory state = _readState(market);
|
|
535
|
+
|
|
536
|
+
PYIndex index = _pyIndex(market);
|
|
537
|
+
|
|
538
|
+
(netYtIn, , netSyFee) = state.approxSwapYtForExactSy(index, exactSyOut, block.timestamp, defaultApproxParams);
|
|
539
|
+
priceImpact = _calcPriceImpactYt(market, netYtIn.Int());
|
|
540
|
+
|
|
541
|
+
// Execute swap to calculate exchangeRateAfter
|
|
542
|
+
state.swapSyForExactPt(index, netYtIn, block.timestamp);
|
|
543
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
function swapExactTokenForYtStatic(
|
|
547
|
+
address market,
|
|
548
|
+
address tokenIn,
|
|
549
|
+
uint256 amountTokenIn
|
|
550
|
+
)
|
|
551
|
+
public
|
|
552
|
+
view
|
|
553
|
+
returns (
|
|
554
|
+
uint256 netYtOut,
|
|
555
|
+
uint256 netSyMinted,
|
|
556
|
+
uint256 netSyFee,
|
|
557
|
+
uint256 priceImpact,
|
|
558
|
+
uint256 exchangeRateAfter
|
|
559
|
+
)
|
|
560
|
+
{
|
|
561
|
+
netSyMinted = _mintSyFromTokenStatic(market, tokenIn, amountTokenIn);
|
|
562
|
+
(netYtOut, netSyFee, priceImpact, exchangeRateAfter) = swapExactSyForYtStatic(market, netSyMinted);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
// totalPtToSwap is the param to approx
|
|
566
|
+
function swapExactPtForYtStatic(
|
|
567
|
+
address market,
|
|
568
|
+
uint256 exactPtIn
|
|
569
|
+
)
|
|
570
|
+
public
|
|
571
|
+
view
|
|
572
|
+
returns (
|
|
573
|
+
uint256 netYtOut,
|
|
574
|
+
uint256 totalPtToSwap,
|
|
575
|
+
uint256 netSyFee,
|
|
576
|
+
uint256 priceImpact,
|
|
577
|
+
uint256 exchangeRateAfter
|
|
578
|
+
)
|
|
579
|
+
{
|
|
580
|
+
MarketState memory state = _readState(market);
|
|
581
|
+
PYIndex index = _pyIndex(market);
|
|
582
|
+
|
|
583
|
+
(netYtOut, totalPtToSwap, netSyFee) = state.approxSwapExactPtForYt(
|
|
584
|
+
index,
|
|
585
|
+
exactPtIn,
|
|
586
|
+
block.timestamp,
|
|
587
|
+
defaultApproxParams
|
|
588
|
+
);
|
|
589
|
+
priceImpact = _calcPriceImpactPY(market, totalPtToSwap.neg());
|
|
590
|
+
|
|
591
|
+
// Execute swap to calculate exchangeRateAfter
|
|
592
|
+
state.swapExactPtForSy(index, totalPtToSwap, block.timestamp);
|
|
593
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
// totalPtSwapped is the param to approx
|
|
597
|
+
function swapExactYtForPtStatic(
|
|
598
|
+
address market,
|
|
599
|
+
uint256 exactYtIn
|
|
600
|
+
)
|
|
601
|
+
public
|
|
602
|
+
view
|
|
603
|
+
returns (
|
|
604
|
+
uint256 netPtOut,
|
|
605
|
+
uint256 totalPtSwapped,
|
|
606
|
+
uint256 netSyFee,
|
|
607
|
+
uint256 priceImpact,
|
|
608
|
+
uint256 exchangeRateAfter
|
|
609
|
+
)
|
|
610
|
+
{
|
|
611
|
+
MarketState memory state = _readState(market);
|
|
612
|
+
PYIndex index = _pyIndex(market);
|
|
613
|
+
|
|
614
|
+
(netPtOut, totalPtSwapped, netSyFee) = state.approxSwapExactYtForPt(
|
|
615
|
+
index,
|
|
616
|
+
exactYtIn,
|
|
617
|
+
block.timestamp,
|
|
618
|
+
defaultApproxParams
|
|
619
|
+
);
|
|
620
|
+
|
|
621
|
+
priceImpact = _calcPriceImpactPY(market, totalPtSwapped.Int());
|
|
622
|
+
|
|
623
|
+
// Execute swap to calculate exchangeRateAfter
|
|
624
|
+
state.swapSyForExactPt(index, totalPtSwapped, block.timestamp);
|
|
625
|
+
exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
function _calcPriceImpactPY(address market, int256 netPtOut) internal view returns (uint256) {
|
|
629
|
+
return IPRouterStatic(address(this)).calcPriceImpactPY(market, netPtOut);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
function _calcPriceImpactPt(address market, int256 netPtOut) internal view returns (uint256) {
|
|
633
|
+
return IPRouterStatic(address(this)).calcPriceImpactPt(market, netPtOut);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
function _calcPriceImpactYt(address market, int256 netPtOut) internal view returns (uint256) {
|
|
637
|
+
return IPRouterStatic(address(this)).calcPriceImpactYt(market, netPtOut);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
function _mintSyFromTokenStatic(
|
|
641
|
+
address market,
|
|
642
|
+
address tokenIn,
|
|
643
|
+
uint256 netTokenToDeposit
|
|
644
|
+
) internal view returns (uint256) {
|
|
645
|
+
return IPRouterStatic(address(this)).mintSyFromTokenStatic(_getSyMarket(market), tokenIn, netTokenToDeposit);
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
function _redeemSyToTokenStatic(
|
|
649
|
+
address market,
|
|
650
|
+
address tokenOut,
|
|
651
|
+
uint256 netSyToRedeem
|
|
652
|
+
) internal view returns (uint256) {
|
|
653
|
+
return IPRouterStatic(address(this)).redeemSyToTokenStatic(_getSyMarket(market), tokenOut, netSyToRedeem);
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
function _getTradeExchangeRateExcludeFee(address market, MarketState memory state) internal view returns (uint256) {
|
|
657
|
+
return IPRouterStatic(address(this)).getTradeExchangeRateExcludeFee(market, state);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
function _readState(address market) internal view returns (MarketState memory) {
|
|
661
|
+
return IPMarket(market).readState(address(this));
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
function _pyIndex(address market) private view returns (PYIndex) {
|
|
665
|
+
return PYIndex.wrap(IPRouterStatic(address(this)).pyIndexCurrentViewMarket(market));
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
function _getSyMarket(address market) internal view returns (address) {
|
|
669
|
+
(IStandardizedYield SY, , ) = IPMarket(market).readTokens();
|
|
670
|
+
return address(SY);
|
|
671
|
+
}
|
|
672
|
+
}
|