@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
|
@@ -4,87 +4,95 @@ pragma solidity 0.8.15;
|
|
|
4
4
|
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
|
5
5
|
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
|
|
6
6
|
import "@openzeppelin/contracts/proxy/Proxy.sol";
|
|
7
|
-
import "../interfaces/
|
|
8
|
-
import "../interfaces/IPActionYT.sol";
|
|
9
|
-
import "../interfaces/IPRouterStatic.sol";
|
|
7
|
+
import "../interfaces/IPAllAction.sol";
|
|
10
8
|
import "../interfaces/IPMarketSwapCallback.sol";
|
|
11
|
-
import "../periphery/
|
|
9
|
+
import "../periphery/BoringOwnableUpgradeable.sol";
|
|
12
10
|
|
|
13
11
|
/// @dev this contract will be deployed behind an ERC1967 proxy
|
|
14
12
|
/// calls to the ERC1967 proxy will be resolved at this contract, and proxied again to the
|
|
15
13
|
/// corresponding implementation contracts
|
|
16
14
|
|
|
17
15
|
// solhint-disable no-empty-blocks
|
|
18
|
-
contract PendleRouter is Proxy, Initializable, UUPSUpgradeable,
|
|
19
|
-
address public immutable
|
|
20
|
-
address public immutable
|
|
16
|
+
contract PendleRouter is Proxy, Initializable, UUPSUpgradeable, BoringOwnableUpgradeable {
|
|
17
|
+
address public immutable ACTION_MINT_REDEEM;
|
|
18
|
+
address public immutable ACTION_ADD_REMOVE_LIQ;
|
|
19
|
+
address public immutable ACTION_SWAP_PT;
|
|
20
|
+
address public immutable ACTION_SWAP_YT;
|
|
21
21
|
address public immutable ACTION_CALLBACK;
|
|
22
|
+
address public immutable ACTION_MISC;
|
|
22
23
|
|
|
23
24
|
constructor(
|
|
24
|
-
address
|
|
25
|
-
address
|
|
25
|
+
address _ACTION_MINT_REDEEM,
|
|
26
|
+
address _ACTION_ADD_REMOVE_LIQ,
|
|
27
|
+
address _ACTION_SWAP_PT,
|
|
28
|
+
address _ACTION_SWAP_YT,
|
|
26
29
|
address _ACTION_CALLBACK,
|
|
27
|
-
address
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"zero address"
|
|
34
|
-
);
|
|
35
|
-
ACTION_CORE = _ACTION_CORE;
|
|
36
|
-
ACTION_YT = _ACTION_YT;
|
|
30
|
+
address _ACTION_MISC
|
|
31
|
+
) initializer {
|
|
32
|
+
ACTION_MINT_REDEEM = _ACTION_MINT_REDEEM;
|
|
33
|
+
ACTION_ADD_REMOVE_LIQ = _ACTION_ADD_REMOVE_LIQ;
|
|
34
|
+
ACTION_SWAP_PT = _ACTION_SWAP_PT;
|
|
35
|
+
ACTION_SWAP_YT = _ACTION_SWAP_YT;
|
|
37
36
|
ACTION_CALLBACK = _ACTION_CALLBACK;
|
|
37
|
+
ACTION_MISC = _ACTION_MISC;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
function initialize() external initializer {
|
|
41
41
|
__UUPSUpgradeable_init();
|
|
42
|
-
|
|
42
|
+
__BoringOwnable_init();
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
function getRouterImplementation(bytes4 sig) public view returns (address) {
|
|
46
46
|
if (
|
|
47
|
-
sig ==
|
|
48
|
-
sig ==
|
|
49
|
-
sig ==
|
|
50
|
-
sig ==
|
|
51
|
-
sig ==
|
|
52
|
-
sig ==
|
|
53
|
-
sig ==
|
|
54
|
-
sig == IPActionCore.addLiquidityDualTokenAndPt.selector ||
|
|
55
|
-
sig == IPActionCore.addLiquiditySinglePt.selector ||
|
|
56
|
-
sig == IPActionCore.addLiquiditySingleScy.selector ||
|
|
57
|
-
sig == IPActionCore.addLiquiditySingleToken.selector ||
|
|
58
|
-
sig == IPActionCore.removeLiquidityDualScyAndPt.selector ||
|
|
59
|
-
sig == IPActionCore.removeLiquidityDualTokenAndPt.selector ||
|
|
60
|
-
sig == IPActionCore.removeLiquiditySinglePt.selector ||
|
|
61
|
-
sig == IPActionCore.removeLiquiditySingleScy.selector ||
|
|
62
|
-
sig == IPActionCore.removeLiquiditySingleToken.selector ||
|
|
63
|
-
sig == IPActionCore.swapExactPtForScy.selector ||
|
|
64
|
-
sig == IPActionCore.swapPtForExactScy.selector ||
|
|
65
|
-
sig == IPActionCore.swapScyForExactPt.selector ||
|
|
66
|
-
sig == IPActionCore.swapExactScyForPt.selector ||
|
|
67
|
-
sig == IPActionCore.swapExactTokenForPt.selector ||
|
|
68
|
-
sig == IPActionCore.swapExactPtForToken.selector ||
|
|
69
|
-
sig == IPActionCore.redeemDueInterestAndRewards.selector
|
|
47
|
+
sig == IPActionMintRedeem.mintScyFromToken.selector ||
|
|
48
|
+
sig == IPActionMintRedeem.redeemScyToToken.selector ||
|
|
49
|
+
sig == IPActionMintRedeem.mintPyFromToken.selector ||
|
|
50
|
+
sig == IPActionMintRedeem.redeemPyToToken.selector ||
|
|
51
|
+
sig == IPActionMintRedeem.mintPyFromScy.selector ||
|
|
52
|
+
sig == IPActionMintRedeem.redeemPyToScy.selector ||
|
|
53
|
+
sig == IPActionMintRedeem.redeemDueInterestAndRewards.selector
|
|
70
54
|
) {
|
|
71
|
-
return
|
|
55
|
+
return ACTION_MINT_REDEEM;
|
|
72
56
|
} else if (
|
|
73
|
-
sig ==
|
|
74
|
-
sig ==
|
|
75
|
-
sig ==
|
|
76
|
-
sig ==
|
|
77
|
-
sig ==
|
|
78
|
-
sig ==
|
|
57
|
+
sig == IPActionAddRemoveLiq.addLiquidityDualScyAndPt.selector ||
|
|
58
|
+
sig == IPActionAddRemoveLiq.addLiquidityDualTokenAndPt.selector ||
|
|
59
|
+
sig == IPActionAddRemoveLiq.addLiquiditySinglePt.selector ||
|
|
60
|
+
sig == IPActionAddRemoveLiq.addLiquiditySingleScy.selector ||
|
|
61
|
+
sig == IPActionAddRemoveLiq.addLiquiditySingleToken.selector ||
|
|
62
|
+
sig == IPActionAddRemoveLiq.removeLiquidityDualScyAndPt.selector ||
|
|
63
|
+
sig == IPActionAddRemoveLiq.removeLiquidityDualTokenAndPt.selector ||
|
|
64
|
+
sig == IPActionAddRemoveLiq.removeLiquiditySinglePt.selector ||
|
|
65
|
+
sig == IPActionAddRemoveLiq.removeLiquiditySingleScy.selector ||
|
|
66
|
+
sig == IPActionAddRemoveLiq.removeLiquiditySingleToken.selector
|
|
79
67
|
) {
|
|
80
|
-
return
|
|
68
|
+
return ACTION_ADD_REMOVE_LIQ;
|
|
69
|
+
} else if (
|
|
70
|
+
sig == IPActionSwapPT.swapExactPtForScy.selector ||
|
|
71
|
+
sig == IPActionSwapPT.swapPtForExactScy.selector ||
|
|
72
|
+
sig == IPActionSwapPT.swapScyForExactPt.selector ||
|
|
73
|
+
sig == IPActionSwapPT.swapExactScyForPt.selector ||
|
|
74
|
+
sig == IPActionSwapPT.swapExactTokenForPt.selector ||
|
|
75
|
+
sig == IPActionSwapPT.swapExactPtForToken.selector
|
|
76
|
+
) {
|
|
77
|
+
return ACTION_SWAP_PT;
|
|
78
|
+
} else if (
|
|
79
|
+
sig == IPActionSwapYT.swapExactYtForScy.selector ||
|
|
80
|
+
sig == IPActionSwapYT.swapScyForExactYt.selector ||
|
|
81
|
+
sig == IPActionSwapYT.swapExactScyForYt.selector ||
|
|
82
|
+
sig == IPActionSwapYT.swapExactTokenForYt.selector ||
|
|
83
|
+
sig == IPActionSwapYT.swapExactYtForToken.selector ||
|
|
84
|
+
sig == IPActionSwapYT.swapYtForExactScy.selector
|
|
85
|
+
) {
|
|
86
|
+
return ACTION_SWAP_YT;
|
|
81
87
|
} else if (sig == IPMarketSwapCallback.swapCallback.selector) {
|
|
82
88
|
return ACTION_CALLBACK;
|
|
89
|
+
} else if (sig == IPActionMisc.consult.selector) {
|
|
90
|
+
return ACTION_MISC;
|
|
83
91
|
}
|
|
84
92
|
require(false, "invalid market sig");
|
|
85
93
|
}
|
|
86
94
|
|
|
87
|
-
function _authorizeUpgrade(address newImplementation) internal override
|
|
95
|
+
function _authorizeUpgrade(address newImplementation) internal override onlyOwner {}
|
|
88
96
|
|
|
89
97
|
function _implementation() internal view override returns (address) {
|
|
90
98
|
return getRouterImplementation(msg.sig);
|
|
@@ -32,13 +32,13 @@ import "../../libraries/helpers/ExpiryUtilsLib.sol";
|
|
|
32
32
|
import "../../libraries/helpers/SSTORE2Deployer.sol";
|
|
33
33
|
import "../../libraries/helpers/MiniHelpers.sol";
|
|
34
34
|
|
|
35
|
-
import "../../periphery/
|
|
35
|
+
import "../../periphery/BoringOwnableUpgradeable.sol";
|
|
36
36
|
|
|
37
37
|
import "./PendlePrincipalToken.sol";
|
|
38
38
|
import "./PendleYieldToken.sol";
|
|
39
39
|
|
|
40
40
|
/// @dev If this contract is ever made upgradeable, please pay attention to the numContractDeployed variable
|
|
41
|
-
contract PendleYieldContractFactory is
|
|
41
|
+
contract PendleYieldContractFactory is BoringOwnableUpgradeable, IPYieldContractFactory {
|
|
42
42
|
using ExpiryUtils for string;
|
|
43
43
|
|
|
44
44
|
string private constant PT_PREFIX = "PT";
|
|
@@ -60,20 +60,20 @@ contract PendleYieldContractFactory is PermissionsV2Upg, Initializable, IPYieldC
|
|
|
60
60
|
mapping(address => bool) public isPT;
|
|
61
61
|
mapping(address => bool) public isYT;
|
|
62
62
|
|
|
63
|
-
constructor(
|
|
63
|
+
constructor() {}
|
|
64
|
+
|
|
65
|
+
function initialize(
|
|
64
66
|
uint96 _expiryDivisor,
|
|
65
67
|
uint128 _interestFeeRate,
|
|
66
68
|
uint128 _rewardFeeRate,
|
|
67
69
|
address _treasury,
|
|
68
|
-
|
|
69
|
-
)
|
|
70
|
+
bytes memory _pendleYtCreationCode
|
|
71
|
+
) external initializer {
|
|
72
|
+
__BoringOwnable_init();
|
|
70
73
|
setExpiryDivisor(_expiryDivisor);
|
|
71
74
|
setInterestFeeRate(_interestFeeRate);
|
|
72
75
|
setRewardFeeRate(_rewardFeeRate);
|
|
73
76
|
setTreasury(_treasury);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function initialize(bytes memory _pendleYtCreationCode) external initializer {
|
|
77
77
|
pendleYtCreationCodePointer = SSTORE2Deployer.setCreationCode(_pendleYtCreationCode);
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -131,23 +131,23 @@ contract PendleYieldContractFactory is PermissionsV2Upg, Initializable, IPYieldC
|
|
|
131
131
|
emit CreateYieldContract(SCY, PT, YT, expiry);
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
function setExpiryDivisor(uint96 newExpiryDivisor) public
|
|
134
|
+
function setExpiryDivisor(uint96 newExpiryDivisor) public onlyOwner {
|
|
135
135
|
require(newExpiryDivisor != 0, "zero value");
|
|
136
136
|
expiryDivisor = newExpiryDivisor;
|
|
137
137
|
emit SetExpiryDivisor(newExpiryDivisor);
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
function setInterestFeeRate(uint128 newInterestFeeRate) public
|
|
140
|
+
function setInterestFeeRate(uint128 newInterestFeeRate) public onlyOwner {
|
|
141
141
|
interestFeeRate = newInterestFeeRate;
|
|
142
142
|
emit SetInterestFeeRate(newInterestFeeRate);
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
function setRewardFeeRate(uint128 newInterestFeeRate) public
|
|
145
|
+
function setRewardFeeRate(uint128 newInterestFeeRate) public onlyOwner {
|
|
146
146
|
rewardFeeRate = newInterestFeeRate;
|
|
147
147
|
emit SetInterestFeeRate(newInterestFeeRate);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
function setTreasury(address newTreasury) public
|
|
150
|
+
function setTreasury(address newTreasury) public onlyOwner {
|
|
151
151
|
require(newTreasury != address(0), "zero address");
|
|
152
152
|
treasury = newTreasury;
|
|
153
153
|
emit SetTreasury(newTreasury);
|
|
@@ -17,7 +17,7 @@ import "../PendleERC20.sol";
|
|
|
17
17
|
import "./InterestManagerYT.sol";
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
|
|
20
|
+
Invariance to maintain:
|
|
21
21
|
- address(0) & address(this) should never have any rewards & activeBalance accounting done. This is
|
|
22
22
|
guaranteed by address(0) & address(this) check in each updateForTwo function
|
|
23
23
|
*/
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.15;
|
|
3
|
+
|
|
4
|
+
import "./base/ActionBaseMintRedeem.sol";
|
|
5
|
+
import "../../interfaces/IPActionAddRemoveLiq.sol";
|
|
6
|
+
import "../../interfaces/IPMarket.sol";
|
|
7
|
+
|
|
8
|
+
contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
9
|
+
using Math for uint256;
|
|
10
|
+
using Math for int256;
|
|
11
|
+
using MarketMathCore for MarketState;
|
|
12
|
+
using MarketApproxLib for MarketState;
|
|
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 addLiquidityDualScyAndPt(
|
|
22
|
+
address receiver,
|
|
23
|
+
address market,
|
|
24
|
+
uint256 netScyDesired,
|
|
25
|
+
uint256 netPtDesired,
|
|
26
|
+
uint256 minLpOut
|
|
27
|
+
)
|
|
28
|
+
external
|
|
29
|
+
returns (
|
|
30
|
+
uint256 netLpOut,
|
|
31
|
+
uint256 scyUsed,
|
|
32
|
+
uint256 netPtUsed
|
|
33
|
+
)
|
|
34
|
+
{
|
|
35
|
+
(ISuperComposableYield SCY, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market)
|
|
36
|
+
.readTokens();
|
|
37
|
+
|
|
38
|
+
MarketState memory state = IPMarket(market).readState();
|
|
39
|
+
(, netLpOut, scyUsed, netPtUsed) = state.addLiquidity(
|
|
40
|
+
YT.newIndex(),
|
|
41
|
+
netScyDesired,
|
|
42
|
+
netPtDesired,
|
|
43
|
+
block.timestamp
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
// early-check
|
|
47
|
+
require(netLpOut >= minLpOut, "insufficient lp out");
|
|
48
|
+
|
|
49
|
+
IERC20(SCY).safeTransferFrom(msg.sender, market, scyUsed);
|
|
50
|
+
IERC20(PT).safeTransferFrom(msg.sender, market, netPtUsed);
|
|
51
|
+
|
|
52
|
+
netLpOut = IPMarket(market).mint(receiver);
|
|
53
|
+
|
|
54
|
+
// fail-safe
|
|
55
|
+
require(netLpOut >= minLpOut, "FS insufficient lp out");
|
|
56
|
+
emit AddLiquidityDualScyAndPt(msg.sender, market, receiver, scyUsed, netPtUsed, netLpOut);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function addLiquidityDualTokenAndPt(
|
|
60
|
+
address receiver,
|
|
61
|
+
address market,
|
|
62
|
+
address tokenIn,
|
|
63
|
+
uint256 netTokenDesired,
|
|
64
|
+
uint256 netPtDesired,
|
|
65
|
+
uint256 minLpOut
|
|
66
|
+
)
|
|
67
|
+
external
|
|
68
|
+
payable
|
|
69
|
+
returns (
|
|
70
|
+
uint256 netLpOut,
|
|
71
|
+
uint256 netTokenUsed,
|
|
72
|
+
uint256 netPtUsed
|
|
73
|
+
)
|
|
74
|
+
{
|
|
75
|
+
(ISuperComposableYield SCY, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market)
|
|
76
|
+
.readTokens();
|
|
77
|
+
|
|
78
|
+
uint256 netScyDesired = SCY.previewDeposit(tokenIn, netTokenDesired);
|
|
79
|
+
uint256 scyUsed;
|
|
80
|
+
|
|
81
|
+
{
|
|
82
|
+
MarketState memory state = IPMarket(market).readState();
|
|
83
|
+
(, netLpOut, scyUsed, netPtUsed) = state.addLiquidity(
|
|
84
|
+
YT.newIndex(),
|
|
85
|
+
netScyDesired,
|
|
86
|
+
netPtDesired,
|
|
87
|
+
block.timestamp
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// early-check
|
|
92
|
+
require(netLpOut >= minLpOut, "insufficient lp out");
|
|
93
|
+
|
|
94
|
+
IERC20(PT).safeTransferFrom(msg.sender, market, netPtUsed);
|
|
95
|
+
|
|
96
|
+
// convert tokenIn to SCY to deposit
|
|
97
|
+
netTokenUsed = (netTokenDesired * scyUsed).rawDivUp(netScyDesired);
|
|
98
|
+
|
|
99
|
+
if (tokenIn == NATIVE) {
|
|
100
|
+
_transferIn(tokenIn, msg.sender, netTokenDesired);
|
|
101
|
+
SCY.deposit{ value: netTokenUsed }(market, tokenIn, netTokenUsed, scyUsed);
|
|
102
|
+
_transferOut(tokenIn, msg.sender, netTokenDesired - netTokenUsed);
|
|
103
|
+
} else {
|
|
104
|
+
_transferIn(tokenIn, msg.sender, netTokenUsed);
|
|
105
|
+
_safeApproveInf(tokenIn, address(SCY));
|
|
106
|
+
SCY.deposit(market, tokenIn, netTokenUsed, scyUsed);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
netLpOut = IPMarket(market).mint(receiver);
|
|
110
|
+
// fail-safe
|
|
111
|
+
require(netLpOut >= minLpOut, "FS insufficient lp out");
|
|
112
|
+
|
|
113
|
+
emit AddLiquidityDualTokenAndPt(
|
|
114
|
+
msg.sender,
|
|
115
|
+
market,
|
|
116
|
+
receiver,
|
|
117
|
+
tokenIn,
|
|
118
|
+
netTokenDesired,
|
|
119
|
+
netPtUsed,
|
|
120
|
+
netLpOut
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function addLiquiditySinglePt(
|
|
125
|
+
address receiver,
|
|
126
|
+
address market,
|
|
127
|
+
uint256 netPtIn,
|
|
128
|
+
uint256 minLpOut,
|
|
129
|
+
ApproxParams calldata guessPtSwapToScy
|
|
130
|
+
) external returns (uint256 netLpOut) {
|
|
131
|
+
(, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market).readTokens();
|
|
132
|
+
|
|
133
|
+
MarketState memory state = IPMarket(market).readState();
|
|
134
|
+
|
|
135
|
+
(uint256 netPtSwap, , ) = state.approxSwapPtToAddLiquidity(
|
|
136
|
+
YT.newIndex(),
|
|
137
|
+
netPtIn,
|
|
138
|
+
block.timestamp,
|
|
139
|
+
guessPtSwapToScy
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
IERC20(PT).safeTransferFrom(msg.sender, market, netPtIn);
|
|
143
|
+
|
|
144
|
+
IPMarket(market).swapExactPtForScy(market, netPtSwap, EMPTY_BYTES); // ignore return, receiver = market
|
|
145
|
+
netLpOut = IPMarket(market).mint(receiver);
|
|
146
|
+
|
|
147
|
+
require(netLpOut >= minLpOut, "insufficient lp out");
|
|
148
|
+
|
|
149
|
+
emit AddLiquiditySinglePt(msg.sender, market, receiver, netPtIn, netLpOut);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function addLiquiditySingleScy(
|
|
153
|
+
address receiver,
|
|
154
|
+
address market,
|
|
155
|
+
uint256 netScyIn,
|
|
156
|
+
uint256 minLpOut,
|
|
157
|
+
ApproxParams calldata guessPtReceivedFromScy
|
|
158
|
+
) external returns (uint256 netLpOut) {
|
|
159
|
+
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
160
|
+
IERC20(SCY).safeTransferFrom(msg.sender, market, netScyIn);
|
|
161
|
+
|
|
162
|
+
netLpOut = _addLiquiditySingleScy(
|
|
163
|
+
receiver,
|
|
164
|
+
market,
|
|
165
|
+
YT,
|
|
166
|
+
netScyIn,
|
|
167
|
+
minLpOut,
|
|
168
|
+
guessPtReceivedFromScy
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
emit AddLiquiditySingleScy(msg.sender, market, receiver, netScyIn, netLpOut);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function addLiquiditySingleToken(
|
|
175
|
+
address receiver,
|
|
176
|
+
address market,
|
|
177
|
+
uint256 minLpOut,
|
|
178
|
+
ApproxParams calldata guessPtReceivedFromScy,
|
|
179
|
+
TokenInput calldata input
|
|
180
|
+
) external payable returns (uint256 netLpOut) {
|
|
181
|
+
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
182
|
+
|
|
183
|
+
// all output SCY is transferred directly to the market
|
|
184
|
+
uint256 netScyUsed = _mintScyFromToken(address(market), address(SCY), 1, input);
|
|
185
|
+
|
|
186
|
+
netLpOut = _addLiquiditySingleScy(
|
|
187
|
+
receiver,
|
|
188
|
+
market,
|
|
189
|
+
YT,
|
|
190
|
+
netScyUsed,
|
|
191
|
+
minLpOut,
|
|
192
|
+
guessPtReceivedFromScy
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
emit AddLiquiditySingleToken(
|
|
196
|
+
msg.sender,
|
|
197
|
+
market,
|
|
198
|
+
input.tokenIn,
|
|
199
|
+
receiver,
|
|
200
|
+
input.netTokenIn,
|
|
201
|
+
netLpOut
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function removeLiquidityDualScyAndPt(
|
|
206
|
+
address receiver,
|
|
207
|
+
address market,
|
|
208
|
+
uint256 netLpToRemove,
|
|
209
|
+
uint256 minScyOut,
|
|
210
|
+
uint256 minPtOut
|
|
211
|
+
) external returns (uint256 netScyOut, uint256 netPtOut) {
|
|
212
|
+
IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
|
|
213
|
+
|
|
214
|
+
(netScyOut, netPtOut) = IPMarket(market).burn(receiver, receiver);
|
|
215
|
+
|
|
216
|
+
require(netScyOut >= minScyOut, "insufficient SCY out");
|
|
217
|
+
require(netPtOut >= minPtOut, "insufficient PT out");
|
|
218
|
+
|
|
219
|
+
emit RemoveLiquidityDualScyAndPt(
|
|
220
|
+
msg.sender,
|
|
221
|
+
market,
|
|
222
|
+
receiver,
|
|
223
|
+
netLpToRemove,
|
|
224
|
+
netPtOut,
|
|
225
|
+
netScyOut
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function removeLiquidityDualTokenAndPt(
|
|
230
|
+
address receiver,
|
|
231
|
+
address market,
|
|
232
|
+
uint256 netLpToRemove,
|
|
233
|
+
address tokenOut,
|
|
234
|
+
uint256 minTokenOut,
|
|
235
|
+
uint256 minPtOut
|
|
236
|
+
) external returns (uint256 netTokenOut, uint256 netPtOut) {
|
|
237
|
+
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
238
|
+
|
|
239
|
+
IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
|
|
240
|
+
|
|
241
|
+
(, netPtOut) = IPMarket(market).burn(address(SCY), receiver);
|
|
242
|
+
|
|
243
|
+
netTokenOut = SCY.redeemAfterTransfer(receiver, tokenOut, minTokenOut);
|
|
244
|
+
|
|
245
|
+
require(netPtOut >= minPtOut, "insufficient PT out");
|
|
246
|
+
|
|
247
|
+
emit RemoveLiquidityDualTokenAndPt(
|
|
248
|
+
msg.sender,
|
|
249
|
+
market,
|
|
250
|
+
receiver,
|
|
251
|
+
netLpToRemove,
|
|
252
|
+
netPtOut,
|
|
253
|
+
tokenOut,
|
|
254
|
+
netTokenOut
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function removeLiquiditySinglePt(
|
|
259
|
+
address receiver,
|
|
260
|
+
address market,
|
|
261
|
+
uint256 netLpToRemove,
|
|
262
|
+
uint256 minPtOut,
|
|
263
|
+
ApproxParams calldata guessPtOut
|
|
264
|
+
) external returns (uint256 netPtOut) {
|
|
265
|
+
(, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
266
|
+
|
|
267
|
+
IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
|
|
268
|
+
|
|
269
|
+
MarketState memory state = IPMarket(market).readState();
|
|
270
|
+
(uint256 scyFromBurn, uint256 ptFromBurn) = state.removeLiquidity(netLpToRemove);
|
|
271
|
+
(uint256 ptFromSwap, , ) = state.approxSwapExactScyForPt(
|
|
272
|
+
YT.newIndex(),
|
|
273
|
+
scyFromBurn,
|
|
274
|
+
block.timestamp,
|
|
275
|
+
guessPtOut
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
// early-check
|
|
279
|
+
require(ptFromBurn + ptFromSwap >= minPtOut, "insufficient lp out");
|
|
280
|
+
|
|
281
|
+
(, ptFromBurn) = IPMarket(market).burn(market, receiver);
|
|
282
|
+
IPMarket(market).swapScyForExactPt(receiver, ptFromSwap, EMPTY_BYTES); // ignore return
|
|
283
|
+
|
|
284
|
+
// fail-safe
|
|
285
|
+
require(ptFromBurn + ptFromSwap >= minPtOut, "FS insufficient lp out");
|
|
286
|
+
netPtOut = ptFromBurn + ptFromSwap;
|
|
287
|
+
|
|
288
|
+
emit RemoveLiquiditySinglePt(msg.sender, market, receiver, netLpToRemove, netPtOut);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function removeLiquiditySingleScy(
|
|
292
|
+
address receiver,
|
|
293
|
+
address market,
|
|
294
|
+
uint256 netLpToRemove,
|
|
295
|
+
uint256 minScyOut
|
|
296
|
+
) external returns (uint256 netScyOut) {
|
|
297
|
+
IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
|
|
298
|
+
netScyOut = _removeLiquiditySingleScy(receiver, market, minScyOut);
|
|
299
|
+
emit RemoveLiquiditySingleScy(msg.sender, market, receiver, netLpToRemove, netScyOut);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function removeLiquiditySingleToken(
|
|
303
|
+
address receiver,
|
|
304
|
+
address market,
|
|
305
|
+
uint256 netLpToRemove,
|
|
306
|
+
TokenOutput calldata output
|
|
307
|
+
) external returns (uint256 netTokenOut) {
|
|
308
|
+
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
309
|
+
|
|
310
|
+
IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
|
|
311
|
+
|
|
312
|
+
// all output SCY is directly transferred to the SCY contract
|
|
313
|
+
uint256 netScyReceived = _removeLiquiditySingleScy(address(SCY), market, 1);
|
|
314
|
+
|
|
315
|
+
// since all SCY is already at the SCY contract, doPull = false
|
|
316
|
+
netTokenOut = _redeemScyToToken(receiver, address(SCY), netScyReceived, output, false);
|
|
317
|
+
|
|
318
|
+
emit RemoveLiquiditySingleToken(
|
|
319
|
+
msg.sender,
|
|
320
|
+
market,
|
|
321
|
+
output.tokenOut,
|
|
322
|
+
receiver,
|
|
323
|
+
netLpToRemove,
|
|
324
|
+
netTokenOut
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
function _addLiquiditySingleScy(
|
|
329
|
+
address receiver,
|
|
330
|
+
address market,
|
|
331
|
+
IPYieldToken YT,
|
|
332
|
+
uint256 netScyIn,
|
|
333
|
+
uint256 minLpOut,
|
|
334
|
+
ApproxParams calldata guessPtReceivedFromScy
|
|
335
|
+
) internal returns (uint256 netLpOut) {
|
|
336
|
+
MarketState memory state = IPMarket(market).readState();
|
|
337
|
+
|
|
338
|
+
(uint256 netPtReceived, , ) = state.approxSwapScyToAddLiquidity(
|
|
339
|
+
YT.newIndex(),
|
|
340
|
+
netScyIn,
|
|
341
|
+
block.timestamp,
|
|
342
|
+
guessPtReceivedFromScy
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
IPMarket(market).swapScyForExactPt(market, netPtReceived, EMPTY_BYTES); // ignore return, receiver = market
|
|
346
|
+
netLpOut = IPMarket(market).mint(receiver);
|
|
347
|
+
|
|
348
|
+
require(netLpOut >= minLpOut, "insufficient lp out");
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
function _removeLiquiditySingleScy(
|
|
352
|
+
address receiver,
|
|
353
|
+
address market,
|
|
354
|
+
uint256 minScyOut
|
|
355
|
+
) internal returns (uint256 netScyOut) {
|
|
356
|
+
(uint256 scyFromBurn, uint256 ptFromBurn) = IPMarket(market).burn(receiver, market);
|
|
357
|
+
(uint256 scyFromSwap, ) = IPMarket(market).swapExactPtForScy(
|
|
358
|
+
receiver,
|
|
359
|
+
ptFromBurn,
|
|
360
|
+
EMPTY_BYTES
|
|
361
|
+
);
|
|
362
|
+
|
|
363
|
+
require(scyFromBurn + scyFromSwap >= minScyOut, "insufficient lp out");
|
|
364
|
+
netScyOut = scyFromBurn + scyFromSwap;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
@@ -6,7 +6,7 @@ import "../../interfaces/IPMarket.sol";
|
|
|
6
6
|
import "../../interfaces/IPMarketSwapCallback.sol";
|
|
7
7
|
import "../../libraries/SCY/SCYUtils.sol";
|
|
8
8
|
import "../../libraries/math/MarketApproxLib.sol";
|
|
9
|
-
import "./base/
|
|
9
|
+
import "./base/ActionBaseMintRedeem.sol";
|
|
10
10
|
import "./base/CallbackHelper.sol";
|
|
11
11
|
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
12
12
|
|
|
@@ -64,10 +64,10 @@ contract ActionCallback is IPMarketSwapCallback, CallbackHelper {
|
|
|
64
64
|
(address receiver, uint256 minYtOut) = _decodeSwapExactScyForYt(data);
|
|
65
65
|
|
|
66
66
|
uint256 ptOwed = ptToAccount.abs();
|
|
67
|
-
uint256
|
|
67
|
+
uint256 netPyOut = YT.mintPY(market, receiver);
|
|
68
68
|
|
|
69
|
-
require(
|
|
70
|
-
require(
|
|
69
|
+
require(netPyOut >= ptOwed, "insufficient PT to pay");
|
|
70
|
+
require(netPyOut >= minYtOut, "insufficient YT out");
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
struct VarsSwapScyForExactYt {
|
|
@@ -108,8 +108,8 @@ contract ActionCallback is IPMarketSwapCallback, CallbackHelper {
|
|
|
108
108
|
SCY.safeTransferFrom(vars.payer, address(YT), netScyToPull);
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
uint256
|
|
112
|
-
require(
|
|
111
|
+
uint256 netPyOut = YT.mintPY(market, vars.receiver);
|
|
112
|
+
require(netPyOut >= ptOwed, "insufficient pt to pay");
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
/// @dev refer to _swapExactYtForScy or _swapYtForExactScy
|