@pendle/core-v2 2.21.1 → 2.22.1
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/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/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 +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/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/PendleGauge.sol/PendleGauge.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleGauge.sol/PendleGauge.json +19 -0
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +21 -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/PYIndex.sol/PYIndexLib.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/PYIndex.sol/PYIndexLib.json +2 -2
- 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/implementations/Ankr/PendleAnkrBNBSY.sol/PendleAnkrBNBSY.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Ankr/PendleAnkrBNBSY.sol/PendleAnkrBNBSY.json +1027 -0
- 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/PendleAuraBbAWethSwethSY.sol/PendleAuraBbAWethSwethSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraBbAWethSwethSY.sol/PendleAuraBbAWethSwethSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethAnkrethSYV2.sol/PendleAuraWethAnkrethSYV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethAnkrethSYV2.sol/PendleAuraWethAnkrethSYV2.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRocketEthSYV2.sol/PendleAuraWethRocketEthSYV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRocketEthSYV2.sol/PendleAuraWethRocketEthSYV2.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethStafiEthSY.sol/PendleAuraWethStafiEthSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethStafiEthSY.sol/PendleAuraWethStafiEthSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSYV2.sol/PendleAuraWethWstethSYV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSYV2.sol/PendleAuraWethWstethSYV2.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWstethAnkreth.sol/PendleAuraWstethAnkreth.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWstethAnkreth.sol/PendleAuraWstethAnkreth.json +1171 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSYV2.sol/PendleAuraBalancerStableLPSYV2.dbg.json +1 -1
- 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/CamelotV1Volatile/CamelotRewardHelper.sol/CamelotRewardHelper.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotRewardHelper.sol/CamelotRewardHelper.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatileCommon.sol/CamelotV1VolatileCommon.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatileCommon.sol/CamelotV1VolatileCommon.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatileLpHelper.sol/CamelotV1VolatileLpHelper.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatilePreview.sol/CamelotV1VolatilePreview.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatilePreview.sol/CamelotV1VolatilePreview.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/PendleCamelotV1VolatileSY.sol/PendleCamelotV1VolatileSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/PendleCamelotV1VolatileSY.sol/PendleCamelotV1VolatileSY.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/Curve3CrvPoolHelper.sol/Curve3CrvPoolHelper.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/Curve3CrvPoolHelper.sol/Curve3CrvPoolHelper.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveFraxUsdcPoolHelper.sol/CurveFraxUsdcPoolHelper.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveFraxUsdcPoolHelper.sol/CurveFraxUsdcPoolHelper.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol/CurveUsdd3CrvPoolHelper.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol/CurveUsdd3CrvPoolHelper.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/PendleGlpSY.sol/PendleGlpSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol/PendleGlpSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleArbitrumStakedEthSY.sol/PendleArbitrumStakedEthSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleArbitrumStakedEthSY.sol/PendleArbitrumStakedEthSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol/PendleGDaiSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol/PendleGDaiSY.json +2 -2
- 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/PendleSfrxEthSY.sol/PendleSfrxEthSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleSfrxEthSY.sol/PendleSfrxEthSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleStargateLPSY.sol/PendleStargateLPSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleStargateLPSY.sol/PendleStargateLPSY.json +2 -2
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWbEthSY.sol/PendleWbEthSY.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWbEthSY.sol/PendleWbEthSY.json +979 -0
- 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/StandardizedYield/implementations/Swell/PendleSwETH.sol/SwETHSY.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol/SwETHSY.json +961 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/PendleThenaSY.sol/PendleThenaSY.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/PendleThenaSY.sol/PendleThenaSY.json +1266 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaLpHelper.sol/ThenaLpHelper.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaLpHelper.sol/ThenaLpHelper.json +128 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaMath.sol/ThenaMath.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaMath.sol/ThenaMath.json +24 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaPreview.sol/IThenaSY.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaPreview.sol/IThenaSY.json +24 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaPreview.sol/ThenaPreview.dbg.json +4 -0
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaPreview.sol/ThenaPreview.json +267 -0
- package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +2 -2
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
- package/build/artifacts/contracts/core/YieldContractsV2/InterestManagerYTV2.sol/InterestManagerYTV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.json +2 -2
- package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.json +2 -2
- package/build/artifacts/contracts/core/libraries/math/Math.sol/Math.dbg.json +1 -1
- package/build/artifacts/contracts/core/libraries/math/Math.sol/Math.json +2 -2
- package/build/artifacts/contracts/interfaces/Ankr/IAnkrBNB.sol/IAnkrBNB.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/Ankr/IAnkrBNB.sol/IAnkrBNB.json +62 -0
- package/build/artifacts/contracts/interfaces/Ankr/IAnkrLiquidStaking.sol/IAnkrLiquidStaking.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/Ankr/IAnkrLiquidStaking.sol/IAnkrLiquidStaking.json +108 -0
- package/build/artifacts/contracts/interfaces/BinanceEth/IWBETH.sol/IWBETH.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/BinanceEth/IWBETH.sol/IWBETH.json +42 -0
- package/build/artifacts/contracts/interfaces/Camelot/ICamelotNFTPool.sol/ICamelotNFTPool.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Camelot/ICamelotNFTPool.sol/ICamelotNFTPool.json +13 -0
- package/build/artifacts/contracts/interfaces/Camelot/ICamelotNitroPool.sol/ICamelotNitroPool.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Camelot/ICamelotNitroPool.sol/ICamelotNitroPool.json +13 -0
- package/build/artifacts/contracts/interfaces/Camelot/ICamelotPair.sol/ICamelotPair.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/Camelot/ICamelotPair.sol/ICamelotPair.json +26 -0
- package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMarketAuxStatic.sol/IPActionMarketAuxStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPBulkSeller.sol/IPBulkSeller.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.json +19 -0
- package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.json +19 -0
- package/build/artifacts/contracts/interfaces/IPRouterHelper.sol/IPRouterHelper.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.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/IPendlePreviewHelper.sol/IPendlePreviewHelper.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPendlePreviewHelper.sol/IPendlePreviewHelper.json +59 -0
- package/build/artifacts/contracts/interfaces/ISwETH.sol/ISwETH.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/ISwETH.sol/ISwETH.json +44 -0
- package/build/artifacts/contracts/interfaces/Thena/IThenaFactory.sol/IThenaFactory.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/Thena/IThenaFactory.sol/IThenaFactory.json +152 -0
- package/build/artifacts/contracts/interfaces/Thena/IThenaGaugeV2.sol/IThenaGaugeV2.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/Thena/IThenaGaugeV2.sol/IThenaGaugeV2.json +71 -0
- package/build/artifacts/contracts/interfaces/Thena/IThenaPair.sol/IThenaPair.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/Thena/IThenaPair.sol/IThenaPair.json +409 -0
- package/build/artifacts/contracts/interfaces/Thena/IThenaRouter.sol/IThenaRouter.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/Thena/IThenaRouter.sol/IThenaRouter.json +188 -0
- package/build/artifacts/contracts/offchain-helpers/BoringLpSeller.sol/BoringLpSeller.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/BoringPtSeller.sol/BoringPtSeller.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/Broadcaster.sol/Broadcaster.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/Broadcaster.sol/Broadcaster.json +2 -2
- 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/MarketExchangeRateLib.sol/MarketExchangeRateLib.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/MarketExchangeRateLib.sol/MarketExchangeRateLib.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/PtAndLpToAsset.sol/PtAndLpToAsset.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/PtAndLpToAsset.sol/PtAndLpToAsset.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/router-static/base/StorageLayout.sol/StorageLayout.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/PendleLpOracleLib.sol/PendleLpOracleLib.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/PendleLpOracleLib.sol/PendleLpOracleLib.json +2 -2
- package/build/artifacts/contracts/oracles/PendlePtOracle.sol/PendlePtOracle.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/PendlePtOracle.sol/PendlePtOracle.json +2 -2
- package/build/artifacts/contracts/oracles/PendlePtOracleLib.sol/PendlePtOracleLib.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/PendlePtOracleLib.sol/PendlePtOracleLib.json +2 -2
- package/build/artifacts/contracts/oracles/samples/PendleLpGlpOracle.sol/PendleLpGlpOracle.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/samples/PendleLpGlpOracle.sol/PendleLpGlpOracle.json +2 -2
- package/build/artifacts/contracts/oracles/samples/PendlePtGlpOracle.sol/PendlePtGlpOracle.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/samples/PendlePtGlpOracle.sol/PendlePtGlpOracle.json +2 -2
- package/build/artifacts/contracts/oracles/samples/PendlePtUsdChainlinkOracle.sol/PendlePtUsdChainlinkOracle.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/samples/PendlePtUsdChainlinkOracle.sol/PendlePtUsdChainlinkOracle.json +2 -2
- package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +2 -2
- package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.json +2 -2
- package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.json +2 -2
- package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.json +2 -2
- package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.dbg.json +1 -1
- package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.json +2 -2
- package/build/artifacts/contracts/router/PendleRouterHelper.sol/PendleRouterHelper.dbg.json +1 -1
- package/build/artifacts/contracts/router/PendleRouterHelper.sol/PendleRouterHelper.json +2 -2
- package/build/artifacts/contracts/router/base/ActionBaseCallback.sol/ActionBaseCallback.dbg.json +1 -1
- package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.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/PendleSwap.sol/PendleSwap.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwap.json +18 -2
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/IExecutorHelper.sol/IExecutorHelper.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/IExecutorHelper.sol/IExecutorHelper.json +76 -118
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/KyberInputScalingHelper.sol/KyberInputScalingHelper.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/ScalingDataLib.sol/ScalingDataLib.dbg.json +1 -1
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/ScalingDataLib.sol/ScalingDataLib.json +2 -2
- package/contracts/core/StandardizedYield/implementations/Ankr/PendleAnkrBNBSY.sol +163 -0
- package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWstethAnkreth.sol +153 -0
- package/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol +102 -0
- package/contracts/core/StandardizedYield/implementations/Thena/PendleThenaSY.sol +202 -0
- package/contracts/core/StandardizedYield/implementations/Thena/ThenaLpHelper.sol +156 -0
- package/contracts/core/StandardizedYield/implementations/Thena/ThenaMath.sol +128 -0
- package/contracts/core/StandardizedYield/implementations/Thena/ThenaPreview.sol +193 -0
- package/contracts/core/libraries/math/Math.sol +4 -0
- package/contracts/interfaces/Ankr/IAnkrBNB.sol +11 -0
- package/contracts/interfaces/Ankr/IAnkrLiquidStaking.sol +21 -0
- package/contracts/interfaces/Camelot/ICamelotNFTPool.sol +2 -0
- package/contracts/interfaces/Camelot/ICamelotNitroPool.sol +3 -0
- package/contracts/interfaces/Camelot/ICamelotPair.sol +4 -0
- package/contracts/interfaces/IPendlePreviewHelper.sol +14 -0
- package/contracts/interfaces/ISwETH.sol +10 -0
- package/contracts/interfaces/Thena/IThenaFactory.sol +23 -0
- package/contracts/interfaces/Thena/IThenaGaugeV2.sol +18 -0
- package/contracts/interfaces/Thena/IThenaPair.sol +30 -0
- package/contracts/interfaces/Thena/IThenaRouter.sol +38 -0
- package/contracts/oracles/PendleLpOracleLib.sol +21 -40
- package/contracts/oracles/PendlePtOracleLib.sol +33 -28
- package/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol +45 -0
- package/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol +67 -0
- package/contracts/router/swap-aggregator/PendleSwap.sol +3 -2
- package/contracts/router/swap-aggregator/kyberswap/IExecutorHelper.sol +110 -118
- package/contracts/router/swap-aggregator/kyberswap/KyberInputScalingHelper.sol +22 -21
- package/contracts/router/swap-aggregator/kyberswap/ScalingDataLib.sol +22 -2
- package/deployments/1-core.json +4 -3
- package/deployments/1-markets/BALANCER-LP-AURA-WSTETH-ANKRETH-JUNE-27-2024.json +10 -0
- package/deployments/1-markets/SWETH-DEC2024.json +12 -0
- package/deployments/42161-core.json +4 -3
- package/deployments/42161-markets/WSTETH-ARBITRUM-DEC2023.json +10 -0
- package/deployments/56-core.json +3 -3
- package/deployments/56-markets/ANKRBNB-26JUN2025.json +10 -0
- package/package.json +1 -1
- package/typechain-types/IAnkrBNB.ts +150 -0
- package/typechain-types/IAnkrLiquidStaking.ts +253 -0
- package/typechain-types/ICamelotNFTPool.ts +19 -0
- package/typechain-types/ICamelotNitroPool.ts +19 -0
- package/typechain-types/ICamelotPair.ts +42 -0
- package/typechain-types/IExecutorHelper.ts +310 -331
- package/typechain-types/IPGauge.ts +23 -3
- package/typechain-types/IPMarket.ts +18 -0
- package/typechain-types/IPendlePreviewHelper.ts +147 -0
- package/typechain-types/ISwETH.ts +123 -0
- package/typechain-types/IThenaFactory.ts +245 -0
- package/typechain-types/IThenaGaugeV2.ts +206 -0
- package/typechain-types/IThenaPair.ts +579 -0
- package/typechain-types/IThenaRouter.ts +313 -0
- package/typechain-types/IThenaSY.ts +81 -0
- package/typechain-types/IWBETH.ts +128 -0
- package/typechain-types/PendleAnkrBNBSY.ts +1235 -0
- package/typechain-types/PendleAuraWstethAnkreth.ts +1511 -0
- package/typechain-types/PendleGauge.ts +23 -3
- package/typechain-types/PendleMarket.ts +18 -0
- package/typechain-types/PendleThenaSY.ts +1598 -0
- package/typechain-types/PendleWbEthSY.ts +1229 -0
- package/typechain-types/SwETHSY.ts +1216 -0
- package/typechain-types/ThenaLpHelper.ts +191 -0
- package/typechain-types/ThenaMath.ts +87 -0
- package/typechain-types/ThenaPreview.ts +450 -0
- package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +1 -1
- package/typechain-types/factories/ActionInfoStatic__factory.ts +1 -1
- package/typechain-types/factories/ActionMarketAuxStatic__factory.ts +1 -1
- package/typechain-types/factories/ActionMarketCoreStatic__factory.ts +1 -1
- package/typechain-types/factories/ActionMintRedeemStatic__factory.ts +1 -1
- package/typechain-types/factories/ActionMintRedeem__factory.ts +1 -1
- package/typechain-types/factories/ActionStorageStatic__factory.ts +1 -1
- package/typechain-types/factories/ActionSwapPT__factory.ts +1 -1
- package/typechain-types/factories/ActionSwapYT__factory.ts +1 -1
- package/typechain-types/factories/ActionVePendleStatic__factory.ts +1 -1
- package/typechain-types/factories/Broadcaster__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/CamelotRewardHelper__factory.ts +1 -1
- package/typechain-types/factories/CamelotV1VolatilePreview__factory.ts +1 -1
- package/typechain-types/factories/IAnkrBNB__factory.ts +74 -0
- package/typechain-types/factories/IAnkrLiquidStaking__factory.ts +123 -0
- package/typechain-types/factories/ICamelotNFTPool__factory.ts +13 -0
- package/typechain-types/factories/ICamelotNitroPool__factory.ts +13 -0
- package/typechain-types/factories/ICamelotPair__factory.ts +26 -0
- package/typechain-types/factories/IExecutorHelper__factory.ts +74 -116
- package/typechain-types/factories/IPGauge__factory.ts +19 -0
- package/typechain-types/factories/IPMarket__factory.ts +19 -0
- package/typechain-types/factories/IPendlePreviewHelper__factory.ts +78 -0
- package/typechain-types/factories/ISwETH__factory.ts +53 -0
- package/typechain-types/factories/IThenaFactory__factory.ts +164 -0
- package/typechain-types/factories/IThenaGaugeV2__factory.ts +83 -0
- package/typechain-types/factories/IThenaPair__factory.ts +421 -0
- package/typechain-types/factories/IThenaRouter__factory.ts +200 -0
- package/typechain-types/factories/IThenaSY__factory.ts +36 -0
- package/typechain-types/factories/IWBETH__factory.ts +51 -0
- package/typechain-types/factories/PendleAnkrBNBSY__factory.ts +1100 -0
- package/typechain-types/factories/PendleArbitrumStakedEthSY__factory.ts +1 -1
- package/typechain-types/factories/PendleAuraBbAWethSwethSY__factory.ts +1 -1
- package/typechain-types/factories/PendleAuraWethAnkrethSYV2__factory.ts +1 -1
- package/typechain-types/factories/PendleAuraWethRocketEthSYV2__factory.ts +1 -1
- package/typechain-types/factories/PendleAuraWethStafiEthSY__factory.ts +1 -1
- package/typechain-types/factories/PendleAuraWethWstethSYV2__factory.ts +1 -1
- package/typechain-types/factories/PendleAuraWstethAnkreth__factory.ts +1244 -0
- package/typechain-types/factories/PendleCamelotV1VolatileSY__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/PendleGDaiSY__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/PendleGauge__factory.ts +19 -0
- package/typechain-types/factories/PendleGlpSY__factory.ts +1 -1
- package/typechain-types/factories/PendleLooksStakingSY__factory.ts +1 -1
- package/typechain-types/factories/PendleLpGlpOracle__factory.ts +1 -1
- package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
- package/typechain-types/factories/PendleMarket__factory.ts +20 -1
- package/typechain-types/factories/PendleMsgReceiveEndpointUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleMsgSendEndpointUpg__factory.ts +1 -1
- package/typechain-types/factories/PendlePtGlpOracle__factory.ts +1 -1
- package/typechain-types/factories/PendlePtOracle__factory.ts +1 -1
- package/typechain-types/factories/PendlePtUsdChainlinkOracle__factory.ts +1 -1
- package/typechain-types/factories/PendleQiTokenSY__factory.ts +1 -1
- package/typechain-types/factories/PendleRouterHelper__factory.ts +1 -1
- package/typechain-types/factories/PendleRouterStatic__factory.ts +1 -1
- package/typechain-types/factories/PendleRouter__factory.ts +1 -1
- package/typechain-types/factories/PendleSfrxEthSY__factory.ts +1 -1
- package/typechain-types/factories/PendleStargateLPSY__factory.ts +1 -1
- package/typechain-types/factories/PendleSwap__factory.ts +17 -1
- package/typechain-types/factories/PendleThenaSY__factory.ts +1352 -0
- package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleWbEthSY__factory.ts +1049 -0
- 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 +1 -1
- package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
- package/typechain-types/factories/PtAndLpToAsset__factory.ts +1 -1
- package/typechain-types/factories/SAPE__factory.ts +1 -1
- package/typechain-types/factories/SwETHSY__factory.ts +1022 -0
- package/typechain-types/factories/ThenaLpHelper__factory.ts +140 -0
- package/typechain-types/factories/ThenaMath__factory.ts +36 -0
- package/typechain-types/factories/ThenaPreview__factory.ts +319 -0
- package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +1 -1
- package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +1 -1
- package/typechain-types/hardhat.d.ts +162 -99
- package/typechain-types/index.ts +38 -12
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/IHashflow.sol/IHashflow.dbg.json +0 -4
- package/build/artifacts/contracts/router/swap-aggregator/kyberswap/IHashflow.sol/IHashflow.json +0 -101
- package/contracts/router/swap-aggregator/kyberswap/IHashflow.sol +0 -30
- /package/deployments/1-markets/{APE-JUNE-29.json → deprecated/APE-JUNE-29.json} +0 -0
- /package/deployments/1-markets/{STETH-JUNE29.json → deprecated/STETH-JUNE29.json} +0 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.17;
|
|
4
|
+
|
|
5
|
+
import "../../../libraries/math/Math.sol";
|
|
6
|
+
import "../../../../interfaces/Thena/IThenaPair.sol";
|
|
7
|
+
|
|
8
|
+
abstract contract ThenaMath {
|
|
9
|
+
using Math for uint256;
|
|
10
|
+
|
|
11
|
+
struct ThenaData {
|
|
12
|
+
address pair;
|
|
13
|
+
bool isStable;
|
|
14
|
+
uint256 reserve0;
|
|
15
|
+
uint256 reserve1;
|
|
16
|
+
uint256 fee;
|
|
17
|
+
uint256 decimals0;
|
|
18
|
+
uint256 decimals1;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
struct StableBinarySearchParams {
|
|
22
|
+
uint256 guessMin;
|
|
23
|
+
uint256 guessMax;
|
|
24
|
+
uint256 amountSwapIn;
|
|
25
|
+
uint256 newReserve0;
|
|
26
|
+
uint256 newReserve1;
|
|
27
|
+
uint256 amount0ToAddLiq;
|
|
28
|
+
uint256 amount1ToAddLiq;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
uint256 internal constant FEE_DENOMINATOR = 10000;
|
|
32
|
+
uint256 internal constant ONE = 1 * FEE_DENOMINATOR;
|
|
33
|
+
uint256 internal constant TWO = 2 * FEE_DENOMINATOR;
|
|
34
|
+
uint256 internal constant FOUR = 4 * FEE_DENOMINATOR;
|
|
35
|
+
uint256 internal constant DEFAULT_BINARY_SEARCH_EPS = 1e14; // 0.01% accuracy
|
|
36
|
+
|
|
37
|
+
uint256 public binarySearchEps = DEFAULT_BINARY_SEARCH_EPS;
|
|
38
|
+
|
|
39
|
+
function _getZapInSwapAmount(
|
|
40
|
+
ThenaData memory data,
|
|
41
|
+
address tokenIn,
|
|
42
|
+
uint256 amountIn
|
|
43
|
+
) internal view returns (uint256) {
|
|
44
|
+
return
|
|
45
|
+
data.isStable
|
|
46
|
+
? _getStableZapAmount(data, tokenIn, amountIn)
|
|
47
|
+
: _getVolatileZapAmount(data, amountIn);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function _getVolatileZapAmount(
|
|
51
|
+
ThenaData memory data,
|
|
52
|
+
uint256 amountIn
|
|
53
|
+
) private pure returns (uint256) {
|
|
54
|
+
|
|
55
|
+
uint256 numer0 = (TWO - FEE_DENOMINATOR) * data.reserve0 / FEE_DENOMINATOR;
|
|
56
|
+
uint256 numer1 = Math.square(numer0);
|
|
57
|
+
uint256 numer2 = 4 * Math.square(ONE - data.fee) * amountIn * data.reserve0;
|
|
58
|
+
|
|
59
|
+
uint256 numer = Math.sqrt(numer1 + numer2) - numer0;
|
|
60
|
+
uint256 denom = 2 * Math.square(ONE - data.fee);
|
|
61
|
+
|
|
62
|
+
return numer * FEE_DENOMINATOR / denom;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function _getStableZapAmount(
|
|
66
|
+
ThenaData memory data,
|
|
67
|
+
address tokenIn,
|
|
68
|
+
uint256 amountIn
|
|
69
|
+
) private view returns (uint256) {
|
|
70
|
+
StableBinarySearchParams memory params = _prepareStableBinarySearchParams(amountIn, data);
|
|
71
|
+
|
|
72
|
+
while (!Math.isAApproxB(params.guessMin, params.guessMax, binarySearchEps)) {
|
|
73
|
+
params.amountSwapIn = (params.guessMax + params.guessMin) / 2;
|
|
74
|
+
params.amount1ToAddLiq = IThenaPair(data.pair).getAmountOut(
|
|
75
|
+
params.amountSwapIn,
|
|
76
|
+
tokenIn
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
params.newReserve0 = _getReserveAfterSwap(
|
|
80
|
+
params.amountSwapIn,
|
|
81
|
+
data.reserve0,
|
|
82
|
+
data.fee
|
|
83
|
+
);
|
|
84
|
+
params.newReserve1 = data.reserve1 - params.amount1ToAddLiq;
|
|
85
|
+
params.amount0ToAddLiq = amountIn - params.amountSwapIn;
|
|
86
|
+
|
|
87
|
+
if (
|
|
88
|
+
params.amount0ToAddLiq * params.newReserve1 <
|
|
89
|
+
params.amount1ToAddLiq * params.newReserve0
|
|
90
|
+
) {
|
|
91
|
+
params.guessMax = params.amountSwapIn - 1; // need swap less
|
|
92
|
+
} else {
|
|
93
|
+
params.guessMin = params.amountSwapIn + 1; // swap more
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return params.guessMin;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function _prepareStableBinarySearchParams(
|
|
100
|
+
uint256 amountIn,
|
|
101
|
+
ThenaData memory data
|
|
102
|
+
) private pure returns (StableBinarySearchParams memory params) {
|
|
103
|
+
uint256 X = data.reserve0.divDown(data.decimals0);
|
|
104
|
+
uint256 Y = data.reserve1.divDown(data.decimals1);
|
|
105
|
+
amountIn = amountIn.divDown(data.decimals0);
|
|
106
|
+
|
|
107
|
+
uint256 t = Y.divDown(X + amountIn);
|
|
108
|
+
uint256 K = X.mulDown(Y).mulDown(X.mulDown(X) + Y.mulDown(Y));
|
|
109
|
+
uint256 denom = t.mulDown(t).mulDown(t) + t;
|
|
110
|
+
|
|
111
|
+
params.guessMin = (_fourthRoot(K.divDown(denom)) - X).mulDown(data.decimals0);
|
|
112
|
+
params.guessMax = (params.guessMin * FEE_DENOMINATOR) / (FEE_DENOMINATOR - data.fee);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function _getReserveAfterSwap(
|
|
116
|
+
uint256 amountIn,
|
|
117
|
+
uint256 reserve,
|
|
118
|
+
uint256 fee
|
|
119
|
+
) internal pure returns (uint256) {
|
|
120
|
+
return reserve + amountIn - (amountIn * fee) / FEE_DENOMINATOR;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// this returns the fourthRoot of y in base 18
|
|
124
|
+
function _fourthRoot(uint256 y) private pure returns (uint256) {
|
|
125
|
+
uint256 root = Math.sqrt(y) * (10 ** 9);
|
|
126
|
+
return Math.sqrt(root) * (10 ** 9);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.17;
|
|
4
|
+
|
|
5
|
+
import "./ThenaMath.sol";
|
|
6
|
+
|
|
7
|
+
import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
|
|
8
|
+
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
|
9
|
+
import "../../../libraries/BoringOwnableUpgradeable.sol";
|
|
10
|
+
import "../../../../interfaces/IPendlePreviewHelper.sol";
|
|
11
|
+
import "../../../../interfaces/Thena/IThenaFactory.sol";
|
|
12
|
+
|
|
13
|
+
interface IThenaSY {
|
|
14
|
+
function pair() external view returns (address);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
contract ThenaPreview is
|
|
18
|
+
IPendlePreviewHelper,
|
|
19
|
+
ThenaMath,
|
|
20
|
+
BoringOwnableUpgradeable,
|
|
21
|
+
UUPSUpgradeable
|
|
22
|
+
{
|
|
23
|
+
using Math for uint256;
|
|
24
|
+
|
|
25
|
+
address internal immutable factory;
|
|
26
|
+
|
|
27
|
+
constructor(address _factory) initializer {
|
|
28
|
+
factory = _factory;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function initialize() external initializer {
|
|
32
|
+
__BoringOwnable_init();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// solhint-disable-next-line
|
|
36
|
+
function _authorizeUpgrade(address newImplementation) internal override onlyOwner {}
|
|
37
|
+
|
|
38
|
+
function previewDeposit(
|
|
39
|
+
address tokenIn,
|
|
40
|
+
uint256 amountTokenIn
|
|
41
|
+
) external view returns (uint256 amountLpOut) {
|
|
42
|
+
address pair = IThenaSY(msg.sender).pair();
|
|
43
|
+
|
|
44
|
+
ThenaData memory data = _getNormalizedPairData(pair, tokenIn);
|
|
45
|
+
|
|
46
|
+
uint256 amountToSwap = _getZapInSwapAmount(data, tokenIn, amountTokenIn);
|
|
47
|
+
uint256 amountSwapOut = _getSwapAmountOut(data, amountToSwap);
|
|
48
|
+
|
|
49
|
+
uint256 amount0ToAddLiq;
|
|
50
|
+
uint256 amount1ToAddLiq;
|
|
51
|
+
|
|
52
|
+
data.reserve0 = _getReserveAfterSwap(amountToSwap, data.reserve0, data.fee); // no need getBalance here since we dont need 100% accuracy
|
|
53
|
+
data.reserve1 -= amountSwapOut;
|
|
54
|
+
|
|
55
|
+
amount0ToAddLiq = amountTokenIn - amountToSwap;
|
|
56
|
+
amount1ToAddLiq = amountSwapOut;
|
|
57
|
+
|
|
58
|
+
return _calcAmountLpOut(data, amount0ToAddLiq, amount1ToAddLiq);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function previewRedeem(address tokenOut, uint256 amountLpIn) external view returns (uint256) {
|
|
62
|
+
address pair = IThenaSY(msg.sender).pair();
|
|
63
|
+
|
|
64
|
+
// Token1 = tokenOut
|
|
65
|
+
address token0 = IThenaPair(pair).token0();
|
|
66
|
+
address token1 = IThenaPair(pair).token1();
|
|
67
|
+
|
|
68
|
+
ThenaData memory data = _getNormalizedPairData(pair, tokenOut == token0 ? token1 : token0);
|
|
69
|
+
|
|
70
|
+
uint256 totalSupply = IThenaPair(data.pair).totalSupply();
|
|
71
|
+
|
|
72
|
+
uint256 amount0Removed = (data.reserve0 * amountLpIn) / totalSupply;
|
|
73
|
+
uint256 amount1Removed = (data.reserve1 * amountLpIn) / totalSupply;
|
|
74
|
+
|
|
75
|
+
data.reserve0 -= amount0Removed;
|
|
76
|
+
data.reserve1 -= amount1Removed;
|
|
77
|
+
|
|
78
|
+
return amount1Removed + _getSwapAmountOut(data, amount0Removed);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// @reference: Camelot
|
|
82
|
+
function _getSwapAmountOut(
|
|
83
|
+
ThenaData memory data,
|
|
84
|
+
uint256 amountIn
|
|
85
|
+
) internal pure returns (uint256) {
|
|
86
|
+
if (!data.isStable) {
|
|
87
|
+
amountIn = amountIn * (FEE_DENOMINATOR - data.fee);
|
|
88
|
+
return (amountIn * data.reserve1) / (data.reserve0 * FEE_DENOMINATOR + amountIn);
|
|
89
|
+
} else {
|
|
90
|
+
amountIn = (amountIn - (amountIn * data.fee) / FEE_DENOMINATOR).divDown(
|
|
91
|
+
data.decimals0
|
|
92
|
+
);
|
|
93
|
+
uint256 reserveA = data.reserve0.divDown(data.decimals0);
|
|
94
|
+
uint256 reserveB = data.reserve1.divDown(data.decimals1);
|
|
95
|
+
uint256 xy = reserveA.mulDown(reserveB).mulDown(
|
|
96
|
+
reserveA.squareDown() + reserveB.squareDown()
|
|
97
|
+
);
|
|
98
|
+
uint256 y = reserveB - _get_y(amountIn + reserveA, xy, reserveB);
|
|
99
|
+
return y.mulDown(data.decimals1);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @notice This function simulates Camelot router so any precision issues from their calculation
|
|
105
|
+
* is preserved in preview functions...
|
|
106
|
+
*/
|
|
107
|
+
function _calcAmountLpOut(
|
|
108
|
+
ThenaData memory data,
|
|
109
|
+
uint256 amount0ToAddLiq,
|
|
110
|
+
uint256 amount1ToAddLiq
|
|
111
|
+
) private view returns (uint256 amountLpOut) {
|
|
112
|
+
uint256 amount1Optimal = _quote(amount0ToAddLiq, data.reserve0, data.reserve1);
|
|
113
|
+
if (amount1Optimal <= amount1ToAddLiq) {
|
|
114
|
+
amount1ToAddLiq = amount1Optimal;
|
|
115
|
+
} else {
|
|
116
|
+
amount0ToAddLiq = _quote(amount1ToAddLiq, data.reserve1, data.reserve0);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
uint256 supply = IThenaPair(data.pair).totalSupply();
|
|
120
|
+
return
|
|
121
|
+
Math.min(
|
|
122
|
+
(amount0ToAddLiq * supply) / data.reserve0,
|
|
123
|
+
(amount1ToAddLiq * supply) / data.reserve1
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function _quote(
|
|
128
|
+
uint256 amountA,
|
|
129
|
+
uint256 reserveA,
|
|
130
|
+
uint256 reserveB
|
|
131
|
+
) private pure returns (uint256 amountB) {
|
|
132
|
+
amountB = (amountA * reserveB) / reserveA;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function _getNormalizedPairData(
|
|
136
|
+
address pair,
|
|
137
|
+
address pivotToken
|
|
138
|
+
) internal view returns (ThenaData memory data) {
|
|
139
|
+
data.pair = pair;
|
|
140
|
+
data.isStable = IThenaPair(pair).isStable();
|
|
141
|
+
data.fee = IThenaFactory(factory).getFee(data.isStable);
|
|
142
|
+
(data.reserve0, data.reserve1, ) = IThenaPair(pair).getReserves();
|
|
143
|
+
|
|
144
|
+
if (data.isStable) {
|
|
145
|
+
// if not stable, skip readding these datas
|
|
146
|
+
data.decimals0 = 10 ** IERC20Metadata(IThenaPair(pair).token0()).decimals();
|
|
147
|
+
data.decimals1 = 10 ** IERC20Metadata(IThenaPair(pair).token1()).decimals();
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Normalize token order
|
|
151
|
+
if (pivotToken == IThenaPair(pair).token1()) {
|
|
152
|
+
(data.reserve0, data.reserve1) = (data.reserve1, data.reserve0);
|
|
153
|
+
(data.decimals0, data.decimals1) = (data.decimals1, data.decimals0);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Camelot copied math functions
|
|
158
|
+
function _get_y(uint256 x0, uint256 xy, uint256 y) internal pure returns (uint256) {
|
|
159
|
+
for (uint256 i = 0; i < 255; i++) {
|
|
160
|
+
uint256 y_prev = y;
|
|
161
|
+
uint256 k = _f(x0, y);
|
|
162
|
+
if (k < xy) {
|
|
163
|
+
uint256 dy = ((xy - k) * 1e18) / _d(x0, y);
|
|
164
|
+
y = y + dy;
|
|
165
|
+
} else {
|
|
166
|
+
uint256 dy = ((k - xy) * 1e18) / _d(x0, y);
|
|
167
|
+
y = y - dy;
|
|
168
|
+
}
|
|
169
|
+
if (y > y_prev) {
|
|
170
|
+
if (y - y_prev <= 1) {
|
|
171
|
+
return y;
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
if (y_prev - y <= 1) {
|
|
175
|
+
return y;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return y;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function _f(uint256 x0, uint256 y) internal pure returns (uint256) {
|
|
183
|
+
return
|
|
184
|
+
(x0 * ((((y * y) / 1e18) * y) / 1e18)) /
|
|
185
|
+
1e18 +
|
|
186
|
+
(((((x0 * x0) / 1e18) * x0) / 1e18) * y) /
|
|
187
|
+
1e18;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function _d(uint256 x0, uint256 y) internal pure returns (uint256) {
|
|
191
|
+
return (3 * x0 * ((y * y) / 1e18)) / 1e18 + ((((x0 * x0) / 1e18) * x0) / 1e18);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.17;
|
|
4
|
+
|
|
5
|
+
interface IAnkrBNB {
|
|
6
|
+
function ratio() external view returns (uint256);
|
|
7
|
+
|
|
8
|
+
function bondsToShares(uint256 amount) external view returns (uint256);
|
|
9
|
+
|
|
10
|
+
function sharesToBonds(uint256 amount) external view returns (uint256);
|
|
11
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.17;
|
|
4
|
+
|
|
5
|
+
interface IAnkrLiquidStaking {
|
|
6
|
+
function swap(uint256 shares, address receiverAddress) external;
|
|
7
|
+
|
|
8
|
+
function stakeBonds() external payable;
|
|
9
|
+
|
|
10
|
+
function stakeCerts() external payable;
|
|
11
|
+
|
|
12
|
+
function getFreeBalance() external view returns (uint256);
|
|
13
|
+
|
|
14
|
+
function getMinStake() external view returns (uint256);
|
|
15
|
+
|
|
16
|
+
function getMinUnstake() external view returns (uint256);
|
|
17
|
+
|
|
18
|
+
function flashPoolCapacity() external view returns (uint256);
|
|
19
|
+
|
|
20
|
+
function getFlashUnstakeFee() external view returns (uint256);
|
|
21
|
+
}
|
|
@@ -18,6 +18,7 @@ interface ICamelotNitroPool is IERC721 {
|
|
|
18
18
|
|
|
19
19
|
function nftPool() external view returns (address);
|
|
20
20
|
|
|
21
|
+
|
|
21
22
|
function harvest() external;
|
|
22
23
|
|
|
23
24
|
function rewardsToken1() external view returns (RewardsToken calldata);
|
|
@@ -25,4 +26,6 @@ interface ICamelotNitroPool is IERC721 {
|
|
|
25
26
|
function rewardsToken2() external view returns (RewardsToken calldata);
|
|
26
27
|
|
|
27
28
|
function emergencyWithdraw(uint256 tokenId) external;
|
|
29
|
+
|
|
30
|
+
function emergencyClose() external view returns (bool);
|
|
28
31
|
}
|
|
@@ -56,6 +56,10 @@ interface ICamelotPair {
|
|
|
56
56
|
);
|
|
57
57
|
event Sync(uint112 reserve0, uint112 reserve1);
|
|
58
58
|
|
|
59
|
+
function precisionMultiplier0() external pure returns (uint256);
|
|
60
|
+
|
|
61
|
+
function precisionMultiplier1() external pure returns (uint256);
|
|
62
|
+
|
|
59
63
|
function MINIMUM_LIQUIDITY() external pure returns (uint256);
|
|
60
64
|
|
|
61
65
|
function factory() external view returns (address);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.17;
|
|
3
|
+
|
|
4
|
+
interface IPendlePreviewHelper {
|
|
5
|
+
function previewDeposit(
|
|
6
|
+
address tokenIn,
|
|
7
|
+
uint256 amountTokenIn
|
|
8
|
+
) external view returns (uint256 amountSharesOut);
|
|
9
|
+
|
|
10
|
+
function previewRedeem(
|
|
11
|
+
address tokenOut,
|
|
12
|
+
uint256 amountSharesToBurn
|
|
13
|
+
) external view returns (uint256 amountTokenOut);
|
|
14
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.17;
|
|
4
|
+
|
|
5
|
+
interface IThenaFactory {
|
|
6
|
+
function allPairsLength() external view returns (uint);
|
|
7
|
+
|
|
8
|
+
function isPair(address pair) external view returns (bool);
|
|
9
|
+
|
|
10
|
+
function allPairs(uint index) external view returns (address);
|
|
11
|
+
|
|
12
|
+
function pairCodeHash() external pure returns (bytes32);
|
|
13
|
+
|
|
14
|
+
function getPair(address tokenA, address token, bool stable) external view returns (address);
|
|
15
|
+
|
|
16
|
+
function createPair(
|
|
17
|
+
address tokenA,
|
|
18
|
+
address tokenB,
|
|
19
|
+
bool stable
|
|
20
|
+
) external returns (address pair);
|
|
21
|
+
|
|
22
|
+
function getFee(bool _stable) external view returns (uint256);
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.17;
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
interface IThenaGaugeV2 {
|
|
7
|
+
function emergency() external returns (bool);
|
|
8
|
+
|
|
9
|
+
function depositAll() external;
|
|
10
|
+
|
|
11
|
+
function withdrawAll() external;
|
|
12
|
+
|
|
13
|
+
function emergencyWithdraw() external;
|
|
14
|
+
|
|
15
|
+
function getReward() external;
|
|
16
|
+
|
|
17
|
+
function balanceOf(address account) external view returns (uint256);
|
|
18
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.17;
|
|
4
|
+
|
|
5
|
+
interface IThenaPair {
|
|
6
|
+
function metadata() external view returns (uint dec0, uint dec1, uint r0, uint r1, bool st, address t0, address t1);
|
|
7
|
+
function claimFees() external returns (uint, uint);
|
|
8
|
+
function tokens() external view returns (address, address);
|
|
9
|
+
function token0() external view returns (address);
|
|
10
|
+
function token1() external view returns (address);
|
|
11
|
+
function transferFrom(address src, address dst, uint amount) external returns (bool);
|
|
12
|
+
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
|
|
13
|
+
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
|
|
14
|
+
function burn(address to) external returns (uint amount0, uint amount1);
|
|
15
|
+
function mint(address to) external returns (uint liquidity);
|
|
16
|
+
function getReserves() external view returns (uint _reserve0, uint _reserve1, uint _blockTimestampLast);
|
|
17
|
+
function getAmountOut(uint, address) external view returns (uint);
|
|
18
|
+
|
|
19
|
+
function name() external view returns(string memory);
|
|
20
|
+
function symbol() external view returns(string memory);
|
|
21
|
+
function totalSupply() external view returns (uint);
|
|
22
|
+
function decimals() external view returns (uint8);
|
|
23
|
+
|
|
24
|
+
function claimable0(address _user) external view returns (uint);
|
|
25
|
+
function claimable1(address _user) external view returns (uint);
|
|
26
|
+
|
|
27
|
+
function isStable() external view returns(bool);
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.17;
|
|
4
|
+
|
|
5
|
+
interface IThenaRouter {
|
|
6
|
+
function swapExactTokensForTokensSimple(
|
|
7
|
+
uint amountIn,
|
|
8
|
+
uint amountOutMin,
|
|
9
|
+
address tokenFrom,
|
|
10
|
+
address tokenTo,
|
|
11
|
+
bool stable,
|
|
12
|
+
address to,
|
|
13
|
+
uint deadline
|
|
14
|
+
) external returns (uint[] memory amounts);
|
|
15
|
+
|
|
16
|
+
function addLiquidity(
|
|
17
|
+
address tokenA,
|
|
18
|
+
address tokenB,
|
|
19
|
+
bool stable,
|
|
20
|
+
uint amountADesired,
|
|
21
|
+
uint amountBDesired,
|
|
22
|
+
uint amountAMin,
|
|
23
|
+
uint amountBMin,
|
|
24
|
+
address to,
|
|
25
|
+
uint deadline
|
|
26
|
+
) external returns (uint amountA, uint amountB, uint liquidity);
|
|
27
|
+
|
|
28
|
+
function removeLiquidity(
|
|
29
|
+
address tokenA,
|
|
30
|
+
address tokenB,
|
|
31
|
+
bool stable,
|
|
32
|
+
uint liquidity,
|
|
33
|
+
uint amountAMin,
|
|
34
|
+
uint amountBMin,
|
|
35
|
+
address to,
|
|
36
|
+
uint deadline
|
|
37
|
+
) external returns (uint amountA, uint amountB);
|
|
38
|
+
}
|
|
@@ -3,34 +3,42 @@ pragma solidity 0.8.17;
|
|
|
3
3
|
|
|
4
4
|
import "./PendlePtOracleLib.sol";
|
|
5
5
|
|
|
6
|
-
// Reference: https://file.notion.so/f/s/15d1406b-0d81-41a4-8ac3-9b56e30fdf50/LP_Oracle_Doc.pdf?id=201fc56f-959b-4836-9511-73852e166816&table=block&spaceId=33abd05a-56a2-4ce6-8673-929c5984a0fd&expirationTimestamp=1683863581610&signature=IY3jlxvXkWRJZhsccYpQdQaKlm1_NUIb1ypDmuaR7hI&downloadName=LP_Oracle_Doc.pdf
|
|
7
|
-
|
|
8
6
|
library PendleLpOracleLib {
|
|
9
7
|
using PendlePtOracleLib for IPMarket;
|
|
10
|
-
using PYIndexLib for PYIndex;
|
|
11
8
|
using Math for uint256;
|
|
12
9
|
using Math for int256;
|
|
13
10
|
using MarketMathCore for MarketState;
|
|
14
11
|
|
|
15
12
|
/**
|
|
16
|
-
|
|
13
|
+
* This function returns the approximated twap rate LP/asset on market, but take into account the current rate of SY
|
|
14
|
+
This is to account for special cases where underlying asset becomes insolvent and has decreasing exchangeRate
|
|
17
15
|
* @param market market to get rate from
|
|
18
16
|
* @param duration twap duration
|
|
19
|
-
*
|
|
20
17
|
*/
|
|
21
|
-
function getLpToAssetRate(
|
|
18
|
+
function getLpToAssetRate(IPMarket market, uint32 duration) internal view returns (uint256) {
|
|
19
|
+
(uint256 syIndex, uint256 pyIndex) = PendlePtOracleLib.getSYandPYIndexCurrent(market);
|
|
20
|
+
uint256 lpToAssetRateRaw = _getLpToAssetRateRaw(market, duration, pyIndex);
|
|
21
|
+
return (lpToAssetRateRaw * syIndex) / pyIndex;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function _getLpToAssetRateRaw(
|
|
22
25
|
IPMarket market,
|
|
23
|
-
uint32 duration
|
|
24
|
-
|
|
26
|
+
uint32 duration,
|
|
27
|
+
uint256 pyIndex
|
|
28
|
+
) private view returns (uint256 lpToAssetRateRaw) {
|
|
25
29
|
MarketState memory state = market.readState(address(0));
|
|
26
|
-
|
|
30
|
+
|
|
31
|
+
MarketPreCompute memory comp = state.getMarketPreCompute(
|
|
32
|
+
PYIndex.wrap(pyIndex),
|
|
33
|
+
block.timestamp
|
|
34
|
+
);
|
|
27
35
|
|
|
28
36
|
int256 totalHypotheticalAsset;
|
|
29
37
|
if (state.expiry <= block.timestamp) {
|
|
30
38
|
// 1 PT = 1 Asset post-expiry
|
|
31
39
|
totalHypotheticalAsset = state.totalPt + comp.totalAsset;
|
|
32
40
|
} else {
|
|
33
|
-
(int256 rateOracle, int256 rateHypTrade) =
|
|
41
|
+
(int256 rateOracle, int256 rateHypTrade) = _getPtRatesRaw(market, state, duration);
|
|
34
42
|
int256 cParam = LogExpMath.exp(
|
|
35
43
|
comp.rateScalar.mulDown((rateOracle - comp.rateAnchor))
|
|
36
44
|
);
|
|
@@ -45,46 +53,19 @@ library PendleLpOracleLib {
|
|
|
45
53
|
(state.totalPt + tradeSize).divDown(rateOracle);
|
|
46
54
|
}
|
|
47
55
|
|
|
48
|
-
|
|
56
|
+
lpToAssetRateRaw = totalHypotheticalAsset.divDown(state.totalLp).Uint();
|
|
49
57
|
}
|
|
50
58
|
|
|
51
|
-
function
|
|
52
|
-
IPMarket market,
|
|
53
|
-
MarketState memory state
|
|
54
|
-
) private view returns (MarketPreCompute memory) {
|
|
55
|
-
return state.getMarketPreCompute(_getPYIndexCurrent(market), block.timestamp);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function _getPYIndexCurrent(IPMarket market) private view returns (PYIndex) {
|
|
59
|
-
(IStandardizedYield SY, , IPYieldToken YT) = market.readTokens();
|
|
60
|
-
uint256 ytIndex = YT.pyIndexStored();
|
|
61
|
-
uint256 pyIndexCurrent;
|
|
62
|
-
if (YT.doCacheIndexSameBlock() && YT.pyIndexLastUpdatedBlock() == block.number) {
|
|
63
|
-
pyIndexCurrent = ytIndex;
|
|
64
|
-
} else {
|
|
65
|
-
uint256 syIndex = SY.exchangeRate();
|
|
66
|
-
pyIndexCurrent = Math.max(syIndex, ytIndex);
|
|
67
|
-
}
|
|
68
|
-
return PYIndex.wrap(pyIndexCurrent);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function _getPtRates(
|
|
59
|
+
function _getPtRatesRaw(
|
|
72
60
|
IPMarket market,
|
|
73
61
|
MarketState memory state,
|
|
74
62
|
uint32 duration
|
|
75
63
|
) private view returns (int256 rateOracle, int256 rateHypTrade) {
|
|
76
|
-
rateOracle = Math.IONE.divDown(market.
|
|
64
|
+
rateOracle = Math.IONE.divDown(market.getPtToAssetRateRaw(duration).Int());
|
|
77
65
|
int256 rateLastTrade = MarketMathCore._getExchangeRateFromImpliedRate(
|
|
78
66
|
state.lastLnImpliedRate,
|
|
79
67
|
state.expiry - block.timestamp
|
|
80
68
|
);
|
|
81
69
|
rateHypTrade = (rateLastTrade + rateOracle) / 2;
|
|
82
70
|
}
|
|
83
|
-
|
|
84
|
-
function _calcLpPrice(
|
|
85
|
-
int256 totalHypotheticalAsset,
|
|
86
|
-
int256 totalLp
|
|
87
|
-
) private pure returns (int256) {
|
|
88
|
-
return totalHypotheticalAsset.divDown(totalLp);
|
|
89
|
-
}
|
|
90
71
|
}
|