@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
@@ -18,7 +18,11 @@ library PendleLpOracleLib {
18
18
  function getLpToAssetRate(IPMarket market, uint32 duration) internal view returns (uint256) {
19
19
  (uint256 syIndex, uint256 pyIndex) = PendlePtOracleLib.getSYandPYIndexCurrent(market);
20
20
  uint256 lpToAssetRateRaw = _getLpToAssetRateRaw(market, duration, pyIndex);
21
- return (lpToAssetRateRaw * syIndex) / pyIndex;
21
+ if (syIndex >= pyIndex) {
22
+ return lpToAssetRateRaw;
23
+ } else {
24
+ return (lpToAssetRateRaw * syIndex) / pyIndex;
25
+ }
22
26
  }
23
27
 
24
28
  function _getLpToAssetRateRaw(
@@ -28,20 +32,15 @@ library PendleLpOracleLib {
28
32
  ) private view returns (uint256 lpToAssetRateRaw) {
29
33
  MarketState memory state = market.readState(address(0));
30
34
 
31
- MarketPreCompute memory comp = state.getMarketPreCompute(
32
- PYIndex.wrap(pyIndex),
33
- block.timestamp
34
- );
35
-
36
35
  int256 totalHypotheticalAsset;
37
36
  if (state.expiry <= block.timestamp) {
38
37
  // 1 PT = 1 Asset post-expiry
39
- totalHypotheticalAsset = state.totalPt + comp.totalAsset;
38
+ totalHypotheticalAsset = state.totalPt + PYIndexLib.syToAsset(PYIndex.wrap(pyIndex), state.totalSy);
40
39
  } else {
40
+ MarketPreCompute memory comp = state.getMarketPreCompute(PYIndex.wrap(pyIndex), block.timestamp);
41
+
41
42
  (int256 rateOracle, int256 rateHypTrade) = _getPtRatesRaw(market, state, duration);
42
- int256 cParam = LogExpMath.exp(
43
- comp.rateScalar.mulDown((rateOracle - comp.rateAnchor))
44
- );
43
+ int256 cParam = LogExpMath.exp(comp.rateScalar.mulDown((rateOracle - comp.rateAnchor)));
45
44
 
46
45
  int256 tradeSize = (cParam.mulDown(comp.totalAsset) - state.totalPt).divDown(
47
46
  PMath.IONE + cParam.divDown(rateHypTrade)
@@ -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 "./PendlePtOracleLib.sol";
5
5
  import "../interfaces/IPPtOracle.sol";
@@ -40,10 +40,7 @@ contract PendlePtOracle is BoringOwnableUpgradeable, IPPtOracle {
40
40
  * @param market market to get rate from
41
41
  * @param duration twap duration
42
42
  */
43
- function getPtToAssetRate(
44
- address market,
45
- uint32 duration
46
- ) external view returns (uint256 ptToAssetRate) {
43
+ function getPtToAssetRate(address market, uint32 duration) external view returns (uint256 ptToAssetRate) {
47
44
  ptToAssetRate = IPMarket(market).getPtToAssetRate(duration);
48
45
  }
49
46
 
@@ -60,20 +57,10 @@ contract PendlePtOracle is BoringOwnableUpgradeable, IPPtOracle {
60
57
  )
61
58
  external
62
59
  view
63
- returns (
64
- bool increaseCardinalityRequired,
65
- uint16 cardinalityRequired,
66
- bool oldestObservationSatisfied
67
- )
60
+ returns (bool increaseCardinalityRequired, uint16 cardinalityRequired, bool oldestObservationSatisfied)
68
61
  {
69
- (
70
- ,
71
- ,
72
- ,
73
- uint16 observationIndex,
74
- uint16 observationCardinality,
75
- uint16 cardinalityReserved
76
- ) = IPMarket(market)._storage();
62
+ (, , , uint16 observationIndex, uint16 observationCardinality, uint16 cardinalityReserved) = IPMarket(market)
63
+ ._storage();
77
64
 
78
65
  // checkIncreaseCardinalityRequired
79
66
  cardinalityRequired = _calcCardinalityRequiredRequired(duration);
@@ -90,7 +77,9 @@ contract PendlePtOracle is BoringOwnableUpgradeable, IPPtOracle {
90
77
  }
91
78
 
92
79
  function _calcCardinalityRequiredRequired(uint32 duration) internal view returns (uint16) {
93
- uint32 cardinalityRequired = (duration * BLOCK_CYCLE_DENOMINATOR) / blockCycleNumerator;
80
+ uint32 cardinalityRequired = (duration * BLOCK_CYCLE_DENOMINATOR + blockCycleNumerator - 1) /
81
+ blockCycleNumerator +
82
+ 1;
94
83
  if (cardinalityRequired > type(uint16).max) {
95
84
  revert TwapDurationTooLarge(duration, cardinalityRequired);
96
85
  }
@@ -16,7 +16,11 @@ library PendlePtOracleLib {
16
16
  */
17
17
  function getPtToAssetRate(IPMarket market, uint32 duration) internal view returns (uint256) {
18
18
  (uint256 syIndex, uint256 pyIndex) = getSYandPYIndexCurrent(market);
19
- return (getPtToAssetRateRaw(market,duration) * syIndex) / pyIndex;
19
+ if (syIndex >= pyIndex) {
20
+ return getPtToAssetRateRaw(market, duration);
21
+ } else {
22
+ return (getPtToAssetRateRaw(market, duration) * syIndex) / pyIndex;
23
+ }
20
24
  }
21
25
 
22
26
  function getPtToAssetRateRaw(IPMarket market, uint32 duration) internal view returns (uint256) {
@@ -27,17 +31,12 @@ library PendlePtOracleLib {
27
31
  } else {
28
32
  uint256 lnImpliedRate = _getMarketLnImpliedRate(market, duration);
29
33
  uint256 timeToExpiry = expiry - block.timestamp;
30
- uint256 assetToPtRate =
31
- MarketMathCore._getExchangeRateFromImpliedRate(lnImpliedRate, timeToExpiry).Uint();
34
+ uint256 assetToPtRate = MarketMathCore._getExchangeRateFromImpliedRate(lnImpliedRate, timeToExpiry).Uint();
32
35
  return PMath.ONE.divDown(assetToPtRate);
33
36
  }
34
37
  }
35
38
 
36
- function getSYandPYIndexCurrent(IPMarket market)
37
- internal
38
- view
39
- returns (uint256 syIndex, uint256 pyIndex)
40
- {
39
+ function getSYandPYIndexCurrent(IPMarket market) internal view returns (uint256 syIndex, uint256 pyIndex) {
41
40
  (IStandardizedYield SY, , IPYieldToken YT) = market.readTokens();
42
41
 
43
42
  syIndex = SY.exchangeRate();
@@ -50,11 +49,7 @@ library PendlePtOracleLib {
50
49
  }
51
50
  }
52
51
 
53
- function _getMarketLnImpliedRate(IPMarket market, uint32 duration)
54
- private
55
- view
56
- returns (uint256)
57
- {
52
+ function _getMarketLnImpliedRate(IPMarket market, uint32 duration) private view returns (uint256) {
58
53
  uint32[] memory durations = new uint32[](2);
59
54
  durations[0] = duration;
60
55
 
@@ -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 "../PendleLpOracleLib.sol";
5
5
  import "../../interfaces/IPPtOracle.sol";
@@ -18,19 +18,15 @@ contract PendleLpGlpOracle {
18
18
  address public immutable glpManager;
19
19
  error OracleNotReady(bool increaseCardinalityRequired, bool oldestObservationSatisfied);
20
20
 
21
- constructor(
22
- address _ptOracle,
23
- uint32 _twapDuration,
24
- address _market,
25
- address _glpManager
26
- ) {
21
+ constructor(address _ptOracle, uint32 _twapDuration, address _market, address _glpManager) {
27
22
  twapDuration = _twapDuration;
28
23
  market = _market;
29
24
  glpManager = _glpManager;
30
25
 
31
- (bool increaseCardinalityRequired, , bool oldestObservationSatisfied) = IPPtOracle(
32
- _ptOracle
33
- ).getOracleState(market, twapDuration);
26
+ (bool increaseCardinalityRequired, , bool oldestObservationSatisfied) = IPPtOracle(_ptOracle).getOracleState(
27
+ market,
28
+ twapDuration
29
+ );
34
30
 
35
31
  if (increaseCardinalityRequired || !oldestObservationSatisfied) {
36
32
  revert OracleNotReady(increaseCardinalityRequired, oldestObservationSatisfied);
@@ -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 "../PendlePtOracleLib.sol";
5
5
  import "../../interfaces/IPPtOracle.sol";
@@ -21,19 +21,15 @@ contract PendlePtGlpOracle {
21
21
  address public immutable glpManager;
22
22
  error OracleNotReady(bool increaseCardinalityRequired, bool oldestObservationSatisfied);
23
23
 
24
- constructor(
25
- address _ptOracle,
26
- uint32 _twapDuration,
27
- address _market,
28
- address _glpManager
29
- ) {
24
+ constructor(address _ptOracle, uint32 _twapDuration, address _market, address _glpManager) {
30
25
  twapDuration = _twapDuration;
31
26
  market = _market;
32
27
  glpManager = _glpManager;
33
28
 
34
- (bool increaseCardinalityRequired, , bool oldestObservationSatisfied) = IPPtOracle(
35
- _ptOracle
36
- ).getOracleState(market, twapDuration);
29
+ (bool increaseCardinalityRequired, , bool oldestObservationSatisfied) = IPPtOracle(_ptOracle).getOracleState(
30
+ market,
31
+ twapDuration
32
+ );
37
33
 
38
34
  if (increaseCardinalityRequired || !oldestObservationSatisfied) {
39
35
  revert OracleNotReady(increaseCardinalityRequired, oldestObservationSatisfied);
@@ -1,9 +1,9 @@
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/IPPtOracle.sol";
5
5
  import "../../core/libraries/math/PMath.sol";
6
- import { AggregatorV2V3Interface as IChainlinkAggregator } from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol";
6
+ import {AggregatorV2V3Interface as IChainlinkAggregator} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol";
7
7
 
8
8
  /**
9
9
  * @notice The returned price from this contract is multiply with the default USD price of asset
@@ -20,21 +20,17 @@ contract PendlePtUsdChainlinkOracle {
20
20
 
21
21
  error OracleNotReady(bool increaseCardinalityRequired, bool oldestObservationSatisfied);
22
22
 
23
- constructor(
24
- address _ptOracle,
25
- uint32 _twapDuration,
26
- address _market,
27
- address _feed
28
- ) {
23
+ constructor(address _ptOracle, uint32 _twapDuration, address _market, address _feed) {
29
24
  ptOracle = _ptOracle;
30
25
  twapDuration = _twapDuration;
31
26
  market = _market;
32
27
  feed = _feed;
33
28
  feedDecimals = IChainlinkAggregator(feed).decimals();
34
29
 
35
- (bool increaseCardinalityRequired, , bool oldestObservationSatisfied) = IPPtOracle(
36
- _ptOracle
37
- ).getOracleState(market, twapDuration);
30
+ (bool increaseCardinalityRequired, , bool oldestObservationSatisfied) = IPPtOracle(_ptOracle).getOracleState(
31
+ market,
32
+ twapDuration
33
+ );
38
34
 
39
35
  if (increaseCardinalityRequired || !oldestObservationSatisfied) {
40
36
  revert OracleNotReady(increaseCardinalityRequired, oldestObservationSatisfied);
@@ -49,10 +45,7 @@ contract PendlePtUsdChainlinkOracle {
49
45
 
50
46
  function _getUnderlyingAssetPrice() internal view virtual returns (uint256) {
51
47
  uint256 rawPrice = uint256(IChainlinkAggregator(feed).latestAnswer());
52
- return
53
- feedDecimals < 18
54
- ? rawPrice * 10**(18 - feedDecimals)
55
- : rawPrice / 10**(feedDecimals - 18);
48
+ return feedDecimals < 18 ? rawPrice * 10 ** (18 - feedDecimals) : rawPrice / 10 ** (feedDecimals - 18);
56
49
  }
57
50
 
58
51
  function decimals() external pure virtual returns (uint8) {
@@ -21,12 +21,12 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
21
21
  uint256 netPtDesired,
22
22
  uint256 minLpOut
23
23
  ) external payable returns (uint256 netLpOut, uint256 netPtUsed, uint256 netSyInterm) {
24
- (IStandardizedYield SY, IPPrincipalToken PT,) = IPMarket(market).readTokens();
24
+ (IStandardizedYield SY, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
25
25
 
26
26
  netSyInterm = _mintSyFromToken(market, address(SY), 1, input);
27
27
  uint256 netSyUsed;
28
28
 
29
- (,, netSyUsed, netPtUsed) = _readMarket(market).addLiquidity(netSyInterm, netPtDesired, block.timestamp);
29
+ (, , netSyUsed, netPtUsed) = _readMarket(market).addLiquidity(netSyInterm, netPtDesired, block.timestamp);
30
30
 
31
31
  if (netSyInterm != netSyUsed) {
32
32
  revert Errors.RouterNotAllSyUsed(netSyInterm, netSyUsed);
@@ -34,12 +34,19 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
34
34
 
35
35
  // SY has been minted and transferred to the market
36
36
  _transferFrom(PT, msg.sender, market, netPtUsed);
37
- (netLpOut,,) = IPMarket(market).mint(receiver, netSyUsed, netPtUsed);
37
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netSyUsed, netPtUsed);
38
38
 
39
39
  if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
40
40
 
41
41
  emit AddLiquidityDualTokenAndPt(
42
- msg.sender, market, input.tokenIn, receiver, input.netTokenIn, netPtUsed, netLpOut, netSyInterm
42
+ msg.sender,
43
+ market,
44
+ input.tokenIn,
45
+ receiver,
46
+ input.netTokenIn,
47
+ netPtUsed,
48
+ netLpOut,
49
+ netSyInterm
43
50
  );
44
51
  }
45
52
 
@@ -50,15 +57,18 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
50
57
  uint256 netPtDesired,
51
58
  uint256 minLpOut
52
59
  ) external returns (uint256 netLpOut, uint256 netSyUsed, uint256 netPtUsed) {
53
- (IStandardizedYield SY, IPPrincipalToken PT,) = IPMarket(market).readTokens();
60
+ (IStandardizedYield SY, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
54
61
 
55
62
  // calculate the amount of SY and PT to be used
56
- (, netLpOut, netSyUsed, netPtUsed) =
57
- _readMarket(market).addLiquidity(netSyDesired, netPtDesired, block.timestamp);
63
+ (, netLpOut, netSyUsed, netPtUsed) = _readMarket(market).addLiquidity(
64
+ netSyDesired,
65
+ netPtDesired,
66
+ block.timestamp
67
+ );
58
68
 
59
69
  _transferFrom(SY, msg.sender, market, netSyUsed);
60
70
  _transferFrom(PT, msg.sender, market, netPtUsed);
61
- (netLpOut,,) = IPMarket(market).mint(receiver, netSyUsed, netPtUsed);
71
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netSyUsed, netPtUsed);
62
72
 
63
73
  if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
64
74
 
@@ -82,24 +92,31 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
82
92
  uint256 netSyReceived;
83
93
 
84
94
  if (!_isEmptyLimit(limit)) {
85
- (netPtLeft, netSyReceived, netSyFee,) = _fillLimit(market, PT, netPtLeft, limit);
95
+ (netPtLeft, netSyReceived, netSyFee, ) = _fillLimit(market, PT, netPtLeft, limit);
86
96
  _transferOut(address(PT), market, netPtLeft);
87
97
  }
88
98
 
89
- (uint256 netPtSwapMarket,,) = _readMarket(market).approxSwapPtToAddLiquidity(
90
- YT.newIndex(), netPtLeft, netSyReceived, block.timestamp, guessPtSwapToSy
99
+ (uint256 netPtSwapMarket, , ) = _readMarket(market).approxSwapPtToAddLiquidity(
100
+ YT.newIndex(),
101
+ netPtLeft,
102
+ netSyReceived,
103
+ block.timestamp,
104
+ guessPtSwapToSy
91
105
  );
92
106
 
93
107
  // execute the swap
94
- (uint256 netSyOutMarket, uint256 netSyFeeMarket) =
95
- IPMarket(market).swapExactPtForSy(market, netPtSwapMarket, EMPTY_BYTES);
108
+ (uint256 netSyOutMarket, uint256 netSyFeeMarket) = IPMarket(market).swapExactPtForSy(
109
+ market,
110
+ netPtSwapMarket,
111
+ EMPTY_BYTES
112
+ );
96
113
 
97
114
  netPtLeft -= netPtSwapMarket;
98
115
  netSyReceived += netSyOutMarket;
99
116
  netSyFee += netSyFeeMarket;
100
117
 
101
118
  // execute the addLiquidity
102
- (netLpOut,,) = IPMarket(market).mint(receiver, netSyReceived, netPtLeft);
119
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netSyReceived, netPtLeft);
103
120
 
104
121
  if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
105
122
 
@@ -120,15 +137,29 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
120
137
  TokenInput calldata input,
121
138
  LimitOrderData calldata limit
122
139
  ) external payable returns (uint256 netLpOut, uint256 netSyFee, uint256 netSyInterm) {
123
- (IStandardizedYield SY,, IPYieldToken YT) = IPMarket(market).readTokens();
140
+ (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
124
141
 
125
142
  netSyInterm = _mintSyFromToken(_entry_addLiquiditySingleSy(market, limit), address(SY), 1, input);
126
143
 
127
- (netLpOut, netSyFee) =
128
- _addLiquiditySingleSy(receiver, market, SY, YT, netSyInterm, minLpOut, guessPtReceivedFromSy, limit);
144
+ (netLpOut, netSyFee) = _addLiquiditySingleSy(
145
+ receiver,
146
+ market,
147
+ SY,
148
+ YT,
149
+ netSyInterm,
150
+ minLpOut,
151
+ guessPtReceivedFromSy,
152
+ limit
153
+ );
129
154
 
130
155
  emit AddLiquiditySingleToken(
131
- msg.sender, market, input.tokenIn, receiver, input.netTokenIn, netLpOut, netSyInterm
156
+ msg.sender,
157
+ market,
158
+ input.tokenIn,
159
+ receiver,
160
+ input.netTokenIn,
161
+ netLpOut,
162
+ netSyInterm
132
163
  );
133
164
  }
134
165
 
@@ -140,12 +171,20 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
140
171
  ApproxParams calldata guessPtReceivedFromSy,
141
172
  LimitOrderData calldata limit
142
173
  ) external returns (uint256 netLpOut, uint256 netSyFee) {
143
- (IStandardizedYield SY,, IPYieldToken YT) = IPMarket(market).readTokens();
174
+ (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
144
175
 
145
176
  _transferFrom(SY, msg.sender, _entry_addLiquiditySingleSy(market, limit), netSyIn);
146
177
 
147
- (netLpOut, netSyFee) =
148
- _addLiquiditySingleSy(receiver, market, SY, YT, netSyIn, minLpOut, guessPtReceivedFromSy, limit);
178
+ (netLpOut, netSyFee) = _addLiquiditySingleSy(
179
+ receiver,
180
+ market,
181
+ SY,
182
+ YT,
183
+ netSyIn,
184
+ minLpOut,
185
+ guessPtReceivedFromSy,
186
+ limit
187
+ );
149
188
 
150
189
  emit AddLiquiditySingleSy(msg.sender, market, receiver, netSyIn, netLpOut);
151
190
  }
@@ -168,22 +207,29 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
168
207
  uint256 netPtReceived;
169
208
 
170
209
  if (!_isEmptyLimit(limit)) {
171
- (netSyLeft, netPtReceived, netSyFee,) = _fillLimit(market, SY, netSyLeft, limit);
210
+ (netSyLeft, netPtReceived, netSyFee, ) = _fillLimit(market, SY, netSyLeft, limit);
172
211
  _transferOut(address(SY), market, netSyLeft);
173
212
  }
174
213
 
175
- (uint256 netPtOutMarket,,) = _readMarket(market).approxSwapSyToAddLiquidity(
176
- YT.newIndex(), netSyLeft, netPtReceived, block.timestamp, guessPtReceivedFromSy
214
+ (uint256 netPtOutMarket, , ) = _readMarket(market).approxSwapSyToAddLiquidity(
215
+ YT.newIndex(),
216
+ netSyLeft,
217
+ netPtReceived,
218
+ block.timestamp,
219
+ guessPtReceivedFromSy
177
220
  );
178
221
 
179
- (uint256 netSySwapMarket, uint256 netSyFeeMarket) =
180
- IPMarket(market).swapSyForExactPt(market, netPtOutMarket, EMPTY_BYTES);
222
+ (uint256 netSySwapMarket, uint256 netSyFeeMarket) = IPMarket(market).swapSyForExactPt(
223
+ market,
224
+ netPtOutMarket,
225
+ EMPTY_BYTES
226
+ );
181
227
 
182
228
  netSyLeft -= netSySwapMarket;
183
229
  netPtReceived += netPtOutMarket;
184
230
  netSyFee += netSyFeeMarket;
185
231
 
186
- (netLpOut,,) = IPMarket(market).mint(receiver, netSyLeft, netPtReceived);
232
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netSyLeft, netPtReceived);
187
233
 
188
234
  if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
189
235
  }
@@ -197,15 +243,30 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
197
243
  uint256 minYtOut,
198
244
  TokenInput calldata input
199
245
  ) external payable returns (uint256 netLpOut, uint256 netYtOut, uint256 netSyMintPy, uint256 netSyInterm) {
200
- (IStandardizedYield SY,, IPYieldToken YT) = IPMarket(market).readTokens();
246
+ (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
201
247
 
202
248
  netSyInterm = _mintSyFromToken(address(this), address(SY), 1, input);
203
249
 
204
- (netLpOut, netYtOut, netSyMintPy) =
205
- _addLiquiditySingleSyKeepYt(receiver, market, SY, YT, netSyInterm, minLpOut, minYtOut);
250
+ (netLpOut, netYtOut, netSyMintPy) = _addLiquiditySingleSyKeepYt(
251
+ receiver,
252
+ market,
253
+ SY,
254
+ YT,
255
+ netSyInterm,
256
+ minLpOut,
257
+ minYtOut
258
+ );
206
259
 
207
260
  emit AddLiquiditySingleTokenKeepYt(
208
- msg.sender, market, input.tokenIn, receiver, input.netTokenIn, netLpOut, netYtOut, netSyMintPy, netSyInterm
261
+ msg.sender,
262
+ market,
263
+ input.tokenIn,
264
+ receiver,
265
+ input.netTokenIn,
266
+ netLpOut,
267
+ netYtOut,
268
+ netSyMintPy,
269
+ netSyInterm
209
270
  );
210
271
  }
211
272
 
@@ -216,12 +277,19 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
216
277
  uint256 minLpOut,
217
278
  uint256 minYtOut
218
279
  ) external returns (uint256 netLpOut, uint256 netYtOut, uint256 netSyMintPy) {
219
- (IStandardizedYield SY,, IPYieldToken YT) = IPMarket(market).readTokens();
280
+ (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
220
281
 
221
282
  _transferIn(address(SY), msg.sender, netSyIn);
222
283
 
223
- (netLpOut, netYtOut, netSyMintPy) =
224
- _addLiquiditySingleSyKeepYt(receiver, market, SY, YT, netSyIn, minLpOut, minYtOut);
284
+ (netLpOut, netYtOut, netSyMintPy) = _addLiquiditySingleSyKeepYt(
285
+ receiver,
286
+ market,
287
+ SY,
288
+ YT,
289
+ netSyIn,
290
+ minLpOut,
291
+ minYtOut
292
+ );
225
293
 
226
294
  emit AddLiquiditySingleSyKeepYt(msg.sender, market, receiver, netSyIn, netSyMintPy, netLpOut, netYtOut);
227
295
  }
@@ -240,7 +308,8 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
240
308
  PYIndex pyIndex = YT.newIndex();
241
309
 
242
310
  netSyMintPy =
243
- (netSyIn * state.totalPt.Uint()) / (state.totalPt.Uint() + pyIndex.syToAsset(state.totalSy.Uint()));
311
+ (netSyIn * state.totalPt.Uint()) /
312
+ (state.totalPt.Uint() + pyIndex.syToAsset(state.totalSy.Uint()));
244
313
 
245
314
  uint256 netSyAddLiquidity = netSyIn - netSyMintPy;
246
315
 
@@ -253,7 +322,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
253
322
  // PT goes to market, YT goes to receiver
254
323
  netYtOut = YT.mintPY(market, receiver);
255
324
 
256
- (netLpOut,,) = IPMarket(market).mint(receiver, netSyAddLiquidity, netYtOut);
325
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netSyAddLiquidity, netYtOut);
257
326
 
258
327
  if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
259
328
  if (netYtOut < minYtOut) revert Errors.RouterInsufficientYtOut(netYtOut, minYtOut);
@@ -268,7 +337,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
268
337
  TokenOutput calldata output,
269
338
  uint256 minPtOut
270
339
  ) external returns (uint256 netTokenOut, uint256 netPtOut, uint256 netSyInterm) {
271
- (IStandardizedYield SY,,) = IPMarket(market).readTokens();
340
+ (IStandardizedYield SY, , ) = IPMarket(market).readTokens();
272
341
 
273
342
  // burn LP, SY sent to SY, PT sent to receiver
274
343
  _transferFrom(IERC20(market), msg.sender, market, netLpToRemove);
@@ -279,7 +348,14 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
279
348
  // redeem SY to token
280
349
  netTokenOut = _redeemSyToToken(receiver, address(SY), netSyInterm, output, false);
281
350
  emit RemoveLiquidityDualTokenAndPt(
282
- msg.sender, market, output.tokenOut, receiver, netLpToRemove, netPtOut, netTokenOut, netSyInterm
351
+ msg.sender,
352
+ market,
353
+ output.tokenOut,
354
+ receiver,
355
+ netLpToRemove,
356
+ netPtOut,
357
+ netTokenOut,
358
+ netSyInterm
283
359
  );
284
360
  }
285
361
 
@@ -313,13 +389,22 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
313
389
 
314
390
  // execute the burn
315
391
  _transferFrom(IERC20(market), msg.sender, market, netLpToRemove);
316
- (uint256 netSyOutBurn, uint256 netPtOutBurn) =
317
- IPMarket(market).burn(_entry_swapExactSyForPt(market, limit), receiver, netLpToRemove);
392
+ (uint256 netSyOutBurn, uint256 netPtOutBurn) = IPMarket(market).burn(
393
+ _entry_swapExactSyForPt(market, limit),
394
+ receiver,
395
+ netLpToRemove
396
+ );
318
397
  netSyLeft += netSyOutBurn;
319
398
  netPtOut += netPtOutBurn;
320
399
 
321
- (uint256 netPtOutSwap, uint256 netSyFeeSwap) =
322
- _swapExactSyForPt(receiver, market, netSyLeft, 0, guessPtReceivedFromSy, limit);
400
+ (uint256 netPtOutSwap, uint256 netSyFeeSwap) = _swapExactSyForPt(
401
+ receiver,
402
+ market,
403
+ netSyLeft,
404
+ 0,
405
+ guessPtReceivedFromSy,
406
+ limit
407
+ );
323
408
  netPtOut += netPtOutSwap;
324
409
  netSyFee += netSyFeeSwap;
325
410
 
@@ -337,7 +422,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
337
422
  TokenOutput calldata output,
338
423
  LimitOrderData calldata limit
339
424
  ) external returns (uint256 netTokenOut, uint256 netSyFee, uint256 netSyInterm) {
340
- (IStandardizedYield SY,,) = IPMarket(market).readTokens();
425
+ (IStandardizedYield SY, , ) = IPMarket(market).readTokens();
341
426
 
342
427
  _transferFrom(IERC20(market), msg.sender, market, netLpToRemove);
343
428
 
@@ -346,7 +431,13 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
346
431
  netTokenOut = _redeemSyToToken(receiver, address(SY), netSyInterm, output, false);
347
432
 
348
433
  emit RemoveLiquiditySingleToken(
349
- msg.sender, market, output.tokenOut, receiver, netLpToRemove, netTokenOut, netSyInterm
434
+ msg.sender,
435
+ market,
436
+ output.tokenOut,
437
+ receiver,
438
+ netLpToRemove,
439
+ netTokenOut,
440
+ netSyInterm
350
441
  );
351
442
  }
352
443
 
@@ -380,12 +471,13 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
380
471
  if (netSyOut < minSyOut) revert Errors.RouterInsufficientSyOut(netSyOut, minSyOut);
381
472
  }
382
473
 
383
- function __removeLpToSyAfterExpiry(address receiver, address market, uint256 netLpToRemove)
384
- internal
385
- returns (uint256 netSyOut)
386
- {
387
- (,, IPYieldToken YT) = IPMarket(market).readTokens();
388
- (uint256 syFromBurn,) = IPMarket(market).burn(receiver, address(YT), netLpToRemove);
474
+ function __removeLpToSyAfterExpiry(
475
+ address receiver,
476
+ address market,
477
+ uint256 netLpToRemove
478
+ ) internal returns (uint256 netSyOut) {
479
+ (, , IPYieldToken YT) = IPMarket(market).readTokens();
480
+ (uint256 syFromBurn, ) = IPMarket(market).burn(receiver, address(YT), netLpToRemove);
389
481
  netSyOut = syFromBurn + YT.redeemPY(receiver);
390
482
  }
391
483
 
@@ -397,8 +489,11 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase {
397
489
  ) internal returns (uint256 netSyOut, uint256 netSyFee) {
398
490
  uint256 netPtLeft;
399
491
 
400
- (uint256 netSyOutBurn, uint256 netPtOutBurn) =
401
- IPMarket(market).burn(receiver, _entry_swapExactPtForSy(market, limit), netLpToRemove);
492
+ (uint256 netSyOutBurn, uint256 netPtOutBurn) = IPMarket(market).burn(
493
+ receiver,
494
+ _entry_swapExactPtForSy(market, limit),
495
+ netLpToRemove
496
+ );
402
497
  netSyOut += netSyOutBurn;
403
498
  netPtLeft += netPtOutBurn;
404
499
 
@@ -7,7 +7,7 @@ import "./base/CallbackHelper.sol";
7
7
 
8
8
  import "../core/libraries/TokenHelper.sol";
9
9
 
10
- contract ActionCallbackV3 is IPOrderMixinType, IPActionCallbackV3, CallbackHelper, TokenHelper {
10
+ contract ActionCallbackV3 is IPLimitOrderType, IPActionCallbackV3, CallbackHelper, TokenHelper {
11
11
  using PMath for int256;
12
12
  using PMath for uint256;
13
13
  using PYIndexLib for PYIndex;
@@ -28,14 +28,21 @@ contract ActionCallbackV3 is IPOrderMixinType, IPActionCallbackV3, CallbackHelpe
28
28
  }
29
29
  }
30
30
 
31
- function normalFillCallback(uint256 actualMaking, uint256 actualTaking, uint256, /*totalFee*/ bytes memory data)
31
+ function limitRouterCallback(
32
+ uint256 actualMaking,
33
+ uint256 actualTaking,
34
+ uint256,
35
+ /*totalFee*/ bytes memory data
36
+ )
32
37
  external
33
38
  returns (
34
39
  bytes memory // encode as netTransferToLimit, netOutputFromLimit
35
40
  )
36
41
  {
37
- (OrderType orderType, IPYieldToken YT, uint256 netRemaining, address receiver) =
38
- abi.decode(data, (OrderType, IPYieldToken, uint256, address));
42
+ (OrderType orderType, IPYieldToken YT, uint256 netRemaining, address receiver) = abi.decode(
43
+ data,
44
+ (OrderType, IPYieldToken, uint256, address)
45
+ );
39
46
 
40
47
  if (orderType == OrderType.SY_FOR_PT || orderType == OrderType.SY_FOR_YT) {
41
48
  PYIndex index = YT.newIndex();