@pendle/core-v2 0.9.4-beta → 0.10.2-testnet
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 +7 -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 +4 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/{PendleYearnVaultScy.sol → PendleYearnVaultSCY.sol}/PendleYearnVaultSCY.json +3 -3
- 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/CelerReceiverUpg.sol/CelerReceiverUpg.json +67 -5
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.json +63 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.json +65 -3
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +74 -10
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +79 -15
- 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 +204 -123
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.json +127 -73
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +93 -34
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +90 -14
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.json +14 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +139 -37
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +84 -56
- 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 +122 -11
- 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/PendlePrincipalToken.sol/PendlePrincipalToken.json +2 -2
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +96 -40
- 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/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +1025 -0
- 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/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.json +622 -0
- package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.json +35 -0
- package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.json +459 -0
- package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.json +459 -0
- package/build/artifacts/contracts/core/actions/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/base/{ActionSCYAndPTBase.sol/ActionSCYAndPTBase.json → ActionBaseMintRedeem.sol/ActionBaseMintRedeem.json} +2 -2
- 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/IBenQiComptroller.sol/IBenQiComptroller.json +24 -0
- 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/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/{IPActionCore.sol/IPActionCore.json → IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.json} +141 -912
- package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.json +598 -0
- package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.json +35 -0
- package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.json +435 -0
- package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/{IPActionYT.sol/IPActionYT.json → IPActionSwapYT.sol/IPActionSwapYT.json} +23 -11
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +323 -47
- package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.dbg.json +4 -0
- package/build/artifacts/contracts/{core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.json → interfaces/IPGauge.sol/IPGauge.json} +5 -5
- 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/IPMarket.sol/IPMarket.json +72 -29
- package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.json +0 -11
- 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/IPVeToken.sol/IPVeToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.json +0 -37
- 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/IPYieldToken.sol/IPYieldToken.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/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.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/IWXBTRFLY.sol/IWXBTRFLY.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/OracleLib.sol/OracleLib.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.json +74 -0
- 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/PYIndex.sol/PYIndexLib.json +2 -2
- 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 +1 -1
- 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/MarketApproxLib.sol/MarketApproxLib.json +2 -2
- package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.json +2 -2
- 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/MarketMathStatic.sol/MarketMathStatic.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +93 -0
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +427 -39
- package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.dbg.json +4 -0
- package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.json +86 -0
- package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.dbg.json +4 -0
- package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.json +37 -0
- package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.dbg.json +1 -1
- package/build/artifacts/contracts/periphery/PermissionsV2Upg.sol/PermissionsV2Upg.dbg.json +1 -1
- package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +8 -0
- package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol +1 -1
- package/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol +11 -5
- package/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol +0 -1
- package/contracts/SuperComposableYield/SCY-implementations/{PendleYearnVaultScy.sol → PendleYearnVaultSCY.sol} +0 -0
- package/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol +1 -0
- package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +1 -1
- package/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol +7 -7
- package/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol +7 -6
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +4 -5
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol +6 -3
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol +6 -3
- package/contracts/core/LiquidityMining/PendleGauge.sol +3 -2
- package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +22 -28
- package/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +71 -13
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +7 -4
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +6 -2
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +4 -3
- package/contracts/core/Market/PendleMarket.sol +93 -57
- package/contracts/core/Market/PendleMarketFactory.sol +18 -33
- package/contracts/core/PendleRouter.sol +60 -52
- package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +12 -12
- package/contracts/core/YieldContracts/PendleYieldToken.sol +1 -1
- package/contracts/core/actions/ActionAddRemoveLiq.sol +366 -0
- package/contracts/core/actions/ActionCallback.sol +6 -6
- package/contracts/core/actions/ActionMintRedeem.sol +124 -0
- package/contracts/core/actions/ActionMisc.sol +24 -0
- package/contracts/core/actions/ActionSwapPT.sol +199 -0
- package/contracts/core/actions/{base/ActionSCYAndYTBase.sol → ActionSwapYT.sol} +109 -74
- package/contracts/core/actions/base/{ActionSCYAndPYBase.sol → ActionBaseMintRedeem.sol} +9 -8
- package/contracts/interfaces/IBenQiComptroller.sol +2 -0
- package/contracts/interfaces/IPActionAddRemoveLiq.sol +188 -0
- package/contracts/interfaces/IPActionMintRedeem.sol +115 -0
- package/contracts/interfaces/IPActionMisc.sol +9 -0
- package/contracts/interfaces/IPActionSwapPT.sol +69 -0
- package/contracts/interfaces/{IPActionYT.sol → IPActionSwapYT.sol} +12 -10
- package/contracts/interfaces/IPAllAction.sol +12 -3
- package/contracts/interfaces/IPGauge.sol +6 -0
- package/contracts/interfaces/IPGaugeController.sol +0 -2
- package/contracts/interfaces/IPMarket.sol +28 -10
- package/contracts/interfaces/IPMarketFactory.sol +1 -7
- package/contracts/interfaces/IPVeToken.sol +1 -1
- package/contracts/interfaces/IPVotingController.sol +0 -2
- package/contracts/interfaces/IRewardManager.sol +1 -1
- package/contracts/libraries/OracleLib.sol +214 -0
- package/contracts/libraries/RewardManagerAbstract.sol +1 -1
- package/contracts/libraries/math/MarketApproxLib.sol +227 -14
- package/contracts/libraries/math/MarketMathCore.sol +0 -33
- package/contracts/offchain-helpers/MarketMathStatic.sol +565 -0
- package/contracts/offchain-helpers/RouterStatic.sol +187 -251
- package/contracts/periphery/BoringOwnableUpgradeable.sol +62 -0
- package/deployments/43113-core.json +7 -8
- package/deployments/43113-markets/benqi-market-590025.json +8 -0
- package/deployments/43113-markets/benqi-market-c93916.json +8 -0
- package/deployments/80001-core.json +6 -7
- package/deployments/80001-markets/benqi-market-3b8BD1.json +8 -0
- package/deployments/80001-markets/benqi-market-b61e7f.json +8 -0
- package/package.json +11 -11
- package/typechain-types/ActionAddRemoveLiq.ts +1037 -0
- package/typechain-types/ActionBaseMintRedeem.ts +87 -0
- package/typechain-types/ActionCore.ts +21 -20
- package/typechain-types/ActionMintRedeem.ts +665 -0
- package/typechain-types/ActionMisc.ts +105 -0
- package/typechain-types/ActionSwapPT.ts +515 -0
- package/typechain-types/ActionSwapYT.ts +515 -0
- package/typechain-types/ActionYT.ts +5 -4
- package/typechain-types/BoringOwnable.ts +194 -0
- package/typechain-types/BoringOwnableData.ts +100 -0
- package/typechain-types/BoringOwnableUpgradeable.ts +194 -0
- package/typechain-types/BoringOwnableUpgradeableData.ts +100 -0
- package/typechain-types/CelerReceiverUpg.ts +124 -19
- package/typechain-types/CelerSenderUpg.ts +116 -11
- package/typechain-types/IBenQiComptroller.ts +39 -0
- package/typechain-types/IPActionAddRemoveLiq.ts +1018 -0
- package/typechain-types/IPActionCore.ts +21 -20
- package/typechain-types/IPActionMintRedeem.ts +646 -0
- package/typechain-types/IPActionMisc.ts +105 -0
- package/typechain-types/IPActionSwapPT.ts +496 -0
- package/typechain-types/IPActionSwapYT.ts +496 -0
- package/typechain-types/IPActionYT.ts +5 -4
- package/typechain-types/IPAllAction.ts +431 -193
- package/typechain-types/IPGauge.ts +87 -0
- package/typechain-types/IPMarket.ts +133 -50
- package/typechain-types/IPMarketFactory.ts +7 -17
- package/typechain-types/IPVeToken.ts +8 -8
- package/typechain-types/IPVotingController.ts +0 -20
- package/typechain-types/IPYieldToken.ts +3 -3
- package/typechain-types/IRewardManager.ts +3 -3
- package/typechain-types/MarketMathStatic.ts +198 -0
- package/typechain-types/OracleLib.ts +124 -0
- package/typechain-types/PendleGaugeControllerBaseUpg.ts +118 -15
- package/typechain-types/PendleGaugeControllerMainchainUpg.ts +136 -9
- package/typechain-types/PendleGaugeControllerSidechainUpg.ts +138 -11
- package/typechain-types/PendleMarket.ts +178 -59
- package/typechain-types/PendleMarketFactory.ts +135 -61
- package/typechain-types/PendleRouter.ts +201 -31
- package/typechain-types/PendleVotingControllerUpg.ts +325 -149
- package/typechain-types/PendleYieldContractFactory.ts +144 -21
- package/typechain-types/RouterStatic.ts +344 -64
- package/typechain-types/VotingControllerStorageUpg.ts +182 -113
- package/typechain-types/VotingEscrowPendleMainchain.ts +170 -63
- package/typechain-types/VotingEscrowPendleSidechain.ts +163 -17
- package/typechain-types/VotingEscrowTokenBase.ts +27 -8
- package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +1083 -0
- package/typechain-types/factories/ActionBaseMintRedeem__factory.ts +43 -0
- package/typechain-types/factories/ActionCallback__factory.ts +1 -1
- package/typechain-types/factories/ActionCore__factory.ts +6 -6
- package/typechain-types/factories/ActionMintRedeem__factory.ts +680 -0
- package/typechain-types/factories/ActionMisc__factory.ts +85 -0
- package/typechain-types/factories/ActionSwapPT__factory.ts +514 -0
- package/typechain-types/factories/ActionSwapYT__factory.ts +514 -0
- package/typechain-types/factories/ActionYT__factory.ts +2 -2
- package/typechain-types/factories/BoringOwnableData__factory.ts +90 -0
- package/typechain-types/factories/BoringOwnableUpgradeableData__factory.ts +96 -0
- package/typechain-types/factories/BoringOwnableUpgradeable__factory.ts +143 -0
- package/typechain-types/factories/BoringOwnable__factory.ts +141 -0
- package/typechain-types/factories/CelerReceiverUpg__factory.ts +67 -5
- package/typechain-types/factories/CelerSenderUpg__factory.ts +63 -1
- package/typechain-types/factories/IBenQiComptroller__factory.ts +24 -0
- package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +1020 -0
- package/typechain-types/factories/IPActionCore__factory.ts +5 -5
- package/typechain-types/factories/IPActionMintRedeem__factory.ts +613 -0
- package/typechain-types/factories/IPActionMisc__factory.ts +47 -0
- package/typechain-types/factories/IPActionSwapPT__factory.ts +450 -0
- package/typechain-types/factories/IPActionSwapYT__factory.ts +450 -0
- package/typechain-types/factories/IPActionYT__factory.ts +1 -1
- package/typechain-types/factories/IPAllAction__factory.ts +323 -47
- package/typechain-types/factories/IPGauge__factory.ts +36 -0
- package/typechain-types/factories/IPMarketFactory__factory.ts +0 -11
- package/typechain-types/factories/IPMarket__factory.ts +72 -29
- package/typechain-types/factories/IPVeToken__factory.ts +1 -1
- package/typechain-types/factories/IPVotingController__factory.ts +0 -37
- package/typechain-types/factories/IPYieldToken__factory.ts +1 -1
- package/typechain-types/factories/IRewardManager__factory.ts +1 -1
- package/typechain-types/factories/MarketMathStatic__factory.ts +146 -0
- package/typechain-types/factories/OracleLib__factory.ts +124 -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 +10 -1
- package/typechain-types/factories/PendleGaugeControllerBaseUpg__factory.ts +65 -3
- package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +73 -13
- package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +79 -23
- package/typechain-types/factories/PendleMarketFactory__factory.ts +84 -86
- package/typechain-types/factories/PendleMarket__factory.ts +131 -37
- package/typechain-types/factories/PendlePrincipalToken__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 +141 -22
- 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 +203 -129
- 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 +97 -72
- package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
- package/typechain-types/factories/RouterStatic__factory.ts +233 -39
- package/typechain-types/factories/VotingControllerStorageUpg__factory.ts +126 -72
- package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +93 -41
- package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +90 -17
- package/typechain-types/factories/VotingEscrowTokenBase__factory.ts +14 -1
- package/typechain-types/hardhat.d.ts +162 -0
- package/typechain-types/index.ts +36 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.json +0 -1801
- package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +0 -447
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.json +0 -24
- package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.json +0 -874
- package/contracts/core/actions/ActionCore.sol +0 -382
- package/contracts/core/actions/ActionYT.sol +0 -93
- package/contracts/core/actions/base/ActionSCYAndPTBase.sol +0 -303
- package/contracts/interfaces/IPActionCore.sol +0 -306
- package/contracts/interfaces/IPRouterStatic.sol +0 -152
- package/deployments/43113-markets/benqi-market-599408.json +0 -7
- package/deployments/43113-markets/benqi-market-93bbf0.json +0 -7
- package/deployments/43113-markets/benqi-market-95E744.json +0 -7
- package/deployments/43113-markets/benqi-market-D91a3F.json +0 -7
- package/deployments/80001-markets/benqi-market-007811.json +0 -7
- package/deployments/80001-markets/benqi-market-3fe528.json +0 -7
- package/typechain-types/FeeDistributorAbstract.ts +0 -164
- package/typechain-types/IPVotingControllerStorage.ts +0 -169
- package/typechain-types/factories/FeeDistributorAbstract__factory.ts +0 -90
- package/typechain-types/factories/IPVotingControllerStorage__factory.ts +0 -107
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.15;
|
|
3
|
+
|
|
4
|
+
import "./base/ActionBaseMintRedeem.sol";
|
|
5
|
+
import "../../interfaces/IPMarket.sol";
|
|
6
|
+
import "../../interfaces/IPActionMintRedeem.sol";
|
|
7
|
+
|
|
8
|
+
contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
|
|
9
|
+
using MarketMathCore for MarketState;
|
|
10
|
+
using Math for uint256;
|
|
11
|
+
using Math for int256;
|
|
12
|
+
|
|
13
|
+
/// @dev since this contract will be proxied, it must not contains non-immutable variables
|
|
14
|
+
constructor(address _kyberSwapRouter)
|
|
15
|
+
ActionBaseMintRedeem(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
|
|
16
|
+
{}
|
|
17
|
+
|
|
18
|
+
/// @dev refer to the internal function
|
|
19
|
+
function mintScyFromToken(
|
|
20
|
+
address receiver,
|
|
21
|
+
address SCY,
|
|
22
|
+
uint256 minScyOut,
|
|
23
|
+
TokenInput calldata input
|
|
24
|
+
) external payable returns (uint256 netScyOut) {
|
|
25
|
+
netScyOut = _mintScyFromToken(receiver, SCY, minScyOut, input);
|
|
26
|
+
|
|
27
|
+
emit MintScyFromToken(
|
|
28
|
+
msg.sender,
|
|
29
|
+
receiver,
|
|
30
|
+
SCY,
|
|
31
|
+
input.tokenIn,
|
|
32
|
+
input.netTokenIn,
|
|
33
|
+
netScyOut
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// @dev refer to the internal function
|
|
38
|
+
function redeemScyToToken(
|
|
39
|
+
address receiver,
|
|
40
|
+
address SCY,
|
|
41
|
+
uint256 netScyIn,
|
|
42
|
+
TokenOutput calldata output
|
|
43
|
+
) external returns (uint256 netTokenOut) {
|
|
44
|
+
netTokenOut = _redeemScyToToken(receiver, SCY, netScyIn, output, true);
|
|
45
|
+
emit RedeemScyToToken(msg.sender, receiver, SCY, netScyIn, output.tokenOut, netTokenOut);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/// @dev refer to the internal function
|
|
49
|
+
function mintPyFromToken(
|
|
50
|
+
address receiver,
|
|
51
|
+
address YT,
|
|
52
|
+
uint256 minPyOut,
|
|
53
|
+
TokenInput calldata input
|
|
54
|
+
) external payable returns (uint256 netPyOut) {
|
|
55
|
+
netPyOut = _mintPyFromToken(receiver, YT, minPyOut, input);
|
|
56
|
+
emit MintPyFromToken(msg.sender, receiver, YT, input.tokenIn, input.netTokenIn, netPyOut);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/// @dev refer to the internal function
|
|
60
|
+
function redeemPyToToken(
|
|
61
|
+
address receiver,
|
|
62
|
+
address YT,
|
|
63
|
+
uint256 netPyIn,
|
|
64
|
+
TokenOutput calldata output
|
|
65
|
+
) external returns (uint256 netTokenOut) {
|
|
66
|
+
netTokenOut = _redeemPyToToken(receiver, YT, netPyIn, output, true);
|
|
67
|
+
emit RedeemPyToToken(msg.sender, receiver, YT, netPyIn, output.tokenOut, netTokenOut);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function mintPyFromScy(
|
|
71
|
+
address receiver,
|
|
72
|
+
address YT,
|
|
73
|
+
uint256 netScyIn,
|
|
74
|
+
uint256 minPyOut
|
|
75
|
+
) external returns (uint256 netPyOut) {
|
|
76
|
+
netPyOut = _mintPyFromScy(receiver, YT, netScyIn, minPyOut, true);
|
|
77
|
+
emit MintPyFromScy(msg.sender, receiver, YT, netScyIn, netPyOut);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function redeemPyToScy(
|
|
81
|
+
address receiver,
|
|
82
|
+
address YT,
|
|
83
|
+
uint256 netPyIn,
|
|
84
|
+
uint256 minScyOut
|
|
85
|
+
) external returns (uint256 netScyOut) {
|
|
86
|
+
netScyOut = _redeemPyToScy(receiver, YT, netPyIn, minScyOut, true);
|
|
87
|
+
emit RedeemPyToScy(msg.sender, receiver, YT, netPyIn, netScyOut);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function redeemDueInterestAndRewards(
|
|
91
|
+
address user,
|
|
92
|
+
address[] calldata scys,
|
|
93
|
+
address[] calldata yts,
|
|
94
|
+
address[] calldata markets
|
|
95
|
+
)
|
|
96
|
+
external
|
|
97
|
+
returns (
|
|
98
|
+
uint256[][] memory scyRewards,
|
|
99
|
+
uint256[] memory ytInterests,
|
|
100
|
+
uint256[][] memory ytRewards,
|
|
101
|
+
uint256[][] memory marketRewards
|
|
102
|
+
)
|
|
103
|
+
{
|
|
104
|
+
scyRewards = new uint256[][](scys.length);
|
|
105
|
+
for (uint256 i = 0; i < scys.length; ++i) {
|
|
106
|
+
scyRewards[i] = ISuperComposableYield(scys[i]).claimRewards(user);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
ytInterests = new uint256[](yts.length);
|
|
110
|
+
ytRewards = new uint256[][](yts.length);
|
|
111
|
+
for (uint256 i = 0; i < yts.length; ++i) {
|
|
112
|
+
(ytInterests[i], ytRewards[i]) = IPYieldToken(yts[i]).redeemDueInterestAndRewards(
|
|
113
|
+
user,
|
|
114
|
+
true,
|
|
115
|
+
true
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
marketRewards = new uint256[][](markets.length);
|
|
120
|
+
for (uint256 i = 0; i < markets.length; ++i) {
|
|
121
|
+
marketRewards[i] = IPMarket(markets[i]).redeemRewards(user);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.15;
|
|
3
|
+
|
|
4
|
+
import "../../interfaces/IPMarket.sol";
|
|
5
|
+
import "../../interfaces/IPActionMisc.sol";
|
|
6
|
+
|
|
7
|
+
contract ActionMisc is IPActionMisc {
|
|
8
|
+
using Math for uint256;
|
|
9
|
+
|
|
10
|
+
function consult(address market, uint32 secondsAgo)
|
|
11
|
+
external
|
|
12
|
+
view
|
|
13
|
+
returns (uint96 lnImpliedRateMean)
|
|
14
|
+
{
|
|
15
|
+
require(secondsAgo != 0, "time range is zero");
|
|
16
|
+
uint32[] memory secondsAgos = new uint32[](2);
|
|
17
|
+
secondsAgos[0] = secondsAgo;
|
|
18
|
+
secondsAgos[1] = 0;
|
|
19
|
+
uint216[] memory lnImpliedRateCumulatives = IPMarket(market).observe(secondsAgos);
|
|
20
|
+
return
|
|
21
|
+
(uint256(lnImpliedRateCumulatives[1] - lnImpliedRateCumulatives[0]) / secondsAgo)
|
|
22
|
+
.Uint96();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.15;
|
|
3
|
+
|
|
4
|
+
import "./base/ActionBaseMintRedeem.sol";
|
|
5
|
+
import "../../interfaces/IPActionSwapPT.sol";
|
|
6
|
+
import "../../interfaces/IPMarket.sol";
|
|
7
|
+
|
|
8
|
+
contract ActionSwapPT is IPActionSwapPT, ActionBaseMintRedeem {
|
|
9
|
+
using MarketMathCore for MarketState;
|
|
10
|
+
using MarketApproxLib for MarketState;
|
|
11
|
+
using Math for uint256;
|
|
12
|
+
using Math for int256;
|
|
13
|
+
using SafeERC20 for IERC20;
|
|
14
|
+
using PYIndexLib for IPYieldToken;
|
|
15
|
+
|
|
16
|
+
/// @dev since this contract will be proxied, it must not contains non-immutable variables
|
|
17
|
+
constructor(address _kyberSwapRouter)
|
|
18
|
+
ActionBaseMintRedeem(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
|
|
19
|
+
{}
|
|
20
|
+
|
|
21
|
+
function swapExactPtForScy(
|
|
22
|
+
address receiver,
|
|
23
|
+
address market,
|
|
24
|
+
uint256 exactPtIn,
|
|
25
|
+
uint256 minScyOut
|
|
26
|
+
) external returns (uint256 netScyOut) {
|
|
27
|
+
(, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
|
|
28
|
+
IERC20(address(PT)).safeTransferFrom(msg.sender, market, exactPtIn);
|
|
29
|
+
|
|
30
|
+
(netScyOut, ) = IPMarket(market).swapExactPtForScy(receiver, exactPtIn, EMPTY_BYTES);
|
|
31
|
+
|
|
32
|
+
require(netScyOut >= minScyOut, "insufficient SCY out");
|
|
33
|
+
|
|
34
|
+
emit SwapPtAndScy(msg.sender, market, receiver, exactPtIn.neg(), netScyOut.Int());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @notice Note that the amount of SCY out will be a bit more than `exactScyOut`, since an approximation is used. It's
|
|
39
|
+
guaranteed that the `netScyOut` is at least `exactScyOut`
|
|
40
|
+
*/
|
|
41
|
+
function swapPtForExactScy(
|
|
42
|
+
address receiver,
|
|
43
|
+
address market,
|
|
44
|
+
uint256 exactScyOut,
|
|
45
|
+
uint256 maxPtIn,
|
|
46
|
+
ApproxParams calldata guessPtIn
|
|
47
|
+
) external returns (uint256 netPtIn) {
|
|
48
|
+
MarketState memory state = IPMarket(market).readState();
|
|
49
|
+
(, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market).readTokens();
|
|
50
|
+
|
|
51
|
+
(netPtIn, , ) = state.approxSwapPtForExactScy(
|
|
52
|
+
YT.newIndex(),
|
|
53
|
+
exactScyOut,
|
|
54
|
+
block.timestamp,
|
|
55
|
+
guessPtIn
|
|
56
|
+
);
|
|
57
|
+
require(netPtIn <= maxPtIn, "exceed limit PT in");
|
|
58
|
+
|
|
59
|
+
IERC20(PT).safeTransferFrom(msg.sender, market, netPtIn);
|
|
60
|
+
|
|
61
|
+
(uint256 netScyOut, ) = IPMarket(market).swapExactPtForScy(receiver, netPtIn, EMPTY_BYTES);
|
|
62
|
+
|
|
63
|
+
// fail-safe
|
|
64
|
+
require(netScyOut >= exactScyOut, "FS insufficient SCY out");
|
|
65
|
+
|
|
66
|
+
emit SwapPtAndScy(msg.sender, market, receiver, netPtIn.neg(), exactScyOut.Int());
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function swapScyForExactPt(
|
|
70
|
+
address receiver,
|
|
71
|
+
address market,
|
|
72
|
+
uint256 exactPtOut,
|
|
73
|
+
uint256 maxScyIn
|
|
74
|
+
) external returns (uint256 netScyIn) {
|
|
75
|
+
MarketState memory state = IPMarket(market).readState();
|
|
76
|
+
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
77
|
+
|
|
78
|
+
(netScyIn, ) = state.swapScyForExactPt(YT.newIndex(), exactPtOut, block.timestamp);
|
|
79
|
+
|
|
80
|
+
require(netScyIn <= maxScyIn, "exceed limit SCY in");
|
|
81
|
+
|
|
82
|
+
IERC20(SCY).safeTransferFrom(msg.sender, market, netScyIn);
|
|
83
|
+
|
|
84
|
+
IPMarket(market).swapScyForExactPt(receiver, exactPtOut, EMPTY_BYTES); // ignore return
|
|
85
|
+
|
|
86
|
+
// no fail-safe since exactly netScyIn will go into the market
|
|
87
|
+
emit SwapPtAndScy(msg.sender, market, receiver, exactPtOut.Int(), netScyIn.neg());
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function swapExactScyForPt(
|
|
91
|
+
address receiver,
|
|
92
|
+
address market,
|
|
93
|
+
uint256 exactScyIn,
|
|
94
|
+
uint256 minPtOut,
|
|
95
|
+
ApproxParams calldata guessPtOut
|
|
96
|
+
) external returns (uint256 netPtOut) {
|
|
97
|
+
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
98
|
+
|
|
99
|
+
IERC20(SCY).safeTransferFrom(msg.sender, market, exactScyIn);
|
|
100
|
+
|
|
101
|
+
netPtOut = _swapExactScyForPt(receiver, market, YT, exactScyIn, minPtOut, guessPtOut);
|
|
102
|
+
|
|
103
|
+
emit SwapPtAndScy(msg.sender, market, receiver, netPtOut.Int(), exactScyIn.neg());
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @notice swap from any ERC20 tokens, through Uniswap's forks, to get baseTokens to make SCY, then swap
|
|
108
|
+
from SCY to PT
|
|
109
|
+
* @dev simply a combination of _mintScyFromToken & _swapExactScyForPt
|
|
110
|
+
*/
|
|
111
|
+
function swapExactTokenForPt(
|
|
112
|
+
address receiver,
|
|
113
|
+
address market,
|
|
114
|
+
uint256 minPtOut,
|
|
115
|
+
ApproxParams calldata guessPtOut,
|
|
116
|
+
TokenInput calldata input
|
|
117
|
+
) external payable returns (uint256 netPtOut) {
|
|
118
|
+
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
119
|
+
|
|
120
|
+
// all output SCY is transferred directly to the market
|
|
121
|
+
uint256 netScyUseToBuyPt = _mintScyFromToken(address(market), address(SCY), 1, input);
|
|
122
|
+
|
|
123
|
+
// SCY is already in the market, hence doPull = false
|
|
124
|
+
netPtOut = _swapExactScyForPt(
|
|
125
|
+
receiver,
|
|
126
|
+
market,
|
|
127
|
+
YT,
|
|
128
|
+
netScyUseToBuyPt,
|
|
129
|
+
minPtOut,
|
|
130
|
+
guessPtOut
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
emit SwapPtAndToken(
|
|
134
|
+
msg.sender,
|
|
135
|
+
market,
|
|
136
|
+
input.tokenIn,
|
|
137
|
+
receiver,
|
|
138
|
+
netPtOut.Int(),
|
|
139
|
+
input.netTokenIn.neg()
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @notice swap from PT to SCY, then redeem SCY to baseToken & swap through Uniswap's forks to get tokenOut
|
|
145
|
+
* @dev simply a combination of _swapExactPtForScy & _redeemScyToToken
|
|
146
|
+
*/
|
|
147
|
+
function swapExactPtForToken(
|
|
148
|
+
address receiver,
|
|
149
|
+
address market,
|
|
150
|
+
uint256 exactPtIn,
|
|
151
|
+
TokenOutput calldata output
|
|
152
|
+
) external returns (uint256 netTokenOut) {
|
|
153
|
+
(ISuperComposableYield SCY, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
|
|
154
|
+
|
|
155
|
+
IERC20(address(PT)).safeTransferFrom(msg.sender, market, exactPtIn);
|
|
156
|
+
|
|
157
|
+
// all output SCY is directly transferred to the SCY contract
|
|
158
|
+
(uint256 netScyReceived, ) = IPMarket(market).swapExactPtForScy(
|
|
159
|
+
address(SCY),
|
|
160
|
+
exactPtIn,
|
|
161
|
+
EMPTY_BYTES
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
// since all SCY is already at the SCY contract, doPull = false
|
|
165
|
+
netTokenOut = _redeemScyToToken(receiver, address(SCY), netScyReceived, output, false);
|
|
166
|
+
|
|
167
|
+
emit SwapPtAndToken(
|
|
168
|
+
msg.sender,
|
|
169
|
+
market,
|
|
170
|
+
output.tokenOut,
|
|
171
|
+
receiver,
|
|
172
|
+
exactPtIn.neg(),
|
|
173
|
+
netTokenOut.Int()
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function _swapExactScyForPt(
|
|
178
|
+
address receiver,
|
|
179
|
+
address market,
|
|
180
|
+
IPYieldToken YT,
|
|
181
|
+
uint256 exactScyIn,
|
|
182
|
+
uint256 minPtOut,
|
|
183
|
+
ApproxParams calldata guessPtOut
|
|
184
|
+
) internal returns (uint256 netPtOut) {
|
|
185
|
+
MarketState memory state = IPMarket(market).readState();
|
|
186
|
+
|
|
187
|
+
(netPtOut, , ) = state.approxSwapExactScyForPt(
|
|
188
|
+
YT.newIndex(),
|
|
189
|
+
exactScyIn,
|
|
190
|
+
block.timestamp,
|
|
191
|
+
guessPtOut
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
require(netPtOut >= minPtOut, "insufficient PT out");
|
|
195
|
+
|
|
196
|
+
IPMarket(market).swapScyForExactPt(receiver, netPtOut, EMPTY_BYTES); // ignore return
|
|
197
|
+
// no fail-safe since exactly netPtOut >= minPtOut will be out
|
|
198
|
+
}
|
|
199
|
+
}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
2
|
pragma solidity 0.8.15;
|
|
3
3
|
|
|
4
|
-
import "
|
|
5
|
-
import "
|
|
6
|
-
import "
|
|
7
|
-
import "
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
11
|
-
|
|
12
|
-
abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
4
|
+
import "./base/ActionBaseMintRedeem.sol";
|
|
5
|
+
import "./base/CallbackHelper.sol";
|
|
6
|
+
import "../../interfaces/IPActionSwapYT.sol";
|
|
7
|
+
import "../../interfaces/IPMarket.sol";
|
|
8
|
+
|
|
9
|
+
contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
|
|
13
10
|
using Math for uint256;
|
|
14
11
|
using Math for int256;
|
|
15
12
|
using MarketMathCore for MarketState;
|
|
@@ -18,6 +15,11 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
|
18
15
|
using SafeERC20 for IPYieldToken;
|
|
19
16
|
using PYIndexLib for IPYieldToken;
|
|
20
17
|
|
|
18
|
+
/// @dev since this contract will be proxied, it must not contains non-immutable variables
|
|
19
|
+
constructor(address _kyberSwapRouter)
|
|
20
|
+
ActionBaseMintRedeem(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
|
|
21
|
+
{}
|
|
22
|
+
|
|
21
23
|
/**
|
|
22
24
|
* @notice swap exact SCY to YT with the help of flashswaps & YT tokenization / redemption
|
|
23
25
|
* @dev inner working of this function:
|
|
@@ -28,36 +30,20 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
|
28
30
|
transferred to the receiver
|
|
29
31
|
* @dev this function works in conjunction with ActionCallback
|
|
30
32
|
*/
|
|
31
|
-
function
|
|
33
|
+
function swapExactScyForYt(
|
|
32
34
|
address receiver,
|
|
33
35
|
address market,
|
|
34
36
|
uint256 exactScyIn,
|
|
35
37
|
uint256 minYtOut,
|
|
36
|
-
ApproxParams memory guessYtOut
|
|
37
|
-
|
|
38
|
-
) internal returns (uint256 netYtOut) {
|
|
38
|
+
ApproxParams memory guessYtOut
|
|
39
|
+
) external returns (uint256 netYtOut) {
|
|
39
40
|
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
40
|
-
MarketState memory state = IPMarket(market).readState(false);
|
|
41
|
-
|
|
42
|
-
(netYtOut, , ) = state.approxSwapExactScyForYt(
|
|
43
|
-
YT.newIndex(),
|
|
44
|
-
exactScyIn,
|
|
45
|
-
block.timestamp,
|
|
46
|
-
guessYtOut
|
|
47
|
-
);
|
|
48
41
|
|
|
49
|
-
|
|
50
|
-
require(netYtOut >= minYtOut, "insufficient YT out");
|
|
42
|
+
SCY.safeTransferFrom(msg.sender, address(YT), exactScyIn);
|
|
51
43
|
|
|
52
|
-
|
|
53
|
-
SCY.safeTransferFrom(msg.sender, address(YT), exactScyIn);
|
|
54
|
-
}
|
|
44
|
+
_swapExactScyForYt(receiver, market, YT, exactScyIn, minYtOut, guessYtOut);
|
|
55
45
|
|
|
56
|
-
|
|
57
|
-
address(YT),
|
|
58
|
-
netYtOut, // exactPtIn = netYtOut
|
|
59
|
-
_encodeSwapExactScyForYt(receiver, minYtOut)
|
|
60
|
-
);
|
|
46
|
+
emit SwapYtAndScy(msg.sender, market, receiver, netYtOut.Int(), exactScyIn.neg());
|
|
61
47
|
}
|
|
62
48
|
|
|
63
49
|
/**
|
|
@@ -70,28 +56,19 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
|
70
56
|
the rest is transferred to the `receiver`
|
|
71
57
|
* @dev this function works in conjunction with ActionCallback
|
|
72
58
|
*/
|
|
73
|
-
function
|
|
59
|
+
function swapExactYtForScy(
|
|
74
60
|
address receiver,
|
|
75
61
|
address market,
|
|
76
62
|
uint256 exactYtIn,
|
|
77
|
-
uint256 minScyOut
|
|
78
|
-
|
|
79
|
-
) internal returns (uint256 netScyOut) {
|
|
63
|
+
uint256 minScyOut
|
|
64
|
+
) external returns (uint256 netScyOut) {
|
|
80
65
|
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
81
66
|
|
|
82
|
-
|
|
83
|
-
YT.safeTransferFrom(msg.sender, address(YT), exactYtIn);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
uint256 preScyBalance = SCY.balanceOf(receiver);
|
|
67
|
+
YT.safeTransferFrom(msg.sender, address(YT), exactYtIn);
|
|
87
68
|
|
|
88
|
-
|
|
89
|
-
address(YT),
|
|
90
|
-
exactYtIn, // exactPtOut = exactYtIn
|
|
91
|
-
_encodeSwapYtForScy(receiver, minScyOut)
|
|
92
|
-
); // ignore return
|
|
69
|
+
netScyOut = _swapExactYtForScy(receiver, market, SCY, YT, exactYtIn, minScyOut);
|
|
93
70
|
|
|
94
|
-
|
|
71
|
+
emit SwapYtAndScy(msg.sender, market, receiver, exactYtIn.neg(), netScyOut.Int());
|
|
95
72
|
}
|
|
96
73
|
|
|
97
74
|
/**
|
|
@@ -103,12 +80,12 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
|
103
80
|
while YT is transferred to the user
|
|
104
81
|
* @dev this function works in conjunction with ActionCallback
|
|
105
82
|
*/
|
|
106
|
-
function
|
|
83
|
+
function swapScyForExactYt(
|
|
107
84
|
address receiver,
|
|
108
85
|
address market,
|
|
109
86
|
uint256 exactYtOut,
|
|
110
87
|
uint256 maxScyIn
|
|
111
|
-
)
|
|
88
|
+
) external returns (uint256 netScyIn) {
|
|
112
89
|
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
113
90
|
|
|
114
91
|
uint256 preScyBalance = SCY.balanceOf(msg.sender);
|
|
@@ -120,6 +97,8 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
|
120
97
|
);
|
|
121
98
|
|
|
122
99
|
netScyIn = preScyBalance - SCY.balanceOf(msg.sender);
|
|
100
|
+
|
|
101
|
+
emit SwapYtAndScy(msg.sender, market, receiver, exactYtOut.Int(), netScyIn.neg());
|
|
123
102
|
}
|
|
124
103
|
|
|
125
104
|
/**
|
|
@@ -132,15 +111,14 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
|
132
111
|
transferred to `receiver`
|
|
133
112
|
* @dev this function works in conjunction with ActionCallback
|
|
134
113
|
*/
|
|
135
|
-
function
|
|
114
|
+
function swapYtForExactScy(
|
|
136
115
|
address receiver,
|
|
137
116
|
address market,
|
|
138
117
|
uint256 exactScyOut,
|
|
139
118
|
uint256 maxYtIn,
|
|
140
|
-
ApproxParams memory guessYtIn
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
MarketState memory state = IPMarket(market).readState(false);
|
|
119
|
+
ApproxParams memory guessYtIn
|
|
120
|
+
) external returns (uint256 netYtIn) {
|
|
121
|
+
MarketState memory state = IPMarket(market).readState();
|
|
144
122
|
(, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
145
123
|
|
|
146
124
|
(netYtIn, , ) = state.approxSwapYtForExactScy(
|
|
@@ -152,28 +130,24 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
|
152
130
|
|
|
153
131
|
require(netYtIn <= maxYtIn, "exceed YT in limit");
|
|
154
132
|
|
|
155
|
-
|
|
156
|
-
YT.safeTransferFrom(msg.sender, address(YT), netYtIn);
|
|
157
|
-
}
|
|
133
|
+
YT.safeTransferFrom(msg.sender, address(YT), netYtIn);
|
|
158
134
|
|
|
159
135
|
IPMarket(market).swapScyForExactPt(
|
|
160
136
|
address(YT),
|
|
161
137
|
netYtIn, // exactPtOut = netYtIn
|
|
162
138
|
_encodeSwapYtForScy(receiver, exactScyOut)
|
|
163
139
|
); // ignore return
|
|
140
|
+
|
|
141
|
+
emit SwapYtAndScy(msg.sender, market, receiver, netYtIn.neg(), exactScyOut.Int());
|
|
164
142
|
}
|
|
165
143
|
|
|
166
|
-
|
|
167
|
-
* @notice swap any ERC20 tokens, through Uniswap's forks, to baseToken of the corresponding SCY of YT. These SCY is then
|
|
168
|
-
used to swap to YT. Please refer to swapExactScyForYt for more details.
|
|
169
|
-
*/
|
|
170
|
-
function _swapExactTokenForYt(
|
|
144
|
+
function swapExactTokenForYt(
|
|
171
145
|
address receiver,
|
|
172
146
|
address market,
|
|
173
147
|
uint256 minYtOut,
|
|
174
148
|
ApproxParams memory guessYtOut,
|
|
175
149
|
TokenInput calldata input
|
|
176
|
-
)
|
|
150
|
+
) external payable returns (uint256 netYtOut) {
|
|
177
151
|
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
178
152
|
|
|
179
153
|
uint256 netScyUsedToBuyYT = _mintScyFromToken(address(YT), address(SCY), 1, input);
|
|
@@ -181,28 +155,89 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
|
|
|
181
155
|
netYtOut = _swapExactScyForYt(
|
|
182
156
|
receiver,
|
|
183
157
|
market,
|
|
158
|
+
YT,
|
|
184
159
|
netScyUsedToBuyYT,
|
|
185
160
|
minYtOut,
|
|
186
|
-
guessYtOut
|
|
187
|
-
|
|
161
|
+
guessYtOut
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
emit SwapYtAndToken(
|
|
165
|
+
msg.sender,
|
|
166
|
+
market,
|
|
167
|
+
receiver,
|
|
168
|
+
input.tokenIn,
|
|
169
|
+
netYtOut.Int(),
|
|
170
|
+
input.netTokenIn.neg()
|
|
188
171
|
);
|
|
189
172
|
}
|
|
190
173
|
|
|
191
|
-
|
|
192
|
-
* @notice swap YT to SCY (using `swapExactYtForScy` logic), then redeem SCY to baseToken & swap baseToken to token
|
|
193
|
-
through Uniswap's forks
|
|
194
|
-
*/
|
|
195
|
-
function _swapExactYtForToken(
|
|
174
|
+
function swapExactYtForToken(
|
|
196
175
|
address receiver,
|
|
197
176
|
address market,
|
|
198
177
|
uint256 netYtIn,
|
|
199
|
-
TokenOutput calldata output
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
178
|
+
TokenOutput calldata output
|
|
179
|
+
) external returns (uint256 netTokenOut) {
|
|
180
|
+
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
203
181
|
|
|
204
|
-
|
|
182
|
+
YT.safeTransferFrom(msg.sender, address(YT), netYtIn);
|
|
183
|
+
|
|
184
|
+
uint256 netScyOut = _swapExactYtForScy(address(SCY), market, SCY, YT, netYtIn, 1);
|
|
205
185
|
|
|
206
186
|
netTokenOut = _redeemScyToToken(receiver, address(SCY), netScyOut, output, false);
|
|
187
|
+
|
|
188
|
+
emit SwapYtAndToken(
|
|
189
|
+
msg.sender,
|
|
190
|
+
market,
|
|
191
|
+
receiver,
|
|
192
|
+
output.tokenOut,
|
|
193
|
+
netYtIn.neg(),
|
|
194
|
+
netTokenOut.Int()
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function _swapExactScyForYt(
|
|
199
|
+
address receiver,
|
|
200
|
+
address market,
|
|
201
|
+
IPYieldToken YT,
|
|
202
|
+
uint256 exactScyIn,
|
|
203
|
+
uint256 minYtOut,
|
|
204
|
+
ApproxParams memory guessYtOut
|
|
205
|
+
) internal returns (uint256 netYtOut) {
|
|
206
|
+
MarketState memory state = IPMarket(market).readState();
|
|
207
|
+
|
|
208
|
+
(netYtOut, , ) = state.approxSwapExactScyForYt(
|
|
209
|
+
YT.newIndex(),
|
|
210
|
+
exactScyIn,
|
|
211
|
+
block.timestamp,
|
|
212
|
+
guessYtOut
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
// early-check
|
|
216
|
+
require(netYtOut >= minYtOut, "insufficient YT out");
|
|
217
|
+
|
|
218
|
+
IPMarket(market).swapExactPtForScy(
|
|
219
|
+
address(YT),
|
|
220
|
+
netYtOut, // exactPtIn = netYtOut
|
|
221
|
+
_encodeSwapExactScyForYt(receiver, minYtOut)
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function _swapExactYtForScy(
|
|
226
|
+
address receiver,
|
|
227
|
+
address market,
|
|
228
|
+
ISuperComposableYield SCY,
|
|
229
|
+
IPYieldToken YT,
|
|
230
|
+
uint256 exactYtIn,
|
|
231
|
+
uint256 minScyOut
|
|
232
|
+
) internal returns (uint256 netScyOut) {
|
|
233
|
+
uint256 preScyBalance = SCY.balanceOf(receiver);
|
|
234
|
+
|
|
235
|
+
IPMarket(market).swapScyForExactPt(
|
|
236
|
+
address(YT),
|
|
237
|
+
exactYtIn, // exactPtOut = exactYtIn
|
|
238
|
+
_encodeSwapYtForScy(receiver, minScyOut)
|
|
239
|
+
); // ignore return
|
|
240
|
+
|
|
241
|
+
netScyOut = SCY.balanceOf(receiver) - preScyBalance;
|
|
207
242
|
}
|
|
208
243
|
}
|
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
2
|
pragma solidity 0.8.15;
|
|
3
3
|
|
|
4
|
-
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
5
4
|
import "../../../libraries/kyberswap/KyberSwapHelper.sol";
|
|
6
|
-
import "../../../libraries/helpers/MiniHelpers.sol";
|
|
7
5
|
import "../../../libraries/helpers/TokenHelper.sol";
|
|
8
6
|
import "../../../interfaces/ISuperComposableYield.sol";
|
|
9
7
|
import "../../../interfaces/IPYieldToken.sol";
|
|
10
8
|
|
|
11
9
|
// solhint-disable no-empty-blocks
|
|
12
|
-
abstract contract
|
|
10
|
+
abstract contract ActionBaseMintRedeem is TokenHelper, KyberSwapHelper {
|
|
13
11
|
using SafeERC20 for IERC20;
|
|
14
12
|
|
|
13
|
+
bytes internal constant EMPTY_BYTES = abi.encode();
|
|
14
|
+
|
|
15
15
|
/// @dev since this contract will be proxied, it must not contains non-immutable variables
|
|
16
16
|
constructor(address _kyberSwapRouter) KyberSwapHelper(_kyberSwapRouter) {}
|
|
17
17
|
|
|
18
|
-
/// @dev for Path. If no swap is needed, path = [token]
|
|
19
|
-
/// else, path = [inputToken, token0, token1, ...., outputToken]
|
|
20
|
-
|
|
21
18
|
/**
|
|
22
19
|
* @notice swap token to baseToken through Uniswap's forks & use it to mint SCY
|
|
23
20
|
*/
|
|
@@ -33,10 +30,14 @@ abstract contract ActionSCYAndPYBase is TokenHelper, KyberSwapHelper {
|
|
|
33
30
|
}
|
|
34
31
|
|
|
35
32
|
_safeApproveInf(input.tokenMintScy, SCY);
|
|
36
|
-
|
|
33
|
+
|
|
34
|
+
uint256 tokenMintScyBal = _selfBalance(input.tokenMintScy);
|
|
35
|
+
uint256 nativeAmountToAttach = input.tokenMintScy == NATIVE ? tokenMintScyBal : 0;
|
|
36
|
+
|
|
37
|
+
netScyOut = ISuperComposableYield(SCY).deposit{ value: nativeAmountToAttach }(
|
|
37
38
|
receiver,
|
|
38
39
|
input.tokenMintScy,
|
|
39
|
-
|
|
40
|
+
tokenMintScyBal,
|
|
40
41
|
minScyOut
|
|
41
42
|
);
|
|
42
43
|
}
|