@pendle/core-v2 3.0.0-beta-11 → 3.0.0-beta-12
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/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol +5 -23
- package/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol +2 -5
- package/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol +6 -20
- package/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol +6 -27
- package/contracts/LiquidityMining/CrossChainMsg/libraries/ExcessivelySafeCall.sol +1 -2
- package/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol +1 -1
- package/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +16 -17
- package/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol +6 -7
- package/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol +7 -8
- package/contracts/LiquidityMining/PendleMerkleDistributor.sol +2 -11
- package/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol +14 -37
- package/contracts/LiquidityMining/VeDistributor/PendleFeeDistributorV2.sol +19 -34
- package/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +4 -14
- package/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +4 -16
- package/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +11 -39
- package/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +3 -10
- package/contracts/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +1 -1
- package/contracts/LiquidityMining/libraries/VeBalanceLib.sol +5 -20
- package/contracts/LiquidityMining/libraries/VeHistoryLib.sol +1 -3
- package/contracts/core/Market/MarketMathCore.sol +12 -37
- package/contracts/core/Market/OracleLib.sol +6 -24
- package/contracts/core/Market/PendleExternalRewardDistributor.sol +4 -10
- package/contracts/core/Market/PendleGauge.sol +3 -9
- package/contracts/core/Market/PendleMarket.sol +14 -39
- package/contracts/core/Market/PendleMarketFactory.sol +14 -21
- package/contracts/core/Market/v2/PendleGaugeV2.sol +8 -24
- package/contracts/core/Market/v2/PendleMarketFactoryV2.sol +7 -27
- package/contracts/core/Market/v2/PendleMarketV2.sol +13 -36
- package/contracts/core/Market/v3/PendleMarketFactoryV3.sol +137 -0
- package/contracts/core/Market/v3/PendleMarketV3.sol +360 -0
- package/contracts/core/RewardManager/PendleLinearDistributor.sol +143 -0
- package/contracts/core/RewardManager/RewardManager.sol +14 -7
- package/contracts/core/RewardManager/RewardManagerAbstract.sol +5 -17
- package/contracts/core/StandardizedYield/SYBase.sol +10 -40
- package/contracts/core/StandardizedYield/SYBaseUpg.sol +197 -0
- package/contracts/core/StandardizedYield/SYBaseWithRewards.sol +9 -41
- package/contracts/core/StandardizedYield/SYBaseWithRewardsUpg.sol +88 -0
- package/contracts/core/StandardizedYield/SYUtils.sol +1 -4
- package/contracts/core/StandardizedYield/StEthHelper.sol +3 -9
- package/contracts/core/StandardizedYield/implementations/AaveV3/PendleAaveV3SY.sol +94 -0
- package/contracts/core/StandardizedYield/implementations/AaveV3/libraries/AaveAdapterLib.sol +19 -0
- package/contracts/core/StandardizedYield/implementations/AaveV3/libraries/WadRayMath.sol +126 -0
- package/contracts/core/StandardizedYield/implementations/Ankr/PendleAnkrBNBSY.sol +4 -12
- package/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol +5 -19
- package/contracts/core/StandardizedYield/implementations/BalancerStable/AuraEthxBbAWethSY.sol +4 -14
- package/contracts/core/StandardizedYield/implementations/BalancerStable/AuraSwEthBbAWethSYV2.sol +4 -14
- package/contracts/core/StandardizedYield/implementations/BalancerStable/{PendleAuraWethVethSY.sol → AuraWethVethSYUpg.sol} +13 -20
- package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraBbAWethSwethSY.sol +3 -7
- package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethAnkrethSYV2.sol +12 -29
- package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRocketEthSYV2.sol +12 -29
- package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethStafiEthSY.sol +12 -29
- package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSYV2.sol +14 -39
- package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWstethAnkreth.sol +7 -28
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStableMath.sol +13 -30
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreviewProxy.sol +1 -1
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreviewV4.sol +50 -153
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreviewV5.sol +50 -157
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/Linear/BbAPoolHelper.sol +4 -16
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/Linear/LinearMath.sol +6 -25
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/Linear/LinearPreview.sol +36 -34
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/MetaStable/MetaStableMath.sol +4 -13
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/MetaStable/MetaStablePreview.sol +20 -58
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSYV2.sol +28 -79
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSYV3Upg.sol +310 -0
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/StablePoolUserData.sol +1 -3
- package/contracts/core/StandardizedYield/implementations/BalancerStable/base/StablePreviewBase.sol +2 -6
- package/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol +5 -13
- package/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol +9 -29
- package/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotRewardHelper.sol +2 -8
- package/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatileCommon.sol +1 -5
- package/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatileLpHelper.sol +8 -19
- package/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatilePreview.sol +7 -25
- package/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/PendleCamelotV1VolatileSY.sol +8 -27
- package/contracts/core/StandardizedYield/implementations/ChainlinkRelayer/PendleChainlinkReceiver.sol +2 -2
- package/contracts/core/StandardizedYield/implementations/ChainlinkRelayer/PendleChainlinkRelayer.sol +4 -9
- package/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol +3 -15
- package/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol +5 -23
- package/contracts/core/StandardizedYield/implementations/Convex/base/Curve3CrvPoolHelper.sol +10 -40
- package/contracts/core/StandardizedYield/implementations/Convex/base/CurveFraxUsdcPoolHelper.sol +2 -8
- package/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol +2 -7
- package/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol +5 -20
- package/contracts/core/StandardizedYield/implementations/Flux/FluxTokenLib.sol +6 -4
- package/contracts/core/StandardizedYield/implementations/Flux/PendleFluxLendingSY.sol +3 -11
- package/contracts/core/StandardizedYield/implementations/GLP/GLPPreviewHelper.sol +3 -9
- package/contracts/core/StandardizedYield/implementations/GLP/GMTokenPricingHelper.sol +115 -0
- package/contracts/core/StandardizedYield/implementations/GLP/PendleGMV2TokenSY.sol +134 -0
- package/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol +5 -19
- package/contracts/core/StandardizedYield/implementations/HMX/HLPPricingHelper.sol +3 -4
- package/contracts/core/StandardizedYield/implementations/HMX/PendleHlpSY.sol +18 -25
- package/contracts/core/StandardizedYield/implementations/Kyber/KyberMathHelper.sol +425 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/KyberNftManagerBaseUpg.sol +438 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/PendleKyberElasticSYUpg.sol +155 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/libraries/FullMath.sol +123 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/libraries/LiqDeltaMath.sol +17 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/libraries/LiquidityMath.sol +74 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/libraries/MathConstants.sol +19 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/libraries/QtyDeltaMath.sol +103 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/libraries/QuadMath.sol +31 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/libraries/ReinvestmentMath.sol +26 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/libraries/SafeCast.sol +73 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/libraries/SwapMath.sol +272 -0
- package/contracts/core/StandardizedYield/implementations/Kyber/libraries/TickMath.sol +223 -0
- package/contracts/core/StandardizedYield/implementations/MUX/MlpPricingHelper.sol +26 -0
- package/contracts/core/StandardizedYield/implementations/MUX/PendleMlpSY.sol +195 -0
- package/contracts/core/StandardizedYield/implementations/MantleStakedEth/PendleMantleStakedEthSY.sol +12 -41
- package/contracts/core/StandardizedYield/implementations/MantleStakedEth/PendleOracleForSyProxy.sol +1 -1
- package/contracts/core/StandardizedYield/implementations/PendleArbitrumStakedEthSY.sol +13 -42
- package/contracts/core/StandardizedYield/implementations/PendleBridgedLSDSY.sol +4 -11
- package/contracts/core/StandardizedYield/implementations/PendleERC4626SY.sol +4 -16
- package/contracts/core/StandardizedYield/implementations/PendleEUSDSY.sol +3 -11
- package/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol +3 -11
- package/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol +5 -18
- package/contracts/core/StandardizedYield/implementations/PendleSfrxEthSY.sol +3 -7
- package/contracts/core/StandardizedYield/implementations/PendleStargateLPSY.sol +5 -18
- package/contracts/core/StandardizedYield/implementations/PendleWbEthSY.sol +3 -10
- package/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol +4 -12
- package/contracts/core/StandardizedYield/implementations/Silo/PendleSiloWithIncentiveSY.sol +157 -0
- package/contracts/core/StandardizedYield/implementations/Stader/PendleETHXSY.sol +4 -12
- package/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol +4 -12
- package/contracts/core/StandardizedYield/implementations/Thena/PendleThenaSY.sol +9 -29
- package/contracts/core/StandardizedYield/implementations/Thena/ThenaLpHelper.sol +3 -10
- package/contracts/core/StandardizedYield/implementations/Thena/ThenaMath.sol +9 -30
- package/contracts/core/StandardizedYield/implementations/Thena/ThenaPreview.sol +10 -40
- package/contracts/core/YieldContracts/InterestManagerYT.sol +6 -8
- package/contracts/core/YieldContracts/PendlePrincipalToken.sol +1 -1
- package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +2 -3
- package/contracts/core/YieldContracts/PendleYieldToken.sol +17 -44
- package/contracts/core/YieldContractsV2/InterestManagerYTV2.sol +5 -14
- package/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol +1 -1
- package/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol +2 -3
- package/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol +13 -48
- package/contracts/core/erc20/PendleERC20.sol +2 -8
- package/contracts/core/erc20/PendleERC20Permit.sol +2 -6
- package/contracts/core/erc20/PendleERC20PermitUpg.sol +82 -0
- package/contracts/core/erc20/PendleERC20Upg.sol +334 -0
- package/contracts/core/libraries/ArrayLib.sol +7 -8
- package/contracts/core/libraries/BaseSplitCodeFactory.sol +1 -6
- package/contracts/core/libraries/Errors.sol +19 -1
- package/contracts/core/libraries/ExpiryUtilsLib.sol +3 -26
- package/contracts/core/libraries/StringLib.sol +5 -21
- package/contracts/core/libraries/TokenHelper.sol +3 -3
- package/contracts/core/libraries/math/LogExpMath.sol +1 -4
- package/contracts/core/libraries/math/PMath.sol +13 -15
- package/contracts/interfaces/AaveV3/IAaveV3AToken.sol +15 -0
- package/contracts/interfaces/AaveV3/IAaveV3Pool.sol +11 -0
- package/contracts/interfaces/Balancer/IComposableStable.sol +3 -4
- package/contracts/interfaces/Balancer/IERC4626LinearPool.sol +2 -10
- package/contracts/interfaces/Balancer/IMetaStablePool.sol +3 -11
- package/contracts/interfaces/Balancer/IVault.sol +3 -8
- package/contracts/interfaces/BinanceEth/IWBETH.sol +1 -1
- package/contracts/interfaces/Camelot/ICamelotNFTFactory.sol +1 -3
- package/contracts/interfaces/Camelot/ICamelotNFTHandler.sol +2 -10
- package/contracts/interfaces/Camelot/ICamelotNitroPool.sol +0 -1
- package/contracts/interfaces/Camelot/ICamelotNitroPoolFactory.sol +3 -12
- package/contracts/interfaces/Camelot/ICamelotPair.sol +5 -25
- package/contracts/interfaces/Camelot/ICamelotRouter.sol +1 -5
- package/contracts/interfaces/Camelot/IXGrail.sol +3 -11
- package/contracts/interfaces/ConvexCurve/IBooster.sol +1 -3
- package/contracts/interfaces/Curve/ICrvPool.sol +3 -12
- package/contracts/interfaces/Curve/ITriCrvPool.sol +2 -9
- package/contracts/interfaces/Flux/IFluxErc20.sol +1 -1
- package/contracts/interfaces/Flux/IFluxInterestRateModel.sol +1 -5
- package/contracts/interfaces/GMX/IGMXPriceHelper.sol +6 -0
- package/contracts/interfaces/GMX/IGMXVault.sol +2 -9
- package/contracts/interfaces/GMX/IRewardRouterV2.sol +1 -4
- package/contracts/interfaces/HMX/IHLPStaking.sol +1 -1
- package/contracts/interfaces/HMX/IHMXCalculator.sol +1 -1
- package/contracts/interfaces/HMX/IHMXCompounder.sol +1 -1
- package/contracts/interfaces/HMX/IHMXStaking.sol +1 -1
- package/contracts/interfaces/HMX/IHMXVester.sol +1 -1
- package/contracts/interfaces/IApeStaking.sol +3 -9
- package/contracts/interfaces/IBenQiInterestRateModel.sol +1 -5
- package/contracts/interfaces/IDiamondCut.sol +1 -5
- package/contracts/interfaces/IDiamondLoupe.sol +1 -3
- package/contracts/interfaces/ILayerZeroReceiver.sol +1 -6
- package/contracts/interfaces/IPActionAddRemoveLiqV3.sol +10 -2
- package/contracts/interfaces/IPActionInfoStatic.sol +4 -7
- package/contracts/interfaces/IPActionMarketAuxStatic.sol +5 -9
- package/contracts/interfaces/IPActionMarketCoreStatic.sol +118 -58
- package/contracts/interfaces/IPActionMintRedeemStatic.sol +38 -21
- package/contracts/interfaces/IPActionMiscV3.sol +51 -26
- package/contracts/interfaces/IPActionStorageStatic.sol +5 -1
- package/contracts/interfaces/IPAllActionTypeV3.sol +1 -0
- package/contracts/interfaces/IPBulkSeller.sol +49 -0
- package/contracts/interfaces/IPBulkSellerFactory.sol +12 -0
- package/contracts/interfaces/IPBulkSellerSYCallback.sol +6 -0
- package/contracts/interfaces/IPFeeDistributor.sol +1 -3
- package/contracts/interfaces/IPFeeDistributorV2.sol +8 -7
- package/contracts/interfaces/IPGaugeController.sol +2 -8
- package/contracts/interfaces/IPGaugeControllerMainchain.sol +1 -5
- package/contracts/interfaces/IPInterestManagerYT.sol +3 -3
- package/contracts/interfaces/IPInterestManagerYTV2.sol +1 -4
- package/contracts/interfaces/IPLimitRouter.sol +24 -19
- package/contracts/interfaces/IPLinearDistributor.sol +21 -0
- package/contracts/interfaces/IPMarket.sol +4 -17
- package/contracts/interfaces/IPMarketFactory.sol +2 -13
- package/contracts/interfaces/IPMarketFactoryV3.sol +24 -0
- package/contracts/interfaces/IPMarketV3.sol +8 -0
- package/contracts/interfaces/IPOffchainStorage.sol +11 -0
- package/contracts/interfaces/IPPriceFeed.sol +6 -0
- package/contracts/interfaces/IPPtOracle.sol +2 -9
- package/contracts/interfaces/IPRouterHelper.sol +11 -7
- package/contracts/interfaces/IPRouterStatic.sol +1 -3
- package/contracts/interfaces/IPVotingController.sol +7 -19
- package/contracts/interfaces/IPVotingEscrowMainchain.sol +2 -8
- package/contracts/interfaces/IPYieldToken.sol +2 -8
- package/contracts/interfaces/IPYieldTokenV2.sol +1 -6
- package/contracts/interfaces/IPendlePreviewHelper.sol +2 -8
- package/contracts/interfaces/IRewardManager.sol +1 -4
- package/contracts/interfaces/IStETH.sol +1 -4
- package/contracts/interfaces/IStandardizedYield.sol +9 -16
- package/contracts/interfaces/IStargateLP.sol +0 -3
- package/contracts/interfaces/IStargateRouter.sol +1 -5
- package/contracts/interfaces/Kyber/IKyberElasticFactory.sol +157 -0
- package/contracts/interfaces/Kyber/IKyberElasticPool.sol +101 -0
- package/contracts/interfaces/Kyber/IKyberElasticRouter.sol +98 -0
- package/contracts/interfaces/Kyber/IKyberLiquidityMining.sol +209 -0
- package/contracts/interfaces/Kyber/IKyberMathHelper.sol +28 -0
- package/contracts/interfaces/Kyber/IKyberPositionManager.sol +179 -0
- package/contracts/interfaces/Lybra/IEUSD.sol +1 -1
- package/contracts/interfaces/MUX/IMUXRewardRouter.sol +139 -0
- package/contracts/interfaces/Silo/ISilo.sol +298 -0
- package/contracts/interfaces/Silo/ISiloIncentiveController.sol +16 -0
- package/contracts/interfaces/Silo/ISiloLens.sol +6 -0
- package/contracts/interfaces/Stader/IStaderStakeManager.sol +2 -2
- package/contracts/interfaces/Thena/IThenaFactory.sol +1 -5
- package/contracts/interfaces/Thena/IThenaGaugeV2.sol +1 -2
- package/contracts/interfaces/Thena/IThenaPair.sol +3 -5
- package/contracts/limit/LimitMathCore.sol +69 -60
- package/contracts/limit/{PendleOrderMixin.sol → LimitRouterBase.sol} +96 -79
- package/contracts/limit/PendleLimitRouter.sol +9 -13
- package/contracts/offchain-helpers/AutomateReady.sol +17 -32
- package/contracts/offchain-helpers/BaseSplitCodeFactoryContract.sol +6 -3
- package/contracts/offchain-helpers/BoringLpSeller.sol +4 -17
- package/contracts/offchain-helpers/BoringPtSeller.sol +2 -7
- package/contracts/offchain-helpers/Broadcaster.sol +1 -1
- package/contracts/offchain-helpers/BytesLib.sol +26 -14
- package/contracts/offchain-helpers/EmptyUUPS.sol +0 -1
- package/contracts/offchain-helpers/LegacyNFTHelper.sol +4 -23
- package/contracts/offchain-helpers/LimitBackendHelper.sol +25 -16
- package/contracts/offchain-helpers/MarketExchangeRateLib.sol +2 -13
- package/contracts/offchain-helpers/Multicall2.sol +2 -7
- package/contracts/offchain-helpers/PendleMulticallV1.sol +7 -7
- package/contracts/offchain-helpers/PendleMulticallV2.sol +12 -13
- package/contracts/offchain-helpers/PendleOffchainStorage.sol +59 -0
- package/contracts/offchain-helpers/SimulateHelper.sol +6 -7
- package/contracts/offchain-helpers/errors/SDKErrorsDirectory.sol +15 -1
- package/contracts/oracles/PendleLpOracleLib.sol +9 -10
- package/contracts/oracles/PendlePtOracle.sol +8 -19
- package/contracts/oracles/PendlePtOracleLib.sol +8 -13
- package/contracts/oracles/samples/PendleLpGlpOracle.sol +6 -10
- package/contracts/oracles/samples/PendlePtGlpOracle.sol +6 -10
- package/contracts/oracles/samples/PendlePtUsdChainlinkOracle.sol +8 -15
- package/contracts/router/ActionAddRemoveLiqV3.sol +147 -52
- package/contracts/router/ActionCallbackV3.sol +11 -4
- package/contracts/router/ActionMiscV3.sol +43 -33
- package/contracts/router/ActionSwapPTV3.sol +18 -6
- package/contracts/router/ActionSwapYTV3.sol +42 -14
- package/contracts/router/PendleRouterHelper.sol +72 -40
- package/contracts/router/PendleRouterV3.sol +50 -50
- package/contracts/router/base/ActionBase.sol +86 -43
- package/contracts/router/base/CallbackHelper.sol +18 -20
- package/contracts/router/base/MarketApproxLib.sol +36 -32
- package/contracts/router/swap-aggregator/PendleSwap.sol +31 -7
- package/contracts/router/swap-aggregator/kyberswap/interfaces/IAggregationExecutorOptimistic.sol +63 -0
- package/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelper.sol +314 -0
- package/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperL2.sol +560 -0
- package/contracts/router/swap-aggregator/kyberswap/{IMetaAggregationRouterV2.sol → interfaces/IMetaAggregationRouterV2.sol} +11 -6
- package/contracts/router/swap-aggregator/kyberswap/{KyberInputScalingHelper.sol → l1-contracts/InputScalingHelper.sol} +70 -19
- package/contracts/router/swap-aggregator/kyberswap/{ScalingDataLib.sol → l1-contracts/ScalingDataLib.sol} +111 -53
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/BytesHelper.sol +29 -0
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataReader.sol +149 -0
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataWriter.sol +118 -0
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/Common.sol +42 -0
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/DexScaler.sol +382 -0
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/ExecutorReader.sol +61 -0
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/InputScalingHelperL2.sol +329 -0
- package/contracts/router/swap-aggregator/kyberswap/l2-contracts/ScalingDataL2Lib.sol +173 -0
- package/contracts/router/swap-aggregator/oneinch/I1inchAggregationRouterV5.sol +4 -10
- package/contracts/router/swap-aggregator/oneinch/OneInchAggregationRouterHelper.sol +20 -14
- package/deployments/1-core.json +5 -2
- package/deployments/1-markets/EPENDLE-SEP2024.json +12 -0
- package/deployments/1-markets/SFRAX-MARCH2024.json +10 -0
- package/deployments/1-markets/SILO-CRVUSD-MARCH2024.json +10 -0
- package/deployments/10-core.json +6 -3
- package/deployments/42161-core.json +5 -2
- package/deployments/42161-markets/AAVE-USDC-JUNE2024.json +11 -0
- package/deployments/42161-markets/ARBSILO-USDC-FEB2024.json +10 -0
- package/deployments/42161-markets/GM-ARB-USDC-MARCH2024.json +10 -0
- package/deployments/42161-markets/KYBER-AXLWSTETH-WSTETH-MARCH2024.json +10 -0
- package/deployments/42161-markets/MLP-MARCH2024.json +10 -0
- package/deployments/42161-markets/WSTETH-ARBITRUM-MARCH2024.json +11 -0
- package/deployments/42161-markets/WSTETHSILO-ETH-MARCH2024.json +11 -0
- package/deployments/56-core.json +5 -2
- package/deployments/merkle-distribution/2023-10-26.json +7300 -0
- package/deployments/merkle-distribution/2023-11-30.json +7730 -0
- package/package.json +8 -8
- package/contracts/limit/helpers/ArgumentsDecoder.sol +0 -47
- package/contracts/limit/helpers/Permitable.sol +0 -48
- package/contracts/limit/helpers/RevertReasonParser.sol +0 -75
- package/contracts/offchain-helpers/ChainlinkRelayerGelato.sol +0 -37
- package/contracts/offchain-helpers/PtAndLpToAsset.sol +0 -62
- package/contracts/offchain-helpers/router-static/PendleRouterStatic.sol +0 -19
- package/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol +0 -112
- package/contracts/offchain-helpers/router-static/base/ActionLimitOrdersStatic.sol +0 -145
- package/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol +0 -171
- package/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol +0 -582
- package/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol +0 -116
- package/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol +0 -64
- package/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol +0 -53
- package/contracts/offchain-helpers/router-static/base/StorageLayout.sol +0 -18
- package/contracts/router/swap-aggregator/kyberswap/IExecutorHelper.sol +0 -231
- package/deployments/1-markets/BALANCER-LP-AURA-VETH-WETH-SEP2024.json +0 -8
- /package/contracts/router/swap-aggregator/kyberswap/{IAggregationExecutor.sol → interfaces/IAggregationExecutor.sol} +0 -0
- /package/deployments/1-markets/{BALANCER-LP-AURA-BBAWETHSWETH-SEP-26-2024.json → deprecated/BALANCER-LP-AURA-BBAWETHSWETH-SEP-26-2024.json} +0 -0
- /package/deployments/1-markets/{BALANCER-LP-AURA-ETHX-BBAWETH-SEP-26-2024.json → deprecated/BALANCER-LP-AURA-ETHX-BBAWETH-SEP-26-2024.json} +0 -0
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@pendle/core-v2",
|
|
3
3
|
"description": "Core smart contracts of Pendle Protocol.",
|
|
4
4
|
"license": "BUSL-1.1",
|
|
5
|
-
"version": "3.0.0-beta-
|
|
5
|
+
"version": "3.0.0-beta-12",
|
|
6
6
|
"homepage": "https://pendle.finance",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"pendle",
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@typechain/ethers-v5": "^9.0.0",
|
|
27
27
|
"@typechain/hardhat": "^4.0.0",
|
|
28
|
-
"hardhat": "^2.19.
|
|
28
|
+
"hardhat": "^2.19.2",
|
|
29
29
|
"hardhat-contract-sizer": "^2.10.0",
|
|
30
|
-
"prettier": "^3.1.
|
|
30
|
+
"prettier": "^3.1.1",
|
|
31
31
|
"prettier-plugin-solidity": "^1.2.0",
|
|
32
32
|
"solc": "^0.8.23-fixed",
|
|
33
33
|
"solhint": "^4.0.0",
|
|
34
|
-
"ts-node": "^10.9.
|
|
34
|
+
"ts-node": "^10.9.2",
|
|
35
35
|
"typechain": "^8.3.2",
|
|
36
|
-
"typescript": "^5.
|
|
36
|
+
"typescript": "^5.3.3"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
39
|
"compile": "yarn hardhat compile",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
},
|
|
45
45
|
"packageManager": "yarn@3.3.1",
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@chainlink/contracts": "^0.
|
|
48
|
-
"@openzeppelin/contracts": "4.
|
|
49
|
-
"@openzeppelin/contracts-upgradeable": "4.
|
|
47
|
+
"@chainlink/contracts": "^0.8.0",
|
|
48
|
+
"@openzeppelin/contracts": "4.9.3",
|
|
49
|
+
"@openzeppelin/contracts-upgradeable": "4.9.3"
|
|
50
50
|
}
|
|
51
51
|
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
|
|
3
|
-
pragma solidity ^0.8.0;
|
|
4
|
-
|
|
5
|
-
/// @title Library with gas efficient alternatives to `abi.decode`
|
|
6
|
-
library ArgumentsDecoder {
|
|
7
|
-
function decodeUint256(bytes memory data) internal pure returns (uint256) {
|
|
8
|
-
uint256 value;
|
|
9
|
-
assembly {
|
|
10
|
-
// solhint-disable-line no-inline-assembly
|
|
11
|
-
value := mload(add(data, 0x20))
|
|
12
|
-
}
|
|
13
|
-
return value;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function decodeBool(bytes memory data) internal pure returns (bool) {
|
|
17
|
-
bool value;
|
|
18
|
-
assembly {
|
|
19
|
-
// solhint-disable-line no-inline-assembly
|
|
20
|
-
value := eq(mload(add(data, 0x20)), 1)
|
|
21
|
-
}
|
|
22
|
-
return value;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function decodeTargetAndCalldata(bytes memory data) internal pure returns (address, bytes memory) {
|
|
26
|
-
address target;
|
|
27
|
-
bytes memory args;
|
|
28
|
-
assembly {
|
|
29
|
-
// solhint-disable-line no-inline-assembly
|
|
30
|
-
target := mload(add(data, 0x14))
|
|
31
|
-
args := add(data, 0x14)
|
|
32
|
-
mstore(args, sub(mload(data), 0x14))
|
|
33
|
-
}
|
|
34
|
-
return (target, args);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function decodeTargetAndData(bytes calldata data) internal pure returns (address, bytes calldata) {
|
|
38
|
-
address target;
|
|
39
|
-
bytes calldata args;
|
|
40
|
-
assembly {
|
|
41
|
-
// solhint-disable-line no-inline-assembly
|
|
42
|
-
target := shr(96, calldataload(data.offset))
|
|
43
|
-
}
|
|
44
|
-
args = data[20:];
|
|
45
|
-
return (target, args);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
|
|
3
|
-
pragma solidity ^0.8.0;
|
|
4
|
-
|
|
5
|
-
import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol";
|
|
6
|
-
import "./RevertReasonParser.sol";
|
|
7
|
-
import "../../interfaces/IDailLikePermit.sol";
|
|
8
|
-
|
|
9
|
-
/// @title Base contract with common permit handling logics
|
|
10
|
-
abstract contract Permitable {
|
|
11
|
-
function _permit(address token, bytes calldata permit) internal {
|
|
12
|
-
if (permit.length > 0) {
|
|
13
|
-
bool success;
|
|
14
|
-
bytes memory result;
|
|
15
|
-
if (permit.length == 32 * 7) {
|
|
16
|
-
// solhint-disable-next-line avoid-low-level-calls
|
|
17
|
-
(success, result) = token.call(abi.encodePacked(IERC20Permit.permit.selector, permit));
|
|
18
|
-
} else if (permit.length == 32 * 8) {
|
|
19
|
-
// solhint-disable-next-line avoid-low-level-calls
|
|
20
|
-
(success, result) = token.call(abi.encodePacked(IDaiLikePermit.permit.selector, permit));
|
|
21
|
-
} else {
|
|
22
|
-
revert("Wrong permit length");
|
|
23
|
-
}
|
|
24
|
-
if (!success) {
|
|
25
|
-
revert(RevertReasonParser.parse(result, "Permit failed: "));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function _permitMemory(address token, bytes memory permit) internal {
|
|
31
|
-
if (permit.length > 0) {
|
|
32
|
-
bool success;
|
|
33
|
-
bytes memory result;
|
|
34
|
-
if (permit.length == 32 * 7) {
|
|
35
|
-
// solhint-disable-next-line avoid-low-level-calls
|
|
36
|
-
(success, result) = token.call(abi.encodePacked(IERC20Permit.permit.selector, permit));
|
|
37
|
-
} else if (permit.length == 32 * 8) {
|
|
38
|
-
// solhint-disable-next-line avoid-low-level-calls
|
|
39
|
-
(success, result) = token.call(abi.encodePacked(IDaiLikePermit.permit.selector, permit));
|
|
40
|
-
} else {
|
|
41
|
-
revert("Wrong permit length");
|
|
42
|
-
}
|
|
43
|
-
if (!success) {
|
|
44
|
-
revert(RevertReasonParser.parse(result, "Permit failed: "));
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
|
|
3
|
-
pragma solidity ^0.8.0;
|
|
4
|
-
|
|
5
|
-
/// @title Library that allows to parse unsuccessful arbitrary calls revert reasons.
|
|
6
|
-
/// See https://solidity.readthedocs.io/en/latest/control-structures.html#revert for details.
|
|
7
|
-
/// Note that we assume revert reason being abi-encoded as Error(string) so it may fail to parse reason
|
|
8
|
-
/// if structured reverts appear in the future.
|
|
9
|
-
///
|
|
10
|
-
/// All unsuccessful parsings get encoded as Unknown(data) string
|
|
11
|
-
|
|
12
|
-
library RevertReasonParser {
|
|
13
|
-
bytes4 private constant _PANIC_SELECTOR = bytes4(keccak256("Panic(uint256)"));
|
|
14
|
-
bytes4 private constant _ERROR_SELECTOR = bytes4(keccak256("Error(string)"));
|
|
15
|
-
|
|
16
|
-
function parse(bytes memory data, string memory prefix) internal pure returns (string memory) {
|
|
17
|
-
if (data.length >= 4) {
|
|
18
|
-
bytes4 selector;
|
|
19
|
-
|
|
20
|
-
assembly {
|
|
21
|
-
// solhint-disable-line no-inline-assembly
|
|
22
|
-
selector := mload(add(data, 0x20))
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// 68 = 4-byte selector + 32 bytes offset + 32 bytes length
|
|
26
|
-
if (selector == _ERROR_SELECTOR && data.length >= 68) {
|
|
27
|
-
uint256 offset;
|
|
28
|
-
bytes memory reason;
|
|
29
|
-
assembly {
|
|
30
|
-
// solhint-disable-line no-inline-assembly
|
|
31
|
-
// 36 = 32 bytes data length + 4-byte selector
|
|
32
|
-
offset := mload(add(data, 36))
|
|
33
|
-
reason := add(data, add(36, offset))
|
|
34
|
-
}
|
|
35
|
-
/*
|
|
36
|
-
revert reason is padded up to 32 bytes with ABI encoder: Error(string)
|
|
37
|
-
also sometimes there is extra 32 bytes of zeros padded in the end:
|
|
38
|
-
https://github.com/ethereum/solidity/issues/10170
|
|
39
|
-
because of that we can't check for equality and instead check
|
|
40
|
-
that offset + string length + extra 36 bytes is less than overall data length
|
|
41
|
-
*/
|
|
42
|
-
require(data.length >= 36 + offset + reason.length, "Invalid revert reason");
|
|
43
|
-
return string(abi.encodePacked(prefix, "Error(", reason, ")"));
|
|
44
|
-
}
|
|
45
|
-
// 36 = 4-byte selector + 32 bytes integer
|
|
46
|
-
else if (selector == _PANIC_SELECTOR && data.length == 36) {
|
|
47
|
-
uint256 code;
|
|
48
|
-
assembly {
|
|
49
|
-
// solhint-disable-line no-inline-assembly
|
|
50
|
-
// 36 = 32 bytes data length + 4-byte selector
|
|
51
|
-
code := mload(add(data, 36))
|
|
52
|
-
}
|
|
53
|
-
return string(abi.encodePacked(prefix, "Panic(", _toHex(code), ")"));
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return string(abi.encodePacked(prefix, "Unknown(", _toHex(data), ")"));
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function _toHex(uint256 value) private pure returns (string memory) {
|
|
61
|
-
return _toHex(abi.encodePacked(value));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function _toHex(bytes memory data) private pure returns (string memory) {
|
|
65
|
-
bytes16 alphabet = 0x30313233343536373839616263646566;
|
|
66
|
-
bytes memory str = new bytes(2 + data.length * 2);
|
|
67
|
-
str[0] = "0";
|
|
68
|
-
str[1] = "x";
|
|
69
|
-
for (uint256 i = 0; i < data.length; i++) {
|
|
70
|
-
str[2 * i + 2] = alphabet[uint8(data[i] >> 4)];
|
|
71
|
-
str[2 * i + 3] = alphabet[uint8(data[i] & 0x0f)];
|
|
72
|
-
}
|
|
73
|
-
return string(str);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity ^0.8.17;
|
|
3
|
-
|
|
4
|
-
import "./AutomateReady.sol";
|
|
5
|
-
import "../core/libraries/BoringOwnableUpgradeable.sol";
|
|
6
|
-
import "../core/StandardizedYield/implementations/ChainlinkRelayer/PendleChainlinkRelayer.sol";
|
|
7
|
-
|
|
8
|
-
contract ChainlinkRelayerGelato is AutomateReady, BoringOwnableUpgradeable {
|
|
9
|
-
PendleChainlinkRelayer public immutable relayer;
|
|
10
|
-
|
|
11
|
-
int256 public lastSentAnswer;
|
|
12
|
-
|
|
13
|
-
constructor(address _automate, address _taskCreator, PendleChainlinkRelayer _relayer)
|
|
14
|
-
initializer
|
|
15
|
-
AutomateReady(_automate, _taskCreator)
|
|
16
|
-
{
|
|
17
|
-
__BoringOwnable_init();
|
|
18
|
-
relayer = _relayer;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
receive() external payable {}
|
|
22
|
-
|
|
23
|
-
function withdraw() external onlyOwner {
|
|
24
|
-
payable(owner).transfer(address(this).balance);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function run() external {
|
|
28
|
-
int256 latestAnswer = IChainlinkAggregator(relayer.chainlinkFeed()).latestAnswer();
|
|
29
|
-
require(lastSentAnswer != latestAnswer, "answer not new");
|
|
30
|
-
|
|
31
|
-
(uint256 fee, address feeToken) = _getFeeDetails();
|
|
32
|
-
_transfer(fee, feeToken);
|
|
33
|
-
|
|
34
|
-
relayer.run{value: address(this).balance}();
|
|
35
|
-
lastSentAnswer = latestAnswer;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
pragma solidity ^0.8.0;
|
|
3
|
-
|
|
4
|
-
import "../interfaces/IPMarket.sol";
|
|
5
|
-
import "../core/libraries/math/PMath.sol";
|
|
6
|
-
import "../core/Market/MarketMathCore.sol";
|
|
7
|
-
|
|
8
|
-
contract PtAndLpToAsset {
|
|
9
|
-
using PMath for int256;
|
|
10
|
-
using PMath for uint256;
|
|
11
|
-
using MarketMathCore for MarketState;
|
|
12
|
-
|
|
13
|
-
function getLpToAssetRate(IPMarket market) public view returns (uint256 lpToAssetRate) {
|
|
14
|
-
MarketState memory state = market.readState(address(0));
|
|
15
|
-
uint256 pyIndexCurrent = _getPYIndexCurrent(market);
|
|
16
|
-
MarketPreCompute memory comp = state.getMarketPreCompute(
|
|
17
|
-
PYIndex.wrap(pyIndexCurrent),
|
|
18
|
-
block.timestamp
|
|
19
|
-
);
|
|
20
|
-
|
|
21
|
-
int256 totalHypotheticalAsset = comp.totalAsset +
|
|
22
|
-
state.totalPt.mulDown(int256(_getPtToAssetRate(market, state, pyIndexCurrent)));
|
|
23
|
-
|
|
24
|
-
lpToAssetRate = uint256(totalHypotheticalAsset.divDown(state.totalLp));
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function getPtToAssetRate(IPMarket market) public view returns (uint256 ptToAssetRate) {
|
|
28
|
-
MarketState memory state = market.readState(address(0));
|
|
29
|
-
return _getPtToAssetRate(market, state, _getPYIndexCurrent(market));
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function _getPtToAssetRate(
|
|
33
|
-
IPMarket market,
|
|
34
|
-
MarketState memory state,
|
|
35
|
-
uint256 pyIndexCurrent
|
|
36
|
-
) internal view returns (uint256 ptToAssetRate) {
|
|
37
|
-
if (state.expiry <= block.timestamp) {
|
|
38
|
-
(IStandardizedYield SY, , ) = market.readTokens();
|
|
39
|
-
return (SY.exchangeRate().divDown(pyIndexCurrent));
|
|
40
|
-
}
|
|
41
|
-
uint256 timeToExpiry = state.expiry - block.timestamp;
|
|
42
|
-
int256 assetToPtRate = MarketMathCore._getExchangeRateFromImpliedRate(
|
|
43
|
-
state.lastLnImpliedRate,
|
|
44
|
-
timeToExpiry
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
ptToAssetRate = uint256(PMath.IONE.divDown(assetToPtRate));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function _getPYIndexCurrent(IPMarket market) private view returns (uint256) {
|
|
51
|
-
(IStandardizedYield SY, , IPYieldToken YT) = market.readTokens();
|
|
52
|
-
|
|
53
|
-
uint256 syIndex = SY.exchangeRate();
|
|
54
|
-
uint256 pyIndexStored = YT.pyIndexStored();
|
|
55
|
-
|
|
56
|
-
if (YT.doCacheIndexSameBlock() && YT.pyIndexLastUpdatedBlock() == block.number) {
|
|
57
|
-
return pyIndexStored;
|
|
58
|
-
} else {
|
|
59
|
-
return PMath.max(syIndex, pyIndexStored);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
pragma solidity ^0.8.17;
|
|
3
|
-
|
|
4
|
-
import "@openzeppelin/contracts/proxy/Proxy.sol";
|
|
5
|
-
import "../../interfaces/IPRouterStatic.sol";
|
|
6
|
-
import "./base/StorageLayout.sol";
|
|
7
|
-
|
|
8
|
-
// solhint-disable no-empty-blocks
|
|
9
|
-
contract PendleRouterStatic is Proxy, StorageLayout {
|
|
10
|
-
constructor(address actionStorage) {
|
|
11
|
-
owner = msg.sender;
|
|
12
|
-
selectorToFacet[IPMiniDiamond.setFacetForSelectors.selector] = actionStorage;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function _implementation() internal view override returns (address res) {
|
|
16
|
-
res = selectorToFacet[msg.sig];
|
|
17
|
-
require(res != address(0), "selector not found");
|
|
18
|
-
}
|
|
19
|
-
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
pragma solidity ^0.8.17;
|
|
3
|
-
|
|
4
|
-
import "../../../interfaces/IPMarket.sol";
|
|
5
|
-
import "../../../interfaces/IPRouterStatic.sol";
|
|
6
|
-
import "../../../interfaces/IPYieldContractFactory.sol";
|
|
7
|
-
import "../../../interfaces/IPMarketFactory.sol";
|
|
8
|
-
|
|
9
|
-
// solhint-disable no-empty-blocks
|
|
10
|
-
contract ActionInfoStatic is IPActionInfoStatic {
|
|
11
|
-
function getPY(address py) public view returns (address pt, address yt) {
|
|
12
|
-
try IPYieldToken(py).PT() returns (address _pt) {
|
|
13
|
-
pt = _pt;
|
|
14
|
-
yt = py;
|
|
15
|
-
} catch {
|
|
16
|
-
pt = py;
|
|
17
|
-
yt = IPPrincipalToken(py).YT();
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/// can be SY, PY or Market
|
|
22
|
-
function getTokensInOut(address token)
|
|
23
|
-
external
|
|
24
|
-
view
|
|
25
|
-
returns (address[] memory tokensIn, address[] memory tokensOut)
|
|
26
|
-
{
|
|
27
|
-
try IStandardizedYield(token).getTokensIn() returns (address[] memory res) {
|
|
28
|
-
return (res, IStandardizedYield(token).getTokensOut());
|
|
29
|
-
} catch {}
|
|
30
|
-
|
|
31
|
-
try IPYieldToken(token).SY() returns (address SY) {
|
|
32
|
-
return (IStandardizedYield(SY).getTokensIn(), IStandardizedYield(SY).getTokensOut());
|
|
33
|
-
} catch {}
|
|
34
|
-
|
|
35
|
-
try IPMarket(token).readTokens() returns (IStandardizedYield SY, IPPrincipalToken, IPYieldToken) {
|
|
36
|
-
return (SY.getTokensIn(), SY.getTokensOut());
|
|
37
|
-
} catch {}
|
|
38
|
-
|
|
39
|
-
revert("invalid token");
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function getUserSYInfo(address sy, address user) external returns (UserSYInfo memory res) {
|
|
43
|
-
IStandardizedYield SY = IStandardizedYield(sy);
|
|
44
|
-
|
|
45
|
-
// SY
|
|
46
|
-
res.syBalance = TokenAmount(sy, _balanceOf(sy, user));
|
|
47
|
-
|
|
48
|
-
// Rewards
|
|
49
|
-
uint256[] memory rewardsOut = SY.claimRewards(user);
|
|
50
|
-
address[] memory rewardTokens = SY.getRewardTokens();
|
|
51
|
-
|
|
52
|
-
res.unclaimedRewards = _zipTokenAmounts(rewardTokens, rewardsOut);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function getUserPYInfo(address py, address user) external returns (UserPYInfo memory res) {
|
|
56
|
-
(address _PT, address _YT) = getPY(py);
|
|
57
|
-
IPYieldToken YT = IPYieldToken(_YT);
|
|
58
|
-
|
|
59
|
-
// PT / YT
|
|
60
|
-
res.ytBalance = TokenAmount(_YT, _balanceOf(_YT, user));
|
|
61
|
-
res.ptBalance = TokenAmount(_PT, _balanceOf(_PT, user));
|
|
62
|
-
|
|
63
|
-
// interest
|
|
64
|
-
(uint256 interestOut, uint256[] memory rewardsOut) = YT.redeemDueInterestAndRewards(user, true, true);
|
|
65
|
-
|
|
66
|
-
res.unclaimedInterest = TokenAmount(YT.SY(), interestOut);
|
|
67
|
-
|
|
68
|
-
// Rewards
|
|
69
|
-
address[] memory rewardTokens = YT.getRewardTokens();
|
|
70
|
-
res.unclaimedRewards = _zipTokenAmounts(rewardTokens, rewardsOut);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function getUserMarketInfo(address market, address user) external returns (UserMarketInfo memory res) {
|
|
74
|
-
IPMarket _market = IPMarket(market);
|
|
75
|
-
MarketState memory state = _market.readState(address(this));
|
|
76
|
-
|
|
77
|
-
if (uint256(state.totalLp) == 0) return res; // market not initialized
|
|
78
|
-
|
|
79
|
-
// LP PT SY
|
|
80
|
-
(IStandardizedYield SY, IPPrincipalToken PT,) = _market.readTokens();
|
|
81
|
-
|
|
82
|
-
uint256 userLp = _balanceOf(market, user);
|
|
83
|
-
uint256 userPt = (userLp * uint256(state.totalPt)) / uint256(state.totalLp);
|
|
84
|
-
uint256 userSy = (userLp * uint256(state.totalSy)) / uint256(state.totalLp);
|
|
85
|
-
|
|
86
|
-
res.lpBalance = TokenAmount(market, userLp);
|
|
87
|
-
res.ptBalance = TokenAmount(address(PT), userPt);
|
|
88
|
-
res.syBalance = TokenAmount(address(SY), userSy);
|
|
89
|
-
|
|
90
|
-
// Rewards
|
|
91
|
-
uint256[] memory rewardsOut = _market.redeemRewards(user);
|
|
92
|
-
address[] memory rewardTokens = _market.getRewardTokens();
|
|
93
|
-
|
|
94
|
-
res.unclaimedRewards = _zipTokenAmounts(rewardTokens, rewardsOut);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function _zipTokenAmounts(address[] memory tokens, uint256[] memory amounts)
|
|
98
|
-
internal
|
|
99
|
-
pure
|
|
100
|
-
returns (TokenAmount[] memory res)
|
|
101
|
-
{
|
|
102
|
-
res = new TokenAmount[](tokens.length);
|
|
103
|
-
|
|
104
|
-
for (uint256 i = 0; i < tokens.length; i++) {
|
|
105
|
-
res[i] = TokenAmount(tokens[i], amounts[i]);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function _balanceOf(address token, address user) internal view returns (uint256) {
|
|
110
|
-
return IERC20(token).balanceOf(user);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
pragma solidity ^0.8.17;
|
|
3
|
-
|
|
4
|
-
import "../../../interfaces/IPMarket.sol";
|
|
5
|
-
import "../../../interfaces/IPRouterStatic.sol";
|
|
6
|
-
import "./StorageLayout.sol";
|
|
7
|
-
import {LimitMathCore as LimitMath} from "../../../limit/LimitMathCore.sol";
|
|
8
|
-
|
|
9
|
-
// contract ActionLimitOrdersStatic is StorageLayout, IPOrderMixinType {
|
|
10
|
-
// using PMath for uint256;
|
|
11
|
-
// using PMath for int256;
|
|
12
|
-
|
|
13
|
-
// using LogExpMath for int256;
|
|
14
|
-
// using PYIndexLib for PYIndex;
|
|
15
|
-
// using PYIndexLib for IPYieldToken;
|
|
16
|
-
// using MarketApproxPtInLib for MarketState;
|
|
17
|
-
// using MarketApproxPtOutLib for MarketState;
|
|
18
|
-
// using MarketMathCore for MarketState;
|
|
19
|
-
|
|
20
|
-
// uint256 internal constant _ORDER_DOES_NOT_EXIST = 0;
|
|
21
|
-
// uint256 internal constant _ORDER_FILLED = 1;
|
|
22
|
-
|
|
23
|
-
// IPLimitRouter public limitRouter;
|
|
24
|
-
|
|
25
|
-
// // TODO: opt for bytecode
|
|
26
|
-
|
|
27
|
-
// function normalFillStatic(FillOrderParams[] memory params)
|
|
28
|
-
// external
|
|
29
|
-
// returns (
|
|
30
|
-
// uint256 actualMaking,
|
|
31
|
-
// uint256 actualTaking,
|
|
32
|
-
// uint256 totalFee,
|
|
33
|
-
// NormalResults memory out,
|
|
34
|
-
// FillOrderParams[] memory postConvertedOrders
|
|
35
|
-
// )
|
|
36
|
-
// {
|
|
37
|
-
// OrderType Type = params[0].order.Type;
|
|
38
|
-
// bool tokenFromMaker = (Type == OrderType.SY_FOR_PT || Type == OrderType.SY_FOR_YT);
|
|
39
|
-
|
|
40
|
-
// OnchainParams memory onchain = preProcess(params, tokenFromMaker);
|
|
41
|
-
// out = LimitMath.calcNormalBatch(params, onchain);
|
|
42
|
-
// postConvertedOrders = params;
|
|
43
|
-
|
|
44
|
-
// if (tokenFromMaker) {
|
|
45
|
-
// (actualMaking, actualTaking, totalFee) = (out.totalMaking, out.totalTaking, out.totalFee);
|
|
46
|
-
// } else {
|
|
47
|
-
// (actualMaking, actualTaking, totalFee) = (out.totalMaking, out.totalTaking + out.totalFee, out.totalFee);
|
|
48
|
-
// }
|
|
49
|
-
// }
|
|
50
|
-
|
|
51
|
-
// function flashFillStatic(FillOrderParams[] memory params)
|
|
52
|
-
// external
|
|
53
|
-
// returns (
|
|
54
|
-
// uint256 actualInputFromTaker,
|
|
55
|
-
// uint256 actualOutputToTaker,
|
|
56
|
-
// uint256 totalFee,
|
|
57
|
-
// NormalResults memory out,
|
|
58
|
-
// FillOrderParams[] memory postConvertedOrders
|
|
59
|
-
// )
|
|
60
|
-
// {
|
|
61
|
-
// OrderType Type = params[0].order.Type;
|
|
62
|
-
// bool tokenFromMaker = (Type == OrderType.SY_FOR_PT || Type == OrderType.SY_FOR_YT);
|
|
63
|
-
|
|
64
|
-
// OnchainParams memory onchain = preProcess(params, tokenFromMaker);
|
|
65
|
-
// (out, actualInputFromTaker, actualOutputToTaker) = LimitMath.calcFlashBatch(params, onchain);
|
|
66
|
-
// totalFee = out.totalFee;
|
|
67
|
-
// postConvertedOrders = params;
|
|
68
|
-
// }
|
|
69
|
-
|
|
70
|
-
// function preProcess(FillOrderParams[] memory params, bool tokenToSy)
|
|
71
|
-
// internal
|
|
72
|
-
// returns (OnchainParams memory onchain)
|
|
73
|
-
// {
|
|
74
|
-
// _verifyAndUpdateMakings(params);
|
|
75
|
-
|
|
76
|
-
// address YT = params[0].order.YT;
|
|
77
|
-
// address SY = IPYieldToken(YT).SY();
|
|
78
|
-
// uint256 expiry = IPYieldToken(YT).expiry();
|
|
79
|
-
// require(block.timestamp < expiry, "PY expired");
|
|
80
|
-
|
|
81
|
-
// if (tokenToSy) {
|
|
82
|
-
// _mintSyStatic(params, IStandardizedYield(SY));
|
|
83
|
-
// }
|
|
84
|
-
|
|
85
|
-
// onchain = OnchainParams({
|
|
86
|
-
// timeToExpiry: expiry - block.timestamp,
|
|
87
|
-
// index: IPYieldToken(YT).newIndex(),
|
|
88
|
-
// feeRecipient: IPOrderMixin(limitRouter).feeRecipient(),
|
|
89
|
-
// feeRate: IPOrderMixin(limitRouter).feeRate()
|
|
90
|
-
// });
|
|
91
|
-
// }
|
|
92
|
-
|
|
93
|
-
// function _verifyAndUpdateMakings(FillOrderParams[] memory params) internal view {
|
|
94
|
-
// uint256 len = params.length;
|
|
95
|
-
// for (uint256 i = 0; i < len; i++) {
|
|
96
|
-
// FillOrderParams memory param = params[i];
|
|
97
|
-
|
|
98
|
-
// (, uint256 remainingMakerAmount) = _verifyOrder(param.order);
|
|
99
|
-
// uint256 netMaking = PMath.min(param.makingAmount, remainingMakerAmount);
|
|
100
|
-
|
|
101
|
-
// param.makingAmount = netMaking;
|
|
102
|
-
// }
|
|
103
|
-
// }
|
|
104
|
-
|
|
105
|
-
// function _verifyOrder(Order memory order)
|
|
106
|
-
// internal
|
|
107
|
-
// view
|
|
108
|
-
// returns (bytes32, /*orderHash*/ uint256 /*remainingMakerAmount*/ )
|
|
109
|
-
// {
|
|
110
|
-
// bytes32 orderHash = limitRouter.hashOrder(order);
|
|
111
|
-
// uint256 remainingMakerAmount = limitRouter.remainingRaw(orderHash);
|
|
112
|
-
|
|
113
|
-
// if (remainingMakerAmount == _ORDER_FILLED) return (orderHash, 0);
|
|
114
|
-
|
|
115
|
-
// if (remainingMakerAmount == _ORDER_DOES_NOT_EXIST) {
|
|
116
|
-
// remainingMakerAmount = order.makingAmount;
|
|
117
|
-
// } else {
|
|
118
|
-
// unchecked {
|
|
119
|
-
// remainingMakerAmount -= 1;
|
|
120
|
-
// }
|
|
121
|
-
// }
|
|
122
|
-
|
|
123
|
-
// // Check if order is valid predicate wise
|
|
124
|
-
// if (order.predicate.length > 0) {
|
|
125
|
-
// bool isValidPredicate = limitRouter.checkPredicate(order);
|
|
126
|
-
// require(isValidPredicate, "LOP: predicate returned false");
|
|
127
|
-
// }
|
|
128
|
-
|
|
129
|
-
// return (orderHash, remainingMakerAmount);
|
|
130
|
-
// }
|
|
131
|
-
|
|
132
|
-
// function _mintSyStatic(FillOrderParams[] memory params, IStandardizedYield SY) internal view {
|
|
133
|
-
// uint256 len = params.length;
|
|
134
|
-
// for (uint256 i = 0; i < len; i++) {
|
|
135
|
-
// FillOrderParams memory param = params[i];
|
|
136
|
-
// if (param.makingAmount == 0) continue;
|
|
137
|
-
|
|
138
|
-
// Order memory order = param.order;
|
|
139
|
-
|
|
140
|
-
// if (order.token != address(SY)) {
|
|
141
|
-
// param.makingAmount = SY.previewDeposit(order.token, param.makingAmount);
|
|
142
|
-
// }
|
|
143
|
-
// }
|
|
144
|
-
// }
|
|
145
|
-
// }
|