@pendle/core-v2 1.3.0-mainnet → 2.0.0-mainnet
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/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.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/CrossChainMsg/libraries/LayerZeroHelper.sol/LayerZeroHelper.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol/LayerZeroHelper.json +2 -2
- 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 +3 -3
- 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 +3 -3
- 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/StEthHelper.sol/StEthHelper.json +1 -41
- 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 -41
- 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 -41
- 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 -41
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStableMath.sol/ComposableStableMath.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreview.sol/ComposableStablePreview.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/FixedPoint.sol/FixedPoint.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/MetaStable/MetaStableMath.sol/MetaStableMath.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/MetaStable/MetaStablePreview.sol/MetaStablePreview.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSY.sol/PendleAuraBalancerStableLPSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/StablePoolUserData.sol/StablePoolUserData.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/StablePreviewBase.sol/StablePreviewBase.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/GLP/GLPPreviewHelper.sol/GLPPreviewHelper.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/GLPPreviewHelper.sol/GLPPreviewHelper.json +50 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol/PendleGlpSY.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/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/ArrayLib.sol/ArrayLib.dbg.json +1 -1
- 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/Balancer/IAsset.sol/IAsset.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Balancer/IBalancerFees.sol/IBalancerFees.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Balancer/IBalancerStablePreview.sol/IBalancerStablePreview.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Balancer/IBasePool.sol/IBasePool.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Balancer/IComposableStable.sol/IComposableStable.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Balancer/IGauge.sol/IGauge.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Balancer/ILiquidityGaugeFactory.sol/ILiquidityGaugeFactory.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Balancer/IMetaStablePool.sol/IMetaStablePool.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Balancer/IRateProvider.sol/IRateProvider.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Balancer/IVault.sol/IVault.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ConvexCurve/IRewards.sol/IRewards.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 +201 -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/IAddressProvider.sol/IAddressProvider.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IAddressProvider.sol/IAddressProvider.json +48 -0
- package/build/artifacts/contracts/interfaces/IApeStaking.sol/IApeStaking.dbg.json +1 -1
- 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/IPFeeDistributor.sol/IPFeeDistributor.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/IPMsgReceiverApp.sol/IPMsgReceiverApp.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMsgReceiverApp.sol/IPMsgReceiverApp.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/AddressProvider.sol/AddressProvider.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/AddressProvider.sol/AddressProvider.json +143 -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/Multicall2.sol/Multicall2.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/PendleMulticall.sol/PendleMulticall.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/PendleMulticall.sol/PendleMulticall.json +47 -0
- 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 +342 -44
- 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 +72 -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/swap-aggregator/kyberswap/ScaleDataHelperEthereum1.sol/ScaleDataHelperEthereum1.json +10 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IAggregationExecutor.sol/IAggregationExecutor.dbg.json +4 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IAggregationExecutor.sol/IAggregationExecutor.json +65 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperEthereum1.sol/IExecutorHelperEthereum1.dbg.json +4 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperEthereum1.sol/IExecutorHelperEthereum1.json +388 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IHashflow.sol/IHashflow.dbg.json +4 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IHashflow.sol/IHashflow.json +101 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IMetaAggregationRouterV2.sol/IMetaAggregationRouterV2.dbg.json +4 -0
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IMetaAggregationRouterV2.sol/IMetaAggregationRouterV2.json +215 -0
- package/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol +0 -1
- package/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol +7 -9
- package/contracts/core/StandardizedYield/StEthHelper.sol +4 -4
- package/contracts/core/StandardizedYield/implementations/GLP/GLPPreviewHelper.sol +142 -0
- package/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol +222 -0
- package/contracts/core/StandardizedYield/implementations/GLP/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 +43 -0
- package/contracts/interfaces/GMX/IVaultPriceFeed.sol +11 -0
- package/contracts/interfaces/IAddressProvider.sol +7 -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 +18 -4
- 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/IPMsgReceiverApp.sol +1 -1
- package/contracts/interfaces/IPYieldTokenV2.sol +66 -0
- package/contracts/offchain-helpers/AddressProvider.sol +16 -0
- package/contracts/offchain-helpers/MarketMathStatic.sol +15 -0
- package/contracts/offchain-helpers/PendleMulticall.sol +26 -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 +103 -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 +25 -0
- package/contracts/router/swap-aggregator/PendleSwapAggregator.sol +47 -0
- package/contracts/router/swap-aggregator/kyberswap/KyberAggregationRouterHelper.sol +214 -0
- package/contracts/router/swap-aggregator/kyberswap/ScaleDataHelperEthereum1.sol +147 -0
- package/contracts/router/swap-aggregator/kyberswap/interfaces/IAggregationExecutor.sol +17 -0
- package/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperEthereum1.sol +191 -0
- package/contracts/router/swap-aggregator/kyberswap/interfaces/IHashflow.sol +30 -0
- package/contracts/router/swap-aggregator/kyberswap/interfaces/IMetaAggregationRouterV2.sol +42 -0
- package/deployments/1-core.json +2 -1
- package/deployments/1-markets/BALANCER-LP-AURA-WSTETH-WETH-JUN272024.json +11 -0
- package/deployments/1-offchain-helper.json +4 -0
- package/deployments/42161-core.json +26 -0
- package/deployments/42161-markets/GLP-28MARCH2024.json +10 -0
- package/deployments/42161-offchain-helper.json +4 -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 +77 -27
- package/typechain-types/ActionSwapPT.ts +26 -31
- package/typechain-types/ActionSwapYT.ts +202 -21
- package/typechain-types/AddressProvider.ts +280 -0
- package/typechain-types/GLPPreviewHelper.ts +121 -0
- package/typechain-types/GMXPreviewHelper.ts +121 -0
- package/typechain-types/I1inchAggregationRouterV5.ts +257 -0
- package/typechain-types/IAddressProvider.ts +123 -0
- package/typechain-types/IAggregationExecutor.ts +182 -0
- package/typechain-types/IDiamondCut.ts +152 -0
- package/typechain-types/IDiamondLoupe.ts +190 -0
- package/typechain-types/IExecutorHelperEthereum1.ts +643 -0
- package/typechain-types/IGMXVault.ts +494 -0
- package/typechain-types/IGlpManager.ts +115 -0
- package/typechain-types/IHashflow.ts +159 -0
- package/typechain-types/IKyberSwapAggregationRouterHelper.ts +109 -0
- package/typechain-types/IMetaAggregationRouter.ts +213 -0
- package/typechain-types/IMetaAggregationRouterV2.ts +221 -0
- package/typechain-types/IPActionAddRemoveLiq.ts +213 -14
- package/typechain-types/IPActionMintRedeem.ts +29 -211
- package/typechain-types/IPActionMisc.ts +77 -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/IPMsgReceiverApp.ts +5 -5
- package/typechain-types/IPSwapAggregator.ts +126 -0
- package/typechain-types/IPYieldTokenV2.ts +901 -0
- package/typechain-types/IRewardRouterV2.ts +346 -0
- package/typechain-types/ISwapAggregator.ts +124 -0
- package/typechain-types/IVaultPriceFeed.ts +114 -0
- package/typechain-types/InterestManagerYTV2.ts +157 -0
- package/typechain-types/PendleAura3EthSY.ts +0 -39
- package/typechain-types/PendleAuraCbethWstethSY.ts +0 -39
- package/typechain-types/PendleAuraWethWstethSY.ts +0 -39
- package/typechain-types/PendleGaugeControllerSidechainUpg.ts +4 -4
- package/typechain-types/PendleGlpSY.ts +1463 -0
- package/typechain-types/PendleMsgReceiverAppUpg.ts +5 -5
- package/typechain-types/PendleMulticall.ts +110 -0
- package/typechain-types/PendlePrincipalTokenV2.ts +614 -0
- package/typechain-types/PendleRouter.ts +109 -131
- package/typechain-types/PendleSwapAggregator.ts +126 -0
- package/typechain-types/PendleYieldContractFactoryV2.ts +801 -0
- package/typechain-types/PendleYieldTokenV2.ts +1298 -0
- package/typechain-types/RouterStatic.ts +92 -0
- package/typechain-types/SwapAggregator.ts +406 -0
- package/typechain-types/VotingEscrowPendleSidechain.ts +4 -5
- 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 +356 -48
- package/typechain-types/factories/AddressProvider__factory.ts +196 -0
- package/typechain-types/factories/AggregationRouterHelper__factory.ts +1 -1
- 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/GLPPreviewHelper__factory.ts +65 -0
- package/typechain-types/factories/GMXPreviewHelper__factory.ts +65 -0
- package/typechain-types/factories/I1inchAggregationRouterV5__factory.ts +179 -0
- package/typechain-types/factories/IAddressProvider__factory.ts +63 -0
- package/typechain-types/factories/IAggregationExecutor__factory.ts +84 -0
- package/typechain-types/factories/IDiamondCut__factory.ts +105 -0
- package/typechain-types/factories/IDiamondLoupe__factory.ts +99 -0
- package/typechain-types/factories/IExecutorHelperEthereum1__factory.ts +407 -0
- package/typechain-types/factories/IGMXVault__factory.ts +320 -0
- package/typechain-types/factories/IGlpManager__factory.ts +55 -0
- package/typechain-types/factories/IHashflow__factory.ts +113 -0
- package/typechain-types/factories/IKyberSwapAggregationRouterHelper__factory.ts +56 -0
- package/typechain-types/factories/IMetaAggregationRouterV2__factory.ts +234 -0
- package/typechain-types/factories/IMetaAggregationRouter__factory.ts +202 -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/IPMsgReceiverApp__factory.ts +1 -1
- package/typechain-types/factories/IPSwapAggregator__factory.ts +71 -0
- package/typechain-types/factories/IPYieldTokenV2__factory.ts +694 -0
- package/typechain-types/factories/IRewardRouterV2__factory.ts +216 -0
- package/typechain-types/factories/ISwapAggregator__factory.ts +66 -0
- package/typechain-types/factories/IVaultPriceFeed__factory.ts +60 -0
- package/typechain-types/factories/InterestManagerYTV2__factory.ts +81 -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 -40
- package/typechain-types/factories/PendleAuraCbethWstethSY__factory.ts +1 -40
- package/typechain-types/factories/PendleAuraWethRethSY__factory.ts +1 -1
- package/typechain-types/factories/PendleAuraWethWstethSY__factory.ts +1 -40
- 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 +2 -2
- package/typechain-types/factories/PendleGlpSY__factory.ts +1249 -0
- 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/PendleMsgReceiverAppUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleMsgSendEndpointUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleMulticall__factory.ts +100 -0
- package/typechain-types/factories/PendlePrincipalTokenV2__factory.ts +564 -0
- 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 +129 -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 +674 -0
- package/typechain-types/factories/PendleYieldContractFactory__factory.ts +1 -1
- package/typechain-types/factories/PendleYieldTokenV2__factory.ts +1109 -0
- 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/SwapAggregator__factory.ts +309 -0
- package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +1 -1
- package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +2 -2
- package/typechain-types/hardhat.d.ts +203 -59
- package/typechain-types/index.ts +50 -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/IMultihopRouterEthereum.sol/IMultihopRouterEthereum.dbg.json +0 -4
- package/build/artifacts/contracts/router/kyberswap/IMultihopRouterEthereum.sol/IMultihopRouterEthereum.json +0 -136
- 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/contracts/interfaces/IPActionSwapPTYT.sol +0 -31
- package/contracts/router/ActionSwapPTYT.sol +0 -108
- package/contracts/router/kyberswap/AggregationRouterHelper.sol +0 -341
- package/contracts/router/kyberswap/IAggregatorRouterHelper.sol +0 -10
- package/contracts/router/kyberswap/IMultihopRouterEthereum.sol +0 -141
- package/contracts/router/kyberswap/KyberSwapHelper.sol +0 -79
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.17;
|
|
3
|
+
|
|
4
|
+
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
5
|
+
|
|
6
|
+
import "../../interfaces/IStandardizedYield.sol";
|
|
7
|
+
import "../../interfaces/IPYieldTokenV2.sol";
|
|
8
|
+
import "../../interfaces/IPPrincipalToken.sol";
|
|
9
|
+
|
|
10
|
+
import "../libraries/math/Math.sol";
|
|
11
|
+
import "../libraries/ArrayLib.sol";
|
|
12
|
+
import "../../interfaces/IPYieldContractFactory.sol";
|
|
13
|
+
import "../StandardizedYield/SYUtils.sol";
|
|
14
|
+
import "../libraries/Errors.sol";
|
|
15
|
+
import "../libraries/MiniHelpers.sol";
|
|
16
|
+
|
|
17
|
+
import "../RewardManager/RewardManager.sol";
|
|
18
|
+
import "../erc20/PendleERC20Permit.sol";
|
|
19
|
+
import "./InterestManagerYTV2.sol";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
Invariance to maintain:
|
|
23
|
+
- address(0) & address(this) should never have any rewards & activeBalance accounting done. This is
|
|
24
|
+
guaranteed by address(0) & address(this) check in each updateForTwo function
|
|
25
|
+
*/
|
|
26
|
+
contract PendleYieldTokenV2 is
|
|
27
|
+
IPYieldTokenV2,
|
|
28
|
+
PendleERC20Permit,
|
|
29
|
+
RewardManager,
|
|
30
|
+
InterestManagerYTV2
|
|
31
|
+
{
|
|
32
|
+
using Math for uint256;
|
|
33
|
+
using SafeERC20 for IERC20;
|
|
34
|
+
using ArrayLib for uint256[];
|
|
35
|
+
|
|
36
|
+
struct PostExpiryData {
|
|
37
|
+
uint256 firstPYIndex;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
address public immutable SY;
|
|
41
|
+
address public immutable PT;
|
|
42
|
+
address public immutable factory;
|
|
43
|
+
uint256 public immutable expiry;
|
|
44
|
+
|
|
45
|
+
bool public immutable doCacheIndexSameBlock;
|
|
46
|
+
|
|
47
|
+
uint256 public syReserve;
|
|
48
|
+
|
|
49
|
+
uint128 public pyIndexLastUpdatedBlock;
|
|
50
|
+
uint128 internal _pyIndexStored;
|
|
51
|
+
|
|
52
|
+
PostExpiryData public postExpiry;
|
|
53
|
+
|
|
54
|
+
uint256 internal _lastCollectedInterestIndex;
|
|
55
|
+
|
|
56
|
+
modifier updateData() {
|
|
57
|
+
if (isExpired()) _setPostExpiryData();
|
|
58
|
+
_;
|
|
59
|
+
_updateSyReserve();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
modifier notExpired() {
|
|
63
|
+
if (isExpired()) revert Errors.YCExpired();
|
|
64
|
+
_;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @param _doCacheIndexSameBlock if true, the PY index is cached for each block, and thus is
|
|
69
|
+
* constant for all txs within the same block. Otherwise, the PY index is recalculated for
|
|
70
|
+
* every tx.
|
|
71
|
+
*/
|
|
72
|
+
constructor(
|
|
73
|
+
address _SY,
|
|
74
|
+
address _PT,
|
|
75
|
+
string memory _name,
|
|
76
|
+
string memory _symbol,
|
|
77
|
+
uint8 __decimals,
|
|
78
|
+
uint256 _expiry,
|
|
79
|
+
bool _doCacheIndexSameBlock
|
|
80
|
+
) PendleERC20Permit(_name, _symbol, __decimals) {
|
|
81
|
+
SY = _SY;
|
|
82
|
+
PT = _PT;
|
|
83
|
+
expiry = _expiry;
|
|
84
|
+
factory = msg.sender;
|
|
85
|
+
doCacheIndexSameBlock = _doCacheIndexSameBlock;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @notice Tokenize SY into PT + YT of equal qty. Every unit of asset of SY will create 1 PT + 1 YT
|
|
90
|
+
* @dev SY must be transferred to this contract prior to calling
|
|
91
|
+
*/
|
|
92
|
+
function mintPY(address receiverPT, address receiverYT)
|
|
93
|
+
external
|
|
94
|
+
nonReentrant
|
|
95
|
+
notExpired
|
|
96
|
+
updateData
|
|
97
|
+
returns (uint256 amountPYOut)
|
|
98
|
+
{
|
|
99
|
+
address[] memory receiverPTs = new address[](1);
|
|
100
|
+
address[] memory receiverYTs = new address[](1);
|
|
101
|
+
uint256[] memory amountSyToMints = new uint256[](1);
|
|
102
|
+
|
|
103
|
+
(receiverPTs[0], receiverYTs[0], amountSyToMints[0]) = (
|
|
104
|
+
receiverPT,
|
|
105
|
+
receiverYT,
|
|
106
|
+
_getFloatingSyAmount()
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
uint256[] memory amountPYOuts = _mintPY(receiverPTs, receiverYTs, amountSyToMints);
|
|
110
|
+
amountPYOut = amountPYOuts[0];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/// @notice Tokenize SY into PT + YT for multiple receivers. See `mintPY()` for more details
|
|
114
|
+
function mintPYMulti(
|
|
115
|
+
address[] calldata receiverPTs,
|
|
116
|
+
address[] calldata receiverYTs,
|
|
117
|
+
uint256[] calldata amountSyToMints
|
|
118
|
+
) external nonReentrant notExpired updateData returns (uint256[] memory amountPYOuts) {
|
|
119
|
+
uint256 length = receiverPTs.length;
|
|
120
|
+
|
|
121
|
+
if (length == 0) revert Errors.ArrayEmpty();
|
|
122
|
+
if (receiverYTs.length != length || amountSyToMints.length != length)
|
|
123
|
+
revert Errors.ArrayLengthMismatch();
|
|
124
|
+
|
|
125
|
+
uint256 totalSyToMint = amountSyToMints.sum();
|
|
126
|
+
if (totalSyToMint > _getFloatingSyAmount())
|
|
127
|
+
revert Errors.YieldContractInsufficientSy(totalSyToMint, _getFloatingSyAmount());
|
|
128
|
+
|
|
129
|
+
amountPYOuts = _mintPY(receiverPTs, receiverYTs, amountSyToMints);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* @notice converts PT(+YT) tokens into SY, but interests & rewards are not redeemed at the
|
|
134
|
+
* same time
|
|
135
|
+
* @dev PT/YT must be transferred to this contract prior to calling
|
|
136
|
+
*/
|
|
137
|
+
function redeemPY(address receiver)
|
|
138
|
+
external
|
|
139
|
+
nonReentrant
|
|
140
|
+
updateData
|
|
141
|
+
returns (uint256 amountSyOut)
|
|
142
|
+
{
|
|
143
|
+
address[] memory receivers = new address[](1);
|
|
144
|
+
uint256[] memory amounts = new uint256[](1);
|
|
145
|
+
(receivers[0], amounts[0]) = (receiver, _getAmountPYToRedeem());
|
|
146
|
+
|
|
147
|
+
uint256[] memory amountSyOuts;
|
|
148
|
+
amountSyOuts = _redeemPY(receivers, amounts);
|
|
149
|
+
|
|
150
|
+
amountSyOut = amountSyOuts[0];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @notice redeems PT(+YT) for multiple users. See `redeemPY()`
|
|
155
|
+
* @dev PT/YT must be transferred to this contract prior to calling
|
|
156
|
+
* @dev fails if unable to redeem the total PY amount in `amountPYToRedeems`
|
|
157
|
+
*/
|
|
158
|
+
function redeemPYMulti(address[] calldata receivers, uint256[] calldata amountPYToRedeems)
|
|
159
|
+
external
|
|
160
|
+
nonReentrant
|
|
161
|
+
updateData
|
|
162
|
+
returns (uint256[] memory amountSyOuts)
|
|
163
|
+
{
|
|
164
|
+
if (receivers.length != amountPYToRedeems.length) revert Errors.ArrayLengthMismatch();
|
|
165
|
+
if (receivers.length == 0) revert Errors.ArrayEmpty();
|
|
166
|
+
amountSyOuts = _redeemPY(receivers, amountPYToRedeems);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* @notice Redeems interests and rewards for `user`
|
|
171
|
+
* @param redeemInterest will only transfer out interest for user if true
|
|
172
|
+
* @param redeemRewards will only transfer out rewards for user if true
|
|
173
|
+
* @dev With YT yielding interest in the form of SY, which is redeemable by users, the reward
|
|
174
|
+
* distribution should be based on the amount of SYs that their YT currently represent, plus
|
|
175
|
+
* their dueInterest. It has been proven and tested that _rewardSharesUser will not change over
|
|
176
|
+
* time, unless users redeem their dueInterest or redeemPY. Due to this, it is required to
|
|
177
|
+
* update users' accruedReward STRICTLY BEFORE transferring out their interest.
|
|
178
|
+
*/
|
|
179
|
+
function redeemDueInterestAndRewards(
|
|
180
|
+
address user,
|
|
181
|
+
bool redeemInterest,
|
|
182
|
+
bool redeemRewards
|
|
183
|
+
) external nonReentrant updateData returns (uint256 interestOut, uint256[] memory rewardsOut) {
|
|
184
|
+
if (!redeemInterest && !redeemRewards) revert Errors.YCNothingToRedeem();
|
|
185
|
+
|
|
186
|
+
// if redeemRewards == true, this line must be here for obvious reason
|
|
187
|
+
// if redeemInterest == true, this line must be here because of the reason above
|
|
188
|
+
_updateAndDistributeRewards(user);
|
|
189
|
+
|
|
190
|
+
if (redeemRewards) {
|
|
191
|
+
rewardsOut = _doTransferOutRewards(user, user);
|
|
192
|
+
emit RedeemRewards(user, rewardsOut);
|
|
193
|
+
} else {
|
|
194
|
+
address[] memory tokens = getRewardTokens();
|
|
195
|
+
rewardsOut = new uint256[](tokens.length);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (redeemInterest) {
|
|
199
|
+
_updateAndDistributeInterest(user);
|
|
200
|
+
interestOut = _doTransferOutInterest(user, SY);
|
|
201
|
+
emit RedeemInterest(user, interestOut);
|
|
202
|
+
} else {
|
|
203
|
+
interestOut = 0;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* @dev All rewards and interests accrued post-expiry goes to the treasury.
|
|
209
|
+
* Reverts if called pre-expiry.
|
|
210
|
+
*/
|
|
211
|
+
function redeemInterestAndRewardsPostExpiryForTreasury() external nonReentrant updateData {
|
|
212
|
+
if (!isExpired()) revert Errors.YCNotExpired();
|
|
213
|
+
|
|
214
|
+
_collectInterest();
|
|
215
|
+
_redeemExternalReward();
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/// @notice updates and returns the reward indexes
|
|
219
|
+
function rewardIndexesCurrent() external override nonReentrant returns (uint256[] memory) {
|
|
220
|
+
return IStandardizedYield(SY).rewardIndexesCurrent();
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* @notice updates and returns the current PY index
|
|
225
|
+
* @dev this function maximizes the current PY index with the previous index, guaranteeing
|
|
226
|
+
* non-decreasing PY index
|
|
227
|
+
* @dev if `doCacheIndexSameBlock` is true, PY index only updates at most once per block,
|
|
228
|
+
* and has no state changes on the second call onwards (within the same block).
|
|
229
|
+
* @dev see `pyIndexStored()` for view function for cached value.
|
|
230
|
+
*/
|
|
231
|
+
function pyIndexCurrent() public nonReentrant returns (uint256 currentIndex) {
|
|
232
|
+
currentIndex = _pyIndexCurrent();
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/// @notice returns the last-updated PY index
|
|
236
|
+
function pyIndexStored() public view returns (uint256) {
|
|
237
|
+
return _pyIndexStored;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* @notice do a final rewards redeeming, and sets post-expiry data
|
|
242
|
+
* @dev has no effect if called pre-expiry
|
|
243
|
+
*/
|
|
244
|
+
function setPostExpiryData() external nonReentrant {
|
|
245
|
+
if (isExpired()) {
|
|
246
|
+
_setPostExpiryData();
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* @notice returns the current data post-expiry, if exists
|
|
252
|
+
* @dev reverts if post-expiry data not set (see `setPostExpiryData()`)
|
|
253
|
+
* @return firstPYIndex the earliest PY index post-expiry
|
|
254
|
+
*/
|
|
255
|
+
function getPostExpiryData() external view returns (uint256 firstPYIndex) {
|
|
256
|
+
if (postExpiry.firstPYIndex == 0) revert Errors.YCPostExpiryDataNotSet();
|
|
257
|
+
firstPYIndex = postExpiry.firstPYIndex;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function _mintPY(
|
|
261
|
+
address[] memory receiverPTs,
|
|
262
|
+
address[] memory receiverYTs,
|
|
263
|
+
uint256[] memory amountSyToMints
|
|
264
|
+
) internal returns (uint256[] memory amountPYOuts) {
|
|
265
|
+
amountPYOuts = new uint256[](amountSyToMints.length);
|
|
266
|
+
|
|
267
|
+
uint256 index = _pyIndexCurrent();
|
|
268
|
+
|
|
269
|
+
for (uint256 i = 0; i < amountSyToMints.length; i++) {
|
|
270
|
+
amountPYOuts[i] = _calcPYToMint(amountSyToMints[i], index);
|
|
271
|
+
|
|
272
|
+
_mint(receiverYTs[i], amountPYOuts[i]);
|
|
273
|
+
IPPrincipalToken(PT).mintByYT(receiverPTs[i], amountPYOuts[i]);
|
|
274
|
+
|
|
275
|
+
emit Mint(
|
|
276
|
+
msg.sender,
|
|
277
|
+
receiverPTs[i],
|
|
278
|
+
receiverYTs[i],
|
|
279
|
+
amountSyToMints[i],
|
|
280
|
+
amountPYOuts[i]
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function isExpired() public view returns (bool) {
|
|
286
|
+
return MiniHelpers.isCurrentlyExpired(expiry);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function isDistributingInterestAndRewards() public view returns (bool) {
|
|
290
|
+
return postExpiry.firstPYIndex == 0;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function _redeemPY(address[] memory receivers, uint256[] memory amountPYToRedeems)
|
|
294
|
+
internal
|
|
295
|
+
returns (uint256[] memory amountSyOuts)
|
|
296
|
+
{
|
|
297
|
+
uint256 totalAmountPYToRedeem = amountPYToRedeems.sum();
|
|
298
|
+
IPPrincipalToken(PT).burnByYT(address(this), totalAmountPYToRedeem);
|
|
299
|
+
if (!isExpired()) _burn(address(this), totalAmountPYToRedeem);
|
|
300
|
+
|
|
301
|
+
uint256 index = _pyIndexCurrent();
|
|
302
|
+
uint256 totalSyInterestPostExpiry;
|
|
303
|
+
amountSyOuts = new uint256[](receivers.length);
|
|
304
|
+
|
|
305
|
+
for (uint256 i = 0; i < receivers.length; i++) {
|
|
306
|
+
uint256 syInterestPostExpiry;
|
|
307
|
+
(amountSyOuts[i], syInterestPostExpiry) = _calcSyRedeemableFromPY(
|
|
308
|
+
amountPYToRedeems[i],
|
|
309
|
+
index
|
|
310
|
+
);
|
|
311
|
+
_transferOut(SY, receivers[i], amountSyOuts[i]);
|
|
312
|
+
totalSyInterestPostExpiry += syInterestPostExpiry;
|
|
313
|
+
|
|
314
|
+
emit Burn(msg.sender, receivers[i], amountPYToRedeems[i], amountSyOuts[i]);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
address treasury = IPYieldContractFactory(factory).treasury();
|
|
318
|
+
_transferOut(SY, treasury, totalSyInterestPostExpiry);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function _calcPYToMint(uint256 amountSy, uint256 indexCurrent)
|
|
322
|
+
internal
|
|
323
|
+
pure
|
|
324
|
+
returns (uint256 amountPY)
|
|
325
|
+
{
|
|
326
|
+
// doesn't matter before or after expiry, since mintPY is only allowed before expiry
|
|
327
|
+
return SYUtils.syToAsset(indexCurrent, amountSy);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function _calcSyRedeemableFromPY(uint256 amountPY, uint256 indexCurrent)
|
|
331
|
+
internal
|
|
332
|
+
view
|
|
333
|
+
returns (uint256 syToUser, uint256 syInterestPostExpiry)
|
|
334
|
+
{
|
|
335
|
+
syToUser = SYUtils.assetToSy(indexCurrent, amountPY);
|
|
336
|
+
if (isExpired()) {
|
|
337
|
+
uint256 totalSyRedeemable = SYUtils.assetToSy(postExpiry.firstPYIndex, amountPY);
|
|
338
|
+
syInterestPostExpiry = totalSyRedeemable - syToUser;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
function _getAmountPYToRedeem() internal view returns (uint256) {
|
|
343
|
+
if (!isExpired()) return Math.min(_selfBalance(PT), balanceOf(address(this)));
|
|
344
|
+
else return _selfBalance(PT);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
function _updateSyReserve() internal virtual {
|
|
348
|
+
syReserve = _selfBalance(SY);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
function _getFloatingSyAmount() internal view returns (uint256 amount) {
|
|
352
|
+
amount = _selfBalance(SY) - syReserve;
|
|
353
|
+
if (amount == 0) revert Errors.YCNoFloatingSy();
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
function _setPostExpiryData() internal {
|
|
357
|
+
PostExpiryData storage local = postExpiry;
|
|
358
|
+
if (local.firstPYIndex != 0) return; // already set
|
|
359
|
+
|
|
360
|
+
_updateInterestIndex();
|
|
361
|
+
_updateRewardIndex();
|
|
362
|
+
|
|
363
|
+
// by setting this, we have finished setting postExpiry data, all income will go to treasury
|
|
364
|
+
local.firstPYIndex = _pyIndexCurrent().Uint128();
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/*///////////////////////////////////////////////////////////////
|
|
368
|
+
INTEREST-RELATED
|
|
369
|
+
//////////////////////////////////////////////////////////////*/
|
|
370
|
+
|
|
371
|
+
function _pyIndexCurrent() internal returns (uint256 currentIndex) {
|
|
372
|
+
if (doCacheIndexSameBlock && pyIndexLastUpdatedBlock == block.number)
|
|
373
|
+
return _pyIndexStored;
|
|
374
|
+
|
|
375
|
+
uint128 index128 = Math
|
|
376
|
+
.max(IStandardizedYield(SY).exchangeRate(), _pyIndexStored)
|
|
377
|
+
.Uint128();
|
|
378
|
+
|
|
379
|
+
currentIndex = index128;
|
|
380
|
+
_pyIndexStored = index128;
|
|
381
|
+
pyIndexLastUpdatedBlock = uint128(block.number);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
function _collectInterest()
|
|
385
|
+
internal
|
|
386
|
+
override
|
|
387
|
+
returns (uint256 accuredAmount, uint256 currentIndex)
|
|
388
|
+
{
|
|
389
|
+
uint256 prevIndex = _lastCollectedInterestIndex;
|
|
390
|
+
currentIndex = _pyIndexCurrent();
|
|
391
|
+
|
|
392
|
+
if (prevIndex != 0 && prevIndex != currentIndex) {
|
|
393
|
+
// guaranteed feeAmount != 0
|
|
394
|
+
address treasury = IPYieldContractFactory(factory).treasury();
|
|
395
|
+
uint256 interestFeeRate = isDistributingInterestAndRewards()
|
|
396
|
+
? IPYieldContractFactory(factory).interestFeeRate()
|
|
397
|
+
: Math.ONE;
|
|
398
|
+
|
|
399
|
+
uint256 totalInterest = _calcInterest(totalSupply(), prevIndex, currentIndex);
|
|
400
|
+
uint256 feeAmount = totalInterest.mulDown(interestFeeRate);
|
|
401
|
+
accuredAmount = totalInterest - feeAmount;
|
|
402
|
+
|
|
403
|
+
_transferOut(SY, treasury, feeAmount);
|
|
404
|
+
_updateSyReserve();
|
|
405
|
+
emit CollectInterestFee(feeAmount);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
_lastCollectedInterestIndex = currentIndex;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
function _calcInterest(
|
|
412
|
+
uint256 principal,
|
|
413
|
+
uint256 prevIndex,
|
|
414
|
+
uint256 currentIndex
|
|
415
|
+
) internal pure returns (uint256) {
|
|
416
|
+
return (principal * (currentIndex - prevIndex)).divDown(prevIndex * currentIndex);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
function _YTbalance(address user) internal view override returns (uint256) {
|
|
420
|
+
return balanceOf(user);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
function _YTSupply() internal view override returns (uint256) {
|
|
424
|
+
return totalSupply();
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
function _getGlobalPYIndex() internal view virtual override returns (uint256) {
|
|
428
|
+
return _pyIndexStored;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/*///////////////////////////////////////////////////////////////
|
|
432
|
+
REWARDS-RELATED
|
|
433
|
+
//////////////////////////////////////////////////////////////*/
|
|
434
|
+
|
|
435
|
+
function getRewardTokens() public view returns (address[] memory) {
|
|
436
|
+
return IStandardizedYield(SY).getRewardTokens();
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
function _redeemExternalReward() internal virtual override {
|
|
440
|
+
IStandardizedYield(SY).claimRewards(address(this));
|
|
441
|
+
|
|
442
|
+
address treasury = IPYieldContractFactory(factory).treasury();
|
|
443
|
+
uint256 rewardFeeRate = isDistributingInterestAndRewards()
|
|
444
|
+
? IPYieldContractFactory(factory).rewardFeeRate()
|
|
445
|
+
: Math.ONE;
|
|
446
|
+
|
|
447
|
+
address[] memory rewardTokens = getRewardTokens();
|
|
448
|
+
|
|
449
|
+
for (uint256 i = 0; i < rewardTokens.length; ++i) {
|
|
450
|
+
address token = rewardTokens[i];
|
|
451
|
+
uint256 accruedReward = _selfBalance(token) - rewardState[token].lastBalance;
|
|
452
|
+
|
|
453
|
+
uint256 amountRewardFee = accruedReward.mulDown(rewardFeeRate);
|
|
454
|
+
|
|
455
|
+
_transferOut(token, treasury, amountRewardFee);
|
|
456
|
+
emit CollectRewardFee(token, amountRewardFee);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/// @dev effectively returning the amount of SY generating rewards for this user
|
|
461
|
+
function _rewardSharesUser(address user) internal view virtual override returns (uint256) {
|
|
462
|
+
uint256 index = userInterest[user].pyIndex;
|
|
463
|
+
if (index == 0) return 0;
|
|
464
|
+
return SYUtils.assetToSy(index, balanceOf(user)) + userInterest[user].accrued;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
function _rewardSharesTotal() internal view virtual override returns (uint256) {
|
|
468
|
+
return syReserve;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
function _getRewardTokens() internal view virtual override returns (address[] memory) {
|
|
472
|
+
return IStandardizedYield(SY).getRewardTokens();
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
//solhint-disable-next-line ordering
|
|
476
|
+
function _beforeTokenTransfer(
|
|
477
|
+
address from,
|
|
478
|
+
address to,
|
|
479
|
+
uint256
|
|
480
|
+
) internal override {
|
|
481
|
+
if (isExpired()) _setPostExpiryData();
|
|
482
|
+
_updateAndDistributeRewardsForTwo(from, to);
|
|
483
|
+
_updateAndDistributeInterestForTwo(from, to);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
@@ -75,6 +75,7 @@ library Errors {
|
|
|
75
75
|
error RouterTimeRangeZero();
|
|
76
76
|
error RouterCallbackNotPendleMarket(address caller);
|
|
77
77
|
error RouterInvalidAction(bytes4 selector);
|
|
78
|
+
error RouterInvalidFacet(address facet);
|
|
78
79
|
|
|
79
80
|
error RouterKyberSwapDataZero();
|
|
80
81
|
|
|
@@ -169,4 +170,8 @@ library Errors {
|
|
|
169
170
|
error OnlyYT();
|
|
170
171
|
error OnlyYCFactory();
|
|
171
172
|
error OnlyWhitelisted();
|
|
173
|
+
|
|
174
|
+
// Swap Aggregator
|
|
175
|
+
error SAInsufficientTokenIn(address tokenIn, uint256 amountExpected, uint256 amountActual);
|
|
176
|
+
error UnsupportedSelector(uint256 aggregatorType, bytes4 selector);
|
|
172
177
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
pragma solidity 0.8.17;
|
|
3
3
|
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
|
4
4
|
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
5
|
+
import "../../interfaces/IWETH.sol";
|
|
5
6
|
|
|
6
7
|
abstract contract TokenHelper {
|
|
7
8
|
using SafeERC20 for IERC20;
|
|
@@ -83,4 +84,13 @@ abstract contract TokenHelper {
|
|
|
83
84
|
_safeApprove(token, to, type(uint256).max);
|
|
84
85
|
}
|
|
85
86
|
}
|
|
87
|
+
|
|
88
|
+
function _wrap_unwrap_ETH(
|
|
89
|
+
address tokenIn,
|
|
90
|
+
address tokenOut,
|
|
91
|
+
uint256 netTokenIn
|
|
92
|
+
) internal {
|
|
93
|
+
if (tokenIn == NATIVE) IWETH(tokenOut).deposit{ value: netTokenIn }();
|
|
94
|
+
else IWETH(tokenIn).withdraw(netTokenIn);
|
|
95
|
+
}
|
|
86
96
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.17;
|
|
3
|
+
|
|
4
|
+
interface IGMXVault {
|
|
5
|
+
function BASIS_POINTS_DIVISOR() external view returns (uint256);
|
|
6
|
+
|
|
7
|
+
function PRICE_PRECISION() external view returns (uint256);
|
|
8
|
+
|
|
9
|
+
function priceFeed() external view returns (address);
|
|
10
|
+
|
|
11
|
+
function usdg() external view returns (address);
|
|
12
|
+
|
|
13
|
+
function hasDynamicFees() external view returns (bool);
|
|
14
|
+
|
|
15
|
+
function totalTokenWeights() external view returns (uint256);
|
|
16
|
+
|
|
17
|
+
function tokenBalances(address) external view returns (uint256);
|
|
18
|
+
|
|
19
|
+
function usdgAmounts(address) external view returns (uint256);
|
|
20
|
+
|
|
21
|
+
function getMinPrice(address _token) external view returns (uint256);
|
|
22
|
+
|
|
23
|
+
function getRedemptionAmount(address _token, uint256 _usdgAmount)
|
|
24
|
+
external
|
|
25
|
+
view
|
|
26
|
+
returns (uint256);
|
|
27
|
+
|
|
28
|
+
function taxBasisPoints() external view returns (uint256);
|
|
29
|
+
|
|
30
|
+
function mintBurnFeeBasisPoints() external view returns (uint256);
|
|
31
|
+
|
|
32
|
+
function allWhitelistedTokensLength() external view returns (uint256);
|
|
33
|
+
|
|
34
|
+
function allWhitelistedTokens(uint256) external view returns (address);
|
|
35
|
+
|
|
36
|
+
function whitelistedTokens(address) external view returns (bool);
|
|
37
|
+
|
|
38
|
+
function whitelistedTokenCount() external view returns (uint256);
|
|
39
|
+
|
|
40
|
+
function tokenWeights(address _token) external view returns (uint256);
|
|
41
|
+
|
|
42
|
+
function adjustForDecimals(
|
|
43
|
+
uint256 _amount,
|
|
44
|
+
address _tokenDiv,
|
|
45
|
+
address _tokenMul
|
|
46
|
+
) external view returns (uint256);
|
|
47
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.17;
|
|
3
|
+
|
|
4
|
+
interface IRewardRouterV2 {
|
|
5
|
+
function weth() external view returns (address);
|
|
6
|
+
|
|
7
|
+
function handleRewards(
|
|
8
|
+
bool _shouldClaimGmx,
|
|
9
|
+
bool _shouldStakeGmx,
|
|
10
|
+
bool _shouldClaimEsGmx,
|
|
11
|
+
bool _shouldStakeEsGmx,
|
|
12
|
+
bool _shouldStakeMultiplierPoints,
|
|
13
|
+
bool _shouldClaimWeth,
|
|
14
|
+
bool _shouldConvertWethToEth
|
|
15
|
+
) external;
|
|
16
|
+
|
|
17
|
+
function glpManager() external view returns (address);
|
|
18
|
+
|
|
19
|
+
function mintAndStakeGlp(
|
|
20
|
+
address _token,
|
|
21
|
+
uint256 _amount,
|
|
22
|
+
uint256 _minUsdg,
|
|
23
|
+
uint256 _minGlp
|
|
24
|
+
) external returns (uint256);
|
|
25
|
+
|
|
26
|
+
function mintAndStakeGlpETH(uint256 _minUsdg, uint256 _minGlp)
|
|
27
|
+
external
|
|
28
|
+
payable
|
|
29
|
+
returns (uint256);
|
|
30
|
+
|
|
31
|
+
function unstakeAndRedeemGlp(
|
|
32
|
+
address _tokenOut,
|
|
33
|
+
uint256 _glpAmount,
|
|
34
|
+
uint256 _minOut,
|
|
35
|
+
address _receiver
|
|
36
|
+
) external returns (uint256);
|
|
37
|
+
|
|
38
|
+
function unstakeAndRedeemGlpETH(
|
|
39
|
+
uint256 _glpAmount,
|
|
40
|
+
uint256 _minOut,
|
|
41
|
+
address payable _receiver
|
|
42
|
+
) external returns (uint256);
|
|
43
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/******************************************************************************\
|
|
5
|
+
* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)
|
|
6
|
+
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
|
|
7
|
+
/******************************************************************************/
|
|
8
|
+
|
|
9
|
+
interface IDiamondCut {
|
|
10
|
+
enum FacetCutAction {
|
|
11
|
+
Add,
|
|
12
|
+
Replace,
|
|
13
|
+
Remove
|
|
14
|
+
}
|
|
15
|
+
// Add=0, Replace=1, Remove=2
|
|
16
|
+
|
|
17
|
+
struct FacetCut {
|
|
18
|
+
address facetAddress;
|
|
19
|
+
FacetCutAction action;
|
|
20
|
+
bytes4[] functionSelectors;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/// @notice Add/replace/remove any number of functions and optionally execute
|
|
24
|
+
/// a function with delegatecall
|
|
25
|
+
/// @param _diamondCut Contains the facet addresses and function selectors
|
|
26
|
+
/// @param _init The address of the contract or facet to execute _calldata
|
|
27
|
+
/// @param _calldata A function call, including function selector and arguments
|
|
28
|
+
/// _calldata is executed with delegatecall on _init
|
|
29
|
+
function diamondCut(
|
|
30
|
+
FacetCut[] calldata _diamondCut,
|
|
31
|
+
address _init,
|
|
32
|
+
bytes calldata _calldata
|
|
33
|
+
) external;
|
|
34
|
+
|
|
35
|
+
event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
|
|
36
|
+
}
|