@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.
Files changed (316) hide show
  1. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol +5 -23
  2. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol +2 -5
  3. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol +6 -20
  4. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol +6 -27
  5. package/contracts/LiquidityMining/CrossChainMsg/libraries/ExcessivelySafeCall.sol +1 -2
  6. package/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol +1 -1
  7. package/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +16 -17
  8. package/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol +6 -7
  9. package/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol +7 -8
  10. package/contracts/LiquidityMining/PendleMerkleDistributor.sol +2 -11
  11. package/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol +14 -37
  12. package/contracts/LiquidityMining/VeDistributor/PendleFeeDistributorV2.sol +19 -34
  13. package/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +4 -14
  14. package/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +4 -16
  15. package/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +11 -39
  16. package/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +3 -10
  17. package/contracts/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +1 -1
  18. package/contracts/LiquidityMining/libraries/VeBalanceLib.sol +5 -20
  19. package/contracts/LiquidityMining/libraries/VeHistoryLib.sol +1 -3
  20. package/contracts/core/Market/MarketMathCore.sol +12 -37
  21. package/contracts/core/Market/OracleLib.sol +6 -24
  22. package/contracts/core/Market/PendleExternalRewardDistributor.sol +4 -10
  23. package/contracts/core/Market/PendleGauge.sol +3 -9
  24. package/contracts/core/Market/PendleMarket.sol +14 -39
  25. package/contracts/core/Market/PendleMarketFactory.sol +14 -21
  26. package/contracts/core/Market/v2/PendleGaugeV2.sol +8 -24
  27. package/contracts/core/Market/v2/PendleMarketFactoryV2.sol +7 -27
  28. package/contracts/core/Market/v2/PendleMarketV2.sol +13 -36
  29. package/contracts/core/Market/v3/PendleMarketFactoryV3.sol +137 -0
  30. package/contracts/core/Market/v3/PendleMarketV3.sol +360 -0
  31. package/contracts/core/RewardManager/PendleLinearDistributor.sol +143 -0
  32. package/contracts/core/RewardManager/RewardManager.sol +14 -7
  33. package/contracts/core/RewardManager/RewardManagerAbstract.sol +5 -17
  34. package/contracts/core/StandardizedYield/SYBase.sol +10 -40
  35. package/contracts/core/StandardizedYield/SYBaseUpg.sol +197 -0
  36. package/contracts/core/StandardizedYield/SYBaseWithRewards.sol +9 -41
  37. package/contracts/core/StandardizedYield/SYBaseWithRewardsUpg.sol +88 -0
  38. package/contracts/core/StandardizedYield/SYUtils.sol +1 -4
  39. package/contracts/core/StandardizedYield/StEthHelper.sol +3 -9
  40. package/contracts/core/StandardizedYield/implementations/AaveV3/PendleAaveV3SY.sol +94 -0
  41. package/contracts/core/StandardizedYield/implementations/AaveV3/libraries/AaveAdapterLib.sol +19 -0
  42. package/contracts/core/StandardizedYield/implementations/AaveV3/libraries/WadRayMath.sol +126 -0
  43. package/contracts/core/StandardizedYield/implementations/Ankr/PendleAnkrBNBSY.sol +4 -12
  44. package/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol +5 -19
  45. package/contracts/core/StandardizedYield/implementations/BalancerStable/AuraEthxBbAWethSY.sol +4 -14
  46. package/contracts/core/StandardizedYield/implementations/BalancerStable/AuraSwEthBbAWethSYV2.sol +4 -14
  47. package/contracts/core/StandardizedYield/implementations/BalancerStable/{PendleAuraWethVethSY.sol → AuraWethVethSYUpg.sol} +13 -20
  48. package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraBbAWethSwethSY.sol +3 -7
  49. package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethAnkrethSYV2.sol +12 -29
  50. package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRocketEthSYV2.sol +12 -29
  51. package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethStafiEthSY.sol +12 -29
  52. package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSYV2.sol +14 -39
  53. package/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWstethAnkreth.sol +7 -28
  54. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStableMath.sol +13 -30
  55. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreviewProxy.sol +1 -1
  56. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreviewV4.sol +50 -153
  57. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreviewV5.sol +50 -157
  58. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/Linear/BbAPoolHelper.sol +4 -16
  59. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/Linear/LinearMath.sol +6 -25
  60. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/Linear/LinearPreview.sol +36 -34
  61. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/MetaStable/MetaStableMath.sol +4 -13
  62. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/MetaStable/MetaStablePreview.sol +20 -58
  63. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSYV2.sol +28 -79
  64. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSYV3Upg.sol +310 -0
  65. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/StablePoolUserData.sol +1 -3
  66. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/StablePreviewBase.sol +2 -6
  67. package/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol +5 -13
  68. package/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol +9 -29
  69. package/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotRewardHelper.sol +2 -8
  70. package/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatileCommon.sol +1 -5
  71. package/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatileLpHelper.sol +8 -19
  72. package/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatilePreview.sol +7 -25
  73. package/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/PendleCamelotV1VolatileSY.sol +8 -27
  74. package/contracts/core/StandardizedYield/implementations/ChainlinkRelayer/PendleChainlinkReceiver.sol +2 -2
  75. package/contracts/core/StandardizedYield/implementations/ChainlinkRelayer/PendleChainlinkRelayer.sol +4 -9
  76. package/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol +3 -15
  77. package/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol +5 -23
  78. package/contracts/core/StandardizedYield/implementations/Convex/base/Curve3CrvPoolHelper.sol +10 -40
  79. package/contracts/core/StandardizedYield/implementations/Convex/base/CurveFraxUsdcPoolHelper.sol +2 -8
  80. package/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol +2 -7
  81. package/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol +5 -20
  82. package/contracts/core/StandardizedYield/implementations/Flux/FluxTokenLib.sol +6 -4
  83. package/contracts/core/StandardizedYield/implementations/Flux/PendleFluxLendingSY.sol +3 -11
  84. package/contracts/core/StandardizedYield/implementations/GLP/GLPPreviewHelper.sol +3 -9
  85. package/contracts/core/StandardizedYield/implementations/GLP/GMTokenPricingHelper.sol +115 -0
  86. package/contracts/core/StandardizedYield/implementations/GLP/PendleGMV2TokenSY.sol +134 -0
  87. package/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol +5 -19
  88. package/contracts/core/StandardizedYield/implementations/HMX/HLPPricingHelper.sol +3 -4
  89. package/contracts/core/StandardizedYield/implementations/HMX/PendleHlpSY.sol +18 -25
  90. package/contracts/core/StandardizedYield/implementations/Kyber/KyberMathHelper.sol +425 -0
  91. package/contracts/core/StandardizedYield/implementations/Kyber/KyberNftManagerBaseUpg.sol +438 -0
  92. package/contracts/core/StandardizedYield/implementations/Kyber/PendleKyberElasticSYUpg.sol +155 -0
  93. package/contracts/core/StandardizedYield/implementations/Kyber/libraries/FullMath.sol +123 -0
  94. package/contracts/core/StandardizedYield/implementations/Kyber/libraries/LiqDeltaMath.sol +17 -0
  95. package/contracts/core/StandardizedYield/implementations/Kyber/libraries/LiquidityMath.sol +74 -0
  96. package/contracts/core/StandardizedYield/implementations/Kyber/libraries/MathConstants.sol +19 -0
  97. package/contracts/core/StandardizedYield/implementations/Kyber/libraries/QtyDeltaMath.sol +103 -0
  98. package/contracts/core/StandardizedYield/implementations/Kyber/libraries/QuadMath.sol +31 -0
  99. package/contracts/core/StandardizedYield/implementations/Kyber/libraries/ReinvestmentMath.sol +26 -0
  100. package/contracts/core/StandardizedYield/implementations/Kyber/libraries/SafeCast.sol +73 -0
  101. package/contracts/core/StandardizedYield/implementations/Kyber/libraries/SwapMath.sol +272 -0
  102. package/contracts/core/StandardizedYield/implementations/Kyber/libraries/TickMath.sol +223 -0
  103. package/contracts/core/StandardizedYield/implementations/MUX/MlpPricingHelper.sol +26 -0
  104. package/contracts/core/StandardizedYield/implementations/MUX/PendleMlpSY.sol +195 -0
  105. package/contracts/core/StandardizedYield/implementations/MantleStakedEth/PendleMantleStakedEthSY.sol +12 -41
  106. package/contracts/core/StandardizedYield/implementations/MantleStakedEth/PendleOracleForSyProxy.sol +1 -1
  107. package/contracts/core/StandardizedYield/implementations/PendleArbitrumStakedEthSY.sol +13 -42
  108. package/contracts/core/StandardizedYield/implementations/PendleBridgedLSDSY.sol +4 -11
  109. package/contracts/core/StandardizedYield/implementations/PendleERC4626SY.sol +4 -16
  110. package/contracts/core/StandardizedYield/implementations/PendleEUSDSY.sol +3 -11
  111. package/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol +3 -11
  112. package/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol +5 -18
  113. package/contracts/core/StandardizedYield/implementations/PendleSfrxEthSY.sol +3 -7
  114. package/contracts/core/StandardizedYield/implementations/PendleStargateLPSY.sol +5 -18
  115. package/contracts/core/StandardizedYield/implementations/PendleWbEthSY.sol +3 -10
  116. package/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol +4 -12
  117. package/contracts/core/StandardizedYield/implementations/Silo/PendleSiloWithIncentiveSY.sol +157 -0
  118. package/contracts/core/StandardizedYield/implementations/Stader/PendleETHXSY.sol +4 -12
  119. package/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol +4 -12
  120. package/contracts/core/StandardizedYield/implementations/Thena/PendleThenaSY.sol +9 -29
  121. package/contracts/core/StandardizedYield/implementations/Thena/ThenaLpHelper.sol +3 -10
  122. package/contracts/core/StandardizedYield/implementations/Thena/ThenaMath.sol +9 -30
  123. package/contracts/core/StandardizedYield/implementations/Thena/ThenaPreview.sol +10 -40
  124. package/contracts/core/YieldContracts/InterestManagerYT.sol +6 -8
  125. package/contracts/core/YieldContracts/PendlePrincipalToken.sol +1 -1
  126. package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +2 -3
  127. package/contracts/core/YieldContracts/PendleYieldToken.sol +17 -44
  128. package/contracts/core/YieldContractsV2/InterestManagerYTV2.sol +5 -14
  129. package/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol +1 -1
  130. package/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol +2 -3
  131. package/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol +13 -48
  132. package/contracts/core/erc20/PendleERC20.sol +2 -8
  133. package/contracts/core/erc20/PendleERC20Permit.sol +2 -6
  134. package/contracts/core/erc20/PendleERC20PermitUpg.sol +82 -0
  135. package/contracts/core/erc20/PendleERC20Upg.sol +334 -0
  136. package/contracts/core/libraries/ArrayLib.sol +7 -8
  137. package/contracts/core/libraries/BaseSplitCodeFactory.sol +1 -6
  138. package/contracts/core/libraries/Errors.sol +19 -1
  139. package/contracts/core/libraries/ExpiryUtilsLib.sol +3 -26
  140. package/contracts/core/libraries/StringLib.sol +5 -21
  141. package/contracts/core/libraries/TokenHelper.sol +3 -3
  142. package/contracts/core/libraries/math/LogExpMath.sol +1 -4
  143. package/contracts/core/libraries/math/PMath.sol +13 -15
  144. package/contracts/interfaces/AaveV3/IAaveV3AToken.sol +15 -0
  145. package/contracts/interfaces/AaveV3/IAaveV3Pool.sol +11 -0
  146. package/contracts/interfaces/Balancer/IComposableStable.sol +3 -4
  147. package/contracts/interfaces/Balancer/IERC4626LinearPool.sol +2 -10
  148. package/contracts/interfaces/Balancer/IMetaStablePool.sol +3 -11
  149. package/contracts/interfaces/Balancer/IVault.sol +3 -8
  150. package/contracts/interfaces/BinanceEth/IWBETH.sol +1 -1
  151. package/contracts/interfaces/Camelot/ICamelotNFTFactory.sol +1 -3
  152. package/contracts/interfaces/Camelot/ICamelotNFTHandler.sol +2 -10
  153. package/contracts/interfaces/Camelot/ICamelotNitroPool.sol +0 -1
  154. package/contracts/interfaces/Camelot/ICamelotNitroPoolFactory.sol +3 -12
  155. package/contracts/interfaces/Camelot/ICamelotPair.sol +5 -25
  156. package/contracts/interfaces/Camelot/ICamelotRouter.sol +1 -5
  157. package/contracts/interfaces/Camelot/IXGrail.sol +3 -11
  158. package/contracts/interfaces/ConvexCurve/IBooster.sol +1 -3
  159. package/contracts/interfaces/Curve/ICrvPool.sol +3 -12
  160. package/contracts/interfaces/Curve/ITriCrvPool.sol +2 -9
  161. package/contracts/interfaces/Flux/IFluxErc20.sol +1 -1
  162. package/contracts/interfaces/Flux/IFluxInterestRateModel.sol +1 -5
  163. package/contracts/interfaces/GMX/IGMXPriceHelper.sol +6 -0
  164. package/contracts/interfaces/GMX/IGMXVault.sol +2 -9
  165. package/contracts/interfaces/GMX/IRewardRouterV2.sol +1 -4
  166. package/contracts/interfaces/HMX/IHLPStaking.sol +1 -1
  167. package/contracts/interfaces/HMX/IHMXCalculator.sol +1 -1
  168. package/contracts/interfaces/HMX/IHMXCompounder.sol +1 -1
  169. package/contracts/interfaces/HMX/IHMXStaking.sol +1 -1
  170. package/contracts/interfaces/HMX/IHMXVester.sol +1 -1
  171. package/contracts/interfaces/IApeStaking.sol +3 -9
  172. package/contracts/interfaces/IBenQiInterestRateModel.sol +1 -5
  173. package/contracts/interfaces/IDiamondCut.sol +1 -5
  174. package/contracts/interfaces/IDiamondLoupe.sol +1 -3
  175. package/contracts/interfaces/ILayerZeroReceiver.sol +1 -6
  176. package/contracts/interfaces/IPActionAddRemoveLiqV3.sol +10 -2
  177. package/contracts/interfaces/IPActionInfoStatic.sol +4 -7
  178. package/contracts/interfaces/IPActionMarketAuxStatic.sol +5 -9
  179. package/contracts/interfaces/IPActionMarketCoreStatic.sol +118 -58
  180. package/contracts/interfaces/IPActionMintRedeemStatic.sol +38 -21
  181. package/contracts/interfaces/IPActionMiscV3.sol +51 -26
  182. package/contracts/interfaces/IPActionStorageStatic.sol +5 -1
  183. package/contracts/interfaces/IPAllActionTypeV3.sol +1 -0
  184. package/contracts/interfaces/IPBulkSeller.sol +49 -0
  185. package/contracts/interfaces/IPBulkSellerFactory.sol +12 -0
  186. package/contracts/interfaces/IPBulkSellerSYCallback.sol +6 -0
  187. package/contracts/interfaces/IPFeeDistributor.sol +1 -3
  188. package/contracts/interfaces/IPFeeDistributorV2.sol +8 -7
  189. package/contracts/interfaces/IPGaugeController.sol +2 -8
  190. package/contracts/interfaces/IPGaugeControllerMainchain.sol +1 -5
  191. package/contracts/interfaces/IPInterestManagerYT.sol +3 -3
  192. package/contracts/interfaces/IPInterestManagerYTV2.sol +1 -4
  193. package/contracts/interfaces/IPLimitRouter.sol +24 -19
  194. package/contracts/interfaces/IPLinearDistributor.sol +21 -0
  195. package/contracts/interfaces/IPMarket.sol +4 -17
  196. package/contracts/interfaces/IPMarketFactory.sol +2 -13
  197. package/contracts/interfaces/IPMarketFactoryV3.sol +24 -0
  198. package/contracts/interfaces/IPMarketV3.sol +8 -0
  199. package/contracts/interfaces/IPOffchainStorage.sol +11 -0
  200. package/contracts/interfaces/IPPriceFeed.sol +6 -0
  201. package/contracts/interfaces/IPPtOracle.sol +2 -9
  202. package/contracts/interfaces/IPRouterHelper.sol +11 -7
  203. package/contracts/interfaces/IPRouterStatic.sol +1 -3
  204. package/contracts/interfaces/IPVotingController.sol +7 -19
  205. package/contracts/interfaces/IPVotingEscrowMainchain.sol +2 -8
  206. package/contracts/interfaces/IPYieldToken.sol +2 -8
  207. package/contracts/interfaces/IPYieldTokenV2.sol +1 -6
  208. package/contracts/interfaces/IPendlePreviewHelper.sol +2 -8
  209. package/contracts/interfaces/IRewardManager.sol +1 -4
  210. package/contracts/interfaces/IStETH.sol +1 -4
  211. package/contracts/interfaces/IStandardizedYield.sol +9 -16
  212. package/contracts/interfaces/IStargateLP.sol +0 -3
  213. package/contracts/interfaces/IStargateRouter.sol +1 -5
  214. package/contracts/interfaces/Kyber/IKyberElasticFactory.sol +157 -0
  215. package/contracts/interfaces/Kyber/IKyberElasticPool.sol +101 -0
  216. package/contracts/interfaces/Kyber/IKyberElasticRouter.sol +98 -0
  217. package/contracts/interfaces/Kyber/IKyberLiquidityMining.sol +209 -0
  218. package/contracts/interfaces/Kyber/IKyberMathHelper.sol +28 -0
  219. package/contracts/interfaces/Kyber/IKyberPositionManager.sol +179 -0
  220. package/contracts/interfaces/Lybra/IEUSD.sol +1 -1
  221. package/contracts/interfaces/MUX/IMUXRewardRouter.sol +139 -0
  222. package/contracts/interfaces/Silo/ISilo.sol +298 -0
  223. package/contracts/interfaces/Silo/ISiloIncentiveController.sol +16 -0
  224. package/contracts/interfaces/Silo/ISiloLens.sol +6 -0
  225. package/contracts/interfaces/Stader/IStaderStakeManager.sol +2 -2
  226. package/contracts/interfaces/Thena/IThenaFactory.sol +1 -5
  227. package/contracts/interfaces/Thena/IThenaGaugeV2.sol +1 -2
  228. package/contracts/interfaces/Thena/IThenaPair.sol +3 -5
  229. package/contracts/limit/LimitMathCore.sol +69 -60
  230. package/contracts/limit/{PendleOrderMixin.sol → LimitRouterBase.sol} +96 -79
  231. package/contracts/limit/PendleLimitRouter.sol +9 -13
  232. package/contracts/offchain-helpers/AutomateReady.sol +17 -32
  233. package/contracts/offchain-helpers/BaseSplitCodeFactoryContract.sol +6 -3
  234. package/contracts/offchain-helpers/BoringLpSeller.sol +4 -17
  235. package/contracts/offchain-helpers/BoringPtSeller.sol +2 -7
  236. package/contracts/offchain-helpers/Broadcaster.sol +1 -1
  237. package/contracts/offchain-helpers/BytesLib.sol +26 -14
  238. package/contracts/offchain-helpers/EmptyUUPS.sol +0 -1
  239. package/contracts/offchain-helpers/LegacyNFTHelper.sol +4 -23
  240. package/contracts/offchain-helpers/LimitBackendHelper.sol +25 -16
  241. package/contracts/offchain-helpers/MarketExchangeRateLib.sol +2 -13
  242. package/contracts/offchain-helpers/Multicall2.sol +2 -7
  243. package/contracts/offchain-helpers/PendleMulticallV1.sol +7 -7
  244. package/contracts/offchain-helpers/PendleMulticallV2.sol +12 -13
  245. package/contracts/offchain-helpers/PendleOffchainStorage.sol +59 -0
  246. package/contracts/offchain-helpers/SimulateHelper.sol +6 -7
  247. package/contracts/offchain-helpers/errors/SDKErrorsDirectory.sol +15 -1
  248. package/contracts/oracles/PendleLpOracleLib.sol +9 -10
  249. package/contracts/oracles/PendlePtOracle.sol +8 -19
  250. package/contracts/oracles/PendlePtOracleLib.sol +8 -13
  251. package/contracts/oracles/samples/PendleLpGlpOracle.sol +6 -10
  252. package/contracts/oracles/samples/PendlePtGlpOracle.sol +6 -10
  253. package/contracts/oracles/samples/PendlePtUsdChainlinkOracle.sol +8 -15
  254. package/contracts/router/ActionAddRemoveLiqV3.sol +147 -52
  255. package/contracts/router/ActionCallbackV3.sol +11 -4
  256. package/contracts/router/ActionMiscV3.sol +43 -33
  257. package/contracts/router/ActionSwapPTV3.sol +18 -6
  258. package/contracts/router/ActionSwapYTV3.sol +42 -14
  259. package/contracts/router/PendleRouterHelper.sol +72 -40
  260. package/contracts/router/PendleRouterV3.sol +50 -50
  261. package/contracts/router/base/ActionBase.sol +86 -43
  262. package/contracts/router/base/CallbackHelper.sol +18 -20
  263. package/contracts/router/base/MarketApproxLib.sol +36 -32
  264. package/contracts/router/swap-aggregator/PendleSwap.sol +31 -7
  265. package/contracts/router/swap-aggregator/kyberswap/interfaces/IAggregationExecutorOptimistic.sol +63 -0
  266. package/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelper.sol +314 -0
  267. package/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperL2.sol +560 -0
  268. package/contracts/router/swap-aggregator/kyberswap/{IMetaAggregationRouterV2.sol → interfaces/IMetaAggregationRouterV2.sol} +11 -6
  269. package/contracts/router/swap-aggregator/kyberswap/{KyberInputScalingHelper.sol → l1-contracts/InputScalingHelper.sol} +70 -19
  270. package/contracts/router/swap-aggregator/kyberswap/{ScalingDataLib.sol → l1-contracts/ScalingDataLib.sol} +111 -53
  271. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/BytesHelper.sol +29 -0
  272. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataReader.sol +149 -0
  273. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/CalldataWriter.sol +118 -0
  274. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/Common.sol +42 -0
  275. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/DexScaler.sol +382 -0
  276. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/ExecutorReader.sol +61 -0
  277. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/InputScalingHelperL2.sol +329 -0
  278. package/contracts/router/swap-aggregator/kyberswap/l2-contracts/ScalingDataL2Lib.sol +173 -0
  279. package/contracts/router/swap-aggregator/oneinch/I1inchAggregationRouterV5.sol +4 -10
  280. package/contracts/router/swap-aggregator/oneinch/OneInchAggregationRouterHelper.sol +20 -14
  281. package/deployments/1-core.json +5 -2
  282. package/deployments/1-markets/EPENDLE-SEP2024.json +12 -0
  283. package/deployments/1-markets/SFRAX-MARCH2024.json +10 -0
  284. package/deployments/1-markets/SILO-CRVUSD-MARCH2024.json +10 -0
  285. package/deployments/10-core.json +6 -3
  286. package/deployments/42161-core.json +5 -2
  287. package/deployments/42161-markets/AAVE-USDC-JUNE2024.json +11 -0
  288. package/deployments/42161-markets/ARBSILO-USDC-FEB2024.json +10 -0
  289. package/deployments/42161-markets/GM-ARB-USDC-MARCH2024.json +10 -0
  290. package/deployments/42161-markets/KYBER-AXLWSTETH-WSTETH-MARCH2024.json +10 -0
  291. package/deployments/42161-markets/MLP-MARCH2024.json +10 -0
  292. package/deployments/42161-markets/WSTETH-ARBITRUM-MARCH2024.json +11 -0
  293. package/deployments/42161-markets/WSTETHSILO-ETH-MARCH2024.json +11 -0
  294. package/deployments/56-core.json +5 -2
  295. package/deployments/merkle-distribution/2023-10-26.json +7300 -0
  296. package/deployments/merkle-distribution/2023-11-30.json +7730 -0
  297. package/package.json +8 -8
  298. package/contracts/limit/helpers/ArgumentsDecoder.sol +0 -47
  299. package/contracts/limit/helpers/Permitable.sol +0 -48
  300. package/contracts/limit/helpers/RevertReasonParser.sol +0 -75
  301. package/contracts/offchain-helpers/ChainlinkRelayerGelato.sol +0 -37
  302. package/contracts/offchain-helpers/PtAndLpToAsset.sol +0 -62
  303. package/contracts/offchain-helpers/router-static/PendleRouterStatic.sol +0 -19
  304. package/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol +0 -112
  305. package/contracts/offchain-helpers/router-static/base/ActionLimitOrdersStatic.sol +0 -145
  306. package/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol +0 -171
  307. package/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol +0 -582
  308. package/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol +0 -116
  309. package/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol +0 -64
  310. package/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol +0 -53
  311. package/contracts/offchain-helpers/router-static/base/StorageLayout.sol +0 -18
  312. package/contracts/router/swap-aggregator/kyberswap/IExecutorHelper.sol +0 -231
  313. package/deployments/1-markets/BALANCER-LP-AURA-VETH-WETH-SEP2024.json +0 -8
  314. /package/contracts/router/swap-aggregator/kyberswap/{IAggregationExecutor.sol → interfaces/IAggregationExecutor.sol} +0 -0
  315. /package/deployments/1-markets/{BALANCER-LP-AURA-BBAWETHSWETH-SEP-26-2024.json → deprecated/BALANCER-LP-AURA-BBAWETHSWETH-SEP-26-2024.json} +0 -0
  316. /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
- _distributeInterestPrivate(user1, index, pyIndex);
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;
@@ -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/IPPrincipalToken.sol";
5
5
  import "../../interfaces/IPYieldToken.sol";
@@ -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
- accuredAmount = totalInterest - feeAmount;
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
+ }