@pendle/core-v2 0.8.1-gamma → 0.9.0-gamma-2
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/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +2 -2
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +2 -2
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +2 -2
- package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +1 -1
- package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
- package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.json +2 -2
- package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +2 -2
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
- package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.json +2 -2
- package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.json +272 -136
- package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +75 -41
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.json +1 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.json +1 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.json +1 -1
- package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IAavePool.sol/IAavePool.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IAaveRewardsController.sol/IAaveRewardsController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IEulerEToken.sol/IEulerEToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IEulerMarkets.sol/IEulerMarkets.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.json +268 -132
- package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.json +71 -37
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +339 -169
- package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPGovernanceManager.sol/IPGovernanceManager.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPInterestManagerYT.sol/IPInterestManagerYT.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarketSwapCallback.sol/IPMarketSwapCallback.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPPermissionsV2Upg.sol/IPermissionsV2Upg.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ISAvax.sol/ISAvax.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ISJoe.sol/ISJoe.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IStETH.sol/IStETH.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IStargateLPStaking.sol/IStargateLPStaking.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IStargatePool.sol/IStargatePool.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IStargateRouter.sol/IStargateRouter.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IWAvax.sol/IWAvax.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/{traderjoe/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.json → kyberswap/KyberSwapHelper.sol/KyberSwapHelper.json} +3 -3
- package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/Math.sol/Math.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/periphery/PermissionsV2Upg.sol/PermissionsV2Upg.dbg.json +1 -1
- package/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol +6 -8
- package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +1 -1
- package/contracts/core/PendleRouter.sol +10 -10
- package/contracts/core/actions/ActionCore.sol +54 -81
- package/contracts/core/actions/ActionYT.sol +17 -37
- package/contracts/core/actions/base/ActionSCYAndPTBase.sol +11 -28
- package/contracts/core/actions/base/ActionSCYAndPYBase.sol +39 -51
- package/contracts/core/actions/base/ActionSCYAndYTBase.sol +10 -27
- package/contracts/interfaces/IPActionCore.sol +43 -50
- package/contracts/interfaces/IPActionYT.sol +11 -12
- package/contracts/libraries/helpers/TokenHelper.sol +8 -3
- package/contracts/libraries/kyberswap/KyberSwapHelper.sol +61 -0
- package/package.json +1 -1
- package/typechain-types/ActionCore.ts +330 -356
- package/typechain-types/ActionSCYAndPTBase.ts +11 -8
- package/typechain-types/ActionSCYAndPYBase.ts +11 -8
- package/typechain-types/ActionSCYAndYTBase.ts +11 -8
- package/typechain-types/ActionYT.ts +119 -106
- package/typechain-types/IPActionCore.ts +320 -349
- package/typechain-types/IPActionYT.ts +110 -100
- package/typechain-types/IPAllAction.ts +400 -447
- package/typechain-types/KyberSwapHelper.ts +87 -0
- package/typechain-types/factories/ActionCallback__factory.ts +1 -1
- package/typechain-types/factories/ActionCore__factory.ts +275 -139
- package/typechain-types/factories/ActionSCYAndPTBase__factory.ts +1 -1
- package/typechain-types/factories/ActionSCYAndPYBase__factory.ts +1 -1
- package/typechain-types/factories/ActionSCYAndYTBase__factory.ts +1 -1
- package/typechain-types/factories/ActionYT__factory.ts +78 -44
- package/typechain-types/factories/IPActionCore__factory.ts +268 -132
- package/typechain-types/factories/IPActionYT__factory.ts +71 -37
- package/typechain-types/factories/IPAllAction__factory.ts +339 -169
- package/typechain-types/factories/KyberSwapHelper__factory.ts +39 -0
- package/typechain-types/factories/PendleAaveV3SCY__factory.ts +1 -1
- package/typechain-types/factories/PendleERC4626SCY__factory.ts +1 -1
- package/typechain-types/factories/PendleEulerSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
- package/typechain-types/factories/PendleMarket__factory.ts +1 -1
- package/typechain-types/factories/PendleQiSAvaxSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleQiTokenSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleRouter__factory.ts +1 -1
- package/typechain-types/factories/PendleSAvaxSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleSJoeSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleStargateSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleWstEthSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleYearnVaultScy__factory.ts +1 -1
- package/typechain-types/factories/PendleYieldContractFactory__factory.ts +1 -1
- package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
- package/typechain-types/hardhat.d.ts +9 -0
- package/typechain-types/index.ts +2 -0
- package/build/artifacts/contracts/interfaces/IJoePair.sol/IJoePair.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IJoePair.sol/IJoePair.json +0 -662
- package/build/artifacts/contracts/interfaces/IJoeRouter01.sol/IJoeRouter01.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IJoeRouter01.sol/IJoeRouter01.json +0 -760
- package/build/artifacts/contracts/interfaces/IJoeRouter02.sol/IJoeRouter02.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IJoeRouter02.sol/IJoeRouter02.json +0 -962
- package/build/artifacts/contracts/libraries/traderjoe/JoeLibrary.sol/JoeLibrary.dbg.json +0 -4
- package/build/artifacts/contracts/libraries/traderjoe/JoeLibrary.sol/JoeLibrary.json +0 -10
- package/build/artifacts/contracts/libraries/traderjoe/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.dbg.json +0 -4
- package/contracts/interfaces/IJoePair.sol +0 -98
- package/contracts/interfaces/IJoeRouter01.sol +0 -162
- package/contracts/interfaces/IJoeRouter02.sol +0 -52
- package/contracts/libraries/traderjoe/JoeLibrary.sol +0 -122
- package/contracts/libraries/traderjoe/PendleJoeSwapHelperUpg.sol +0 -80
|
@@ -13,8 +13,8 @@ contract ActionCore is IPActionCore, ActionSCYAndPTBase {
|
|
|
13
13
|
using Math for int256;
|
|
14
14
|
|
|
15
15
|
/// @dev since this contract will be proxied, it must not contains non-immutable variabless
|
|
16
|
-
constructor(address
|
|
17
|
-
ActionSCYAndPYBase(
|
|
16
|
+
constructor(address _kyberSwapRouter, address _marketFactory)
|
|
17
|
+
ActionSCYAndPYBase(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
|
|
18
18
|
{}
|
|
19
19
|
|
|
20
20
|
/// @dev refer to the internal function
|
|
@@ -48,7 +48,7 @@ contract ActionCore is IPActionCore, ActionSCYAndPTBase {
|
|
|
48
48
|
address market,
|
|
49
49
|
uint256 netPtIn,
|
|
50
50
|
uint256 minLpOut,
|
|
51
|
-
ApproxParams
|
|
51
|
+
ApproxParams calldata guessPtSwapToScy
|
|
52
52
|
) external returns (uint256 netLpOut) {
|
|
53
53
|
require(false, "NOT IMPLEMENTED");
|
|
54
54
|
}
|
|
@@ -58,18 +58,17 @@ contract ActionCore is IPActionCore, ActionSCYAndPTBase {
|
|
|
58
58
|
address market,
|
|
59
59
|
uint256 netScyIn,
|
|
60
60
|
uint256 minLpOut,
|
|
61
|
-
ApproxParams
|
|
61
|
+
ApproxParams calldata guessPtReceivedFromScy
|
|
62
62
|
) external returns (uint256 netLpOut) {
|
|
63
63
|
require(false, "NOT IMPLEMENTED");
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
function
|
|
66
|
+
function addLiquiditySingleToken(
|
|
67
67
|
address receiver,
|
|
68
68
|
address market,
|
|
69
|
-
uint256 netRawTokenIn,
|
|
70
69
|
uint256 minLpOut,
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
ApproxParams calldata guessPtReceivedFromScy,
|
|
71
|
+
TokenInput calldata input
|
|
73
72
|
) external returns (uint256 netLpOut) {
|
|
74
73
|
require(false, "NOT IMPLEMENTED");
|
|
75
74
|
}
|
|
@@ -98,7 +97,7 @@ contract ActionCore is IPActionCore, ActionSCYAndPTBase {
|
|
|
98
97
|
address market,
|
|
99
98
|
uint256 lpToRemove,
|
|
100
99
|
uint256 minPtOut,
|
|
101
|
-
ApproxParams
|
|
100
|
+
ApproxParams calldata guessPtOut
|
|
102
101
|
) external returns (uint256 netPtOut) {
|
|
103
102
|
require(false, "NOT IMPLEMENTED");
|
|
104
103
|
}
|
|
@@ -112,13 +111,12 @@ contract ActionCore is IPActionCore, ActionSCYAndPTBase {
|
|
|
112
111
|
require(false, "NOT IMPLEMENTED");
|
|
113
112
|
}
|
|
114
113
|
|
|
115
|
-
function
|
|
114
|
+
function removeLiquiditySingleToken(
|
|
116
115
|
address receiver,
|
|
117
116
|
address market,
|
|
118
117
|
uint256 lpToRemove,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
) external returns (uint256 netRawTokenOut) {
|
|
118
|
+
TokenOutput calldata output
|
|
119
|
+
) external returns (uint256 netTokenOut) {
|
|
122
120
|
require(false, "NOT IMPLEMENTED");
|
|
123
121
|
}
|
|
124
122
|
|
|
@@ -139,7 +137,7 @@ contract ActionCore is IPActionCore, ActionSCYAndPTBase {
|
|
|
139
137
|
address market,
|
|
140
138
|
uint256 exactScyOut,
|
|
141
139
|
uint256 maxPtIn,
|
|
142
|
-
ApproxParams
|
|
140
|
+
ApproxParams calldata guessPtIn
|
|
143
141
|
) external returns (uint256 netPtIn) {
|
|
144
142
|
netPtIn = _swapPtForExactScy(receiver, market, exactScyOut, maxPtIn, guessPtIn, true);
|
|
145
143
|
emit SwapPtAndScy(msg.sender, market, receiver, netPtIn.neg(), exactScyOut.Int());
|
|
@@ -162,71 +160,62 @@ contract ActionCore is IPActionCore, ActionSCYAndPTBase {
|
|
|
162
160
|
address market,
|
|
163
161
|
uint256 exactScyIn,
|
|
164
162
|
uint256 minPtOut,
|
|
165
|
-
ApproxParams
|
|
163
|
+
ApproxParams calldata guessPtOut
|
|
166
164
|
) external returns (uint256 netPtOut) {
|
|
167
165
|
netPtOut = _swapExactScyForPt(receiver, market, exactScyIn, minPtOut, guessPtOut, true);
|
|
168
166
|
emit SwapPtAndScy(msg.sender, market, receiver, netPtOut.Int(), exactScyIn.neg());
|
|
169
167
|
}
|
|
170
168
|
|
|
171
169
|
/// @dev refer to the internal function
|
|
172
|
-
function
|
|
170
|
+
function mintScyFromToken(
|
|
173
171
|
address receiver,
|
|
174
172
|
address SCY,
|
|
175
|
-
uint256 netRawTokenIn,
|
|
176
173
|
uint256 minScyOut,
|
|
177
|
-
|
|
174
|
+
TokenInput calldata input
|
|
178
175
|
) external returns (uint256 netScyOut) {
|
|
179
|
-
|
|
176
|
+
netScyOut = _mintScyFromToken(receiver, SCY, minScyOut, input);
|
|
177
|
+
|
|
178
|
+
emit MintScyFromToken(
|
|
179
|
+
msg.sender,
|
|
180
|
+
receiver,
|
|
181
|
+
SCY,
|
|
182
|
+
input.tokenIn,
|
|
183
|
+
input.netTokenIn,
|
|
184
|
+
netScyOut
|
|
185
|
+
);
|
|
180
186
|
}
|
|
181
187
|
|
|
182
188
|
/// @dev refer to the internal function
|
|
183
|
-
function
|
|
189
|
+
function redeemScyToToken(
|
|
184
190
|
address receiver,
|
|
185
191
|
address SCY,
|
|
186
192
|
uint256 netScyIn,
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
emit RedeemScyToRawToken(
|
|
192
|
-
msg.sender,
|
|
193
|
-
receiver,
|
|
194
|
-
SCY,
|
|
195
|
-
netScyIn,
|
|
196
|
-
path[path.length - 1],
|
|
197
|
-
netRawTokenOut
|
|
198
|
-
);
|
|
193
|
+
TokenOutput calldata output
|
|
194
|
+
) external returns (uint256 netTokenOut) {
|
|
195
|
+
netTokenOut = _redeemScyToToken(receiver, SCY, netScyIn, output, true);
|
|
196
|
+
emit RedeemScyToToken(msg.sender, receiver, SCY, netScyIn, output.tokenOut, netTokenOut);
|
|
199
197
|
}
|
|
200
198
|
|
|
201
199
|
/// @dev refer to the internal function
|
|
202
|
-
function
|
|
200
|
+
function mintPyFromToken(
|
|
203
201
|
address receiver,
|
|
204
202
|
address YT,
|
|
205
|
-
uint256 netRawTokenIn,
|
|
206
203
|
uint256 minPyOut,
|
|
207
|
-
|
|
204
|
+
TokenInput calldata input
|
|
208
205
|
) external returns (uint256 netPyOut) {
|
|
209
|
-
netPyOut =
|
|
210
|
-
emit
|
|
206
|
+
netPyOut = _mintPyFromToken(receiver, YT, minPyOut, input);
|
|
207
|
+
emit MintPyFromToken(msg.sender, receiver, YT, input.tokenIn, input.netTokenIn, netPyOut);
|
|
211
208
|
}
|
|
212
209
|
|
|
213
210
|
/// @dev refer to the internal function
|
|
214
|
-
function
|
|
211
|
+
function redeemPyToToken(
|
|
215
212
|
address receiver,
|
|
216
213
|
address YT,
|
|
217
214
|
uint256 netPyIn,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
emit RedeemPyToRawToken(
|
|
223
|
-
msg.sender,
|
|
224
|
-
receiver,
|
|
225
|
-
YT,
|
|
226
|
-
netPyIn,
|
|
227
|
-
path[path.length - 1],
|
|
228
|
-
netRawTokenOut
|
|
229
|
-
);
|
|
215
|
+
TokenOutput calldata output
|
|
216
|
+
) external returns (uint256 netTokenOut) {
|
|
217
|
+
netTokenOut = _redeemPyToToken(receiver, YT, netPyIn, output, true);
|
|
218
|
+
emit RedeemPyToToken(msg.sender, receiver, YT, netPyIn, output.tokenOut, netTokenOut);
|
|
230
219
|
}
|
|
231
220
|
|
|
232
221
|
function mintPyFromScy(
|
|
@@ -250,57 +239,41 @@ contract ActionCore is IPActionCore, ActionSCYAndPTBase {
|
|
|
250
239
|
}
|
|
251
240
|
|
|
252
241
|
/// @dev refer to the internal function
|
|
253
|
-
function
|
|
242
|
+
function swapExactTokenForPt(
|
|
254
243
|
address receiver,
|
|
255
244
|
address market,
|
|
256
|
-
uint256 exactRawTokenIn,
|
|
257
245
|
uint256 minPtOut,
|
|
258
|
-
|
|
259
|
-
|
|
246
|
+
ApproxParams calldata guessPtOut,
|
|
247
|
+
TokenInput calldata input
|
|
260
248
|
) external returns (uint256 netPtOut) {
|
|
261
|
-
netPtOut =
|
|
262
|
-
receiver,
|
|
263
|
-
market,
|
|
264
|
-
exactRawTokenIn,
|
|
265
|
-
minPtOut,
|
|
266
|
-
path,
|
|
267
|
-
guessPtOut,
|
|
268
|
-
true
|
|
269
|
-
);
|
|
249
|
+
netPtOut = _swapExactTokenForPt(receiver, market, minPtOut, guessPtOut, input);
|
|
270
250
|
|
|
271
|
-
emit
|
|
251
|
+
emit SwapPtAndToken(
|
|
272
252
|
msg.sender,
|
|
273
253
|
market,
|
|
274
|
-
|
|
254
|
+
input.tokenIn,
|
|
275
255
|
receiver,
|
|
276
256
|
netPtOut.Int(),
|
|
277
|
-
|
|
257
|
+
input.netTokenIn.neg()
|
|
278
258
|
);
|
|
279
259
|
}
|
|
280
260
|
|
|
281
261
|
/// @dev refer to the internal function
|
|
282
|
-
function
|
|
262
|
+
function swapExactPtForToken(
|
|
283
263
|
address receiver,
|
|
284
264
|
address market,
|
|
285
265
|
uint256 exactPtIn,
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
market,
|
|
292
|
-
exactPtIn,
|
|
293
|
-
minRawTokenOut,
|
|
294
|
-
path,
|
|
295
|
-
true
|
|
296
|
-
);
|
|
297
|
-
emit SwapPtAndRawToken(
|
|
266
|
+
TokenOutput calldata output
|
|
267
|
+
) external returns (uint256 netTokenOut) {
|
|
268
|
+
netTokenOut = _swapExactPtForToken(receiver, market, exactPtIn, output, true);
|
|
269
|
+
|
|
270
|
+
emit SwapPtAndToken(
|
|
298
271
|
msg.sender,
|
|
299
272
|
market,
|
|
300
|
-
|
|
273
|
+
output.tokenOut,
|
|
301
274
|
receiver,
|
|
302
275
|
exactPtIn.neg(),
|
|
303
|
-
|
|
276
|
+
netTokenOut.Int()
|
|
304
277
|
);
|
|
305
278
|
}
|
|
306
279
|
|
|
@@ -12,12 +12,9 @@ contract ActionYT is IPActionYT, ActionSCYAndYTBase {
|
|
|
12
12
|
using Math for int256;
|
|
13
13
|
|
|
14
14
|
/// @dev since this contract will be proxied, it must not contains non-immutable variables
|
|
15
|
-
constructor(address
|
|
16
|
-
ActionSCYAndPYBase(
|
|
17
|
-
|
|
18
|
-
{
|
|
19
|
-
|
|
20
|
-
}
|
|
15
|
+
constructor(address _kyberSwapRouter)
|
|
16
|
+
ActionSCYAndPYBase(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
|
|
17
|
+
{}
|
|
21
18
|
|
|
22
19
|
/// @dev refer to the internal function
|
|
23
20
|
function swapExactYtForScy(
|
|
@@ -66,48 +63,31 @@ contract ActionYT is IPActionYT, ActionSCYAndYTBase {
|
|
|
66
63
|
}
|
|
67
64
|
|
|
68
65
|
/// @dev refer to the internal function
|
|
69
|
-
function
|
|
66
|
+
function swapExactTokenForYt(
|
|
70
67
|
address receiver,
|
|
71
68
|
address market,
|
|
72
|
-
uint256 exactRawTokenIn,
|
|
73
69
|
uint256 minYtOut,
|
|
74
|
-
|
|
75
|
-
|
|
70
|
+
ApproxParams memory guessYtOut,
|
|
71
|
+
TokenInput calldata input
|
|
76
72
|
) external returns (uint256 netYtOut) {
|
|
77
|
-
netYtOut =
|
|
73
|
+
netYtOut = _swapExactTokenForYt(receiver, market, minYtOut, guessYtOut, input);
|
|
74
|
+
emit SwapYTAndToken(
|
|
78
75
|
receiver,
|
|
79
76
|
market,
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
guessYtOut,
|
|
84
|
-
true
|
|
77
|
+
input.tokenIn,
|
|
78
|
+
netYtOut.Int(),
|
|
79
|
+
input.netTokenIn.neg()
|
|
85
80
|
);
|
|
86
|
-
emit SwapYTAndRawToken(receiver, market, path[0], netYtOut.Int(), exactRawTokenIn.neg());
|
|
87
81
|
}
|
|
88
82
|
|
|
89
83
|
/// @dev refer to the internal function
|
|
90
|
-
function
|
|
84
|
+
function swapExactYtForToken(
|
|
91
85
|
address receiver,
|
|
92
86
|
address market,
|
|
93
|
-
uint256
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
receiver,
|
|
99
|
-
market,
|
|
100
|
-
exactYtIn,
|
|
101
|
-
minRawTokenOut,
|
|
102
|
-
path,
|
|
103
|
-
true
|
|
104
|
-
);
|
|
105
|
-
emit SwapYTAndRawToken(
|
|
106
|
-
receiver,
|
|
107
|
-
market,
|
|
108
|
-
path[path.length - 1],
|
|
109
|
-
exactYtIn.neg(),
|
|
110
|
-
netRawTokenOut.Int()
|
|
111
|
-
);
|
|
87
|
+
uint256 netYtIn,
|
|
88
|
+
TokenOutput calldata output
|
|
89
|
+
) external returns (uint256 netTokenOut) {
|
|
90
|
+
netTokenOut = _swapExactYtForToken(receiver, market, netYtIn, output, true);
|
|
91
|
+
emit SwapYTAndToken(receiver, market, output.tokenOut, netYtIn.neg(), netTokenOut.Int());
|
|
112
92
|
}
|
|
113
93
|
}
|
|
@@ -199,28 +199,19 @@ abstract contract ActionSCYAndPTBase is ActionSCYAndPYBase {
|
|
|
199
199
|
/**
|
|
200
200
|
* @notice swap from any ERC20 tokens, through Uniswap's forks, to get baseTokens to make SCY, then swap
|
|
201
201
|
from SCY to PT
|
|
202
|
-
* @dev simply a combination of
|
|
202
|
+
* @dev simply a combination of _mintScyFromToken & _swapExactScyForPt
|
|
203
203
|
*/
|
|
204
|
-
function
|
|
204
|
+
function _swapExactTokenForPt(
|
|
205
205
|
address receiver,
|
|
206
206
|
address market,
|
|
207
|
-
uint256 exactRawTokenIn,
|
|
208
207
|
uint256 minPtOut,
|
|
209
|
-
address[] calldata path,
|
|
210
208
|
ApproxParams memory guessPtOut,
|
|
211
|
-
|
|
209
|
+
TokenInput calldata input
|
|
212
210
|
) internal returns (uint256 netPtOut) {
|
|
213
211
|
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
214
212
|
|
|
215
213
|
// all output SCY is transferred directly to the market
|
|
216
|
-
uint256 netScyUseToBuyPt =
|
|
217
|
-
market,
|
|
218
|
-
address(SCY),
|
|
219
|
-
exactRawTokenIn,
|
|
220
|
-
1,
|
|
221
|
-
path,
|
|
222
|
-
doPull
|
|
223
|
-
);
|
|
214
|
+
uint256 netScyUseToBuyPt = _mintScyFromToken(address(market), address(SCY), 1, input);
|
|
224
215
|
|
|
225
216
|
// SCY is already in the market, hence doPull = false
|
|
226
217
|
netPtOut = _swapExactScyForPt(
|
|
@@ -234,30 +225,22 @@ abstract contract ActionSCYAndPTBase is ActionSCYAndPYBase {
|
|
|
234
225
|
}
|
|
235
226
|
|
|
236
227
|
/**
|
|
237
|
-
* @notice swap from PT to SCY, then redeem SCY to baseToken & swap through Uniswap's forks to get
|
|
238
|
-
* @dev simply a combination of _swapExactPtForScy &
|
|
228
|
+
* @notice swap from PT to SCY, then redeem SCY to baseToken & swap through Uniswap's forks to get tokenOut
|
|
229
|
+
* @dev simply a combination of _swapExactPtForScy & _redeemScyToToken
|
|
239
230
|
*/
|
|
240
|
-
function
|
|
231
|
+
function _swapExactPtForToken(
|
|
241
232
|
address receiver,
|
|
242
233
|
address market,
|
|
243
234
|
uint256 exactPtIn,
|
|
244
|
-
|
|
245
|
-
address[] calldata path,
|
|
235
|
+
TokenOutput calldata output,
|
|
246
236
|
bool doPull
|
|
247
|
-
) internal returns (uint256
|
|
237
|
+
) internal returns (uint256 netTokenOut) {
|
|
248
238
|
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
249
239
|
|
|
250
240
|
// all output SCY is directly transferred to the SCY contract
|
|
251
|
-
_swapExactPtForScy(address(SCY), market, exactPtIn, 1, doPull);
|
|
241
|
+
uint256 netScyReceived = _swapExactPtForScy(address(SCY), market, exactPtIn, 1, doPull);
|
|
252
242
|
|
|
253
243
|
// since all SCY is already at the SCY contract, doPull = false
|
|
254
|
-
|
|
255
|
-
receiver,
|
|
256
|
-
address(SCY),
|
|
257
|
-
0,
|
|
258
|
-
minRawTokenOut,
|
|
259
|
-
path,
|
|
260
|
-
false
|
|
261
|
-
);
|
|
244
|
+
netTokenOut = _redeemScyToToken(receiver, address(SCY), netScyReceived, output, false);
|
|
262
245
|
}
|
|
263
246
|
}
|
|
@@ -2,120 +2,108 @@
|
|
|
2
2
|
pragma solidity 0.8.15;
|
|
3
3
|
|
|
4
4
|
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
5
|
-
import "../../../libraries/
|
|
5
|
+
import "../../../libraries/kyberswap/KyberSwapHelper.sol";
|
|
6
6
|
import "../../../libraries/helpers/MiniHelpers.sol";
|
|
7
7
|
import "../../../libraries/helpers/TokenHelper.sol";
|
|
8
8
|
import "../../../interfaces/ISuperComposableYield.sol";
|
|
9
9
|
import "../../../interfaces/IPYieldToken.sol";
|
|
10
10
|
|
|
11
11
|
// solhint-disable no-empty-blocks
|
|
12
|
-
abstract contract ActionSCYAndPYBase is
|
|
12
|
+
abstract contract ActionSCYAndPYBase is TokenHelper, KyberSwapHelper {
|
|
13
13
|
using SafeERC20 for IERC20;
|
|
14
14
|
|
|
15
15
|
/// @dev since this contract will be proxied, it must not contains non-immutable variables
|
|
16
|
-
constructor(address
|
|
16
|
+
constructor(address _kyberSwapRouter) KyberSwapHelper(_kyberSwapRouter) {}
|
|
17
17
|
|
|
18
18
|
/// @dev for Path. If no swap is needed, path = [token]
|
|
19
19
|
/// else, path = [inputToken, token0, token1, ...., outputToken]
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
* @notice swap
|
|
22
|
+
* @notice swap token to baseToken through Uniswap's forks & use it to mint SCY
|
|
23
23
|
*/
|
|
24
|
-
function
|
|
24
|
+
function _mintScyFromToken(
|
|
25
25
|
address receiver,
|
|
26
26
|
address SCY,
|
|
27
|
-
uint256 netRawTokenIn,
|
|
28
27
|
uint256 minScyOut,
|
|
29
|
-
|
|
30
|
-
bool doPull
|
|
28
|
+
TokenInput calldata input
|
|
31
29
|
) internal returns (uint256 netScyOut) {
|
|
32
|
-
|
|
33
|
-
if (
|
|
34
|
-
|
|
35
|
-
IERC20(path[0]).safeTransferFrom(msg.sender, address(this), netRawTokenIn);
|
|
36
|
-
}
|
|
37
|
-
amountBaseToken = netRawTokenIn;
|
|
38
|
-
} else {
|
|
39
|
-
if (doPull) {
|
|
40
|
-
IERC20(path[0]).safeTransferFrom(msg.sender, _getFirstPair(path), netRawTokenIn);
|
|
41
|
-
}
|
|
42
|
-
amountBaseToken = _swapExactIn(path, netRawTokenIn, address(this));
|
|
30
|
+
_transferIn(input.tokenIn, msg.sender, input.netTokenIn);
|
|
31
|
+
if (input.tokenIn != input.tokenMintScy) {
|
|
32
|
+
_kyberswap(input.tokenIn, input.netTokenIn, input.kybercall);
|
|
43
33
|
}
|
|
44
34
|
|
|
45
|
-
|
|
46
|
-
IERC20(baseToken).approve(SCY, amountBaseToken);
|
|
35
|
+
_safeApproveInf(input.tokenMintScy, SCY);
|
|
47
36
|
netScyOut = ISuperComposableYield(SCY).deposit(
|
|
48
37
|
receiver,
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
input.tokenMintScy,
|
|
39
|
+
_selfBalance(input.tokenMintScy),
|
|
51
40
|
minScyOut
|
|
52
41
|
);
|
|
53
42
|
}
|
|
54
43
|
|
|
55
44
|
/**
|
|
56
|
-
* @notice redeem SCY to baseToken -> swap baseToken to
|
|
45
|
+
* @notice redeem SCY to baseToken -> swap baseToken to token through Uniswap's forks
|
|
57
46
|
*/
|
|
58
|
-
function
|
|
47
|
+
function _redeemScyToToken(
|
|
59
48
|
address receiver,
|
|
60
49
|
address SCY,
|
|
61
50
|
uint256 netScyIn,
|
|
62
|
-
|
|
63
|
-
address[] memory path,
|
|
51
|
+
TokenOutput calldata output,
|
|
64
52
|
bool doPull
|
|
65
|
-
) internal returns (uint256
|
|
53
|
+
) internal returns (uint256 netTokenOut) {
|
|
66
54
|
if (doPull) {
|
|
67
55
|
IERC20(SCY).safeTransferFrom(msg.sender, SCY, netScyIn);
|
|
68
56
|
}
|
|
69
57
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
netRawTokenOut = ISuperComposableYield(SCY).redeemAfterTransfer(
|
|
58
|
+
if (output.tokenRedeemScy == output.tokenOut) {
|
|
59
|
+
netTokenOut = ISuperComposableYield(SCY).redeemAfterTransfer(
|
|
73
60
|
receiver,
|
|
74
|
-
|
|
75
|
-
|
|
61
|
+
output.tokenRedeemScy,
|
|
62
|
+
output.minTokenOut
|
|
76
63
|
);
|
|
77
64
|
} else {
|
|
78
|
-
uint256
|
|
79
|
-
|
|
80
|
-
|
|
65
|
+
uint256 netTokenRedeemed = ISuperComposableYield(SCY).redeemAfterTransfer(
|
|
66
|
+
address(this),
|
|
67
|
+
output.tokenRedeemScy,
|
|
81
68
|
1
|
|
82
69
|
);
|
|
83
|
-
|
|
84
|
-
|
|
70
|
+
_kyberswap(output.tokenRedeemScy, netTokenRedeemed, output.kybercall);
|
|
71
|
+
|
|
72
|
+
netTokenOut = _selfBalance(output.tokenOut);
|
|
73
|
+
require(netTokenOut >= output.minTokenOut, "insufficient out");
|
|
74
|
+
|
|
75
|
+
_transferOut(output.tokenOut, receiver, netTokenOut);
|
|
85
76
|
}
|
|
86
77
|
}
|
|
87
78
|
|
|
88
79
|
/**
|
|
89
|
-
* @notice swap
|
|
80
|
+
* @notice swap token to baseToken through Uniswap's forks -> convert to SCY -> convert to PT + YT
|
|
90
81
|
*/
|
|
91
|
-
function
|
|
82
|
+
function _mintPyFromToken(
|
|
92
83
|
address receiver,
|
|
93
84
|
address YT,
|
|
94
|
-
uint256 netRawTokenIn,
|
|
95
85
|
uint256 minPyOut,
|
|
96
|
-
|
|
97
|
-
bool doPull
|
|
86
|
+
TokenInput calldata input
|
|
98
87
|
) internal returns (uint256 netPyOut) {
|
|
99
88
|
address SCY = IPYieldToken(YT).SCY();
|
|
100
89
|
|
|
101
|
-
|
|
90
|
+
_mintScyFromToken(YT, SCY, 1, input);
|
|
102
91
|
|
|
103
92
|
netPyOut = IPYieldToken(YT).mintPY(receiver, receiver);
|
|
104
93
|
require(netPyOut >= minPyOut, "insufficient PY out");
|
|
105
94
|
}
|
|
106
95
|
|
|
107
96
|
/**
|
|
108
|
-
* @notice redeem PT + YT to SCY -> redeem SCY to baseToken -> swap baseToken to
|
|
97
|
+
* @notice redeem PT + YT to SCY -> redeem SCY to baseToken -> swap baseToken to token through Uniswap's forks.
|
|
109
98
|
If the YT hasn't expired, both PT & YT will be needed to redeem. Else, only PT is needed
|
|
110
99
|
*/
|
|
111
|
-
function
|
|
100
|
+
function _redeemPyToToken(
|
|
112
101
|
address receiver,
|
|
113
102
|
address YT,
|
|
114
103
|
uint256 netPyIn,
|
|
115
|
-
|
|
116
|
-
address[] memory path,
|
|
104
|
+
TokenOutput calldata output,
|
|
117
105
|
bool doPull
|
|
118
|
-
) internal returns (uint256
|
|
106
|
+
) internal returns (uint256 netTokenOut) {
|
|
119
107
|
address PT = IPYieldToken(YT).PT();
|
|
120
108
|
address SCY = IPYieldToken(YT).SCY();
|
|
121
109
|
|
|
@@ -125,9 +113,9 @@ abstract contract ActionSCYAndPYBase is PendleJoeSwapHelperUpg, TokenHelper {
|
|
|
125
113
|
if (needToBurnYt) IERC20(YT).safeTransferFrom(msg.sender, YT, netPyIn);
|
|
126
114
|
}
|
|
127
115
|
|
|
128
|
-
IPYieldToken(YT).redeemPY(SCY); // ignore return
|
|
116
|
+
uint256 amountScyOut = IPYieldToken(YT).redeemPY(SCY); // ignore return
|
|
129
117
|
|
|
130
|
-
|
|
118
|
+
netTokenOut = _redeemScyToToken(receiver, SCY, amountScyOut, output, false);
|
|
131
119
|
}
|
|
132
120
|
|
|
133
121
|
function _mintPyFromScy(
|
|
@@ -167,25 +167,16 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
|
167
167
|
* @notice swap any ERC20 tokens, through Uniswap's forks, to baseToken of the corresponding SCY of YT. These SCY is then
|
|
168
168
|
used to swap to YT. Please refer to swapExactScyForYt for more details.
|
|
169
169
|
*/
|
|
170
|
-
function
|
|
170
|
+
function _swapExactTokenForYt(
|
|
171
171
|
address receiver,
|
|
172
172
|
address market,
|
|
173
|
-
uint256 exactRawTokenIn,
|
|
174
173
|
uint256 minYtOut,
|
|
175
|
-
address[] calldata path,
|
|
176
174
|
ApproxParams memory guessYtOut,
|
|
177
|
-
|
|
175
|
+
TokenInput calldata input
|
|
178
176
|
) internal returns (uint256 netYtOut) {
|
|
179
177
|
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
180
178
|
|
|
181
|
-
uint256 netScyUsedToBuyYT =
|
|
182
|
-
address(YT),
|
|
183
|
-
address(SCY),
|
|
184
|
-
exactRawTokenIn,
|
|
185
|
-
1,
|
|
186
|
-
path,
|
|
187
|
-
doPull
|
|
188
|
-
);
|
|
179
|
+
uint256 netScyUsedToBuyYT = _mintScyFromToken(address(YT), address(SCY), 1, input);
|
|
189
180
|
|
|
190
181
|
netYtOut = _swapExactScyForYt(
|
|
191
182
|
receiver,
|
|
@@ -198,28 +189,20 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
|
198
189
|
}
|
|
199
190
|
|
|
200
191
|
/**
|
|
201
|
-
* @notice swap YT to SCY (using `swapExactYtForScy` logic), then redeem SCY to baseToken & swap baseToken to
|
|
192
|
+
* @notice swap YT to SCY (using `swapExactYtForScy` logic), then redeem SCY to baseToken & swap baseToken to token
|
|
202
193
|
through Uniswap's forks
|
|
203
194
|
*/
|
|
204
|
-
function
|
|
195
|
+
function _swapExactYtForToken(
|
|
205
196
|
address receiver,
|
|
206
197
|
address market,
|
|
207
|
-
uint256
|
|
208
|
-
|
|
209
|
-
address[] calldata path,
|
|
198
|
+
uint256 netYtIn,
|
|
199
|
+
TokenOutput calldata output,
|
|
210
200
|
bool doPull
|
|
211
|
-
) internal returns (uint256
|
|
201
|
+
) internal returns (uint256 netTokenOut) {
|
|
212
202
|
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
213
203
|
|
|
214
|
-
uint256 netScyOut = _swapExactYtForScy(
|
|
204
|
+
uint256 netScyOut = _swapExactYtForScy(receiver, market, netYtIn, 1, doPull);
|
|
215
205
|
|
|
216
|
-
|
|
217
|
-
receiver,
|
|
218
|
-
address(SCY),
|
|
219
|
-
netScyOut,
|
|
220
|
-
minRawTokenOut,
|
|
221
|
-
path,
|
|
222
|
-
false
|
|
223
|
-
);
|
|
206
|
+
netTokenOut = _redeemScyToToken(receiver, address(SCY), netScyOut, output, false);
|
|
224
207
|
}
|
|
225
208
|
}
|