@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
@@ -31,12 +31,7 @@ abstract contract PendleGaugeV2 is RewardManager, IPGauge {
31
31
  uint256 public totalActiveSupply;
32
32
  mapping(address => uint256) public activeBalance;
33
33
 
34
- constructor(
35
- address _SY,
36
- address _vePendle,
37
- address _gaugeController,
38
- address _externalRewardDistributor
39
- ) {
34
+ constructor(address _SY, address _vePendle, address _gaugeController, address _externalRewardDistributor) {
40
35
  SY = _SY;
41
36
  vePENDLE = IPVeToken(_vePendle);
42
37
  gaugeController = _gaugeController;
@@ -80,19 +75,13 @@ abstract contract PendleGaugeV2 is RewardManager, IPGauge {
80
75
  activeBalance[user] = newActiveBalance;
81
76
  }
82
77
 
83
- function _calcVeBoostedLpBalance(
84
- address user,
85
- uint256 lpBalance
86
- ) internal virtual returns (uint256) {
87
- (uint256 vePendleSupply, uint256 vePendleBalance) = vePENDLE.totalSupplyAndBalanceCurrent(
88
- user
89
- );
78
+ function _calcVeBoostedLpBalance(address user, uint256 lpBalance) internal virtual returns (uint256) {
79
+ (uint256 vePendleSupply, uint256 vePendleBalance) = vePENDLE.totalSupplyAndBalanceCurrent(user);
90
80
  // Inspired by Curve's Gauge
91
81
  uint256 veBoostedLpBalance = (lpBalance * TOKENLESS_PRODUCTION) / 100;
92
82
  if (vePendleSupply > 0) {
93
83
  veBoostedLpBalance +=
94
- (((_totalStaked() * vePendleBalance) / vePendleSupply) *
95
- (100 - TOKENLESS_PRODUCTION)) /
84
+ (((_totalStaked() * vePendleBalance) / vePendleSupply) * (100 - TOKENLESS_PRODUCTION)) /
96
85
  100;
97
86
  }
98
87
  return veBoostedLpBalance;
@@ -116,16 +105,11 @@ abstract contract PendleGaugeV2 is RewardManager, IPGauge {
116
105
  return activeBalance[user];
117
106
  }
118
107
 
119
- function _getRewardTokens()
120
- internal
121
- view
122
- virtual
123
- override
124
- returns (address[] memory rewardTokens)
125
- {
108
+ function _getRewardTokens() internal view virtual override returns (address[] memory rewardTokens) {
126
109
  address[] memory SYRewards = IStandardizedYield(SY).getRewardTokens();
127
- address[] memory externalRewards = IPExternalRewardDistributor(externalRewardDistributor)
128
- .getRewardTokens(address(this));
110
+ address[] memory externalRewards = IPExternalRewardDistributor(externalRewardDistributor).getRewardTokens(
111
+ address(this)
112
+ );
129
113
 
130
114
  rewardTokens = SYRewards.merge(externalRewards);
131
115
  if (rewardTokens.contains(PENDLE)) return rewardTokens;
@@ -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/utils/structs/EnumerableSet.sol";
5
5
 
@@ -75,17 +75,11 @@ contract PendleMarketFactoryV2 is BoringOwnableUpgradeable, IPMarketFactory {
75
75
  * @notice Create a market between PT and its corresponding SY with scalar & anchor config.
76
76
  * Anyone is allowed to create a market on their own.
77
77
  */
78
- function createNewMarket(
79
- address PT,
80
- int256 scalarRoot,
81
- int256 initialAnchor
82
- ) external returns (address market) {
83
- if (!IPYieldContractFactory(yieldContractFactory).isPT(PT))
84
- revert Errors.MarketFactoryInvalidPt();
78
+ function createNewMarket(address PT, int256 scalarRoot, int256 initialAnchor) external returns (address market) {
79
+ if (!IPYieldContractFactory(yieldContractFactory).isPT(PT)) revert Errors.MarketFactoryInvalidPt();
85
80
  if (IPPrincipalToken(PT).isExpired()) revert Errors.MarketFactoryExpiredPt();
86
81
 
87
- if (markets[PT][scalarRoot][initialAnchor] != address(0))
88
- revert Errors.MarketFactoryMarketExists();
82
+ if (markets[PT][scalarRoot][initialAnchor] != address(0)) revert Errors.MarketFactoryMarketExists();
89
83
 
90
84
  if (initialAnchor < minInitialAnchor)
91
85
  revert Errors.MarketFactoryInitialAnchorTooLow(initialAnchor, minInitialAnchor);
@@ -93,14 +87,7 @@ contract PendleMarketFactoryV2 is BoringOwnableUpgradeable, IPMarketFactory {
93
87
  market = BaseSplitCodeFactory._create2(
94
88
  0,
95
89
  bytes32(block.chainid),
96
- abi.encode(
97
- PT,
98
- scalarRoot,
99
- initialAnchor,
100
- vePendle,
101
- gaugeController,
102
- externalRewardDistributor
103
- ),
90
+ abi.encode(PT, scalarRoot, initialAnchor, vePendle, gaugeController, externalRewardDistributor),
104
91
  marketCreationCodeContractA,
105
92
  marketCreationCodeSizeA,
106
93
  marketCreationCodeContractB,
@@ -147,11 +134,7 @@ contract PendleMarketFactoryV2 is BoringOwnableUpgradeable, IPMarketFactory {
147
134
  _emitNewMarketConfigEvent();
148
135
  }
149
136
 
150
- function setOverriddenFee(
151
- address router,
152
- uint80 newLnFeeRateRoot,
153
- uint8 newReserveFeePercent
154
- ) public onlyOwner {
137
+ function setOverriddenFee(address router, uint80 newLnFeeRateRoot, uint8 newReserveFeePercent) public onlyOwner {
155
138
  _verifyFeeConfig(newLnFeeRateRoot, newReserveFeePercent);
156
139
  overriddenFee[router] = FeeConfig(newLnFeeRateRoot, newReserveFeePercent, true);
157
140
  emit SetOverriddenFee(router, newLnFeeRateRoot, newReserveFeePercent);
@@ -166,10 +149,7 @@ contract PendleMarketFactoryV2 is BoringOwnableUpgradeable, IPMarketFactory {
166
149
  if (newLnFeeRateRoot > maxLnFeeRateRoot)
167
150
  revert Errors.MarketFactoryLnFeeRateRootTooHigh(newLnFeeRateRoot, maxLnFeeRateRoot);
168
151
  if (newReserveFeePercent > maxReserveFeePercent)
169
- revert Errors.MarketFactoryReserveFeePercentTooHigh(
170
- newReserveFeePercent,
171
- maxReserveFeePercent
172
- );
152
+ revert Errors.MarketFactoryReserveFeePercentTooHigh(newReserveFeePercent, maxReserveFeePercent);
173
153
  }
174
154
 
175
155
  function _emitNewMarketConfigEvent() internal {
@@ -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/IPMarket.sol";
5
5
  import "../../../interfaces/IPMarketFactory.sol";
@@ -64,19 +64,15 @@ contract PendleMarketV2 is PendleERC20Permit, PendleGaugeV2, IPMarket {
64
64
  address _externalRewardDistributor
65
65
  )
66
66
  PendleERC20Permit(NAME, SYMBOL, 18)
67
- PendleGaugeV2(
68
- IPPrincipalToken(_PT).SY(),
69
- _vePendle,
70
- _gaugeController,
71
- _externalRewardDistributor
72
- )
67
+ PendleGaugeV2(IPPrincipalToken(_PT).SY(), _vePendle, _gaugeController, _externalRewardDistributor)
73
68
  {
74
69
  PT = IPPrincipalToken(_PT);
75
70
  SY = IStandardizedYield(PT.SY());
76
71
  YT = IPYieldToken(PT.YT());
77
72
 
78
- (_storage.observationCardinality, _storage.observationCardinalityNext) = observations
79
- .initialize(uint32(block.timestamp));
73
+ (_storage.observationCardinality, _storage.observationCardinalityNext) = observations.initialize(
74
+ uint32(block.timestamp)
75
+ );
80
76
 
81
77
  if (_scalarRoot <= 0) revert Errors.MarketScalarRootBelowZero(_scalarRoot);
82
78
 
@@ -98,12 +94,7 @@ contract PendleMarketV2 is PendleERC20Permit, PendleGaugeV2, IPMarket {
98
94
  address receiver,
99
95
  uint256 netSyDesired,
100
96
  uint256 netPtDesired
101
- )
102
- external
103
- nonReentrant
104
- notExpired
105
- returns (uint256 netLpOut, uint256 netSyUsed, uint256 netPtUsed)
106
- {
97
+ ) external nonReentrant notExpired returns (uint256 netLpOut, uint256 netSyUsed, uint256 netPtUsed) {
107
98
  MarketState memory market = readState(msg.sender);
108
99
  PYIndex index = YT.newIndex();
109
100
 
@@ -175,11 +166,7 @@ contract PendleMarketV2 is PendleERC20Permit, PendleGaugeV2, IPMarket {
175
166
  MarketState memory market = readState(msg.sender);
176
167
 
177
168
  uint256 netSyToReserve;
178
- (netSyOut, netSyFee, netSyToReserve) = market.swapExactPtForSy(
179
- YT.newIndex(),
180
- exactPtIn,
181
- block.timestamp
182
- );
169
+ (netSyOut, netSyFee, netSyToReserve) = market.swapExactPtForSy(YT.newIndex(), exactPtIn, block.timestamp);
183
170
 
184
171
  if (receiver != address(this)) IERC20(SY).safeTransfer(receiver, netSyOut);
185
172
  IERC20(SY).safeTransfer(market.treasury, netSyToReserve);
@@ -214,11 +201,7 @@ contract PendleMarketV2 is PendleERC20Permit, PendleGaugeV2, IPMarket {
214
201
  MarketState memory market = readState(msg.sender);
215
202
 
216
203
  uint256 netSyToReserve;
217
- (netSyIn, netSyFee, netSyToReserve) = market.swapSyForExactPt(
218
- YT.newIndex(),
219
- exactPtOut,
220
- block.timestamp
221
- );
204
+ (netSyIn, netSyFee, netSyToReserve) = market.swapSyForExactPt(YT.newIndex(), exactPtOut, block.timestamp);
222
205
 
223
206
  if (receiver != address(this)) IERC20(PT).safeTransfer(receiver, exactPtOut);
224
207
  IERC20(SY).safeTransfer(market.treasury, netSyToReserve);
@@ -262,9 +245,7 @@ contract PendleMarketV2 is PendleERC20Permit, PendleGaugeV2, IPMarket {
262
245
  ORACLE
263
246
  //////////////////////////////////////////////////////////////*/
264
247
 
265
- function observe(
266
- uint32[] memory secondsAgos
267
- ) external view returns (uint216[] memory lnImpliedRateCumulative) {
248
+ function observe(uint32[] memory secondsAgos) external view returns (uint216[] memory lnImpliedRateCumulative) {
268
249
  return
269
250
  observations.observe(
270
251
  uint32(block.timestamp),
@@ -296,9 +277,9 @@ contract PendleMarketV2 is PendleERC20Permit, PendleGaugeV2, IPMarket {
296
277
  market.totalSy = _storage.totalSy;
297
278
  market.totalLp = totalSupply().Int();
298
279
 
299
- (market.treasury, market.lnFeeRateRoot, market.reserveFeePercent) = IPMarketFactory(
300
- factory
301
- ).getMarketConfig(router);
280
+ (market.treasury, market.lnFeeRateRoot, market.reserveFeePercent) = IPMarketFactory(factory).getMarketConfig(
281
+ router
282
+ );
302
283
 
303
284
  market.scalarRoot = scalarRoot;
304
285
  market.expiry = expiry;
@@ -333,11 +314,7 @@ contract PendleMarketV2 is PendleERC20Permit, PendleGaugeV2, IPMarket {
333
314
  TRIVIAL FUNCTIONS
334
315
  //////////////////////////////////////////////////////////////*/
335
316
 
336
- function readTokens()
337
- external
338
- view
339
- returns (IStandardizedYield _SY, IPPrincipalToken _PT, IPYieldToken _YT)
340
- {
317
+ function readTokens() external view returns (IStandardizedYield _SY, IPPrincipalToken _PT, IPYieldToken _YT) {
341
318
  _SY = SY;
342
319
  _PT = PT;
343
320
  _YT = YT;
@@ -0,0 +1,137 @@
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/IPMarketV3.sol";
6
+ import "../../../interfaces/IPYieldContractFactory.sol";
7
+ import "../../../interfaces/IPMarketFactoryV3.sol";
8
+
9
+ import "../../libraries/BaseSplitCodeFactory.sol";
10
+ import "../../libraries/Errors.sol";
11
+ import "../../libraries/BoringOwnableUpgradeable.sol";
12
+
13
+ contract PendleMarketFactoryV3 is BoringOwnableUpgradeable, IPMarketFactoryV3 {
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
+ address public immutable vePendle;
23
+ address public immutable gaugeController;
24
+
25
+ uint256 public immutable maxLnFeeRateRoot;
26
+ uint8 public constant maxReserveFeePercent = 100;
27
+ int256 public constant minInitialAnchor = PMath.IONE;
28
+
29
+ address public treasury;
30
+ uint8 public reserveFeePercent;
31
+
32
+ // router -> market -> lnFeeRateRoot. lnFeeRateRoot == 0 means no override
33
+ mapping(address => mapping(address => uint80)) internal overriddenFee;
34
+
35
+ // PT -> scalarRoot -> initialAnchor
36
+ mapping(address => mapping(int256 => mapping(int256 => mapping(uint80 => address)))) internal markets;
37
+ EnumerableSet.AddressSet internal allMarkets;
38
+
39
+ constructor(
40
+ address _yieldContractFactory,
41
+ address _marketCreationCodeContractA,
42
+ uint256 _marketCreationCodeSizeA,
43
+ address _marketCreationCodeContractB,
44
+ uint256 _marketCreationCodeSizeB,
45
+ address _treasury,
46
+ uint8 _reserveFeePercent,
47
+ address _vePendle,
48
+ address _gaugeController
49
+ ) initializer {
50
+ yieldContractFactory = _yieldContractFactory;
51
+ maxLnFeeRateRoot = uint256(LogExpMath.ln(int256((105 * PMath.IONE) / 100))); // ln(1.05)
52
+
53
+ marketCreationCodeContractA = _marketCreationCodeContractA;
54
+ marketCreationCodeSizeA = _marketCreationCodeSizeA;
55
+ marketCreationCodeContractB = _marketCreationCodeContractB;
56
+ marketCreationCodeSizeB = _marketCreationCodeSizeB;
57
+
58
+ __BoringOwnable_init();
59
+ setTreasuryAndFeeReserve(_treasury, _reserveFeePercent);
60
+
61
+ vePendle = _vePendle;
62
+ gaugeController = _gaugeController;
63
+ }
64
+
65
+ /**
66
+ * @notice Create a market between PT and its corresponding SY with scalar & anchor config.
67
+ * Anyone is allowed to create a market on their own.
68
+ */
69
+ function createNewMarket(
70
+ address PT,
71
+ int256 scalarRoot,
72
+ int256 initialAnchor,
73
+ uint80 lnFeeRateRoot
74
+ ) external returns (address market) {
75
+ if (!IPYieldContractFactory(yieldContractFactory).isPT(PT)) revert Errors.MarketFactoryInvalidPt();
76
+ if (IPPrincipalToken(PT).isExpired()) revert Errors.MarketFactoryExpiredPt();
77
+ if (lnFeeRateRoot > maxLnFeeRateRoot)
78
+ revert Errors.MarketFactoryLnFeeRateRootTooHigh(lnFeeRateRoot, maxLnFeeRateRoot);
79
+
80
+ if (markets[PT][scalarRoot][initialAnchor][lnFeeRateRoot] != address(0))
81
+ revert Errors.MarketFactoryMarketExists();
82
+
83
+ if (initialAnchor < minInitialAnchor)
84
+ revert Errors.MarketFactoryInitialAnchorTooLow(initialAnchor, minInitialAnchor);
85
+
86
+ market = BaseSplitCodeFactory._create2(
87
+ 0,
88
+ bytes32(block.chainid),
89
+ abi.encode(PT, scalarRoot, initialAnchor, lnFeeRateRoot, vePendle, gaugeController),
90
+ marketCreationCodeContractA,
91
+ marketCreationCodeSizeA,
92
+ marketCreationCodeContractB,
93
+ marketCreationCodeSizeB
94
+ );
95
+
96
+ markets[PT][scalarRoot][initialAnchor][lnFeeRateRoot] = market;
97
+
98
+ if (!allMarkets.add(market)) assert(false);
99
+
100
+ emit CreateNewMarket(market, PT, scalarRoot, initialAnchor, lnFeeRateRoot);
101
+ }
102
+
103
+ function getMarketConfig(
104
+ address market,
105
+ address router
106
+ ) external view returns (address _treasury, uint80 _overriddenFee, uint8 _reserveFeePercent) {
107
+ (_treasury, _reserveFeePercent) = (treasury, reserveFeePercent);
108
+ _overriddenFee = overriddenFee[router][market];
109
+ }
110
+
111
+ /// @dev for gas-efficient verification of market
112
+ function isValidMarket(address market) external view returns (bool) {
113
+ return allMarkets.contains(market);
114
+ }
115
+
116
+ function setTreasuryAndFeeReserve(address newTreasury, uint8 newReserveFeePercent) public onlyOwner {
117
+ if (newTreasury == address(0)) revert Errors.MarketFactoryZeroTreasury();
118
+ if (newReserveFeePercent > maxReserveFeePercent)
119
+ revert Errors.MarketFactoryReserveFeePercentTooHigh(newReserveFeePercent, maxReserveFeePercent);
120
+
121
+ treasury = newTreasury;
122
+ reserveFeePercent = newReserveFeePercent;
123
+
124
+ emit NewTreasuryAndFeeReserve(newTreasury, newReserveFeePercent);
125
+ }
126
+
127
+ function setOverriddenFee(address router, address market, uint80 newFee) public onlyOwner {
128
+ if (!allMarkets.contains(market)) revert Errors.MFNotPendleMarket(market);
129
+
130
+ uint80 marketFee = IPMarketV3(market).getNonOverrideLnFeeRateRoot();
131
+ if (newFee >= marketFee) revert Errors.MarketFactoryOverriddenFeeTooHigh(newFee, marketFee);
132
+
133
+ // NOTE: newFee = 0 allowed !!
134
+ overriddenFee[router][market] = newFee;
135
+ emit SetOverriddenFee(router, market, newFee);
136
+ }
137
+ }