@pendle/core-v2 0.21.0-testnet → 1.0.0-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/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.json +2 -2
- package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.json +2 -2
- package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol/PendleMsgSenderAppUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +2 -2
- package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +2 -2
- package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.json +2 -2
- package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +2 -2
- package/build/artifacts/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +2 -2
- package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +2 -2
- package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.json +2 -2
- package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.json +2 -2
- package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.json +2 -2
- package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.dbg.json +1 -1
- package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.json +2 -2
- package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.json +2 -2
- package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.dbg.json +1 -1
- package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.json +2 -2
- package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.json +2 -2
- package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.json +2 -2
- package/build/artifacts/contracts/core/Market/PendleGauge.sol/PendleGauge.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +2 -2
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +2 -2
- package/build/artifacts/contracts/core/RewardManager/RewardManager.sol/RewardManager.dbg.json +1 -1
- package/build/artifacts/contracts/core/RewardManager/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/SYBase.sol/SYBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/SYBaseWithRewards.sol/SYBaseWithRewards.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/StEthHelper.sol/StEthHelper.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol/sAPE.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol/sAPE.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAura3EthSY.sol/PendleAura3EthSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAura3EthSY.sol/PendleAura3EthSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraCbethWstethSY.sol/PendleAuraCbethWstethSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraCbethWstethSY.sol/PendleAuraCbethWstethSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRethSY.sol/PendleAuraWethRethSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRethSY.sol/PendleAuraWethRethSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSY.sol/PendleAuraWethWstethSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSY.sol/PendleAuraWethWstethSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSY.sol/PendleAuraBalancerStableLPSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol/PendleConvexLPSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/GMX/GMXPreviewHelper.sol/GMXPreviewHelper.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/GMX/GMXPreviewHelper.sol/GMXPreviewHelper.json +50 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/GMX/PendleGlpSY.sol/PendleGlpSY.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/GMX/PendleGlpSY.sol/PendleGlpSY.json +1163 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.json +2 -2
- package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/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 +2 -2
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
- package/build/artifacts/contracts/core/YieldContractsV2/InterestManagerYTV2.sol/InterestManagerYTV2.dbg.json +4 -0
- package/build/artifacts/contracts/core/YieldContractsV2/InterestManagerYTV2.sol/InterestManagerYTV2.json +66 -0
- package/build/artifacts/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol/PendlePrincipalTokenV2.dbg.json +4 -0
- package/build/artifacts/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol/PendlePrincipalTokenV2.json +476 -0
- package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.dbg.json +4 -0
- package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.json +590 -0
- package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.dbg.json +4 -0
- package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.json +1017 -0
- package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.dbg.json +1 -1
- package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.json +50 -2
- package/build/artifacts/contracts/core/libraries/TokenHelper.sol/TokenHelper.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/GMX/IGMXVault.sol/IGMXVault.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/GMX/IGMXVault.sol/IGMXVault.json +308 -0
- package/build/artifacts/contracts/interfaces/GMX/IGlpManager.sol/IGlpManager.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/GMX/IGlpManager.sol/IGlpManager.json +43 -0
- package/build/artifacts/contracts/interfaces/GMX/IRewardRouterV2.sol/IRewardRouterV2.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/GMX/IRewardRouterV2.sol/IRewardRouterV2.json +165 -0
- package/build/artifacts/contracts/interfaces/GMX/IVaultPriceFeed.sol/IVaultPriceFeed.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/GMX/IVaultPriceFeed.sol/IVaultPriceFeed.json +45 -0
- package/build/artifacts/contracts/interfaces/IDiamondCut.sol/IDiamondCut.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IDiamondCut.sol/IDiamondCut.json +93 -0
- package/build/artifacts/contracts/interfaces/IDiamondLoupe.sol/IDiamondLoupe.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IDiamondLoupe.sol/IDiamondLoupe.json +87 -0
- package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.json +338 -16
- package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.json +105 -224
- package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.json +56 -12
- package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.json +52 -8
- package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.json +231 -8
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +675 -241
- package/build/artifacts/contracts/interfaces/IPBulkSeller.sol/IPBulkSeller.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPInterestManagerYTV2.sol/IPInterestManagerYTV2.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPInterestManagerYTV2.sol/IPInterestManagerYTV2.json +40 -0
- package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingEscrowMainchain.sol/IPVotingEscrowMainchain.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPYieldTokenV2.sol/IPYieldTokenV2.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPYieldTokenV2.sol/IPYieldTokenV2.json +679 -0
- package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +2 -28
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +144 -60
- package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +345 -62
- package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.json +107 -260
- package/build/artifacts/contracts/router/ActionMisc.sol/ActionMisc.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionMisc.sol/ActionMisc.json +57 -18
- package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.json +54 -65
- package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.json +338 -45
- package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.dbg.json +1 -1
- package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.json +76 -67
- package/build/artifacts/contracts/router/base/ActionBaseCallback.sol/ActionBaseCallback.dbg.json +4 -0
- package/build/artifacts/contracts/router/base/ActionBaseCallback.sol/ActionBaseCallback.json +141 -0
- package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
- package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.json +1 -15
- package/build/artifacts/contracts/router/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
- package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
- package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.json +2 -2
- package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
- package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.json +2 -2
- package/build/artifacts/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol/I1inchAggregationRouterV5.dbg.json +4 -0
- package/build/artifacts/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol/I1inchAggregationRouterV5.json +160 -0
- package/build/artifacts/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol/OneInchAggregationRouterHelper.dbg.json +4 -0
- package/build/artifacts/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol/OneInchAggregationRouterHelper.json +10 -0
- package/build/artifacts/contracts/router/swap-aggregator/IPSwapAggregator.sol/IPSwapAggregator.dbg.json +4 -0
- package/build/artifacts/contracts/router/swap-aggregator/IPSwapAggregator.sol/IPSwapAggregator.json +56 -0
- package/build/artifacts/contracts/router/swap-aggregator/PendleSwapAggregator.sol/PendleSwapAggregator.dbg.json +4 -0
- package/build/artifacts/contracts/router/swap-aggregator/PendleSwapAggregator.sol/PendleSwapAggregator.json +97 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/KyberAggregationRouterHelper.sol/KyberAggregationRouterHelper.dbg.json +4 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/KyberAggregationRouterHelper.sol/KyberAggregationRouterHelper.json +10 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/ScaleDataHelperEthereum1.sol/ScaleDataHelperEthereum1.dbg.json +4 -0
- package/build/artifacts/contracts/router/{kyberswap → swap-aggregator/kyberswap}/ScaleDataHelperEthereum1.sol/ScaleDataHelperEthereum1.json +3 -3
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IAggregationExecutor.sol/IAggregationExecutor.dbg.json +4 -0
- package/build/artifacts/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IAggregationExecutor.sol/IAggregationExecutor.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperEthereum1.sol/IExecutorHelperEthereum1.dbg.json +4 -0
- package/build/artifacts/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IExecutorHelperEthereum1.sol/IExecutorHelperEthereum1.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IHashflow.sol/IHashflow.dbg.json +4 -0
- package/build/artifacts/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IHashflow.sol/IHashflow.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IMetaAggregationRouterV2.sol/IMetaAggregationRouterV2.dbg.json +4 -0
- package/build/artifacts/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IMetaAggregationRouterV2.sol/IMetaAggregationRouterV2.json +1 -1
- package/contracts/core/StandardizedYield/implementations/GMX/GMXPreviewHelper.sol +142 -0
- package/contracts/core/StandardizedYield/implementations/GMX/PendleGlpSY.sol +244 -0
- package/contracts/core/StandardizedYield/implementations/GMX/README.md +61 -0
- package/contracts/core/YieldContractsV2/InterestManagerYTV2.sol +114 -0
- package/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol +63 -0
- package/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol +200 -0
- package/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol +485 -0
- package/contracts/core/libraries/Errors.sol +5 -0
- package/contracts/core/libraries/TokenHelper.sol +10 -0
- package/contracts/interfaces/GMX/IGMXVault.sol +47 -0
- package/contracts/interfaces/GMX/IGlpManager.sol +8 -0
- package/contracts/interfaces/GMX/IRewardRouterV2.sol +35 -0
- package/contracts/interfaces/GMX/IVaultPriceFeed.sol +11 -0
- package/contracts/interfaces/IDiamondCut.sol +36 -0
- package/contracts/interfaces/IDiamondLoupe.sol +38 -0
- package/contracts/interfaces/IPActionAddRemoveLiq.sol +36 -1
- package/contracts/interfaces/IPActionMintRedeem.sol +2 -55
- package/contracts/interfaces/IPActionMisc.sol +20 -3
- package/contracts/interfaces/IPActionSwapPT.sol +1 -1
- package/contracts/interfaces/IPActionSwapYT.sol +28 -4
- package/contracts/interfaces/IPAllAction.sol +5 -3
- package/contracts/interfaces/IPInterestManagerYTV2.sol +13 -0
- package/contracts/interfaces/IPYieldTokenV2.sol +66 -0
- package/contracts/offchain-helpers/MarketMathStatic.sol +15 -0
- package/contracts/offchain-helpers/RouterStatic.sol +22 -0
- package/contracts/router/ActionAddRemoveLiq.sol +116 -6
- package/contracts/router/ActionMintRedeem.sol +12 -202
- package/contracts/router/ActionMisc.sol +45 -19
- package/contracts/router/ActionSwapPT.sol +0 -5
- package/contracts/router/ActionSwapYT.sol +98 -13
- package/contracts/router/PendleRouter.sol +211 -72
- package/contracts/router/{ActionCallback.sol → base/ActionBaseCallback.sol} +47 -47
- package/contracts/router/base/ActionBaseMintRedeem.sol +105 -60
- package/contracts/router/base/CallbackHelper.sol +137 -44
- package/contracts/router/base/MarketApproxLib.sol +227 -350
- package/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol +45 -0
- package/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol +69 -0
- package/contracts/router/swap-aggregator/IPSwapAggregator.sol +30 -0
- package/contracts/router/swap-aggregator/PendleSwapAggregator.sol +63 -0
- package/contracts/router/{kyberswap/AggregationRouterHelper.sol → swap-aggregator/kyberswap/KyberAggregationRouterHelper.sol} +3 -108
- package/contracts/router/{kyberswap → swap-aggregator/kyberswap}/ScaleDataHelperEthereum1.sol +0 -0
- package/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IAggregationExecutor.sol +0 -0
- package/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IExecutorHelperEthereum1.sol +0 -0
- package/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IHashflow.sol +0 -0
- package/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IMetaAggregationRouterV2.sol +0 -0
- package/deployments/43113-core.json +2 -1
- package/deployments/{43113-helper.json → 43113-offchain-helper.json} +0 -0
- package/deployments/80001-core.json +2 -1
- package/deployments/80001-markets/GLP-DEC-8TH.json +10 -0
- package/deployments/{80001-helper.json → 80001-offchain-helper.json} +0 -0
- package/package.json +1 -1
- package/typechain-types/ActionAddRemoveLiq.ts +203 -23
- package/typechain-types/ActionBaseCallback.ts +115 -0
- package/typechain-types/ActionMintRedeem.ts +29 -230
- package/typechain-types/ActionMisc.ts +78 -27
- package/typechain-types/ActionSwapPT.ts +26 -31
- package/typechain-types/ActionSwapYT.ts +202 -21
- package/typechain-types/GMXPreviewHelper.ts +0 -13
- package/typechain-types/IDiamondCut.ts +152 -0
- package/typechain-types/IDiamondLoupe.ts +190 -0
- package/typechain-types/IPActionAddRemoveLiq.ts +213 -14
- package/typechain-types/IPActionMintRedeem.ts +29 -211
- package/typechain-types/IPActionMisc.ts +78 -27
- package/typechain-types/IPActionSwapPT.ts +26 -12
- package/typechain-types/IPActionSwapYT.ts +168 -12
- package/typechain-types/IPAllAction.ts +445 -227
- package/typechain-types/IPInterestManagerYTV2.ts +117 -0
- package/typechain-types/IPSwapAggregator.ts +126 -0
- package/typechain-types/IPYieldTokenV2.ts +9 -23
- package/typechain-types/InterestManagerYTV2.ts +36 -3
- package/typechain-types/PendleGlpSY.ts +27 -13
- package/typechain-types/PendleRouter.ts +109 -131
- package/typechain-types/PendleSwapAggregator.ts +167 -0
- package/typechain-types/PendleYieldTokenV2.ts +70 -76
- package/typechain-types/RouterStatic.ts +92 -0
- package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +346 -68
- package/typechain-types/factories/ActionBaseCallback__factory.ts +156 -0
- package/typechain-types/factories/ActionMintRedeem__factory.ts +108 -266
- package/typechain-types/factories/ActionMisc__factory.ts +56 -17
- package/typechain-types/factories/ActionSwapPT__factory.ts +55 -71
- package/typechain-types/factories/ActionSwapYT__factory.ts +341 -48
- package/typechain-types/factories/BulkSellerFactory__factory.ts +1 -1
- package/typechain-types/factories/BulkSellerOffchain__factory.ts +1 -1
- package/typechain-types/factories/BulkSeller__factory.ts +1 -1
- package/typechain-types/factories/Errors__factory.ts +49 -1
- package/typechain-types/factories/GMXPreviewHelper__factory.ts +0 -13
- package/typechain-types/factories/IDiamondCut__factory.ts +105 -0
- package/typechain-types/factories/IDiamondLoupe__factory.ts +99 -0
- package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +338 -16
- package/typechain-types/factories/IPActionMintRedeem__factory.ts +105 -224
- package/typechain-types/factories/IPActionMisc__factory.ts +55 -11
- package/typechain-types/factories/IPActionSwapPT__factory.ts +52 -8
- package/typechain-types/factories/IPActionSwapYT__factory.ts +231 -8
- package/typechain-types/factories/IPAllAction__factory.ts +675 -241
- package/typechain-types/factories/IPInterestManagerYTV2__factory.ts +59 -0
- package/typechain-types/factories/IPSwapAggregator__factory.ts +71 -0
- package/typechain-types/factories/IPYieldTokenV2__factory.ts +6 -14
- package/typechain-types/factories/InterestManagerYTV2__factory.ts +18 -0
- package/typechain-types/factories/MarketMathStatic__factory.ts +1 -27
- package/typechain-types/factories/OracleLib__factory.ts +1 -1
- package/typechain-types/factories/PendleAura3EthSY__factory.ts +1 -1
- package/typechain-types/factories/PendleAuraCbethWstethSY__factory.ts +1 -1
- package/typechain-types/factories/PendleAuraWethRethSY__factory.ts +1 -1
- package/typechain-types/factories/PendleAuraWethWstethSY__factory.ts +1 -1
- package/typechain-types/factories/PendleCurveFraxUsdcSY__factory.ts +1 -1
- package/typechain-types/factories/PendleCurveUsdd3CrvSY__factory.ts +1 -1
- package/typechain-types/factories/PendleFeeDistributor__factory.ts +1 -1
- package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleGlpSY__factory.ts +8 -14
- package/typechain-types/factories/PendleLooksStakingSY__factory.ts +1 -1
- package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
- package/typechain-types/factories/PendleMarket__factory.ts +1 -1
- package/typechain-types/factories/PendleMsgReceiveEndpointUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleMsgSendEndpointUpg__factory.ts +1 -1
- package/typechain-types/factories/PendlePrincipalTokenV2__factory.ts +1 -1
- package/typechain-types/factories/PendlePrincipalToken__factory.ts +1 -1
- package/typechain-types/factories/PendleQiTokenHelper__factory.ts +1 -1
- package/typechain-types/factories/PendleQiTokenSY__factory.ts +1 -1
- package/typechain-types/factories/PendleRouter__factory.ts +75 -74
- package/typechain-types/factories/PendleSwapAggregator__factory.ts +154 -0
- package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleWstEthSY__factory.ts +1 -1
- package/typechain-types/factories/PendleYieldContractFactoryV2__factory.ts +1 -1
- package/typechain-types/factories/PendleYieldContractFactory__factory.ts +1 -1
- package/typechain-types/factories/PendleYieldTokenV2__factory.ts +35 -48
- package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
- package/typechain-types/factories/RouterStatic__factory.ts +69 -1
- package/typechain-types/factories/SAPE__factory.ts +1 -1
- package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +1 -1
- package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +1 -1
- package/typechain-types/hardhat.d.ts +96 -60
- package/typechain-types/index.ts +26 -18
- package/build/artifacts/contracts/interfaces/IPActionSwapPTYT.sol/IPActionSwapPTYT.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPActionSwapPTYT.sol/IPActionSwapPTYT.json +0 -190
- package/build/artifacts/contracts/router/ActionCallback.sol/ActionCallback.dbg.json +0 -4
- package/build/artifacts/contracts/router/ActionCallback.sol/ActionCallback.json +0 -165
- package/build/artifacts/contracts/router/ActionSwapPTYT.sol/ActionSwapPTYT.dbg.json +0 -4
- package/build/artifacts/contracts/router/ActionSwapPTYT.sol/ActionSwapPTYT.json +0 -343
- package/build/artifacts/contracts/router/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.dbg.json +0 -4
- package/build/artifacts/contracts/router/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.json +0 -224
- package/build/artifacts/contracts/router/kyberswap/IAggregatorRouterHelper.sol/IAggregationRouterHelper.dbg.json +0 -4
- package/build/artifacts/contracts/router/kyberswap/IAggregatorRouterHelper.sol/IAggregationRouterHelper.json +0 -35
- package/build/artifacts/contracts/router/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +0 -4
- package/build/artifacts/contracts/router/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.json +0 -24
- package/build/artifacts/contracts/router/kyberswap/ScaleDataHelperEthereum1.sol/ScaleDataHelperEthereum1.dbg.json +0 -4
- package/build/artifacts/contracts/router/kyberswap/interfaces/IAggregationExecutor.sol/IAggregationExecutor.dbg.json +0 -4
- package/build/artifacts/contracts/router/kyberswap/interfaces/IExecutorHelperEthereum1.sol/IExecutorHelperEthereum1.dbg.json +0 -4
- package/build/artifacts/contracts/router/kyberswap/interfaces/IHashflow.sol/IHashflow.dbg.json +0 -4
- package/build/artifacts/contracts/router/kyberswap/interfaces/IMetaAggregationRouter.sol/IMetaAggregationRouter.dbg.json +0 -4
- package/build/artifacts/contracts/router/kyberswap/interfaces/IMetaAggregationRouter.sol/IMetaAggregationRouter.json +0 -183
- package/build/artifacts/contracts/router/kyberswap/interfaces/IMetaAggregationRouterV2.sol/IMetaAggregationRouterV2.dbg.json +0 -4
- package/contracts/interfaces/IPActionSwapPTYT.sol +0 -31
- package/contracts/router/ActionSwapPTYT.sol +0 -108
- package/contracts/router/kyberswap/IAggregatorRouterHelper.sol +0 -10
- package/contracts/router/kyberswap/KyberSwapHelper.sol +0 -79
- package/contracts/router/kyberswap/interfaces/IMetaAggregationRouter.sol +0 -33
|
@@ -21,13 +21,9 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
21
21
|
using MarketApproxPtInLib for MarketState;
|
|
22
22
|
using MarketApproxPtOutLib for MarketState;
|
|
23
23
|
using PYIndexLib for IPYieldToken;
|
|
24
|
+
using PYIndexLib for PYIndex;
|
|
24
25
|
using BulkSellerMathCore for BulkSellerState;
|
|
25
26
|
|
|
26
|
-
/// @dev since this contract will be proxied, it must not contains non-immutable variables
|
|
27
|
-
constructor(address _kyberScalingLib)
|
|
28
|
-
ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
|
|
29
|
-
{}
|
|
30
|
-
|
|
31
27
|
/**
|
|
32
28
|
* @notice Adds liquidity to the SY/PT market, granting LP tokens in return
|
|
33
29
|
* @dev Will mint as much LP as possible given no more than `netSyDesired` and `netPtDesired`,
|
|
@@ -258,6 +254,78 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
258
254
|
);
|
|
259
255
|
}
|
|
260
256
|
|
|
257
|
+
/**
|
|
258
|
+
* @notice Mints partial SY to PT+YT, returns YT to user, then uses PT+SY to add liquidity
|
|
259
|
+
* @param netSyIn amount of SY to be transferred in from caller
|
|
260
|
+
* @return netLpOut actual LP output, will not be lower than `minLpOut`
|
|
261
|
+
* @return netYtOut actual YT output, will not be lower than `minYtOut`
|
|
262
|
+
* @dev Reverts if market is expired
|
|
263
|
+
*/
|
|
264
|
+
function addLiquiditySingleSyKeepYt(
|
|
265
|
+
address receiver,
|
|
266
|
+
address market,
|
|
267
|
+
uint256 netSyIn,
|
|
268
|
+
uint256 minLpOut,
|
|
269
|
+
uint256 minYtOut
|
|
270
|
+
) external returns (uint256 netLpOut, uint256 netYtOut) {
|
|
271
|
+
(IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
272
|
+
|
|
273
|
+
_transferIn(address(SY), msg.sender, netSyIn);
|
|
274
|
+
|
|
275
|
+
(netLpOut, netYtOut) = _addLiquiditySingleSyKeepYt(
|
|
276
|
+
receiver,
|
|
277
|
+
market,
|
|
278
|
+
SY,
|
|
279
|
+
YT,
|
|
280
|
+
netSyIn,
|
|
281
|
+
minLpOut,
|
|
282
|
+
minYtOut
|
|
283
|
+
);
|
|
284
|
+
|
|
285
|
+
emit AddLiquiditySingleSyKeepYt(msg.sender, market, receiver, netSyIn, netLpOut, netYtOut);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* @notice Adds liquidity and returns leftover YT using a single token input. The input token
|
|
290
|
+
* is first swapped through Kyberswap to a SY-mintable token, the rest is the same as
|
|
291
|
+
* `addLiquiditySingleSyKeepYt()`
|
|
292
|
+
* @param input data for input token, see {`./kyberswap/KyberSwapHelper.sol`}
|
|
293
|
+
* @return netLpOut actual LP output, will not be lower than `minLpOut`
|
|
294
|
+
* @return netYtOut actual YT output, will not be lower than `minYtOut`
|
|
295
|
+
* @dev Reverts if market is expired
|
|
296
|
+
*/
|
|
297
|
+
function addLiquiditySingleTokenKeepYt(
|
|
298
|
+
address receiver,
|
|
299
|
+
address market,
|
|
300
|
+
uint256 minLpOut,
|
|
301
|
+
uint256 minYtOut,
|
|
302
|
+
TokenInput calldata input
|
|
303
|
+
) external returns (uint256 netLpOut, uint256 netYtOut) {
|
|
304
|
+
(IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
305
|
+
|
|
306
|
+
uint256 netSyUsed = _mintSyFromToken(address(this), address(SY), 1, input);
|
|
307
|
+
|
|
308
|
+
(netLpOut, netYtOut) = _addLiquiditySingleSyKeepYt(
|
|
309
|
+
receiver,
|
|
310
|
+
market,
|
|
311
|
+
SY,
|
|
312
|
+
YT,
|
|
313
|
+
netSyUsed,
|
|
314
|
+
minLpOut,
|
|
315
|
+
minYtOut
|
|
316
|
+
);
|
|
317
|
+
|
|
318
|
+
emit AddLiquiditySingleTokenKeepYt(
|
|
319
|
+
msg.sender,
|
|
320
|
+
market,
|
|
321
|
+
input.tokenIn,
|
|
322
|
+
receiver,
|
|
323
|
+
input.netTokenIn,
|
|
324
|
+
netLpOut,
|
|
325
|
+
netYtOut
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
|
|
261
329
|
/**
|
|
262
330
|
* @notice Burns LP token to remove SY/PT liquidity
|
|
263
331
|
* @param netLpToRemove amount of LP to be burned from caller
|
|
@@ -473,6 +541,48 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
473
541
|
if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
|
|
474
542
|
}
|
|
475
543
|
|
|
544
|
+
/**
|
|
545
|
+
* @dev algorithm:
|
|
546
|
+
- Split SY into a SY and b SY (with a + b = netSyIn)
|
|
547
|
+
- Mint PY with a SY ---> gives (a * pyIndex / ONE) PT + YT
|
|
548
|
+
- Mint LP with (a * pyIndex / ONE) PT and b SY
|
|
549
|
+
|
|
550
|
+
-> We want (a * pyIndex / ONE) / totalPt = b / totalSy
|
|
551
|
+
-> a * (1 + pyIndex * totalSy / ONE / totalPt) = netSyIn
|
|
552
|
+
-> a = (netSyIn * totalPt) / (totalPt + (pyIndex * totalSy / ONE))
|
|
553
|
+
-> a = (netSyIn * totalPt) / (totalPt + totalAsset)
|
|
554
|
+
*/
|
|
555
|
+
function _addLiquiditySingleSyKeepYt(
|
|
556
|
+
address receiver,
|
|
557
|
+
address market,
|
|
558
|
+
IStandardizedYield SY,
|
|
559
|
+
IPYieldToken YT,
|
|
560
|
+
uint256 netSyIn,
|
|
561
|
+
uint256 minLpOut,
|
|
562
|
+
uint256 minYtOut
|
|
563
|
+
) internal returns (uint256 netLpOut, uint256 netYtOut) {
|
|
564
|
+
MarketState memory state = IPMarket(market).readState(address(this));
|
|
565
|
+
|
|
566
|
+
PYIndex pyIndex = YT.newIndex();
|
|
567
|
+
|
|
568
|
+
uint256 netSyToPt = (netSyIn * state.totalPt.Uint()) /
|
|
569
|
+
(state.totalPt.Uint() + pyIndex.syToAsset(state.totalSy.Uint()));
|
|
570
|
+
|
|
571
|
+
// transfer SY to mint PY
|
|
572
|
+
_transferOut(address(SY), address(YT), netSyToPt);
|
|
573
|
+
|
|
574
|
+
// the rest of SY goes to market
|
|
575
|
+
_transferOut(address(SY), market, netSyIn - netSyToPt);
|
|
576
|
+
|
|
577
|
+
// PT goes to market, YT goes to receiver
|
|
578
|
+
netYtOut = YT.mintPY(market, receiver);
|
|
579
|
+
|
|
580
|
+
(netLpOut, , ) = IPMarket(market).mint(receiver, netSyIn - netSyToPt, netYtOut);
|
|
581
|
+
|
|
582
|
+
if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
|
|
583
|
+
if (netYtOut < minYtOut) revert Errors.RouterInsufficientYtOut(netYtOut, minYtOut);
|
|
584
|
+
}
|
|
585
|
+
|
|
476
586
|
/// @dev removes SY/PT liquidity, then converts PT to SY
|
|
477
587
|
function _removeLiquiditySingleSy(
|
|
478
588
|
address receiver,
|
|
@@ -497,7 +607,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
497
607
|
) internal returns (uint256 netSyOut) {
|
|
498
608
|
(, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
499
609
|
(uint256 syFromBurn, ) = IPMarket(market).burn(receiver, address(YT), netLpToRemove);
|
|
500
|
-
netSyOut = syFromBurn +
|
|
610
|
+
netSyOut = syFromBurn + YT.redeemPY(receiver);
|
|
501
611
|
}
|
|
502
612
|
|
|
503
613
|
/// @dev swaps PT to SY pre-expiry
|
|
@@ -11,11 +11,6 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
|
|
|
11
11
|
using Math for uint256;
|
|
12
12
|
using Math for int256;
|
|
13
13
|
|
|
14
|
-
/// @dev since this contract will be proxied, it must not contains non-immutable variables
|
|
15
|
-
constructor(address _kyberScalingLib)
|
|
16
|
-
ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
|
|
17
|
-
{}
|
|
18
|
-
|
|
19
14
|
/**
|
|
20
15
|
* @notice swaps input token for SY-mintable tokens (if needed), then mints SY from such
|
|
21
16
|
* @param input data for input token, see {`./kyberswap/KyberSwapHelper.sol`}
|
|
@@ -61,7 +56,7 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
|
|
|
61
56
|
address SY = IPYieldToken(YT).SY();
|
|
62
57
|
|
|
63
58
|
uint256 netSyToMint = _mintSyFromToken(YT, SY, 0, input);
|
|
64
|
-
netPyOut = _mintPyFromSy(receiver, YT, netSyToMint, minPyOut, false);
|
|
59
|
+
netPyOut = _mintPyFromSy(receiver, SY, YT, netSyToMint, minPyOut, false);
|
|
65
60
|
|
|
66
61
|
emit MintPyFromToken(msg.sender, input.tokenIn, YT, receiver, input.netTokenIn, netPyOut);
|
|
67
62
|
}
|
|
@@ -96,7 +91,7 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
|
|
|
96
91
|
uint256 netSyIn,
|
|
97
92
|
uint256 minPyOut
|
|
98
93
|
) external returns (uint256 netPyOut) {
|
|
99
|
-
netPyOut = _mintPyFromSy(receiver, YT, netSyIn, minPyOut, true);
|
|
94
|
+
netPyOut = _mintPyFromSy(receiver, IPYieldToken(YT).SY(), YT, netSyIn, minPyOut, true);
|
|
100
95
|
emit MintPyFromSy(msg.sender, receiver, YT, netSyIn, netPyOut);
|
|
101
96
|
}
|
|
102
97
|
|
|
@@ -121,204 +116,19 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
|
|
|
121
116
|
address[] calldata sys,
|
|
122
117
|
address[] calldata yts,
|
|
123
118
|
address[] calldata markets
|
|
124
|
-
)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
uint256[][] memory ytRewards,
|
|
130
|
-
uint256[][] memory marketRewards
|
|
131
|
-
)
|
|
132
|
-
{
|
|
133
|
-
syRewards = new uint256[][](sys.length);
|
|
134
|
-
for (uint256 i = 0; i < sys.length; ++i) {
|
|
135
|
-
syRewards[i] = IStandardizedYield(sys[i]).claimRewards(user);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
ytInterests = new uint256[](yts.length);
|
|
139
|
-
ytRewards = new uint256[][](yts.length);
|
|
140
|
-
for (uint256 i = 0; i < yts.length; ++i) {
|
|
141
|
-
(ytInterests[i], ytRewards[i]) = IPYieldToken(yts[i]).redeemDueInterestAndRewards(
|
|
142
|
-
user,
|
|
143
|
-
true,
|
|
144
|
-
true
|
|
145
|
-
);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
marketRewards = new uint256[][](markets.length);
|
|
149
|
-
for (uint256 i = 0; i < markets.length; ++i) {
|
|
150
|
-
marketRewards[i] = IPMarket(markets[i]).redeemRewards(user);
|
|
151
|
-
}
|
|
152
|
-
emit RedeemDueInterestAndRewards(
|
|
153
|
-
user,
|
|
154
|
-
sys,
|
|
155
|
-
yts,
|
|
156
|
-
markets,
|
|
157
|
-
syRewards,
|
|
158
|
-
ytInterests,
|
|
159
|
-
ytRewards,
|
|
160
|
-
marketRewards
|
|
161
|
-
);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
struct RouterTokenAmounts {
|
|
165
|
-
address[] tokens;
|
|
166
|
-
uint256[] amounts;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* @notice A function to:
|
|
171
|
-
- Redeem all of caller's due interest and rewards in SYs, YTs, and markets
|
|
172
|
-
- Redeem SYs themselves
|
|
173
|
-
- Finally swaps all resulting tokens to `dataSwap.outputToken`
|
|
174
|
-
* @return netTokenOut total token output amount, will not be lower than `dataSwap.minTokenOut`
|
|
175
|
-
* @return amountsSwapped the amounts swapped for each token defined in `dataSwap.tokens`
|
|
176
|
-
*/
|
|
177
|
-
function redeemDueInterestAndRewardsThenSwapAll(
|
|
178
|
-
address[] calldata sys,
|
|
179
|
-
RouterYtRedeemStruct calldata dataYT,
|
|
180
|
-
address[] calldata markets,
|
|
181
|
-
RouterSwapAllStruct calldata dataSwap
|
|
182
|
-
) external returns (uint256 netTokenOut, uint256[] memory amountsSwapped) {
|
|
183
|
-
if (dataSwap.tokens.length != dataSwap.kybercalls.length)
|
|
184
|
-
revert Errors.ArrayLengthMismatch();
|
|
185
|
-
|
|
186
|
-
if (dataYT.tokenRedeemSys.length != dataYT.syAddrs.length)
|
|
187
|
-
revert Errors.ArrayLengthMismatch();
|
|
188
|
-
|
|
189
|
-
RouterTokenAmounts memory tokensOut = _newRouterTokenAmounts(dataSwap.tokens);
|
|
190
|
-
RouterTokenAmounts memory sysOut = _newRouterTokenAmounts(dataYT.syAddrs);
|
|
191
|
-
|
|
192
|
-
// redeem SY
|
|
193
|
-
for (uint256 i = 0; i < sys.length; ++i) {
|
|
194
|
-
IStandardizedYield SY = IStandardizedYield(sys[i]);
|
|
195
|
-
|
|
196
|
-
address[] memory rewardTokens = SY.getRewardTokens();
|
|
197
|
-
uint256[] memory rewardAmounts = SY.claimRewards(msg.sender);
|
|
198
|
-
_addTokenAmounts(tokensOut, rewardTokens, rewardAmounts);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// redeem YT
|
|
202
|
-
for (uint256 i = 0; i < dataYT.yts.length; ++i) {
|
|
203
|
-
IPYieldToken YT = IPYieldToken(dataYT.yts[i]);
|
|
204
|
-
|
|
205
|
-
(uint256 interestAmount, uint256[] memory rewardAmounts) = YT
|
|
206
|
-
.redeemDueInterestAndRewards(msg.sender, true, true);
|
|
207
|
-
|
|
208
|
-
address syAddr = YT.SY();
|
|
209
|
-
address[] memory rewardTokens = YT.getRewardTokens();
|
|
210
|
-
|
|
211
|
-
_addTokenAmount(sysOut, syAddr, interestAmount);
|
|
212
|
-
_addTokenAmounts(tokensOut, rewardTokens, rewardAmounts);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
// redeem market
|
|
216
|
-
for (uint256 i = 0; i < markets.length; ++i) {
|
|
217
|
-
IPMarket market = IPMarket(markets[i]);
|
|
218
|
-
|
|
219
|
-
address[] memory rewardTokens = market.getRewardTokens();
|
|
220
|
-
uint256[] memory rewardAmounts = market.redeemRewards(msg.sender);
|
|
221
|
-
_addTokenAmounts(tokensOut, rewardTokens, rewardAmounts);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// guaranteed no ETH, all rewards are ERC20
|
|
225
|
-
for (uint256 i = 0; i < tokensOut.tokens.length; ++i) {
|
|
226
|
-
_transferFrom(
|
|
227
|
-
IERC20(tokensOut.tokens[i]),
|
|
228
|
-
msg.sender,
|
|
229
|
-
address(this),
|
|
230
|
-
tokensOut.amounts[i]
|
|
231
|
-
);
|
|
232
|
-
}
|
|
233
|
-
_redeemAllSys(sysOut, dataYT.bulks, dataYT.tokenRedeemSys, tokensOut);
|
|
234
|
-
|
|
235
|
-
// now swap all to outputToken
|
|
236
|
-
netTokenOut = _swapAllToOutputToken(tokensOut, dataSwap);
|
|
237
|
-
|
|
238
|
-
if (netTokenOut < dataSwap.minTokenOut)
|
|
239
|
-
revert Errors.RouterInsufficientTokenOut(netTokenOut, dataSwap.minTokenOut);
|
|
240
|
-
|
|
241
|
-
amountsSwapped = tokensOut.amounts;
|
|
242
|
-
|
|
243
|
-
emit RedeemDueInterestAndRewardsThenSwapAll(
|
|
244
|
-
msg.sender,
|
|
245
|
-
sys,
|
|
246
|
-
dataYT.yts,
|
|
247
|
-
markets,
|
|
248
|
-
dataSwap.outputToken,
|
|
249
|
-
netTokenOut
|
|
250
|
-
);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
function _newRouterTokenAmounts(address[] memory tokens)
|
|
254
|
-
internal
|
|
255
|
-
pure
|
|
256
|
-
returns (RouterTokenAmounts memory)
|
|
257
|
-
{
|
|
258
|
-
return RouterTokenAmounts(tokens, new uint256[](tokens.length));
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/// @dev pull SYs from users & redeem them, then add to tokensOut
|
|
262
|
-
function _redeemAllSys(
|
|
263
|
-
RouterTokenAmounts memory sys,
|
|
264
|
-
address[] calldata bulks,
|
|
265
|
-
address[] calldata tokenRedeemSys,
|
|
266
|
-
RouterTokenAmounts memory tokensOut
|
|
267
|
-
) internal {
|
|
268
|
-
for (uint256 i = 0; i < sys.tokens.length; ++i) {
|
|
269
|
-
if (sys.amounts[i] == 0) continue;
|
|
270
|
-
|
|
271
|
-
TokenOutput memory output = _wrapTokenOutput(tokenRedeemSys[i], 1, bulks[i]);
|
|
272
|
-
uint256 amountOut = _redeemSyToToken(
|
|
273
|
-
address(this),
|
|
274
|
-
sys.tokens[i],
|
|
275
|
-
sys.amounts[i],
|
|
276
|
-
output,
|
|
277
|
-
true
|
|
278
|
-
);
|
|
279
|
-
|
|
280
|
-
_addTokenAmount(tokensOut, tokenRedeemSys[i], amountOut);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
function _swapAllToOutputToken(
|
|
285
|
-
RouterTokenAmounts memory tokens,
|
|
286
|
-
RouterSwapAllStruct memory dataSwap
|
|
287
|
-
) internal returns (uint256 netTokenOut) {
|
|
288
|
-
for (uint256 i = 0; i < tokens.tokens.length; ++i) {
|
|
289
|
-
if (tokens.amounts[i] == 0) continue;
|
|
290
|
-
_kyberswap(
|
|
291
|
-
tokens.tokens[i],
|
|
292
|
-
tokens.amounts[i],
|
|
293
|
-
dataSwap.kyberRouter,
|
|
294
|
-
dataSwap.kybercalls[i]
|
|
295
|
-
);
|
|
296
|
-
}
|
|
297
|
-
netTokenOut = _selfBalance(dataSwap.outputToken);
|
|
298
|
-
_transferOut(dataSwap.outputToken, msg.sender, netTokenOut);
|
|
299
|
-
}
|
|
119
|
+
) external {
|
|
120
|
+
unchecked {
|
|
121
|
+
for (uint256 i = 0; i < sys.length; ++i) {
|
|
122
|
+
IStandardizedYield(sys[i]).claimRewards(user);
|
|
123
|
+
}
|
|
300
124
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
address token,
|
|
304
|
-
uint256 amount
|
|
305
|
-
) internal pure {
|
|
306
|
-
for (uint256 j = 0; j < data.tokens.length; j++) {
|
|
307
|
-
if (data.tokens[j] == token) {
|
|
308
|
-
data.amounts[j] += amount;
|
|
309
|
-
return;
|
|
125
|
+
for (uint256 i = 0; i < yts.length; ++i) {
|
|
126
|
+
IPYieldToken(yts[i]).redeemDueInterestAndRewards(user, true, true);
|
|
310
127
|
}
|
|
311
|
-
}
|
|
312
|
-
revert("token not found");
|
|
313
|
-
}
|
|
314
128
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
uint256[] memory amounts
|
|
319
|
-
) internal pure {
|
|
320
|
-
for (uint256 i = 0; i < tokens.length; i++) {
|
|
321
|
-
_addTokenAmount(data, tokens[i], amounts[i]);
|
|
129
|
+
for (uint256 i = 0; i < markets.length; ++i) {
|
|
130
|
+
IPMarket(markets[i]).redeemRewards(user);
|
|
131
|
+
}
|
|
322
132
|
}
|
|
323
133
|
}
|
|
324
134
|
}
|
|
@@ -1,25 +1,51 @@
|
|
|
1
1
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
2
|
pragma solidity 0.8.17;
|
|
3
3
|
|
|
4
|
-
import "../interfaces/IPMarket.sol";
|
|
5
4
|
import "../interfaces/IPActionMisc.sol";
|
|
6
|
-
import "../core/libraries/
|
|
7
|
-
|
|
8
|
-
contract ActionMisc is IPActionMisc {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
5
|
+
import "../core/libraries/TokenHelper.sol";
|
|
6
|
+
|
|
7
|
+
contract ActionMisc is IPActionMisc, TokenHelper {
|
|
8
|
+
function approveInf(MultiApproval[] calldata arr) external {
|
|
9
|
+
for (uint256 i = 0; i < arr.length; ) {
|
|
10
|
+
MultiApproval calldata ele = arr[i];
|
|
11
|
+
for (uint256 j = 0; j < ele.tokens.length; ) {
|
|
12
|
+
_safeApproveInf(ele.tokens[j], ele.spender);
|
|
13
|
+
unchecked {
|
|
14
|
+
j++;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
unchecked {
|
|
18
|
+
i++;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function batchExec(Call3[] calldata calls) external payable returns (Result[] memory res) {
|
|
24
|
+
uint256 length = calls.length;
|
|
25
|
+
|
|
26
|
+
res = new Result[](length);
|
|
27
|
+
|
|
28
|
+
Call3 calldata calli;
|
|
29
|
+
|
|
30
|
+
for (uint256 i = 0; i < length; ) {
|
|
31
|
+
calli = calls[i];
|
|
32
|
+
|
|
33
|
+
// delegatecall to itself, it turns allowing invoking functions from other actions
|
|
34
|
+
(bool success, bytes memory result) = address(this).delegatecall(calli.callData);
|
|
35
|
+
|
|
36
|
+
if (!success && !calli.allowFailure) {
|
|
37
|
+
assembly {
|
|
38
|
+
// We use Yul's revert() to bubble up errors from the target contract.
|
|
39
|
+
revert(add(32, result), mload(result))
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
res[i].success = success;
|
|
44
|
+
res[i].returnData = result;
|
|
45
|
+
|
|
46
|
+
unchecked {
|
|
47
|
+
++i;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
24
50
|
}
|
|
25
51
|
}
|
|
@@ -15,11 +15,6 @@ contract ActionSwapPT is IPActionSwapPT, ActionBaseMintRedeem {
|
|
|
15
15
|
using Math for int256;
|
|
16
16
|
using PYIndexLib for IPYieldToken;
|
|
17
17
|
|
|
18
|
-
/// @dev since this contract will be proxied, it must not contains non-immutable variables
|
|
19
|
-
constructor(address _kyberScalingLib)
|
|
20
|
-
ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
|
|
21
|
-
{}
|
|
22
|
-
|
|
23
18
|
/**
|
|
24
19
|
* @notice swaps exact amount of PT for SY
|
|
25
20
|
* @param exactPtIn will always consume this exact amount of PT for as much SY as possible
|
|
@@ -7,8 +7,10 @@ import "../interfaces/IPActionSwapYT.sol";
|
|
|
7
7
|
import "../interfaces/IPMarket.sol";
|
|
8
8
|
import "../core/libraries/Errors.sol";
|
|
9
9
|
|
|
10
|
+
import "./base/ActionBaseCallback.sol";
|
|
11
|
+
|
|
10
12
|
/// @dev All swap actions will revert if market is expired
|
|
11
|
-
contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem
|
|
13
|
+
contract ActionSwapYT is ActionBaseCallback, IPActionSwapYT, ActionBaseMintRedeem {
|
|
12
14
|
using Math for uint256;
|
|
13
15
|
using Math for int256;
|
|
14
16
|
using MarketMathCore for MarketState;
|
|
@@ -16,10 +18,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
|
|
|
16
18
|
using MarketApproxPtOutLib for MarketState;
|
|
17
19
|
using PYIndexLib for IPYieldToken;
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
constructor(address _kyberScalingLib)
|
|
21
|
-
ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
|
|
22
|
-
{}
|
|
21
|
+
constructor(address _marketFactory) ActionBaseCallback(_marketFactory) {}
|
|
23
22
|
|
|
24
23
|
/**
|
|
25
24
|
* @notice swap exact SY to YT with the help of flashswaps & YT tokenization / redemption
|
|
@@ -38,7 +37,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
|
|
|
38
37
|
address market,
|
|
39
38
|
uint256 exactSyIn,
|
|
40
39
|
uint256 minYtOut,
|
|
41
|
-
ApproxParams
|
|
40
|
+
ApproxParams calldata guessYtOut
|
|
42
41
|
) external returns (uint256 netYtOut, uint256 netSyFee) {
|
|
43
42
|
(IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
44
43
|
|
|
@@ -105,7 +104,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
|
|
|
105
104
|
(, netSyFee) = IPMarket(market).swapExactPtForSy(
|
|
106
105
|
address(YT),
|
|
107
106
|
exactYtOut, // exactPtIn = exactYtOut
|
|
108
|
-
_encodeSwapSyForExactYt(msg.sender, receiver, maxSyIn)
|
|
107
|
+
_encodeSwapSyForExactYt(msg.sender, receiver, maxSyIn, SY, YT)
|
|
109
108
|
);
|
|
110
109
|
|
|
111
110
|
netSyIn = preSyBalance - SY.balanceOf(msg.sender);
|
|
@@ -129,7 +128,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
|
|
|
129
128
|
address market,
|
|
130
129
|
uint256 exactSyOut,
|
|
131
130
|
uint256 maxYtIn,
|
|
132
|
-
ApproxParams
|
|
131
|
+
ApproxParams calldata guessYtIn
|
|
133
132
|
) external returns (uint256 netYtIn, uint256 netSyFee) {
|
|
134
133
|
MarketState memory state = IPMarket(market).readState(address(this));
|
|
135
134
|
(, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
@@ -148,7 +147,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
|
|
|
148
147
|
(, netSyFee) = IPMarket(market).swapSyForExactPt(
|
|
149
148
|
address(YT),
|
|
150
149
|
netYtIn, // exactPtOut = netYtIn
|
|
151
|
-
_encodeSwapYtForSy(receiver, exactSyOut)
|
|
150
|
+
_encodeSwapYtForSy(receiver, exactSyOut, YT)
|
|
152
151
|
);
|
|
153
152
|
|
|
154
153
|
emit SwapYtAndSy(msg.sender, market, receiver, netYtIn.neg(), exactSyOut.Int());
|
|
@@ -163,7 +162,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
|
|
|
163
162
|
address receiver,
|
|
164
163
|
address market,
|
|
165
164
|
uint256 minYtOut,
|
|
166
|
-
ApproxParams
|
|
165
|
+
ApproxParams calldata guessYtOut,
|
|
167
166
|
TokenInput calldata input
|
|
168
167
|
) external payable returns (uint256 netYtOut, uint256 netSyFee) {
|
|
169
168
|
(IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
@@ -227,13 +226,99 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
|
|
|
227
226
|
);
|
|
228
227
|
}
|
|
229
228
|
|
|
229
|
+
/**
|
|
230
|
+
* @notice swap exact PT to YT with the help of flashswaps & YT tokenization / redemption
|
|
231
|
+
* @dev inner working of this function:
|
|
232
|
+
- `exactPtIn` PT is transferred to market contract
|
|
233
|
+
- `market.swapExactPtForSy` is called, which will transfer SY directly to YT contract & callback is invoked.
|
|
234
|
+
Note that we will owe PT, the amount before is not sufficient
|
|
235
|
+
- in callback, all SY in YT contract is used to mint PT + YT, with PT used to pay the rest of the loan, and YT
|
|
236
|
+
transferred to the receiver
|
|
237
|
+
* @param exactPtIn will always consume this amount of PT for as much YT as possible
|
|
238
|
+
* @param guessTotalPtToSwap approximation data for PT used for the PT-to-SY flashswap
|
|
239
|
+
* @dev this function works in conjunction with ActionCallback
|
|
240
|
+
*/
|
|
241
|
+
function swapExactPtForYt(
|
|
242
|
+
address receiver,
|
|
243
|
+
address market,
|
|
244
|
+
uint256 exactPtIn,
|
|
245
|
+
uint256 minYtOut,
|
|
246
|
+
ApproxParams calldata guessTotalPtToSwap
|
|
247
|
+
) external returns (uint256 netYtOut, uint256 netSyFee) {
|
|
248
|
+
(, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market).readTokens();
|
|
249
|
+
MarketState memory state = IPMarket(market).readState(address(this));
|
|
250
|
+
|
|
251
|
+
_transferFrom(IERC20(PT), msg.sender, market, exactPtIn);
|
|
252
|
+
|
|
253
|
+
uint256 totalPtToSwap;
|
|
254
|
+
(netYtOut, totalPtToSwap, netSyFee) = state.approxSwapExactPtForYt(
|
|
255
|
+
YT.newIndex(),
|
|
256
|
+
exactPtIn,
|
|
257
|
+
block.timestamp,
|
|
258
|
+
guessTotalPtToSwap
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
if (netYtOut < minYtOut) revert Errors.RouterInsufficientYtOut(netYtOut, minYtOut);
|
|
262
|
+
|
|
263
|
+
IPMarket(market).swapExactPtForSy(
|
|
264
|
+
address(YT),
|
|
265
|
+
totalPtToSwap,
|
|
266
|
+
_encodeSwapExactPtForYt(receiver, exactPtIn, minYtOut, YT)
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
emit SwapPtAndYt(msg.sender, market, receiver, exactPtIn.neg(), netYtOut.Int());
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* @notice swap exact YT to PT with the help of flashswaps & YT tokenization / redemption
|
|
274
|
+
* @dev inner working of this function:
|
|
275
|
+
- `exactYtIn` YT is transferred to yield contract
|
|
276
|
+
- `market.swapSyForExactPt` is called, which will transfer PT directly to this contract & callback is invoked.
|
|
277
|
+
Note that we now owe SY
|
|
278
|
+
- in callback, a portion of PT + YT is used to redeem SY, which is then used to payback the loan. The rest of
|
|
279
|
+
of the PT is transferred to `receiver`
|
|
280
|
+
* @param exactYtIn will always consume this amount of YT for as much PT as possible
|
|
281
|
+
* @param guessTotalPtFromSwap approximation data for PT output of the SY-to-PT flashswap
|
|
282
|
+
* @dev this function works in conjunction with ActionCallback
|
|
283
|
+
*/
|
|
284
|
+
function swapExactYtForPt(
|
|
285
|
+
address receiver,
|
|
286
|
+
address market,
|
|
287
|
+
uint256 exactYtIn,
|
|
288
|
+
uint256 minPtOut,
|
|
289
|
+
ApproxParams calldata guessTotalPtFromSwap
|
|
290
|
+
) external returns (uint256 netPtOut, uint256 netSyFee) {
|
|
291
|
+
(, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market).readTokens();
|
|
292
|
+
MarketState memory state = IPMarket(market).readState(address(this));
|
|
293
|
+
|
|
294
|
+
_transferFrom(IERC20(YT), msg.sender, address(YT), exactYtIn);
|
|
295
|
+
|
|
296
|
+
uint256 totalPtFromSwap;
|
|
297
|
+
(netPtOut, totalPtFromSwap, netSyFee) = state.approxSwapExactYtForPt(
|
|
298
|
+
YT.newIndex(),
|
|
299
|
+
exactYtIn,
|
|
300
|
+
block.timestamp,
|
|
301
|
+
guessTotalPtFromSwap
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
if (netPtOut < minPtOut) revert Errors.RouterInsufficientPtOut(netPtOut, minPtOut);
|
|
305
|
+
|
|
306
|
+
IPMarket(market).swapSyForExactPt(
|
|
307
|
+
address(this),
|
|
308
|
+
totalPtFromSwap,
|
|
309
|
+
_encodeSwapExactYtForPt(receiver, exactYtIn, minPtOut, PT, YT)
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
emit SwapPtAndYt(msg.sender, market, receiver, netPtOut.Int(), exactYtIn.neg());
|
|
313
|
+
}
|
|
314
|
+
|
|
230
315
|
function _swapExactSyForYt(
|
|
231
316
|
address receiver,
|
|
232
317
|
address market,
|
|
233
318
|
IPYieldToken YT,
|
|
234
319
|
uint256 exactSyIn,
|
|
235
320
|
uint256 minYtOut,
|
|
236
|
-
ApproxParams
|
|
321
|
+
ApproxParams calldata guessYtOut
|
|
237
322
|
) internal returns (uint256 netYtOut, uint256 netSyFee) {
|
|
238
323
|
MarketState memory state = IPMarket(market).readState(address(this));
|
|
239
324
|
|
|
@@ -250,7 +335,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
|
|
|
250
335
|
(, netSyFee) = IPMarket(market).swapExactPtForSy(
|
|
251
336
|
address(YT),
|
|
252
337
|
netYtOut, // exactPtIn = netYtOut
|
|
253
|
-
_encodeSwapExactSyForYt(receiver, minYtOut)
|
|
338
|
+
_encodeSwapExactSyForYt(receiver, minYtOut, YT)
|
|
254
339
|
);
|
|
255
340
|
}
|
|
256
341
|
|
|
@@ -267,7 +352,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
|
|
|
267
352
|
(, netSyFee) = IPMarket(market).swapSyForExactPt(
|
|
268
353
|
address(YT),
|
|
269
354
|
exactYtIn, // exactPtOut = exactYtIn
|
|
270
|
-
_encodeSwapYtForSy(receiver, minSyOut)
|
|
355
|
+
_encodeSwapYtForSy(receiver, minSyOut, YT)
|
|
271
356
|
);
|
|
272
357
|
|
|
273
358
|
netSyOut = SY.balanceOf(receiver) - preSyBalance;
|