@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
pragma solidity 0.8.17;
|
|
2
|
+
pragma solidity ^0.8.17;
|
|
3
3
|
|
|
4
4
|
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
5
5
|
|
|
@@ -23,12 +23,7 @@ Invariance to maintain:
|
|
|
23
23
|
- address(0) & address(this) should never have any rewards & activeBalance accounting done. This is
|
|
24
24
|
guaranteed by address(0) & address(this) check in each updateForTwo function
|
|
25
25
|
*/
|
|
26
|
-
contract PendleYieldToken is
|
|
27
|
-
IPYieldToken,
|
|
28
|
-
PendleERC20Permit,
|
|
29
|
-
RewardManagerAbstract,
|
|
30
|
-
InterestManagerYT
|
|
31
|
-
{
|
|
26
|
+
contract PendleYieldToken is IPYieldToken, PendleERC20Permit, RewardManagerAbstract, InterestManagerYT {
|
|
32
27
|
using PMath for uint256;
|
|
33
28
|
using SafeERC20 for IERC20;
|
|
34
29
|
using ArrayLib for uint256[];
|
|
@@ -98,11 +93,7 @@ contract PendleYieldToken is
|
|
|
98
93
|
address[] memory receiverYTs = new address[](1);
|
|
99
94
|
uint256[] memory amountSyToMints = new uint256[](1);
|
|
100
95
|
|
|
101
|
-
(receiverPTs[0], receiverYTs[0], amountSyToMints[0]) = (
|
|
102
|
-
receiverPT,
|
|
103
|
-
receiverYT,
|
|
104
|
-
_getFloatingSyAmount()
|
|
105
|
-
);
|
|
96
|
+
(receiverPTs[0], receiverYTs[0], amountSyToMints[0]) = (receiverPT, receiverYT, _getFloatingSyAmount());
|
|
106
97
|
|
|
107
98
|
uint256[] memory amountPYOuts = _mintPY(receiverPTs, receiverYTs, amountSyToMints);
|
|
108
99
|
amountPYOut = amountPYOuts[0];
|
|
@@ -117,8 +108,7 @@ contract PendleYieldToken is
|
|
|
117
108
|
uint256 length = receiverPTs.length;
|
|
118
109
|
|
|
119
110
|
if (length == 0) revert Errors.ArrayEmpty();
|
|
120
|
-
if (receiverYTs.length != length || amountSyToMints.length != length)
|
|
121
|
-
revert Errors.ArrayLengthMismatch();
|
|
111
|
+
if (receiverYTs.length != length || amountSyToMints.length != length) revert Errors.ArrayLengthMismatch();
|
|
122
112
|
|
|
123
113
|
uint256 totalSyToMint = amountSyToMints.sum();
|
|
124
114
|
if (totalSyToMint > _getFloatingSyAmount())
|
|
@@ -132,9 +122,7 @@ contract PendleYieldToken is
|
|
|
132
122
|
* same time
|
|
133
123
|
* @dev PT/YT must be transferred to this contract prior to calling
|
|
134
124
|
*/
|
|
135
|
-
function redeemPY(
|
|
136
|
-
address receiver
|
|
137
|
-
) external nonReentrant updateData returns (uint256 amountSyOut) {
|
|
125
|
+
function redeemPY(address receiver) external nonReentrant updateData returns (uint256 amountSyOut) {
|
|
138
126
|
address[] memory receivers = new address[](1);
|
|
139
127
|
uint256[] memory amounts = new uint256[](1);
|
|
140
128
|
(receivers[0], amounts[0]) = (receiver, _getAmountPYToRedeem());
|
|
@@ -218,6 +206,7 @@ contract PendleYieldToken is
|
|
|
218
206
|
|
|
219
207
|
for (uint256 i = 0; i < tokens.length; i++) {
|
|
220
208
|
rewardsOut[i] = _selfBalance(tokens[i]) - postExpiry.userRewardOwed[tokens[i]];
|
|
209
|
+
emit CollectRewardFee(tokens[i], rewardsOut[i]);
|
|
221
210
|
}
|
|
222
211
|
|
|
223
212
|
_transferOut(tokens, treasury, rewardsOut);
|
|
@@ -225,6 +214,8 @@ contract PendleYieldToken is
|
|
|
225
214
|
interestOut = postExpiry.totalSyInterestForTreasury;
|
|
226
215
|
postExpiry.totalSyInterestForTreasury = 0;
|
|
227
216
|
_transferOut(SY, treasury, interestOut);
|
|
217
|
+
|
|
218
|
+
emit CollectInterestFee(interestOut);
|
|
228
219
|
}
|
|
229
220
|
|
|
230
221
|
/// @notice updates and returns the reward indexes
|
|
@@ -307,13 +298,7 @@ contract PendleYieldToken is
|
|
|
307
298
|
_mint(receiverYTs[i], amountPYOuts[i]);
|
|
308
299
|
IPPrincipalToken(PT).mintByYT(receiverPTs[i], amountPYOuts[i]);
|
|
309
300
|
|
|
310
|
-
emit Mint(
|
|
311
|
-
msg.sender,
|
|
312
|
-
receiverPTs[i],
|
|
313
|
-
receiverYTs[i],
|
|
314
|
-
amountSyToMints[i],
|
|
315
|
-
amountPYOuts[i]
|
|
316
|
-
);
|
|
301
|
+
emit Mint(msg.sender, receiverPTs[i], receiverYTs[i], amountSyToMints[i], amountPYOuts[i]);
|
|
317
302
|
}
|
|
318
303
|
}
|
|
319
304
|
|
|
@@ -335,10 +320,7 @@ contract PendleYieldToken is
|
|
|
335
320
|
|
|
336
321
|
for (uint256 i = 0; i < receivers.length; i++) {
|
|
337
322
|
uint256 syInterestPostExpiry;
|
|
338
|
-
(amountSyOuts[i], syInterestPostExpiry) = _calcSyRedeemableFromPY(
|
|
339
|
-
amountPYToRedeems[i],
|
|
340
|
-
index
|
|
341
|
-
);
|
|
323
|
+
(amountSyOuts[i], syInterestPostExpiry) = _calcSyRedeemableFromPY(amountPYToRedeems[i], index);
|
|
342
324
|
_transferOut(SY, receivers[i], amountSyOuts[i]);
|
|
343
325
|
totalSyInterestPostExpiry += syInterestPostExpiry;
|
|
344
326
|
|
|
@@ -349,10 +331,7 @@ contract PendleYieldToken is
|
|
|
349
331
|
}
|
|
350
332
|
}
|
|
351
333
|
|
|
352
|
-
function _calcPYToMint(
|
|
353
|
-
uint256 amountSy,
|
|
354
|
-
uint256 indexCurrent
|
|
355
|
-
) internal pure returns (uint256 amountPY) {
|
|
334
|
+
function _calcPYToMint(uint256 amountSy, uint256 indexCurrent) internal pure returns (uint256 amountPY) {
|
|
356
335
|
// doesn't matter before or after expiry, since mintPY is only allowed before expiry
|
|
357
336
|
return SYUtils.syToAsset(indexCurrent, amountSy);
|
|
358
337
|
}
|
|
@@ -407,12 +386,9 @@ contract PendleYieldToken is
|
|
|
407
386
|
}
|
|
408
387
|
|
|
409
388
|
function _pyIndexCurrent() internal returns (uint256 currentIndex) {
|
|
410
|
-
if (doCacheIndexSameBlock && pyIndexLastUpdatedBlock == block.number)
|
|
411
|
-
return _pyIndexStored;
|
|
389
|
+
if (doCacheIndexSameBlock && pyIndexLastUpdatedBlock == block.number) return _pyIndexStored;
|
|
412
390
|
|
|
413
|
-
uint128 index128 = PMath
|
|
414
|
-
.max(IStandardizedYield(SY).exchangeRate(), _pyIndexStored)
|
|
415
|
-
.Uint128();
|
|
391
|
+
uint128 index128 = PMath.max(IStandardizedYield(SY).exchangeRate(), _pyIndexStored).Uint128();
|
|
416
392
|
|
|
417
393
|
currentIndex = index128;
|
|
418
394
|
_pyIndexStored = index128;
|
|
@@ -477,6 +453,8 @@ contract PendleYieldToken is
|
|
|
477
453
|
|
|
478
454
|
_transferOut(tokens[i], treasury, feeAmount);
|
|
479
455
|
_transferOut(tokens[i], receiver, rewardAmounts[i]);
|
|
456
|
+
|
|
457
|
+
emit CollectRewardFee(tokens[i], feeAmount);
|
|
480
458
|
}
|
|
481
459
|
}
|
|
482
460
|
|
|
@@ -491,16 +469,11 @@ contract PendleYieldToken is
|
|
|
491
469
|
return SYUtils.assetToSy(index, balanceOf(user)) + userInterest[user].accrued;
|
|
492
470
|
}
|
|
493
471
|
|
|
494
|
-
function _updateRewardIndex()
|
|
495
|
-
internal
|
|
496
|
-
override
|
|
497
|
-
returns (address[] memory tokens, uint256[] memory indexes)
|
|
498
|
-
{
|
|
472
|
+
function _updateRewardIndex() internal override returns (address[] memory tokens, uint256[] memory indexes) {
|
|
499
473
|
tokens = getRewardTokens();
|
|
500
474
|
if (isExpired()) {
|
|
501
475
|
indexes = new uint256[](tokens.length);
|
|
502
|
-
for (uint256 i = 0; i < tokens.length; i++)
|
|
503
|
-
indexes[i] = postExpiry.firstRewardIndex[tokens[i]];
|
|
476
|
+
for (uint256 i = 0; i < tokens.length; i++) indexes[i] = postExpiry.firstRewardIndex[tokens[i]];
|
|
504
477
|
} else {
|
|
505
478
|
indexes = IStandardizedYield(SY).rewardIndexesCurrent();
|
|
506
479
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
pragma solidity 0.8.17;
|
|
2
|
+
pragma solidity ^0.8.17;
|
|
3
3
|
|
|
4
4
|
import "../../interfaces/IPYieldToken.sol";
|
|
5
5
|
import "../../interfaces/IPPrincipalToken.sol";
|
|
@@ -44,27 +44,18 @@ abstract contract InterestManagerYTV2 is TokenHelper, IPInterestManagerYTV2 {
|
|
|
44
44
|
function _updateAndDistributeInterestForTwo(address user1, address user2) internal virtual {
|
|
45
45
|
(uint256 index, uint256 pyIndex) = _updateInterestIndex();
|
|
46
46
|
|
|
47
|
-
if (user1 != address(0) && user1 != address(this))
|
|
48
|
-
|
|
49
|
-
if (user2 != address(0) && user2 != address(this))
|
|
50
|
-
_distributeInterestPrivate(user2, index, pyIndex);
|
|
47
|
+
if (user1 != address(0) && user1 != address(this)) _distributeInterestPrivate(user1, index, pyIndex);
|
|
48
|
+
if (user2 != address(0) && user2 != address(this)) _distributeInterestPrivate(user2, index, pyIndex);
|
|
51
49
|
}
|
|
52
50
|
|
|
53
|
-
function _doTransferOutInterest(
|
|
54
|
-
address user,
|
|
55
|
-
address SY
|
|
56
|
-
) internal returns (uint256 interestAmount) {
|
|
51
|
+
function _doTransferOutInterest(address user, address SY) internal returns (uint256 interestAmount) {
|
|
57
52
|
interestAmount = userInterest[user].accrued;
|
|
58
53
|
userInterest[user].accrued = 0;
|
|
59
54
|
_transferOut(SY, user, interestAmount);
|
|
60
55
|
}
|
|
61
56
|
|
|
62
57
|
// should only be callable from `_distributeInterestForTwo` & make sure user != address(0) && user != address(this)
|
|
63
|
-
function _distributeInterestPrivate(
|
|
64
|
-
address user,
|
|
65
|
-
uint256 currentIndex,
|
|
66
|
-
uint256 pyIndex
|
|
67
|
-
) private {
|
|
58
|
+
function _distributeInterestPrivate(address user, uint256 currentIndex, uint256 pyIndex) private {
|
|
68
59
|
assert(user != address(0) && user != address(this));
|
|
69
60
|
|
|
70
61
|
uint256 prevIndex = userInterest[user].index;
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
pragma solidity 0.8.17;
|
|
24
|
+
pragma solidity ^0.8.17;
|
|
25
25
|
|
|
26
26
|
import "../../interfaces/IPYieldContractFactory.sol";
|
|
27
27
|
|
|
@@ -106,8 +106,7 @@ contract PendleYieldContractFactoryV2 is BoringOwnableUpgradeable, IPYieldContra
|
|
|
106
106
|
uint32 expiry,
|
|
107
107
|
bool doCacheIndexSameBlock
|
|
108
108
|
) external returns (address PT, address YT) {
|
|
109
|
-
if (MiniHelpers.isTimeInThePast(expiry) || expiry % expiryDivisor != 0)
|
|
110
|
-
revert Errors.YCFactoryInvalidExpiry();
|
|
109
|
+
if (MiniHelpers.isTimeInThePast(expiry) || expiry % expiryDivisor != 0) revert Errors.YCFactoryInvalidExpiry();
|
|
111
110
|
|
|
112
111
|
if (getPT[SY][expiry] != address(0)) revert Errors.YCFactoryYieldContractExisted();
|
|
113
112
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
pragma solidity 0.8.17;
|
|
2
|
+
pragma solidity ^0.8.17;
|
|
3
3
|
|
|
4
4
|
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
5
5
|
|
|
@@ -23,12 +23,7 @@ Invariance to maintain:
|
|
|
23
23
|
- address(0) & address(this) should never have any rewards & activeBalance accounting done. This is
|
|
24
24
|
guaranteed by address(0) & address(this) check in each updateForTwo function
|
|
25
25
|
*/
|
|
26
|
-
contract PendleYieldTokenV2 is
|
|
27
|
-
IPYieldTokenV2,
|
|
28
|
-
PendleERC20Permit,
|
|
29
|
-
RewardManager,
|
|
30
|
-
InterestManagerYTV2
|
|
31
|
-
{
|
|
26
|
+
contract PendleYieldTokenV2 is IPYieldTokenV2, PendleERC20Permit, RewardManager, InterestManagerYTV2 {
|
|
32
27
|
using PMath for uint256;
|
|
33
28
|
using SafeERC20 for IERC20;
|
|
34
29
|
using ArrayLib for uint256[];
|
|
@@ -97,11 +92,7 @@ contract PendleYieldTokenV2 is
|
|
|
97
92
|
address[] memory receiverYTs = new address[](1);
|
|
98
93
|
uint256[] memory amountSyToMints = new uint256[](1);
|
|
99
94
|
|
|
100
|
-
(receiverPTs[0], receiverYTs[0], amountSyToMints[0]) = (
|
|
101
|
-
receiverPT,
|
|
102
|
-
receiverYT,
|
|
103
|
-
_getFloatingSyAmount()
|
|
104
|
-
);
|
|
95
|
+
(receiverPTs[0], receiverYTs[0], amountSyToMints[0]) = (receiverPT, receiverYT, _getFloatingSyAmount());
|
|
105
96
|
|
|
106
97
|
uint256[] memory amountPYOuts = _mintPY(receiverPTs, receiverYTs, amountSyToMints);
|
|
107
98
|
amountPYOut = amountPYOuts[0];
|
|
@@ -116,8 +107,7 @@ contract PendleYieldTokenV2 is
|
|
|
116
107
|
uint256 length = receiverPTs.length;
|
|
117
108
|
|
|
118
109
|
if (length == 0) revert Errors.ArrayEmpty();
|
|
119
|
-
if (receiverYTs.length != length || amountSyToMints.length != length)
|
|
120
|
-
revert Errors.ArrayLengthMismatch();
|
|
110
|
+
if (receiverYTs.length != length || amountSyToMints.length != length) revert Errors.ArrayLengthMismatch();
|
|
121
111
|
|
|
122
112
|
uint256 totalSyToMint = amountSyToMints.sum();
|
|
123
113
|
if (totalSyToMint > _getFloatingSyAmount())
|
|
@@ -131,9 +121,7 @@ contract PendleYieldTokenV2 is
|
|
|
131
121
|
* same time
|
|
132
122
|
* @dev PT/YT must be transferred to this contract prior to calling
|
|
133
123
|
*/
|
|
134
|
-
function redeemPY(
|
|
135
|
-
address receiver
|
|
136
|
-
) external nonReentrant updateData returns (uint256 amountSyOut) {
|
|
124
|
+
function redeemPY(address receiver) external nonReentrant updateData returns (uint256 amountSyOut) {
|
|
137
125
|
address[] memory receivers = new address[](1);
|
|
138
126
|
uint256[] memory amounts = new uint256[](1);
|
|
139
127
|
(receivers[0], amounts[0]) = (receiver, _getAmountPYToRedeem());
|
|
@@ -264,13 +252,7 @@ contract PendleYieldTokenV2 is
|
|
|
264
252
|
_mint(receiverYTs[i], amountPYOuts[i]);
|
|
265
253
|
IPPrincipalToken(PT).mintByYT(receiverPTs[i], amountPYOuts[i]);
|
|
266
254
|
|
|
267
|
-
emit Mint(
|
|
268
|
-
msg.sender,
|
|
269
|
-
receiverPTs[i],
|
|
270
|
-
receiverYTs[i],
|
|
271
|
-
amountSyToMints[i],
|
|
272
|
-
amountPYOuts[i]
|
|
273
|
-
);
|
|
255
|
+
emit Mint(msg.sender, receiverPTs[i], receiverYTs[i], amountSyToMints[i], amountPYOuts[i]);
|
|
274
256
|
}
|
|
275
257
|
}
|
|
276
258
|
|
|
@@ -296,10 +278,7 @@ contract PendleYieldTokenV2 is
|
|
|
296
278
|
|
|
297
279
|
for (uint256 i = 0; i < receivers.length; i++) {
|
|
298
280
|
uint256 syInterestPostExpiry;
|
|
299
|
-
(amountSyOuts[i], syInterestPostExpiry) = _calcSyRedeemableFromPY(
|
|
300
|
-
amountPYToRedeems[i],
|
|
301
|
-
index
|
|
302
|
-
);
|
|
281
|
+
(amountSyOuts[i], syInterestPostExpiry) = _calcSyRedeemableFromPY(amountPYToRedeems[i], index);
|
|
303
282
|
_transferOut(SY, receivers[i], amountSyOuts[i]);
|
|
304
283
|
totalSyInterestPostExpiry += syInterestPostExpiry;
|
|
305
284
|
|
|
@@ -310,10 +289,7 @@ contract PendleYieldTokenV2 is
|
|
|
310
289
|
_transferOut(SY, treasury, totalSyInterestPostExpiry);
|
|
311
290
|
}
|
|
312
291
|
|
|
313
|
-
function _calcPYToMint(
|
|
314
|
-
uint256 amountSy,
|
|
315
|
-
uint256 indexCurrent
|
|
316
|
-
) internal pure returns (uint256 amountPY) {
|
|
292
|
+
function _calcPYToMint(uint256 amountSy, uint256 indexCurrent) internal pure returns (uint256 amountPY) {
|
|
317
293
|
// doesn't matter before or after expiry, since mintPY is only allowed before expiry
|
|
318
294
|
return SYUtils.syToAsset(indexCurrent, amountSy);
|
|
319
295
|
}
|
|
@@ -359,23 +335,16 @@ contract PendleYieldTokenV2 is
|
|
|
359
335
|
//////////////////////////////////////////////////////////////*/
|
|
360
336
|
|
|
361
337
|
function _pyIndexCurrent() internal returns (uint256 currentIndex) {
|
|
362
|
-
if (doCacheIndexSameBlock && pyIndexLastUpdatedBlock == block.number)
|
|
363
|
-
return _pyIndexStored;
|
|
338
|
+
if (doCacheIndexSameBlock && pyIndexLastUpdatedBlock == block.number) return _pyIndexStored;
|
|
364
339
|
|
|
365
|
-
uint128 index128 = PMath
|
|
366
|
-
.max(IStandardizedYield(SY).exchangeRate(), _pyIndexStored)
|
|
367
|
-
.Uint128();
|
|
340
|
+
uint128 index128 = PMath.max(IStandardizedYield(SY).exchangeRate(), _pyIndexStored).Uint128();
|
|
368
341
|
|
|
369
342
|
currentIndex = index128;
|
|
370
343
|
_pyIndexStored = index128;
|
|
371
344
|
pyIndexLastUpdatedBlock = uint128(block.number);
|
|
372
345
|
}
|
|
373
346
|
|
|
374
|
-
function _collectInterest()
|
|
375
|
-
internal
|
|
376
|
-
override
|
|
377
|
-
returns (uint256 accuredAmount, uint256 currentIndex)
|
|
378
|
-
{
|
|
347
|
+
function _collectInterest() internal override returns (uint256 accruedAmount, uint256 currentIndex) {
|
|
379
348
|
uint256 prevIndex = _lastCollectedInterestIndex;
|
|
380
349
|
currentIndex = _pyIndexCurrent();
|
|
381
350
|
|
|
@@ -388,7 +357,7 @@ contract PendleYieldTokenV2 is
|
|
|
388
357
|
|
|
389
358
|
uint256 totalInterest = _calcInterest(totalSupply(), prevIndex, currentIndex);
|
|
390
359
|
uint256 feeAmount = totalInterest.mulDown(interestFeeRate);
|
|
391
|
-
|
|
360
|
+
accruedAmount = totalInterest - feeAmount;
|
|
392
361
|
|
|
393
362
|
_transferOut(SY, treasury, feeAmount);
|
|
394
363
|
_updateSyReserve();
|
|
@@ -398,11 +367,7 @@ contract PendleYieldTokenV2 is
|
|
|
398
367
|
_lastCollectedInterestIndex = currentIndex;
|
|
399
368
|
}
|
|
400
369
|
|
|
401
|
-
function _calcInterest(
|
|
402
|
-
uint256 principal,
|
|
403
|
-
uint256 prevIndex,
|
|
404
|
-
uint256 currentIndex
|
|
405
|
-
) internal pure returns (uint256) {
|
|
370
|
+
function _calcInterest(uint256 principal, uint256 prevIndex, uint256 currentIndex) internal pure returns (uint256) {
|
|
406
371
|
return (principal * (currentIndex - prevIndex)).divDown(prevIndex * currentIndex);
|
|
407
372
|
}
|
|
408
373
|
|
|
@@ -103,10 +103,7 @@ contract PendleERC20 is Context, IERC20, IERC20Metadata {
|
|
|
103
103
|
* - `to` cannot be the zero address.
|
|
104
104
|
* - the caller must have a balance of at least `amount`.
|
|
105
105
|
*/
|
|
106
|
-
function transfer(
|
|
107
|
-
address to,
|
|
108
|
-
uint256 amount
|
|
109
|
-
) external virtual override nonReentrant returns (bool) {
|
|
106
|
+
function transfer(address to, uint256 amount) external virtual override nonReentrant returns (bool) {
|
|
110
107
|
address owner = _msgSender();
|
|
111
108
|
_transfer(owner, to, amount);
|
|
112
109
|
return true;
|
|
@@ -115,10 +112,7 @@ contract PendleERC20 is Context, IERC20, IERC20Metadata {
|
|
|
115
112
|
/**
|
|
116
113
|
* @dev See {IERC20-allowance}.
|
|
117
114
|
*/
|
|
118
|
-
function allowance(
|
|
119
|
-
address owner,
|
|
120
|
-
address spender
|
|
121
|
-
) public view virtual override returns (uint256) {
|
|
115
|
+
function allowance(address owner, address spender) public view virtual override returns (uint256) {
|
|
122
116
|
return _allowances[owner][spender];
|
|
123
117
|
}
|
|
124
118
|
|
|
@@ -20,9 +20,7 @@ contract PendleERC20Permit is PendleERC20, IERC20Permit, EIP712 {
|
|
|
20
20
|
|
|
21
21
|
// solhint-disable-next-line var-name-mixedcase
|
|
22
22
|
bytes32 private constant _PERMIT_TYPEHASH =
|
|
23
|
-
keccak256(
|
|
24
|
-
"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
|
|
25
|
-
);
|
|
23
|
+
keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
|
|
26
24
|
|
|
27
25
|
constructor(
|
|
28
26
|
string memory name_,
|
|
@@ -44,9 +42,7 @@ contract PendleERC20Permit is PendleERC20, IERC20Permit, EIP712 {
|
|
|
44
42
|
) public virtual override {
|
|
45
43
|
require(block.timestamp <= deadline, "ERC20Permit: expired deadline");
|
|
46
44
|
|
|
47
|
-
bytes32 structHash = keccak256(
|
|
48
|
-
abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline)
|
|
49
|
-
);
|
|
45
|
+
bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline));
|
|
50
46
|
|
|
51
47
|
bytes32 hash = _hashTypedDataV4(structHash);
|
|
52
48
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import "./PendleERC20Upg.sol";
|
|
7
|
+
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
8
|
+
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
|
9
|
+
import "@openzeppelin/contracts/utils/Context.sol";
|
|
10
|
+
import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";
|
|
11
|
+
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
|
12
|
+
import "@openzeppelin/contracts-upgradeable/utils/cryptography/draft-EIP712Upgradeable.sol";
|
|
13
|
+
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
|
|
14
|
+
import "@openzeppelin/contracts/utils/Counters.sol";
|
|
15
|
+
|
|
16
|
+
/// @dev forked from OZ's ERC20Permit
|
|
17
|
+
abstract contract PendleERC20PermitUpg is PendleERC20Upg, IERC20Permit, EIP712Upgradeable {
|
|
18
|
+
using Counters for Counters.Counter;
|
|
19
|
+
|
|
20
|
+
mapping(address => Counters.Counter) private _nonces;
|
|
21
|
+
|
|
22
|
+
uint256[100] private __gap;
|
|
23
|
+
|
|
24
|
+
// solhint-disable-next-line var-name-mixedcase
|
|
25
|
+
bytes32 private constant _PERMIT_TYPEHASH =
|
|
26
|
+
keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
|
|
27
|
+
|
|
28
|
+
function __ERC20PermitUpg_init(string memory name_, string memory symbol_) internal onlyInitializing {
|
|
29
|
+
__ERC20Upg_init(name_, symbol_);
|
|
30
|
+
__EIP712_init(name_, "1");
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @dev See {IERC20Permit-permit}.
|
|
35
|
+
*/
|
|
36
|
+
function permit(
|
|
37
|
+
address owner,
|
|
38
|
+
address spender,
|
|
39
|
+
uint256 value,
|
|
40
|
+
uint256 deadline,
|
|
41
|
+
uint8 v,
|
|
42
|
+
bytes32 r,
|
|
43
|
+
bytes32 s
|
|
44
|
+
) public virtual override {
|
|
45
|
+
require(block.timestamp <= deadline, "ERC20Permit: expired deadline");
|
|
46
|
+
|
|
47
|
+
bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline));
|
|
48
|
+
|
|
49
|
+
bytes32 hash = _hashTypedDataV4(structHash);
|
|
50
|
+
|
|
51
|
+
address signer = ECDSA.recover(hash, v, r, s);
|
|
52
|
+
require(signer == owner, "ERC20Permit: invalid signature");
|
|
53
|
+
|
|
54
|
+
_approve(owner, spender, value);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @dev See {IERC20Permit-nonces}.
|
|
59
|
+
*/
|
|
60
|
+
function nonces(address owner) public view virtual override returns (uint256) {
|
|
61
|
+
return _nonces[owner].current();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @dev See {IERC20Permit-DOMAIN_SEPARATOR}.
|
|
66
|
+
*/
|
|
67
|
+
// solhint-disable-next-line func-name-mixedcase
|
|
68
|
+
function DOMAIN_SEPARATOR() external view override returns (bytes32) {
|
|
69
|
+
return _domainSeparatorV4();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @dev "Consume a nonce": return the current value and increment.
|
|
74
|
+
*
|
|
75
|
+
* _Available since v4.1._
|
|
76
|
+
*/
|
|
77
|
+
function _useNonce(address owner) internal virtual returns (uint256 current) {
|
|
78
|
+
Counters.Counter storage nonce = _nonces[owner];
|
|
79
|
+
current = nonce.current();
|
|
80
|
+
nonce.increment();
|
|
81
|
+
}
|
|
82
|
+
}
|