@pendle/core-v2 2.23.1 → 2.23.3-mantle

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 (289) hide show
  1. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.dbg.json +1 -1
  2. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.dbg.json +1 -1
  3. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.dbg.json +1 -1
  4. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol/PendleMsgSenderAppUpg.dbg.json +1 -1
  5. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol/LayerZeroHelper.dbg.json +1 -1
  6. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  7. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  8. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  9. package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.dbg.json +1 -1
  10. package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.json +2 -2
  11. package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributorV2.sol/PendleFeeDistributorV2.dbg.json +1 -1
  12. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  13. package/build/artifacts/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  14. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  15. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  16. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  17. package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  18. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.dbg.json +1 -1
  19. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  20. package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.dbg.json +1 -1
  21. package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.dbg.json +1 -1
  22. package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.dbg.json +1 -1
  23. package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  24. package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.dbg.json +1 -1
  25. package/build/artifacts/contracts/core/Market/PendleExternalRewardDistributor.sol/PendleExternalRewardDistributor.dbg.json +4 -0
  26. package/build/artifacts/contracts/core/Market/PendleExternalRewardDistributor.sol/PendleExternalRewardDistributor.json +373 -0
  27. package/build/artifacts/contracts/core/Market/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  28. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  29. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +2 -2
  30. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  31. package/build/artifacts/contracts/core/Market/v2/PendleGaugeV2.sol/PendleGaugeV2.dbg.json +4 -0
  32. package/build/artifacts/contracts/core/Market/v2/PendleGaugeV2.sol/PendleGaugeV2.json +128 -0
  33. package/build/artifacts/contracts/core/Market/v2/PendleMarketFactoryV2.sol/PendleMarketFactoryV2.dbg.json +4 -0
  34. package/build/artifacts/contracts/core/Market/v2/PendleMarketFactoryV2.sol/PendleMarketFactoryV2.json +682 -0
  35. package/build/artifacts/contracts/core/Market/v2/PendleMarketV2.sol/PendleMarketV2.dbg.json +4 -0
  36. package/build/artifacts/contracts/core/Market/v2/PendleMarketV2.sol/PendleMarketV2.json +1219 -0
  37. package/build/artifacts/contracts/core/RewardManager/RewardManager.sol/RewardManager.dbg.json +1 -1
  38. package/build/artifacts/contracts/core/RewardManager/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  39. package/build/artifacts/contracts/core/StandardizedYield/PYIndex.sol/PYIndexLib.dbg.json +1 -1
  40. package/build/artifacts/contracts/core/StandardizedYield/SYBase.sol/SYBase.dbg.json +1 -1
  41. package/build/artifacts/contracts/core/StandardizedYield/SYBaseWithRewards.sol/SYBaseWithRewards.dbg.json +1 -1
  42. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ankr/PendleAnkrBNBSY.sol/PendleAnkrBNBSY.dbg.json +1 -1
  43. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol/sAPE.dbg.json +1 -1
  44. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/AuraEthxBbAWethSY.sol/AuraEthxBbAWethSY.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/AuraEthxBbAWethSY.sol/AuraEthxBbAWethSY.json +2 -2
  46. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraBbAWethSwethSY.sol/PendleAuraBbAWethSwethSY.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraBbAWethSwethSY.sol/PendleAuraBbAWethSwethSY.json +2 -2
  48. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethAnkrethSYV2.sol/PendleAuraWethAnkrethSYV2.dbg.json +1 -1
  49. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethAnkrethSYV2.sol/PendleAuraWethAnkrethSYV2.json +2 -2
  50. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRocketEthSYV2.sol/PendleAuraWethRocketEthSYV2.dbg.json +1 -1
  51. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRocketEthSYV2.sol/PendleAuraWethRocketEthSYV2.json +2 -2
  52. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethStafiEthSY.sol/PendleAuraWethStafiEthSY.dbg.json +1 -1
  53. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethStafiEthSY.sol/PendleAuraWethStafiEthSY.json +2 -2
  54. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethVethSY.sol/PendleAuraWethVethSY.dbg.json +1 -1
  55. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethVethSY.sol/PendleAuraWethVethSY.json +2 -2
  56. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSYV2.sol/PendleAuraWethWstethSYV2.dbg.json +1 -1
  57. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSYV2.sol/PendleAuraWethWstethSYV2.json +2 -2
  58. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWstethAnkreth.sol/PendleAuraWstethAnkreth.dbg.json +1 -1
  59. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWstethAnkreth.sol/PendleAuraWstethAnkreth.json +2 -2
  60. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStableMath.sol/ComposableStableMath.dbg.json +1 -1
  61. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreview.sol/ComposableStablePreview.dbg.json +1 -1
  62. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/FixedPoint.sol/FixedPoint.dbg.json +1 -1
  63. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/Linear/BbAPoolHelper.sol/BbAPoolHelper.dbg.json +1 -1
  64. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/Linear/BbAPoolHelper.sol/BbAWethHelper.dbg.json +1 -1
  65. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/Linear/LinearMath.sol/LinearMath.dbg.json +1 -1
  66. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/Linear/LinearPreview.sol/LinearPreview.dbg.json +1 -1
  67. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/MetaStable/MetaStableMath.sol/MetaStableMath.dbg.json +1 -1
  68. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/MetaStable/MetaStablePreview.sol/MetaStablePreview.dbg.json +1 -1
  69. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSYV2.sol/PendleAuraBalancerStableLPSYV2.dbg.json +1 -1
  70. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  71. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.dbg.json +1 -1
  72. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.json +2 -2
  73. package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotRewardHelper.sol/CamelotRewardHelper.dbg.json +1 -1
  74. package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatileCommon.sol/CamelotV1VolatileCommon.dbg.json +1 -1
  75. package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatileLpHelper.sol/CamelotV1VolatileLpHelper.dbg.json +1 -1
  76. package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/CamelotV1VolatilePreview.sol/CamelotV1VolatilePreview.dbg.json +1 -1
  77. package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/PendleCamelotV1VolatileSY.sol/PendleCamelotV1VolatileSY.dbg.json +1 -1
  78. package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/PendleCamelotV1VolatileSY.sol/PendleCamelotV1VolatileSY.json +2 -2
  79. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.dbg.json +1 -1
  80. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.json +2 -2
  81. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.dbg.json +1 -1
  82. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.json +2 -2
  83. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/Curve3CrvPoolHelper.sol/Curve3CrvPoolHelper.dbg.json +1 -1
  84. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveFraxUsdcPoolHelper.sol/CurveFraxUsdcPoolHelper.dbg.json +1 -1
  85. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol/CurveUsdd3CrvPoolHelper.dbg.json +1 -1
  86. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol/PendleConvexLPSY.dbg.json +1 -1
  87. package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol/PendleGlpSY.dbg.json +1 -1
  88. package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol/PendleGlpSY.json +2 -2
  89. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleArbitrumStakedEthSY.sol/PendleArbitrumStakedEthSY.dbg.json +1 -1
  90. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol/PendleGDaiSY.dbg.json +1 -1
  91. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.dbg.json +1 -1
  92. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleSfrxEthSY.sol/PendleSfrxEthSY.dbg.json +1 -1
  93. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleStargateLPSY.sol/PendleStargateLPSY.dbg.json +1 -1
  94. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleStargateLPSY.sol/PendleStargateLPSY.json +2 -2
  95. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWbEthSY.sol/PendleWbEthSY.dbg.json +1 -1
  96. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.dbg.json +1 -1
  97. package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleSwETH.sol/SwETHSY.dbg.json +1 -1
  98. package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/PendleThenaSY.sol/PendleThenaSY.dbg.json +1 -1
  99. package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/PendleThenaSY.sol/PendleThenaSY.json +2 -2
  100. package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaLpHelper.sol/ThenaLpHelper.dbg.json +1 -1
  101. package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaMath.sol/ThenaMath.dbg.json +1 -1
  102. package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaPreview.sol/IThenaSY.dbg.json +1 -1
  103. package/build/artifacts/contracts/core/StandardizedYield/implementations/Thena/ThenaPreview.sol/ThenaPreview.dbg.json +1 -1
  104. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  105. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  106. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  107. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +2 -2
  108. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  109. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
  110. package/build/artifacts/contracts/core/YieldContractsV2/InterestManagerYTV2.sol/InterestManagerYTV2.dbg.json +1 -1
  111. package/build/artifacts/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol/PendlePrincipalTokenV2.dbg.json +1 -1
  112. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.dbg.json +1 -1
  113. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.json +2 -2
  114. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.dbg.json +1 -1
  115. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.json +2 -2
  116. package/build/artifacts/contracts/core/libraries/ArrayLib.sol/ArrayLib.dbg.json +1 -1
  117. package/build/artifacts/contracts/core/libraries/ArrayLib.sol/ArrayLib.json +2 -2
  118. package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.dbg.json +1 -1
  119. package/build/artifacts/contracts/core/libraries/math/Math.sol/Math.dbg.json +1 -1
  120. package/build/artifacts/contracts/interfaces/Ankr/IAnkrBNB.sol/IAnkrBNB.dbg.json +1 -1
  121. package/build/artifacts/contracts/interfaces/Ankr/IAnkrLiquidStaking.sol/IAnkrLiquidStaking.dbg.json +1 -1
  122. package/build/artifacts/contracts/interfaces/BinanceEth/IWBETH.sol/IWBETH.dbg.json +1 -1
  123. package/build/artifacts/contracts/interfaces/Camelot/ICamelotNFTPool.sol/ICamelotNFTPool.dbg.json +1 -1
  124. package/build/artifacts/contracts/interfaces/Camelot/ICamelotNitroPool.sol/ICamelotNitroPool.dbg.json +1 -1
  125. package/build/artifacts/contracts/interfaces/Camelot/ICamelotPair.sol/ICamelotPair.dbg.json +1 -1
  126. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
  127. package/build/artifacts/contracts/interfaces/IPActionInfoStatic.sol/IPActionInfoStatic.dbg.json +1 -1
  128. package/build/artifacts/contracts/interfaces/IPActionMarketAuxStatic.sol/IPActionMarketAuxStatic.dbg.json +1 -1
  129. package/build/artifacts/contracts/interfaces/IPActionMarketCoreStatic.sol/IPActionMarketCoreStatic.dbg.json +1 -1
  130. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
  131. package/build/artifacts/contracts/interfaces/IPActionMintRedeemStatic.sol/IPActionMintRedeemStatic.dbg.json +1 -1
  132. package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.dbg.json +1 -1
  133. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
  134. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
  135. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  136. package/build/artifacts/contracts/interfaces/IPBulkSeller.sol/IPBulkSeller.dbg.json +1 -1
  137. package/build/artifacts/contracts/interfaces/IPExternalRewardDistributor.sol/IPExternalRewardDistributor.dbg.json +4 -0
  138. package/build/artifacts/contracts/interfaces/IPExternalRewardDistributor.sol/IPExternalRewardDistributor.json +109 -0
  139. package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.dbg.json +1 -1
  140. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  141. package/build/artifacts/contracts/interfaces/IPMarketFactoryV2.sol/IPMarketFactoryV2.dbg.json +4 -0
  142. package/build/artifacts/contracts/interfaces/IPMarketFactoryV2.sol/IPMarketFactoryV2.json +166 -0
  143. package/build/artifacts/contracts/interfaces/IPRouterHelper.sol/IPRouterHelper.dbg.json +1 -1
  144. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
  145. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  146. package/build/artifacts/contracts/interfaces/IPVotingEscrowMainchain.sol/IPVotingEscrowMainchain.dbg.json +1 -1
  147. package/build/artifacts/contracts/interfaces/IPendlePreviewHelper.sol/IPendlePreviewHelper.dbg.json +1 -1
  148. package/build/artifacts/contracts/interfaces/IStandardizedYield.sol/IStandardizedYield.dbg.json +1 -1
  149. package/build/artifacts/contracts/interfaces/ISwETH.sol/ISwETH.dbg.json +1 -1
  150. package/build/artifacts/contracts/interfaces/Thena/IThenaFactory.sol/IThenaFactory.dbg.json +1 -1
  151. package/build/artifacts/contracts/interfaces/Thena/IThenaGaugeV2.sol/IThenaGaugeV2.dbg.json +1 -1
  152. package/build/artifacts/contracts/interfaces/Thena/IThenaPair.sol/IThenaPair.dbg.json +1 -1
  153. package/build/artifacts/contracts/interfaces/Thena/IThenaRouter.sol/IThenaRouter.dbg.json +1 -1
  154. package/build/artifacts/contracts/offchain-helpers/BoringLpSeller.sol/BoringLpSeller.dbg.json +1 -1
  155. package/build/artifacts/contracts/offchain-helpers/BoringPtSeller.sol/BoringPtSeller.dbg.json +1 -1
  156. package/build/artifacts/contracts/offchain-helpers/Broadcaster.sol/Broadcaster.dbg.json +1 -1
  157. package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.dbg.json +1 -1
  158. package/build/artifacts/contracts/offchain-helpers/LegacyNFTHelper.sol/LegacyNFTHelper.dbg.json +1 -1
  159. package/build/artifacts/contracts/offchain-helpers/LegacyNFTHelper.sol/StarNFTV1.dbg.json +1 -1
  160. package/build/artifacts/contracts/offchain-helpers/MarketExchangeRateLib.sol/MarketExchangeRateLib.dbg.json +1 -1
  161. package/build/artifacts/contracts/offchain-helpers/PtAndLpToAsset.sol/PtAndLpToAsset.dbg.json +1 -1
  162. package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.dbg.json +1 -1
  163. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.dbg.json +1 -1
  164. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.dbg.json +1 -1
  165. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.dbg.json +1 -1
  166. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.dbg.json +1 -1
  167. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.dbg.json +1 -1
  168. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.dbg.json +1 -1
  169. package/build/artifacts/contracts/offchain-helpers/router-static/base/StorageLayout.sol/StorageLayout.dbg.json +1 -1
  170. package/build/artifacts/contracts/oracles/PendleLpOracleLib.sol/PendleLpOracleLib.dbg.json +1 -1
  171. package/build/artifacts/contracts/oracles/PendlePtOracle.sol/PendlePtOracle.dbg.json +1 -1
  172. package/build/artifacts/contracts/oracles/PendlePtOracleLib.sol/PendlePtOracleLib.dbg.json +1 -1
  173. package/build/artifacts/contracts/oracles/samples/PendleLpGlpOracle.sol/PendleLpGlpOracle.dbg.json +1 -1
  174. package/build/artifacts/contracts/oracles/samples/PendlePtGlpOracle.sol/PendlePtGlpOracle.dbg.json +1 -1
  175. package/build/artifacts/contracts/oracles/samples/PendlePtUsdChainlinkOracle.sol/PendlePtUsdChainlinkOracle.dbg.json +1 -1
  176. package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
  177. package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
  178. package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
  179. package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
  180. package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  181. package/build/artifacts/contracts/router/PendleRouterHelper.sol/PendleRouterHelper.dbg.json +1 -1
  182. package/build/artifacts/contracts/router/base/ActionBaseCallback.sol/ActionBaseCallback.dbg.json +1 -1
  183. package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
  184. package/build/artifacts/contracts/router/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
  185. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
  186. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
  187. package/build/artifacts/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol/I1inchAggregationRouterV5.dbg.json +1 -1
  188. package/build/artifacts/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol/OneInchAggregationRouterHelper.dbg.json +1 -1
  189. package/build/artifacts/contracts/router/swap-aggregator/PendleSwap.sol/PendleSwap.dbg.json +1 -1
  190. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/IExecutorHelper.sol/IExecutorHelper.dbg.json +1 -1
  191. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/KyberInputScalingHelper.sol/KyberInputScalingHelper.dbg.json +1 -1
  192. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/ScalingDataLib.sol/ScalingDataLib.dbg.json +1 -1
  193. package/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol +4 -0
  194. package/contracts/core/Market/PendleExternalRewardDistributor.sol +135 -0
  195. package/contracts/core/Market/v2/PendleGaugeV2.sol +142 -0
  196. package/contracts/core/Market/v2/PendleMarketFactoryV2.sol +177 -0
  197. package/contracts/core/Market/v2/PendleMarketV2.sol +379 -0
  198. package/contracts/core/RewardManager/RewardManager.sol +0 -1
  199. package/contracts/core/RewardManager/RewardManagerAbstract.sol +3 -2
  200. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreview.sol +1 -607
  201. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreviewProxy.sol +53 -0
  202. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreviewV4.sol +600 -0
  203. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreviewV5.sol +621 -0
  204. package/contracts/core/StandardizedYield/implementations/BalancerStable/base/FixedPoint.sol +8 -0
  205. package/contracts/core/StandardizedYield/implementations/ChainlinkRelayer/PendleChainlinkReceiver.sol +46 -0
  206. package/contracts/core/StandardizedYield/implementations/ChainlinkRelayer/PendleChainlinkRelayer.sol +43 -0
  207. package/contracts/core/StandardizedYield/implementations/MantleStakedEth/PendleMantleStakedEthSY.sol +120 -0
  208. package/contracts/core/StandardizedYield/implementations/MantleStakedEth/PendleOracleForSyProxy.sol +23 -0
  209. package/contracts/core/libraries/ArrayLib.sol +32 -0
  210. package/contracts/core/libraries/Errors.sol +2 -0
  211. package/contracts/interfaces/Balancer/IPComposableStablePreview.sol +23 -0
  212. package/contracts/interfaces/Balancer/IVersion.sol +13 -0
  213. package/contracts/interfaces/IPExternalRewardDistributor.sol +19 -0
  214. package/contracts/interfaces/IPMarketFactoryV2.sol +8 -0
  215. package/contracts/interfaces/IPOracleForSy.sol +7 -0
  216. package/contracts/offchain-helpers/AutomateReady.sol +111 -0
  217. package/contracts/offchain-helpers/ChainlinkRelayerAutomation.sol +52 -0
  218. package/contracts/offchain-helpers/ChainlinkRelayerGelato.sol +36 -0
  219. package/contracts/offchain-helpers/errors/SDKErrorsDirectory.sol +149 -0
  220. package/contracts/router/swap-aggregator/PendleSwap.sol +7 -2
  221. package/deployments/5000-core.json +29 -0
  222. package/deployments/5000-markets/WSTETH-MANTLE-MARCH2024.json +10 -0
  223. package/package.json +7 -7
  224. package/typechain-types/AuraSwEthBbAWethSYV2.ts +1532 -0
  225. package/typechain-types/BotActionCallback.ts +1093 -0
  226. package/typechain-types/ComposableStablePreviewProxy.ts +352 -0
  227. package/typechain-types/ComposableStablePreviewV4.ts +217 -0
  228. package/typechain-types/ComposableStablePreviewV5.ts +217 -0
  229. package/typechain-types/IPComposableStablePreview.ts +217 -0
  230. package/typechain-types/IPOracleForSy.ts +87 -0
  231. package/typechain-types/IVersion.ts +81 -0
  232. package/typechain-types/LiquiditySeedingHelper.ts +128 -0
  233. package/typechain-types/LongYieldActionHelper.ts +1093 -0
  234. package/typechain-types/LongYieldTradingBot.ts +1093 -0
  235. package/typechain-types/PendleChainlinkReceiver.ts +239 -0
  236. package/typechain-types/PendleChainlinkRelayer.ts +158 -0
  237. package/typechain-types/PendleExternalRewardDistributor.ts +49 -0
  238. package/typechain-types/PendleMantleStakedEthSY.ts +1222 -0
  239. package/typechain-types/PendleMarketFactoryV2.ts +26 -24
  240. package/typechain-types/PendleOracleForSyProxy.ts +275 -0
  241. package/typechain-types/ShortYieldActionHelper.ts +1093 -0
  242. package/typechain-types/ShortYieldTradingBot.ts +1093 -0
  243. package/typechain-types/TradingBotBase.ts +1093 -0
  244. package/typechain-types/factories/AuraEthxBbAWethSY__factory.ts +1 -1
  245. package/typechain-types/factories/AuraSwEthBbAWethSYV2__factory.ts +1244 -0
  246. package/typechain-types/factories/BotActionCallback__factory.ts +899 -9
  247. package/typechain-types/factories/ComposableStablePreviewProxy__factory.ts +288 -0
  248. package/typechain-types/factories/ComposableStablePreviewV4__factory.ts +190 -0
  249. package/typechain-types/factories/ComposableStablePreviewV5__factory.ts +190 -0
  250. package/typechain-types/factories/IPComposableStablePreview__factory.ts +152 -0
  251. package/typechain-types/factories/IPOracleForSy__factory.ts +36 -0
  252. package/typechain-types/factories/IVersion__factory.ts +36 -0
  253. package/typechain-types/factories/LiquiditySeedingHelper__factory.ts +124 -0
  254. package/typechain-types/factories/LongYieldActionHelper__factory.ts +899 -9
  255. package/typechain-types/factories/LongYieldTradingBot__factory.ts +923 -33
  256. package/typechain-types/factories/PendleAuraBbAWethSwethSY__factory.ts +1 -1
  257. package/typechain-types/factories/PendleAuraWethAnkrethSYV2__factory.ts +1 -1
  258. package/typechain-types/factories/PendleAuraWethRocketEthSYV2__factory.ts +1 -1
  259. package/typechain-types/factories/PendleAuraWethStafiEthSY__factory.ts +1 -1
  260. package/typechain-types/factories/PendleAuraWethVethSY__factory.ts +1 -1
  261. package/typechain-types/factories/PendleAuraWethWstethSYV2__factory.ts +1 -1
  262. package/typechain-types/factories/PendleAuraWstethAnkreth__factory.ts +1 -1
  263. package/typechain-types/factories/PendleCamelotV1VolatileSY__factory.ts +1 -1
  264. package/typechain-types/factories/PendleChainlinkReceiver__factory.ts +216 -0
  265. package/typechain-types/factories/PendleChainlinkRelayer__factory.ts +180 -0
  266. package/typechain-types/factories/PendleCurveFraxUsdcSY__factory.ts +1 -1
  267. package/typechain-types/factories/PendleCurveUsdd3CrvSY__factory.ts +1 -1
  268. package/typechain-types/factories/PendleExternalRewardDistributor__factory.ts +29 -1
  269. package/typechain-types/factories/PendleFeeDistributor__factory.ts +1 -1
  270. package/typechain-types/factories/PendleGlpSY__factory.ts +1 -1
  271. package/typechain-types/factories/PendleMantleStakedEthSY__factory.ts +1068 -0
  272. package/typechain-types/factories/PendleMarketFactoryV2__factory.ts +15 -15
  273. package/typechain-types/factories/PendleMarketV2__factory.ts +10 -1
  274. package/typechain-types/factories/PendleMarket__factory.ts +1 -1
  275. package/typechain-types/factories/PendleOracleForSyProxy__factory.ts +211 -0
  276. package/typechain-types/factories/PendleQiTokenSY__factory.ts +1 -1
  277. package/typechain-types/factories/PendleStargateLPSY__factory.ts +1 -1
  278. package/typechain-types/factories/PendleThenaSY__factory.ts +1 -1
  279. package/typechain-types/factories/PendleYieldContractFactoryV2__factory.ts +1 -1
  280. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +1 -1
  281. package/typechain-types/factories/PendleYieldTokenV2__factory.ts +1 -1
  282. package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
  283. package/typechain-types/factories/ShortYieldActionHelper__factory.ts +899 -9
  284. package/typechain-types/factories/ShortYieldTradingBot__factory.ts +939 -49
  285. package/typechain-types/factories/TradingBotBase__factory.ts +899 -9
  286. package/typechain-types/hardhat.d.ts +162 -9
  287. package/typechain-types/index.ts +34 -2
  288. /package/contracts/router/swap-aggregator/{1inch → oneinch}/I1inchAggregationRouterV5.sol +0 -0
  289. /package/contracts/router/swap-aggregator/{1inch → oneinch}/OneInchAggregationRouterHelper.sol +0 -0
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../../build-info/ae6b3744a5e3727745b045990f2ac115.json"
3
+ "buildInfo": "../../../../build-info/3287c9cc566d4b7954795017eb0050f8.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../../../build-info/ae6b3744a5e3727745b045990f2ac115.json"
3
+ "buildInfo": "../../../../../build-info/3287c9cc566d4b7954795017eb0050f8.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../../../build-info/ae6b3744a5e3727745b045990f2ac115.json"
3
+ "buildInfo": "../../../../../build-info/3287c9cc566d4b7954795017eb0050f8.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../../../build-info/ae6b3744a5e3727745b045990f2ac115.json"
3
+ "buildInfo": "../../../../../build-info/3287c9cc566d4b7954795017eb0050f8.json"
4
4
  }
@@ -16,6 +16,8 @@ library LayerZeroHelper {
16
16
  else if (chainId == 56) return 102;
17
17
  // binance smart chain
18
18
  else if (chainId == 1) return 101;
19
+ // mantle
20
+ else if (chainId == 5000) return 181;
19
21
  assert(false);
20
22
  }
21
23
 
@@ -31,6 +33,8 @@ library LayerZeroHelper {
31
33
  else if (chainId == 102) return 56;
32
34
  // binance smart chain
33
35
  else if (chainId == 101) return 1;
36
+ // mantle
37
+ else if (chainId == 181) return 5000;
34
38
  assert(false);
35
39
  }
36
40
 
@@ -0,0 +1,135 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.17;
3
+ import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
4
+ import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
5
+ import "../libraries/math/Math.sol";
6
+ import "../libraries/BoringOwnableUpgradeable.sol";
7
+ import "../libraries/TokenHelper.sol";
8
+ import "../libraries/ArrayLib.sol";
9
+ import "../../interfaces/IPExternalRewardDistributor.sol";
10
+ import "../../interfaces/IPMarketFactory.sol";
11
+ import "../../interfaces/IPMarket.sol";
12
+
13
+ contract PendleExternalRewardDistributor is
14
+ IPExternalRewardDistributor,
15
+ BoringOwnableUpgradeable,
16
+ UUPSUpgradeable,
17
+ TokenHelper
18
+ {
19
+ using Math for uint256;
20
+ using ArrayLib for address[];
21
+ using ArrayLib for uint256[];
22
+
23
+ uint128 internal constant WEEK = 7 days;
24
+ address public immutable marketFactory;
25
+
26
+ mapping(address => address[]) internal rewardTokens;
27
+ mapping(address => mapping(address => MarketRewardData)) internal rewardData;
28
+
29
+ modifier onlyValidMarket(address market) {
30
+ require(
31
+ IPMarketFactory(marketFactory).isValidMarket(market) &&
32
+ block.timestamp < IPMarket(market).expiry(),
33
+ "invalid market"
34
+ );
35
+ _;
36
+ }
37
+
38
+ constructor(address _marketFactory) initializer {
39
+ marketFactory = _marketFactory;
40
+ }
41
+
42
+ function initialize() external initializer {
43
+ __BoringOwnable_init();
44
+ }
45
+
46
+ function getRewardTokens(
47
+ address market
48
+ ) external view onlyValidMarket(market) returns (address[] memory) {
49
+ return rewardTokens[market];
50
+ }
51
+
52
+ function redeemRewards() external onlyValidMarket(msg.sender) {
53
+ address market = msg.sender;
54
+ address[] memory tokens = rewardTokens[market];
55
+ for (uint256 i = 0; i < tokens.length; ++i) {
56
+ address token = tokens[i];
57
+
58
+ MarketRewardData memory rwd = _getUpdatedMarketReward(market, token);
59
+ uint256 amountToDistribute = rwd.accumulatedReward;
60
+
61
+ if (amountToDistribute > 0) {
62
+ rwd.accumulatedReward = 0;
63
+ // prevent re-entrancy
64
+ rewardData[market][token] = rwd;
65
+ _transferOut(token, market, amountToDistribute);
66
+ emit DistributeReward(market, token, amountToDistribute);
67
+ } else {
68
+ rewardData[market][token] = rwd;
69
+ }
70
+ }
71
+ }
72
+
73
+ function addRewardToMarket(
74
+ address market,
75
+ address token,
76
+ uint128 rewardAmount,
77
+ uint128 duration
78
+ ) external onlyOwner {
79
+ _addRewardToMarket(market, token, rewardAmount, duration);
80
+ }
81
+
82
+ function addWeeklyRewardBatch(
83
+ address token,
84
+ address[] memory markets,
85
+ uint256[] memory weights,
86
+ uint256 totalRewardToDistribute
87
+ ) external onlyOwner {
88
+ require(markets.length == weights.length, "array lengths mismatched");
89
+
90
+ uint256 totalWeight = weights.sum();
91
+ for (uint256 i = 0; i < markets.length; ++i) {
92
+ uint256 rewardToDistribute = (totalRewardToDistribute * weights[i]) / totalWeight;
93
+ _addRewardToMarket(markets[i], token, rewardToDistribute.Uint128(), WEEK);
94
+ }
95
+ }
96
+
97
+ function _addRewardToMarket(
98
+ address market,
99
+ address token,
100
+ uint128 rewardAmount,
101
+ uint128 duration
102
+ ) internal onlyValidMarket(market) {
103
+ if (!rewardTokens[market].contains(token)) {
104
+ rewardTokens[market].push(token);
105
+ }
106
+
107
+ MarketRewardData memory rwd = _getUpdatedMarketReward(market, token);
108
+ require(block.timestamp + duration > rwd.incentiveEndsAt, "Invalid incentive duration");
109
+
110
+ uint128 leftover = (rwd.incentiveEndsAt - rwd.lastUpdated) * rwd.rewardPerSec;
111
+ uint128 newSpeed = (leftover + rewardAmount) / duration;
112
+
113
+ rewardData[market][token] = MarketRewardData({
114
+ rewardPerSec: newSpeed,
115
+ accumulatedReward: rwd.accumulatedReward,
116
+ lastUpdated: uint128(block.timestamp),
117
+ incentiveEndsAt: uint128(block.timestamp) + duration
118
+ });
119
+
120
+ emit AddRewardToMarket(market, token, rewardData[market][token]);
121
+ }
122
+
123
+ function _getUpdatedMarketReward(
124
+ address market,
125
+ address token
126
+ ) internal view returns (MarketRewardData memory) {
127
+ MarketRewardData memory rwd = rewardData[market][token];
128
+ uint128 newLastUpdated = uint128(Math.min(uint128(block.timestamp), rwd.incentiveEndsAt));
129
+ rwd.accumulatedReward += rwd.rewardPerSec * (newLastUpdated - rwd.lastUpdated);
130
+ rwd.lastUpdated = newLastUpdated;
131
+ return rwd;
132
+ }
133
+
134
+ function _authorizeUpgrade(address) internal virtual override onlyOwner {}
135
+ }
@@ -0,0 +1,142 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.17;
3
+
4
+ import "../../../interfaces/IPGauge.sol";
5
+ import "../../../interfaces/IPVeToken.sol";
6
+ import "../../../interfaces/IPGaugeController.sol";
7
+ import "../../../interfaces/IStandardizedYield.sol";
8
+ import "../../../interfaces/IPMarketFactoryV2.sol";
9
+ import "../../../interfaces/IPExternalRewardDistributor.sol";
10
+
11
+ import "../../RewardManager/RewardManager.sol";
12
+
13
+ /**
14
+ Invariants to maintain:
15
+ - before any changes to active balance, updateAndDistributeRewards() must be called
16
+ */
17
+ abstract contract PendleGaugeV2 is RewardManager, IPGauge {
18
+ using Math for uint256;
19
+ using SafeERC20 for IERC20;
20
+ using ArrayLib for address[];
21
+
22
+ address private immutable SY;
23
+
24
+ uint256 internal constant TOKENLESS_PRODUCTION = 40;
25
+
26
+ address internal immutable PENDLE;
27
+ IPVeToken internal immutable vePENDLE;
28
+ address internal immutable gaugeController;
29
+ address internal immutable externalRewardDistributor;
30
+
31
+ uint256 public totalActiveSupply;
32
+ mapping(address => uint256) public activeBalance;
33
+
34
+ constructor(
35
+ address _SY,
36
+ address _vePendle,
37
+ address _gaugeController,
38
+ address _externalRewardDistributor
39
+ ) {
40
+ SY = _SY;
41
+ vePENDLE = IPVeToken(_vePendle);
42
+ gaugeController = _gaugeController;
43
+ PENDLE = IPGaugeController(gaugeController).pendle();
44
+ externalRewardDistributor = _externalRewardDistributor;
45
+ }
46
+
47
+ /**
48
+ * @dev Since rewardShares is based on activeBalance, user's activeBalance must be updated AFTER
49
+ rewards is updated
50
+ * @dev It's intended to have user's activeBalance updated when rewards is redeemed
51
+ */
52
+ function _redeemRewards(address user) internal virtual returns (uint256[] memory rewardsOut) {
53
+ _updateAndDistributeRewards(user);
54
+ _updateUserActiveBalance(user);
55
+ rewardsOut = _doTransferOutRewards(user, user);
56
+ emit RedeemRewards(user, rewardsOut);
57
+ }
58
+
59
+ function _updateUserActiveBalance(address user) internal virtual {
60
+ _updateUserActiveBalanceForTwo(user, address(0));
61
+ }
62
+
63
+ function _updateUserActiveBalanceForTwo(address user1, address user2) internal virtual {
64
+ if (user1 != address(0) && user1 != address(this)) _updateUserActiveBalancePrivate(user1);
65
+ if (user2 != address(0) && user2 != address(this)) _updateUserActiveBalancePrivate(user2);
66
+ }
67
+
68
+ /**
69
+ * @dev should only be callable from `_updateUserActiveBalanceForTwo` to guarantee user != address(0) && user != address(this)
70
+ */
71
+ function _updateUserActiveBalancePrivate(address user) private {
72
+ assert(user != address(0) && user != address(this));
73
+
74
+ uint256 lpBalance = _stakedBalance(user);
75
+ uint256 veBoostedLpBalance = _calcVeBoostedLpBalance(user, lpBalance);
76
+
77
+ uint256 newActiveBalance = Math.min(veBoostedLpBalance, lpBalance);
78
+
79
+ totalActiveSupply = totalActiveSupply - activeBalance[user] + newActiveBalance;
80
+ activeBalance[user] = newActiveBalance;
81
+ }
82
+
83
+ function _calcVeBoostedLpBalance(
84
+ address user,
85
+ uint256 lpBalance
86
+ ) internal virtual returns (uint256) {
87
+ (uint256 vePendleSupply, uint256 vePendleBalance) = vePENDLE.totalSupplyAndBalanceCurrent(
88
+ user
89
+ );
90
+ // Inspired by Curve's Gauge
91
+ uint256 veBoostedLpBalance = (lpBalance * TOKENLESS_PRODUCTION) / 100;
92
+ if (vePendleSupply > 0) {
93
+ veBoostedLpBalance +=
94
+ (((_totalStaked() * vePendleBalance) / vePendleSupply) *
95
+ (100 - TOKENLESS_PRODUCTION)) /
96
+ 100;
97
+ }
98
+ return veBoostedLpBalance;
99
+ }
100
+
101
+ function _redeemExternalReward() internal virtual override {
102
+ IStandardizedYield(SY).claimRewards(address(this));
103
+ IPExternalRewardDistributor(externalRewardDistributor).redeemRewards();
104
+ IPGaugeController(gaugeController).redeemMarketReward();
105
+ }
106
+
107
+ function _stakedBalance(address user) internal view virtual returns (uint256);
108
+
109
+ function _totalStaked() internal view virtual returns (uint256);
110
+
111
+ function _rewardSharesTotal() internal view virtual override returns (uint256) {
112
+ return totalActiveSupply;
113
+ }
114
+
115
+ function _rewardSharesUser(address user) internal view virtual override returns (uint256) {
116
+ return activeBalance[user];
117
+ }
118
+
119
+ function _getRewardTokens()
120
+ internal
121
+ view
122
+ virtual
123
+ override
124
+ returns (address[] memory rewardTokens)
125
+ {
126
+ address[] memory SYRewards = IStandardizedYield(SY).getRewardTokens();
127
+ address[] memory externalRewards = IPExternalRewardDistributor(externalRewardDistributor)
128
+ .getRewardTokens(address(this));
129
+
130
+ rewardTokens = SYRewards.merge(externalRewards);
131
+ if (rewardTokens.contains(PENDLE)) return rewardTokens;
132
+ return rewardTokens.append(PENDLE);
133
+ }
134
+
135
+ function _beforeTokenTransfer(address from, address to, uint256) internal virtual {
136
+ _updateAndDistributeRewardsForTwo(from, to);
137
+ }
138
+
139
+ function _afterTokenTransfer(address from, address to, uint256) internal virtual {
140
+ _updateUserActiveBalanceForTwo(from, to);
141
+ }
142
+ }
@@ -0,0 +1,177 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.17;
3
+ import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
4
+
5
+ import "../../../interfaces/IPMarket.sol";
6
+ import "../../../interfaces/IPYieldContractFactory.sol";
7
+ import "../../../interfaces/IPMarketFactory.sol";
8
+
9
+ import "../../libraries/BaseSplitCodeFactory.sol";
10
+ import "../../libraries/Errors.sol";
11
+ import "../../libraries/BoringOwnableUpgradeable.sol";
12
+
13
+ contract PendleMarketFactoryV2 is BoringOwnableUpgradeable, IPMarketFactory {
14
+ using EnumerableSet for EnumerableSet.AddressSet;
15
+
16
+ address public immutable marketCreationCodeContractA;
17
+ uint256 public immutable marketCreationCodeSizeA;
18
+ address public immutable marketCreationCodeContractB;
19
+ uint256 public immutable marketCreationCodeSizeB;
20
+
21
+ address public immutable yieldContractFactory;
22
+ uint256 public immutable maxLnFeeRateRoot;
23
+ uint8 public constant maxReserveFeePercent = 100;
24
+ int256 public constant minInitialAnchor = Math.IONE;
25
+
26
+ address public treasury;
27
+ address public externalRewardDistributor;
28
+ FeeConfig public defaultFee;
29
+ /// 1 SLOT
30
+
31
+ // router -> overriddenFee
32
+ mapping(address => FeeConfig) public overriddenFee;
33
+
34
+ // PT -> scalarRoot -> initialAnchor
35
+ mapping(address => mapping(int256 => mapping(int256 => address))) internal markets;
36
+ EnumerableSet.AddressSet internal allMarkets;
37
+ address public vePendle;
38
+ address public gaugeController;
39
+
40
+ constructor(
41
+ address _yieldContractFactory,
42
+ address _marketCreationCodeContractA,
43
+ uint256 _marketCreationCodeSizeA,
44
+ address _marketCreationCodeContractB,
45
+ uint256 _marketCreationCodeSizeB
46
+ ) {
47
+ yieldContractFactory = _yieldContractFactory;
48
+ maxLnFeeRateRoot = uint256(LogExpMath.ln(int256((105 * Math.IONE) / 100))); // ln(1.05)
49
+
50
+ marketCreationCodeContractA = _marketCreationCodeContractA;
51
+ marketCreationCodeSizeA = _marketCreationCodeSizeA;
52
+ marketCreationCodeContractB = _marketCreationCodeContractB;
53
+ marketCreationCodeSizeB = _marketCreationCodeSizeB;
54
+ }
55
+
56
+ function initialize(
57
+ address _treasury,
58
+ uint80 _defaultLnFeeRateRoot,
59
+ uint8 _defaultReserveFeePercent,
60
+ address newVePendle,
61
+ address newGaugeController,
62
+ address newExternalRewardDistributor
63
+ ) external initializer {
64
+ __BoringOwnable_init();
65
+ setTreasury(_treasury);
66
+ setDefaultFee(_defaultLnFeeRateRoot, _defaultReserveFeePercent);
67
+
68
+ vePendle = newVePendle;
69
+ gaugeController = newGaugeController;
70
+ externalRewardDistributor = newExternalRewardDistributor;
71
+ }
72
+
73
+ /**
74
+ * @notice Create a market between PT and its corresponding SY with scalar & anchor config.
75
+ * Anyone is allowed to create a market on their own.
76
+ */
77
+ function createNewMarket(
78
+ address PT,
79
+ int256 scalarRoot,
80
+ int256 initialAnchor
81
+ ) external returns (address market) {
82
+ if (!IPYieldContractFactory(yieldContractFactory).isPT(PT))
83
+ revert Errors.MarketFactoryInvalidPt();
84
+ if (IPPrincipalToken(PT).isExpired()) revert Errors.MarketFactoryExpiredPt();
85
+
86
+ if (markets[PT][scalarRoot][initialAnchor] != address(0))
87
+ revert Errors.MarketFactoryMarketExists();
88
+
89
+ if (initialAnchor < minInitialAnchor)
90
+ revert Errors.MarketFactoryInitialAnchorTooLow(initialAnchor, minInitialAnchor);
91
+
92
+ market = BaseSplitCodeFactory._create2(
93
+ 0,
94
+ bytes32(block.chainid),
95
+ abi.encode(
96
+ PT,
97
+ scalarRoot,
98
+ initialAnchor,
99
+ vePendle,
100
+ gaugeController,
101
+ externalRewardDistributor
102
+ ),
103
+ marketCreationCodeContractA,
104
+ marketCreationCodeSizeA,
105
+ marketCreationCodeContractB,
106
+ marketCreationCodeSizeB
107
+ );
108
+
109
+ markets[PT][scalarRoot][initialAnchor] = market;
110
+
111
+ if (!allMarkets.add(market)) assert(false);
112
+
113
+ emit CreateNewMarket(market, PT, scalarRoot, initialAnchor);
114
+ }
115
+
116
+ function getMarketConfig(
117
+ address router
118
+ ) external view returns (address _treasury, uint80 _lnFeeRateRoot, uint8 _reserveFeePercent) {
119
+ (_treasury, _lnFeeRateRoot, _reserveFeePercent) = (
120
+ treasury,
121
+ defaultFee.lnFeeRateRoot,
122
+ defaultFee.reserveFeePercent
123
+ );
124
+
125
+ FeeConfig memory over = overriddenFee[router];
126
+ if (over.active) {
127
+ (_lnFeeRateRoot, _reserveFeePercent) = (over.lnFeeRateRoot, over.reserveFeePercent);
128
+ }
129
+ }
130
+
131
+ /// @dev for gas-efficient verification of market
132
+ function isValidMarket(address market) external view returns (bool) {
133
+ return allMarkets.contains(market);
134
+ }
135
+
136
+ function setTreasury(address newTreasury) public onlyOwner {
137
+ if (newTreasury == address(0)) revert Errors.MarketFactoryZeroTreasury();
138
+
139
+ treasury = newTreasury;
140
+ _emitNewMarketConfigEvent();
141
+ }
142
+
143
+ function setDefaultFee(uint80 newLnFeeRateRoot, uint8 newReserveFeePercent) public onlyOwner {
144
+ _verifyFeeConfig(newLnFeeRateRoot, newReserveFeePercent);
145
+ defaultFee = FeeConfig(newLnFeeRateRoot, newReserveFeePercent, true);
146
+ _emitNewMarketConfigEvent();
147
+ }
148
+
149
+ function setOverriddenFee(
150
+ address router,
151
+ uint80 newLnFeeRateRoot,
152
+ uint8 newReserveFeePercent
153
+ ) public onlyOwner {
154
+ _verifyFeeConfig(newLnFeeRateRoot, newReserveFeePercent);
155
+ overriddenFee[router] = FeeConfig(newLnFeeRateRoot, newReserveFeePercent, true);
156
+ emit SetOverriddenFee(router, newLnFeeRateRoot, newReserveFeePercent);
157
+ }
158
+
159
+ function unsetOverriddenFee(address router) external onlyOwner {
160
+ delete overriddenFee[router];
161
+ emit UnsetOverriddenFee(router);
162
+ }
163
+
164
+ function _verifyFeeConfig(uint80 newLnFeeRateRoot, uint8 newReserveFeePercent) internal view {
165
+ if (newLnFeeRateRoot > maxLnFeeRateRoot)
166
+ revert Errors.MarketFactoryLnFeeRateRootTooHigh(newLnFeeRateRoot, maxLnFeeRateRoot);
167
+ if (newReserveFeePercent > maxReserveFeePercent)
168
+ revert Errors.MarketFactoryReserveFeePercentTooHigh(
169
+ newReserveFeePercent,
170
+ maxReserveFeePercent
171
+ );
172
+ }
173
+
174
+ function _emitNewMarketConfigEvent() internal {
175
+ emit NewMarketConfig(treasury, defaultFee.lnFeeRateRoot, defaultFee.reserveFeePercent);
176
+ }
177
+ }