@pendle/core-v2 5.1.1 → 5.1.2-beta-2

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 (204) hide show
  1. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  2. package/build/artifacts/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  3. package/build/artifacts/contracts/core/StandardizedYield/SYBaseWithoutPermitUpg.sol/SYBaseWithoutPermitUpg.dbg.json +1 -1
  4. package/build/artifacts/contracts/core/StandardizedYield/implementations/AaveV3/PendleStkGHOSY.sol/PendleStkGHOSY.dbg.json +1 -1
  5. package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol/PendleGlpSY.dbg.json +1 -1
  6. package/build/artifacts/contracts/core/StandardizedYield/implementations/Mantle/PendleCMETHSY.sol/PendleCMETHSY.dbg.json +1 -1
  7. package/build/artifacts/contracts/core/StandardizedYield/implementations/Silo/PendleSiloWithIncentiveNonBorrowableSY.sol/PendleSiloWithIncentiveNonBorrowableSY.dbg.json +4 -0
  8. package/build/artifacts/contracts/core/StandardizedYield/implementations/Silo/PendleSiloWithIncentiveNonBorrowableSY.sol/PendleSiloWithIncentiveNonBorrowableSY.json +1222 -0
  9. package/build/artifacts/contracts/interfaces/AaveV3/IAaveStkGHO.sol/IAaveStkGHO.dbg.json +1 -1
  10. package/build/artifacts/contracts/interfaces/Angle/IAngleDistributor.sol/IAngleDistributor.dbg.json +1 -1
  11. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiqV3.sol/IPActionAddRemoveLiqV3.dbg.json +1 -1
  12. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiqV3.sol/IPActionAddRemoveLiqV3.json +196 -0
  13. package/build/artifacts/contracts/interfaces/IPActionMarketAuxStatic.sol/IPActionMarketAuxStatic.dbg.json +1 -1
  14. package/build/artifacts/contracts/interfaces/IPActionMarketCoreStatic.sol/IPActionMarketCoreStatic.dbg.json +1 -1
  15. package/build/artifacts/contracts/interfaces/IPActionMarketCoreStatic.sol/IPActionMarketCoreStatic.json +66 -0
  16. package/build/artifacts/contracts/interfaces/IPActionMiscV3.sol/IPActionMiscV3.dbg.json +1 -1
  17. package/build/artifacts/contracts/interfaces/IPActionMiscV3.sol/IPActionMiscV3.json +196 -78
  18. package/build/artifacts/contracts/interfaces/IPActionSimple.sol/IPActionSimple.dbg.json +1 -1
  19. package/build/artifacts/contracts/interfaces/IPActionSimple.sol/IPActionSimple.json +196 -0
  20. package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.dbg.json +1 -1
  21. package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.json +196 -0
  22. package/build/artifacts/contracts/interfaces/IPActionStorageV4.sol/IPActionStorageV4.dbg.json +1 -1
  23. package/build/artifacts/contracts/interfaces/IPActionStorageV4.sol/IPActionStorageV4.json +196 -0
  24. package/build/artifacts/contracts/interfaces/IPActionSwapLimitV3.sol/IPActionSwapLimitV3.dbg.json +4 -0
  25. package/build/artifacts/contracts/interfaces/IPActionSwapLimitV3.sol/IPActionSwapLimitV3.json +2638 -0
  26. package/build/artifacts/contracts/interfaces/IPActionSwapPTV3.sol/IPActionSwapPTV3.dbg.json +1 -1
  27. package/build/artifacts/contracts/interfaces/IPActionSwapPTV3.sol/IPActionSwapPTV3.json +196 -0
  28. package/build/artifacts/contracts/interfaces/IPActionSwapYTV3.sol/IPActionSwapYTV3.dbg.json +1 -1
  29. package/build/artifacts/contracts/interfaces/IPActionSwapYTV3.sol/IPActionSwapYTV3.json +196 -0
  30. package/build/artifacts/contracts/interfaces/IPAllActionV3.sol/IPAllActionV3.dbg.json +1 -1
  31. package/build/artifacts/contracts/interfaces/IPAllActionV3.sol/IPAllActionV3.json +1220 -48
  32. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionAddRemoveLiqV3Events.dbg.json +1 -1
  33. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionMiscV3Events.dbg.json +1 -1
  34. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionStorageEvents.dbg.json +1 -1
  35. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionSwapLimitV3Events.dbg.json +4 -0
  36. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionSwapLimitV3Events.json +207 -0
  37. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionSwapPTV3Events.dbg.json +1 -1
  38. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPActionSwapYTV3Events.dbg.json +1 -1
  39. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPAllEventsV3.dbg.json +1 -1
  40. package/build/artifacts/contracts/interfaces/IPAllEventsV3.sol/IPAllEventsV3.json +196 -0
  41. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
  42. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.json +262 -0
  43. package/build/artifacts/contracts/offchain-helpers/PendlePoolDeployHelper.sol/PendlePoolDeployHelper.dbg.json +1 -1
  44. package/build/artifacts/contracts/offchain-helpers/PendlePoolDeployHelper.sol/PendlePoolDeployHelper.json +2 -2
  45. package/build/artifacts/contracts/offchain-helpers/errors/SDKErrorsDirectory.sol/SDKErrorsDirectory.dbg.json +1 -1
  46. package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.dbg.json +1 -1
  47. package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.json +2 -2
  48. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.dbg.json +1 -1
  49. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.json +2 -2
  50. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.dbg.json +1 -1
  51. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.json +2 -2
  52. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.dbg.json +1 -1
  53. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.json +68 -2
  54. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.dbg.json +1 -1
  55. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.json +2 -2
  56. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.dbg.json +1 -1
  57. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.json +198 -2
  58. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.dbg.json +1 -1
  59. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.json +2 -2
  60. package/build/artifacts/contracts/offchain-helpers/router-static/base/StorageLayout.sol/StorageLayout.dbg.json +1 -1
  61. package/build/artifacts/contracts/oracles/PendleBoringOneracle.sol/PendleBoringOneracle.dbg.json +1 -1
  62. package/build/artifacts/contracts/oracles/PendleBoringSolvBTCOneracle.sol/PendleBoringSolvBTCOneracle.dbg.json +1 -1
  63. package/build/artifacts/contracts/oracles/PendleLpOracleLib.sol/PendleLpOracleLib.dbg.json +1 -1
  64. package/build/artifacts/contracts/oracles/PendlePYLpOracle.sol/PendlePYLpOracle.dbg.json +1 -1
  65. package/build/artifacts/contracts/oracles/PendlePYOracleLib.sol/PendlePYOracleLib.dbg.json +1 -1
  66. package/build/artifacts/contracts/oracles/PendleRedStoneRateOracleAdapter.sol/PendleRedStoneRateOracleAdapter.dbg.json +1 -1
  67. package/build/artifacts/contracts/oracles/PendleSparkLinearDiscountOracle.sol/PTExpiry.dbg.json +1 -1
  68. package/build/artifacts/contracts/oracles/PendleSparkLinearDiscountOracle.sol/PendleSparkLinearDiscountOracle.dbg.json +1 -1
  69. package/build/artifacts/contracts/oracles/samples/BoringLpGlpOracle.sol/BoringLpGlpOracle.dbg.json +1 -1
  70. package/build/artifacts/contracts/oracles/samples/BoringLpSeller.sol/BoringLpSeller.dbg.json +1 -1
  71. package/build/artifacts/contracts/oracles/samples/BoringPYUsdChainlinkAssetOracle.sol/BoringPYUsdChainlinkAssetOracle.dbg.json +1 -1
  72. package/build/artifacts/contracts/oracles/samples/BoringPYUsdChainlinkSYOracle.sol/BoringPYUsdChainlinkSYOracle.dbg.json +1 -1
  73. package/build/artifacts/contracts/oracles/samples/BoringPtSeller.sol/BoringPtSeller.dbg.json +1 -1
  74. package/build/artifacts/contracts/router/ActionAddRemoveLiqV3.sol/ActionAddRemoveLiqV3.dbg.json +1 -1
  75. package/build/artifacts/contracts/router/ActionAddRemoveLiqV3.sol/ActionAddRemoveLiqV3.json +198 -2
  76. package/build/artifacts/contracts/router/ActionMiscV3.sol/ActionMiscV3.dbg.json +1 -1
  77. package/build/artifacts/contracts/router/ActionMiscV3.sol/ActionMiscV3.json +198 -80
  78. package/build/artifacts/contracts/router/ActionSimple.sol/ActionSimple.dbg.json +1 -1
  79. package/build/artifacts/contracts/router/ActionSimple.sol/ActionSimple.json +198 -2
  80. package/build/artifacts/contracts/router/ActionStorageV4.sol/ActionStorageV4.dbg.json +1 -1
  81. package/build/artifacts/contracts/router/ActionStorageV4.sol/ActionStorageV4.json +198 -2
  82. package/build/artifacts/contracts/router/ActionSwapLimitV3.sol/ActionSwapLimitV3.dbg.json +4 -0
  83. package/build/artifacts/contracts/router/ActionSwapLimitV3.sol/ActionSwapLimitV3.json +2638 -0
  84. package/build/artifacts/contracts/router/ActionSwapPTV3.sol/ActionSwapPTV3.dbg.json +1 -1
  85. package/build/artifacts/contracts/router/ActionSwapPTV3.sol/ActionSwapPTV3.json +198 -2
  86. package/build/artifacts/contracts/router/ActionSwapYTV3.sol/ActionSwapYTV3.dbg.json +1 -1
  87. package/build/artifacts/contracts/router/ActionSwapYTV3.sol/ActionSwapYTV3.json +198 -2
  88. package/build/artifacts/contracts/router/PendleRouterV4.sol/PendleRouterV4.dbg.json +1 -1
  89. package/build/artifacts/contracts/router/PendleRouterV4.sol/PendleRouterV4.json +2 -2
  90. package/build/artifacts/contracts/router/Reflector.sol/Reflector.dbg.json +1 -1
  91. package/build/artifacts/contracts/router/Reflector.sol/Reflector.json +2 -2
  92. package/build/artifacts/contracts/router/base/ActionBase.sol/ActionBase.dbg.json +1 -1
  93. package/build/artifacts/contracts/router/base/ActionDelegateBase.sol/ActionDelegateBase.dbg.json +1 -1
  94. package/build/artifacts/contracts/router/base/ActionDelegateBase.sol/ActionDelegateBase.json +2 -2
  95. package/build/artifacts/contracts/router/math/ApproxStateLib.sol/ApproxStateLib.dbg.json +1 -1
  96. package/build/artifacts/contracts/router/math/ApproxStateLib.sol/ApproxStateLib.json +2 -2
  97. package/build/artifacts/contracts/router/math/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
  98. package/build/artifacts/contracts/router/math/MarketApproxLib.sol/MarketApproxPtInLib.json +2 -2
  99. package/build/artifacts/contracts/router/math/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
  100. package/build/artifacts/contracts/router/math/MarketApproxLib.sol/MarketApproxPtOutLib.json +2 -2
  101. package/build/artifacts/contracts/router/math/MarketApproxLibOnchain.sol/MarketApproxPtInLibOnchain.dbg.json +1 -1
  102. package/build/artifacts/contracts/router/math/MarketApproxLibOnchain.sol/MarketApproxPtInLibOnchain.json +2 -2
  103. package/build/artifacts/contracts/router/math/MarketApproxLibOnchain.sol/MarketApproxPtOutLibOnchain.dbg.json +1 -1
  104. package/build/artifacts/contracts/router/math/MarketApproxLibOnchain.sol/MarketApproxPtOutLibOnchain.json +2 -2
  105. package/contracts/core/StandardizedYield/implementations/Silo/PendleSiloWithIncentiveNonBorrowableSY.sol +154 -0
  106. package/contracts/interfaces/IPActionAddRemoveLiqV3.sol +6 -6
  107. package/contracts/interfaces/IPActionMarketCoreStatic.sol +4 -0
  108. package/contracts/interfaces/IPActionMiscV3.sol +2 -8
  109. package/contracts/interfaces/IPActionSwapLimitV3.sol +42 -0
  110. package/contracts/interfaces/IPActionSwapPTV3.sol +4 -4
  111. package/contracts/interfaces/IPActionSwapYTV3.sol +4 -4
  112. package/contracts/interfaces/IPAllActionTypeV3.sol +4 -0
  113. package/contracts/interfaces/IPAllActionV3.sol +3 -1
  114. package/contracts/interfaces/IPAllEventsV3.sol +44 -1
  115. package/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol +1 -1
  116. package/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol +1 -1
  117. package/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol +10 -4
  118. package/contracts/router/ActionAddRemoveLiqV3.sol +9 -9
  119. package/contracts/router/ActionMiscV3.sol +3 -17
  120. package/contracts/router/ActionSwapLimitV3.sol +126 -0
  121. package/contracts/router/ActionSwapPTV3.sol +4 -4
  122. package/contracts/router/ActionSwapYTV3.sol +4 -4
  123. package/contracts/router/base/ActionBase.sol +35 -12
  124. package/contracts/router/base/ActionDelegateBase.sol +1 -1
  125. package/deployments/1-markets/RSETH-MAINNET-JUN2025.json +14 -0
  126. package/deployments/1-markets/WEETH-MAINNET-JUN2025.json +14 -0
  127. package/deployments/42161-markets/RSETH-ARBITRUM-JUN2025.json +14 -0
  128. package/deployments/42161-markets/SPSILO-ARBITRUM-MAR2025.json +14 -0
  129. package/deployments/42161-markets/WEETH-ARBITRUM-JUN2025.json +14 -0
  130. package/deployments/56-core.json +1 -1
  131. package/package.json +1 -1
  132. package/typechain-types/ActionAddRemoveLiqV3.ts +148 -0
  133. package/typechain-types/ActionMarketCoreStatic.ts +68 -0
  134. package/typechain-types/ActionMiscV3.ts +148 -44
  135. package/typechain-types/ActionSimple.ts +148 -0
  136. package/typechain-types/ActionStorageStatic.ts +148 -0
  137. package/typechain-types/ActionStorageV4.ts +148 -0
  138. package/typechain-types/ActionSwapLimitV3.ts +1667 -0
  139. package/typechain-types/ActionSwapPTV3.ts +148 -0
  140. package/typechain-types/ActionSwapYTV3.ts +148 -0
  141. package/typechain-types/IPActionAddRemoveLiqV3.ts +148 -0
  142. package/typechain-types/IPActionMarketCoreStatic.ts +68 -0
  143. package/typechain-types/IPActionMiscV3.ts +148 -44
  144. package/typechain-types/IPActionSimple.ts +148 -0
  145. package/typechain-types/IPActionStorageStatic.ts +148 -0
  146. package/typechain-types/IPActionStorageV4.ts +148 -0
  147. package/typechain-types/IPActionSwapLimitV3.ts +1667 -0
  148. package/typechain-types/IPActionSwapLimitV3Events.ts +207 -0
  149. package/typechain-types/IPActionSwapPTV3.ts +148 -0
  150. package/typechain-types/IPActionSwapYTV3.ts +148 -0
  151. package/typechain-types/IPAllActionV3.ts +390 -20
  152. package/typechain-types/IPAllEventsV3.ts +148 -0
  153. package/typechain-types/IPChainlinkOracle.ts +221 -0
  154. package/typechain-types/IPChainlinkOracleFactory.ts +123 -0
  155. package/typechain-types/IPChainlinkOracleWithQuote.ts +404 -0
  156. package/typechain-types/IPRouterStatic.ts +182 -0
  157. package/typechain-types/PendleChainlinkOracle.ts +299 -0
  158. package/typechain-types/PendleChainlinkOracleBase.ts +299 -0
  159. package/typechain-types/PendleChainlinkOracleFactory.ts +389 -0
  160. package/typechain-types/PendleChainlinkOracleWithQuote.ts +335 -0
  161. package/typechain-types/PendleSiloWithIncentiveNonBorrowableSY.ts +1543 -0
  162. package/typechain-types/factories/ActionAddRemoveLiqV3__factory.ts +197 -1
  163. package/typechain-types/factories/ActionInfoStatic__factory.ts +1 -1
  164. package/typechain-types/factories/ActionMarketAuxStatic__factory.ts +1 -1
  165. package/typechain-types/factories/ActionMarketCoreStatic__factory.ts +67 -1
  166. package/typechain-types/factories/ActionMintRedeemStatic__factory.ts +1 -1
  167. package/typechain-types/factories/ActionMiscV3__factory.ts +197 -79
  168. package/typechain-types/factories/ActionSimple__factory.ts +197 -1
  169. package/typechain-types/factories/ActionStorageStatic__factory.ts +197 -1
  170. package/typechain-types/factories/ActionStorageV4__factory.ts +197 -1
  171. package/typechain-types/factories/ActionSwapLimitV3__factory.ts +2691 -0
  172. package/typechain-types/factories/ActionSwapPTV3__factory.ts +197 -1
  173. package/typechain-types/factories/ActionSwapYTV3__factory.ts +197 -1
  174. package/typechain-types/factories/ActionVePendleStatic__factory.ts +1 -1
  175. package/typechain-types/factories/IPActionAddRemoveLiqV3__factory.ts +196 -0
  176. package/typechain-types/factories/IPActionMarketCoreStatic__factory.ts +66 -0
  177. package/typechain-types/factories/IPActionMiscV3__factory.ts +196 -78
  178. package/typechain-types/factories/IPActionSimple__factory.ts +196 -0
  179. package/typechain-types/factories/IPActionStorageStatic__factory.ts +196 -0
  180. package/typechain-types/factories/IPActionStorageV4__factory.ts +196 -0
  181. package/typechain-types/factories/IPActionSwapLimitV3Events__factory.ts +226 -0
  182. package/typechain-types/factories/IPActionSwapLimitV3__factory.ts +2653 -0
  183. package/typechain-types/factories/IPActionSwapPTV3__factory.ts +196 -0
  184. package/typechain-types/factories/IPActionSwapYTV3__factory.ts +196 -0
  185. package/typechain-types/factories/IPAllActionV3__factory.ts +1220 -48
  186. package/typechain-types/factories/IPAllEventsV3__factory.ts +196 -0
  187. package/typechain-types/factories/IPChainlinkOracleFactory__factory.ts +110 -0
  188. package/typechain-types/factories/IPChainlinkOracleWithQuote__factory.ts +281 -0
  189. package/typechain-types/factories/IPChainlinkOracle__factory.ts +137 -0
  190. package/typechain-types/factories/IPRouterStatic__factory.ts +262 -0
  191. package/typechain-types/factories/PendleChainlinkOracleBase__factory.ts +272 -0
  192. package/typechain-types/factories/PendleChainlinkOracleFactory__factory.ts +362 -0
  193. package/typechain-types/factories/PendleChainlinkOracleWithQuote__factory.ts +394 -0
  194. package/typechain-types/factories/PendleChainlinkOracle__factory.ts +354 -0
  195. package/typechain-types/factories/PendlePoolDeployHelper__factory.ts +1 -1
  196. package/typechain-types/factories/PendleRouterStatic__factory.ts +1 -1
  197. package/typechain-types/factories/PendleRouterV4__factory.ts +1 -1
  198. package/typechain-types/factories/PendleSiloWithIncentiveNonBorrowableSY__factory.ts +1317 -0
  199. package/typechain-types/factories/Reflector__factory.ts +1 -1
  200. package/typechain-types/hardhat.d.ts +36 -0
  201. package/typechain-types/index.ts +8 -0
  202. package/build/artifacts/contracts/offchain-helpers/MarketExchangeRateLib.sol/MarketExchangeRateLib.dbg.json +0 -4
  203. package/build/artifacts/contracts/offchain-helpers/MarketExchangeRateLib.sol/MarketExchangeRateLib.json +0 -10
  204. package/contracts/offchain-helpers/MarketExchangeRateLib.sol +0 -32
@@ -9,6 +9,7 @@ import "./IPActionMiscV3.sol";
9
9
  import "./IPActionCallbackV3.sol";
10
10
  import "./IPActionStorageV4.sol";
11
11
  import "./IPActionSimple.sol";
12
+ import "./IPActionSwapLimitV3.sol";
12
13
 
13
14
  interface IPAllActionV3 is
14
15
  IPActionAddRemoveLiqV3,
@@ -17,5 +18,6 @@ interface IPAllActionV3 is
17
18
  IPActionMiscV3,
18
19
  IPActionCallbackV3,
19
20
  IPActionStorageV4,
20
- IPActionSimple
21
+ IPActionSimple,
22
+ IPActionSwapLimitV3
21
23
  {}
@@ -265,10 +265,53 @@ interface IPActionStorageEvents {
265
265
  event SelectorToFacetSet(bytes4 indexed selector, address indexed facet);
266
266
  }
267
267
 
268
+ interface IPActionSwapLimitV3Events {
269
+ event SwapMaxPtForTokenLimitOnly(
270
+ address indexed caller,
271
+ address indexed market,
272
+ address indexed token,
273
+ address receiver,
274
+ uint256 maxPtIn,
275
+ uint256 netTokenOut,
276
+ uint256 netSyInterm,
277
+ uint256 netPtReturned
278
+ );
279
+
280
+ event SwapMaxPtForSyLimitOnly(
281
+ address indexed caller,
282
+ address indexed market,
283
+ address indexed receiver,
284
+ uint256 maxPtIn,
285
+ uint256 netSyOut,
286
+ uint256 netPtReturned
287
+ );
288
+
289
+ event SwapMaxTokenForYtLimitOnly(
290
+ address indexed caller,
291
+ address indexed market,
292
+ address indexed token,
293
+ address receiver,
294
+ uint256 maxTokenIn,
295
+ uint256 netYtOut,
296
+ uint256 netSyInterm,
297
+ uint256 netSyReturned
298
+ );
299
+
300
+ event SwapMaxSyForYtLimitOnly(
301
+ address indexed caller,
302
+ address indexed market,
303
+ address indexed receiver,
304
+ uint256 maxSyIn,
305
+ uint256 netYtOut,
306
+ uint256 netSyReturned
307
+ );
308
+ }
309
+
268
310
  interface IPAllEventsV3 is
269
311
  IPActionAddRemoveLiqV3Events,
270
312
  IPActionSwapPTV3Events,
271
313
  IPActionSwapYTV3Events,
272
314
  IPActionMiscV3Events,
273
- IPActionStorageEvents
315
+ IPActionStorageEvents,
316
+ IPActionSwapLimitV3Events
274
317
  {}
@@ -70,7 +70,7 @@ contract ActionInfoStatic is IPActionInfoStatic {
70
70
 
71
71
  function getUserMarketInfo(address market, address user) external returns (UserMarketInfo memory res) {
72
72
  IPMarket _market = IPMarket(market);
73
- MarketState memory state = _market.readState(address(this));
73
+ MarketState memory state = IPRouterStatic(address(this)).readMarketState(market);
74
74
 
75
75
  if (uint256(state.totalLp) == 0) return res; // market not initialized
76
76
 
@@ -342,7 +342,7 @@ contract ActionMarketAuxStatic is IPActionMarketAuxStatic {
342
342
  }
343
343
 
344
344
  function _readState(address market) internal view returns (MarketState memory) {
345
- return IPMarket(market).readState(address(this));
345
+ return IPRouterStatic(address(this)).readMarketState(market);
346
346
  }
347
347
 
348
348
  function _readTokens(
@@ -18,6 +18,8 @@ contract ActionMarketCoreStatic is StorageLayout, IPActionMarketCoreStatic {
18
18
 
19
19
  // ============ ADD REMOVE LIQUIDITY ============
20
20
 
21
+ address internal constant ROUTER_V4 = 0x888888888889758F76e7103c6CbF23ABbF58F946;
22
+
21
23
  function addLiquidityDualSyAndPtStatic(
22
24
  address market,
23
25
  uint256 netSyDesired,
@@ -625,6 +627,14 @@ contract ActionMarketCoreStatic is StorageLayout, IPActionMarketCoreStatic {
625
627
  exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
626
628
  }
627
629
 
630
+ function readMarketState(address market) public view returns (MarketState memory) {
631
+ return _readState(market);
632
+ }
633
+
634
+ function _readState(address market) internal view returns (MarketState memory) {
635
+ return IPMarket(market).readState(ROUTER_V4);
636
+ }
637
+
628
638
  function _calcPriceImpactPY(address market, int256 netPtOut) internal view returns (uint256) {
629
639
  return IPRouterStatic(address(this)).calcPriceImpactPY(market, netPtOut);
630
640
  }
@@ -657,10 +667,6 @@ contract ActionMarketCoreStatic is StorageLayout, IPActionMarketCoreStatic {
657
667
  return IPRouterStatic(address(this)).getTradeExchangeRateExcludeFee(market, state);
658
668
  }
659
669
 
660
- function _readState(address market) internal view returns (MarketState memory) {
661
- return IPMarket(market).readState(address(this));
662
- }
663
-
664
670
  function _pyIndex(address market) private view returns (PYIndex) {
665
671
  return PYIndex.wrap(IPRouterStatic(address(this)).pyIndexCurrentViewMarket(market));
666
672
  }
@@ -88,7 +88,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase, ActionDeleg
88
88
  uint256 netPtIn,
89
89
  uint256 minLpOut,
90
90
  ApproxParams calldata guessPtSwapToSy,
91
- LimitOrderData calldata limit
91
+ LimitOrderData memory limit
92
92
  ) external returns (uint256 netLpOut, uint256 netSyFee) {
93
93
  if (canUseOnchainApproximation(guessPtSwapToSy, limit)) {
94
94
  return delegateToAddLiquiditySinglePtSimple(receiver, market, netPtIn, minLpOut);
@@ -140,7 +140,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase, ActionDeleg
140
140
  uint256 minLpOut,
141
141
  ApproxParams calldata guessPtReceivedFromSy,
142
142
  TokenInput calldata input,
143
- LimitOrderData calldata limit
143
+ LimitOrderData memory limit
144
144
  ) external payable returns (uint256 netLpOut, uint256 netSyFee, uint256 netSyInterm) {
145
145
  if (canUseOnchainApproximation(guessPtReceivedFromSy, limit)) {
146
146
  return delegateToAddLiquiditySingleTokenSimple(receiver, market, minLpOut, input);
@@ -179,7 +179,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase, ActionDeleg
179
179
  uint256 netSyIn,
180
180
  uint256 minLpOut,
181
181
  ApproxParams calldata guessPtReceivedFromSy,
182
- LimitOrderData calldata limit
182
+ LimitOrderData memory limit
183
183
  ) external returns (uint256 netLpOut, uint256 netSyFee) {
184
184
  if (canUseOnchainApproximation(guessPtReceivedFromSy, limit)) {
185
185
  return delegateToAddLiquiditySingleSySimple(receiver, market, netSyIn, minLpOut);
@@ -211,7 +211,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase, ActionDeleg
211
211
  uint256 netSyIn,
212
212
  uint256 minLpOut,
213
213
  ApproxParams calldata guessPtReceivedFromSy,
214
- LimitOrderData calldata limit
214
+ LimitOrderData memory limit
215
215
  ) internal returns (uint256 netLpOut, uint256 netSyFee) {
216
216
  uint256 netSyLeft = netSyIn;
217
217
  uint256 netPtReceived;
@@ -397,7 +397,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase, ActionDeleg
397
397
  uint256 netLpToRemove,
398
398
  uint256 minPtOut,
399
399
  ApproxParams calldata guessPtReceivedFromSy,
400
- LimitOrderData calldata limit
400
+ LimitOrderData memory limit
401
401
  ) external returns (uint256 netPtOut, uint256 netSyFee) {
402
402
  if (canUseOnchainApproximation(guessPtReceivedFromSy, limit)) {
403
403
  return delegateToRemoveLiquiditySinglePtSimple(receiver, market, netLpToRemove, minPtOut);
@@ -439,7 +439,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase, ActionDeleg
439
439
  address market,
440
440
  uint256 netLpToRemove,
441
441
  TokenOutput calldata output,
442
- LimitOrderData calldata limit
442
+ LimitOrderData memory limit
443
443
  ) external returns (uint256 netTokenOut, uint256 netSyFee, uint256 netSyInterm) {
444
444
  (IStandardizedYield SY, , ) = IPMarket(market).readTokens();
445
445
 
@@ -466,7 +466,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase, ActionDeleg
466
466
  address market,
467
467
  uint256 netLpToRemove,
468
468
  uint256 minSyOut,
469
- LimitOrderData calldata limit
469
+ LimitOrderData memory limit
470
470
  ) external returns (uint256 netSyOut, uint256 netSyFee) {
471
471
  _transferFrom(IERC20(market), msg.sender, market, netLpToRemove);
472
472
 
@@ -481,7 +481,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase, ActionDeleg
481
481
  address market,
482
482
  uint256 netLpToRemove,
483
483
  uint256 minSyOut,
484
- LimitOrderData calldata limit
484
+ LimitOrderData memory limit
485
485
  ) internal returns (uint256 netSyOut, uint256 netSyFee) {
486
486
  if (IPMarket(market).isExpired()) {
487
487
  netSyOut = __removeLpToSyAfterExpiry(receiver, market, netLpToRemove);
@@ -505,7 +505,7 @@ contract ActionAddRemoveLiqV3 is IPActionAddRemoveLiqV3, ActionBase, ActionDeleg
505
505
  address receiver,
506
506
  address market,
507
507
  uint256 netLpToRemove,
508
- LimitOrderData calldata limit
508
+ LimitOrderData memory limit
509
509
  ) internal returns (uint256 netSyOut, uint256 netSyFee) {
510
510
  uint256 netPtLeft;
511
511
 
@@ -205,20 +205,6 @@ contract ActionMiscV3 is IPActionMiscV3, ActionBase {
205
205
  }
206
206
  }
207
207
 
208
- /// @dev Deprecated, please use swapTokensToTokens which support unwrapping ETH too
209
- function swapTokenToToken(
210
- address receiver,
211
- uint256 minTokenOut,
212
- TokenInput calldata inp
213
- ) external payable returns (uint256 netTokenOut) {
214
- _swapTokenInput(inp);
215
-
216
- netTokenOut = _selfBalance(inp.tokenMintSy);
217
- if (netTokenOut < minTokenOut) revert("Slippage: INSUFFICIENT_TOKEN_OUT");
218
-
219
- _transferOut(inp.tokenMintSy, receiver, netTokenOut);
220
- }
221
-
222
208
  /// @dev The interface might change in the future, check with Pendle team before use
223
209
  function swapTokenToTokenViaSy(
224
210
  address receiver,
@@ -239,7 +225,7 @@ contract ActionMiscV3 is IPActionMiscV3, ActionBase {
239
225
  uint256 netYtIn,
240
226
  uint256 netLpIn,
241
227
  TokenOutput calldata output,
242
- LimitOrderData calldata limit
228
+ LimitOrderData memory limit
243
229
  ) external returns (uint256 totalTokenOut, ExitPreExpReturnParams memory params) {
244
230
  IStandardizedYield SY;
245
231
 
@@ -257,7 +243,7 @@ contract ActionMiscV3 is IPActionMiscV3, ActionBase {
257
243
  uint256 netYtIn,
258
244
  uint256 netLpIn,
259
245
  uint256 minSyOut,
260
- LimitOrderData calldata limit
246
+ LimitOrderData memory limit
261
247
  ) external returns (ExitPreExpReturnParams memory params) {
262
248
  (, params) = _exitPreExpToSy(false, receiver, market, netPtIn, netYtIn, netLpIn, limit);
263
249
  require(params.totalSyOut >= minSyOut, "Slippage: INSUFFICIENT_SY_OUT");
@@ -272,7 +258,7 @@ contract ActionMiscV3 is IPActionMiscV3, ActionBase {
272
258
  uint256 netPtIn,
273
259
  uint256 netYtIn,
274
260
  uint256 netLpIn,
275
- LimitOrderData calldata limit
261
+ LimitOrderData memory limit
276
262
  ) internal returns (IStandardizedYield SY, ExitPreExpReturnParams memory p) {
277
263
  IPPrincipalToken PT;
278
264
  IPYieldToken YT;
@@ -0,0 +1,126 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "./base/ActionBase.sol";
5
+ import "../interfaces/IPActionSwapLimitV3.sol";
6
+
7
+ contract ActionSwapLimitV3 is IPActionSwapLimitV3, ActionBase {
8
+ using PMath for uint256;
9
+
10
+ function swapMaxPtForTokenLimitOnly(
11
+ address receiver,
12
+ address market,
13
+ uint256 maxPtIn,
14
+ uint256 minTokenPtRate,
15
+ TokenOutput calldata output,
16
+ LimitOrderData memory limit
17
+ ) external returns (uint256 netTokenOut, uint256 netPtReturned, uint256 netSyFee, uint256 netSyInterm) {
18
+ (IStandardizedYield SY, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
19
+ _transferFrom(PT, msg.sender, address(this), maxPtIn);
20
+
21
+ (netSyInterm, netPtReturned, netSyFee) = _swapMaxPtForSyLimitOnly(address(SY), PT, maxPtIn, 0, limit);
22
+
23
+ netTokenOut = _redeemSyToToken(receiver, address(SY), netSyInterm, output, false);
24
+
25
+ uint256 netPtUsed = maxPtIn - netPtReturned;
26
+ if (netTokenOut.divDown(netPtUsed) < minTokenPtRate) revert("Slippage LO: INSUFFICIENT_TOKEN_OUT");
27
+
28
+ emit SwapMaxPtForTokenLimitOnly(
29
+ msg.sender,
30
+ market,
31
+ output.tokenOut,
32
+ receiver,
33
+ maxPtIn,
34
+ netTokenOut,
35
+ netSyInterm,
36
+ netPtReturned
37
+ );
38
+ }
39
+
40
+ function swapMaxPtForSyLimitOnly(
41
+ address receiver,
42
+ address market,
43
+ uint256 maxPtIn,
44
+ uint256 minSyPtRate,
45
+ LimitOrderData memory limit
46
+ ) external returns (uint256 netSyOut, uint256 netPtReturned, uint256 netSyFee) {
47
+ (, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
48
+ _transferFrom(PT, msg.sender, address(this), maxPtIn);
49
+
50
+ (netSyOut, netPtReturned, netSyFee) = _swapMaxPtForSyLimitOnly(receiver, PT, maxPtIn, minSyPtRate, limit);
51
+
52
+ emit SwapMaxPtForSyLimitOnly(msg.sender, market, receiver, maxPtIn, netSyOut, netPtReturned);
53
+ }
54
+
55
+ function swapMaxTokenForYtLimitOnly(
56
+ address receiver,
57
+ address market,
58
+ uint256 minSyInterm,
59
+ uint256 minYtSyRate,
60
+ TokenInput calldata input,
61
+ LimitOrderData memory limit
62
+ ) external payable returns (uint256 netYtOut, uint256 netSyReturned, uint256 netSyFee, uint256 netSyInterm) {
63
+ (IStandardizedYield SY, , ) = IPMarket(market).readTokens();
64
+
65
+ netSyInterm = _mintSyFromToken(address(this), address(SY), minSyInterm, input);
66
+ (netYtOut, netSyReturned, netSyFee) = _swapMaxSyForYtLimitOnly(receiver, SY, netSyInterm, minYtSyRate, limit);
67
+
68
+ emit SwapMaxTokenForYtLimitOnly(
69
+ msg.sender,
70
+ market,
71
+ input.tokenIn,
72
+ receiver,
73
+ input.netTokenIn,
74
+ netYtOut,
75
+ netSyInterm,
76
+ netSyReturned
77
+ );
78
+ }
79
+
80
+ function swapMaxSyForYtLimitOnly(
81
+ address receiver,
82
+ address market,
83
+ uint256 maxSyIn,
84
+ uint256 minYtSyRate,
85
+ LimitOrderData memory limit
86
+ ) external returns (uint256 netYtOut, uint256 netSyReturned, uint256 netSyFee) {
87
+ (IStandardizedYield SY, , ) = IPMarket(market).readTokens();
88
+
89
+ _transferFrom(SY, msg.sender, address(this), maxSyIn);
90
+ (netYtOut, netSyReturned, netSyFee) = _swapMaxSyForYtLimitOnly(receiver, SY, maxSyIn, minYtSyRate, limit);
91
+
92
+ emit SwapMaxSyForYtLimitOnly(msg.sender, market, receiver, maxSyIn, netYtOut, netSyReturned);
93
+ }
94
+
95
+ function _swapMaxPtForSyLimitOnly(
96
+ address receiver,
97
+ IPPrincipalToken PT,
98
+ uint256 maxPtIn,
99
+ uint256 minSyPtRate,
100
+ LimitOrderData memory limit
101
+ ) internal returns (uint256 netSyOut, uint256 netPtReturned, uint256 netSyFee) {
102
+ (netPtReturned, netSyOut, netSyFee, ) = _fillLimit(receiver, PT, maxPtIn, limit);
103
+ if (netSyOut == 0) revert("Slippage LO: NO_ORDER_FILLED");
104
+
105
+ uint256 netPtUsed = maxPtIn - netPtReturned;
106
+ if (netSyOut.divDown(netPtUsed) < minSyPtRate) revert("Slippage LO: INSUFFICIENT_SY_OUT");
107
+
108
+ _transferOut(address(PT), msg.sender, netPtReturned);
109
+ }
110
+
111
+ function _swapMaxSyForYtLimitOnly(
112
+ address receiver,
113
+ IStandardizedYield SY,
114
+ uint256 maxSyIn,
115
+ uint256 minYtSyRate,
116
+ LimitOrderData memory limit
117
+ ) internal returns (uint256 netYtOut, uint256 netSyReturned, uint256 netSyFee) {
118
+ (netSyReturned, netYtOut, netSyFee, ) = _fillLimit(receiver, SY, maxSyIn, limit);
119
+ if (netYtOut == 0) revert("Slippage LO: NO_ORDER_FILLED");
120
+
121
+ uint256 netSyUsed = maxSyIn - netSyReturned;
122
+ if (netYtOut.divDown(netSyUsed) < minYtSyRate) revert("Slippage LO: INSUFFICIENT_YT_OUT");
123
+
124
+ _transferOut(address(SY), msg.sender, netSyReturned);
125
+ }
126
+ }
@@ -16,7 +16,7 @@ contract ActionSwapPTV3 is IPActionSwapPTV3, ActionBase, ActionDelegateBase {
16
16
  uint256 minPtOut,
17
17
  ApproxParams calldata guessPtOut,
18
18
  TokenInput calldata input,
19
- LimitOrderData calldata limit
19
+ LimitOrderData memory limit
20
20
  ) external payable returns (uint256 netPtOut, uint256 netSyFee, uint256 netSyInterm) {
21
21
  if (canUseOnchainApproximation(guessPtOut, limit)) {
22
22
  return delegateToSwapExactTokenForPtSimple(receiver, market, minPtOut, input);
@@ -44,7 +44,7 @@ contract ActionSwapPTV3 is IPActionSwapPTV3, ActionBase, ActionDelegateBase {
44
44
  uint256 exactSyIn,
45
45
  uint256 minPtOut,
46
46
  ApproxParams calldata guessPtOut,
47
- LimitOrderData calldata limit
47
+ LimitOrderData memory limit
48
48
  ) external returns (uint256 netPtOut, uint256 netSyFee) {
49
49
  if (canUseOnchainApproximation(guessPtOut, limit)) {
50
50
  return delegateToSwapExactSyForPtSimple(receiver, market, exactSyIn, minPtOut);
@@ -63,7 +63,7 @@ contract ActionSwapPTV3 is IPActionSwapPTV3, ActionBase, ActionDelegateBase {
63
63
  address market,
64
64
  uint256 exactPtIn,
65
65
  TokenOutput calldata output,
66
- LimitOrderData calldata limit
66
+ LimitOrderData memory limit
67
67
  ) external returns (uint256 netTokenOut, uint256 netSyFee, uint256 netSyInterm) {
68
68
  (IStandardizedYield SY, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
69
69
  _transferFrom(PT, msg.sender, _entry_swapExactPtForSy(market, limit), exactPtIn);
@@ -89,7 +89,7 @@ contract ActionSwapPTV3 is IPActionSwapPTV3, ActionBase, ActionDelegateBase {
89
89
  address market,
90
90
  uint256 exactPtIn,
91
91
  uint256 minSyOut,
92
- LimitOrderData calldata limit
92
+ LimitOrderData memory limit
93
93
  ) external returns (uint256 netSyOut, uint256 netSyFee) {
94
94
  (, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
95
95
  _transferFrom(PT, msg.sender, _entry_swapExactPtForSy(market, limit), exactPtIn);
@@ -21,7 +21,7 @@ contract ActionSwapYTV3 is CallbackHelper, IPActionSwapYTV3, ActionBase, ActionD
21
21
  uint256 minYtOut,
22
22
  ApproxParams calldata guessYtOut,
23
23
  TokenInput calldata input,
24
- LimitOrderData calldata limit
24
+ LimitOrderData memory limit
25
25
  ) external payable returns (uint256 netYtOut, uint256 netSyFee, uint256 netSyInterm) {
26
26
  if (canUseOnchainApproximation(guessYtOut, limit)) {
27
27
  return delegateToSwapExactTokenForYtSimple(receiver, market, minYtOut, input);
@@ -50,7 +50,7 @@ contract ActionSwapYTV3 is CallbackHelper, IPActionSwapYTV3, ActionBase, ActionD
50
50
  uint256 exactSyIn,
51
51
  uint256 minYtOut,
52
52
  ApproxParams calldata guessYtOut,
53
- LimitOrderData calldata limit
53
+ LimitOrderData memory limit
54
54
  ) external returns (uint256 netYtOut, uint256 netSyFee) {
55
55
  if (canUseOnchainApproximation(guessYtOut, limit)) {
56
56
  return delegateToSwapExactSyForYtSimple(receiver, market, exactSyIn, minYtOut);
@@ -71,7 +71,7 @@ contract ActionSwapYTV3 is CallbackHelper, IPActionSwapYTV3, ActionBase, ActionD
71
71
  address market,
72
72
  uint256 exactYtIn,
73
73
  TokenOutput calldata output,
74
- LimitOrderData calldata limit
74
+ LimitOrderData memory limit
75
75
  ) external returns (uint256 netTokenOut, uint256 netSyFee, uint256 netSyInterm) {
76
76
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
77
77
  _transferFrom(YT, msg.sender, _entry_swapExactYtForSy(YT, limit), exactYtIn);
@@ -97,7 +97,7 @@ contract ActionSwapYTV3 is CallbackHelper, IPActionSwapYTV3, ActionBase, ActionD
97
97
  address market,
98
98
  uint256 exactYtIn,
99
99
  uint256 minSyOut,
100
- LimitOrderData calldata limit
100
+ LimitOrderData memory limit
101
101
  ) external returns (uint256 netSyOut, uint256 netSyFee) {
102
102
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
103
103
  _transferFrom(YT, msg.sender, _entry_swapExactYtForSy(YT, limit), exactYtIn);
@@ -161,7 +161,7 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
161
161
 
162
162
  // ----------------- PT SWAP -----------------
163
163
 
164
- function _entry_swapExactPtForSy(address market, LimitOrderData calldata limit) internal view returns (address) {
164
+ function _entry_swapExactPtForSy(address market, LimitOrderData memory limit) internal view returns (address) {
165
165
  return _entry_swapExactPtForSy(market, !_isEmptyLimit(limit));
166
166
  }
167
167
 
@@ -174,7 +174,7 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
174
174
  address market,
175
175
  uint256 exactPtIn,
176
176
  uint256 minSyOut,
177
- LimitOrderData calldata limit
177
+ LimitOrderData memory limit
178
178
  ) internal returns (uint256 netSyOut, uint256 netSyFee) {
179
179
  (, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
180
180
 
@@ -202,7 +202,7 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
202
202
  if (netSyOut < minSyOut) revert("Slippage: INSUFFICIENT_SY_OUT");
203
203
  }
204
204
 
205
- function _entry_swapExactSyForPt(address market, LimitOrderData calldata limit) internal view returns (address) {
205
+ function _entry_swapExactSyForPt(address market, LimitOrderData memory limit) internal view returns (address) {
206
206
  return _entry_swapExactSyForPt(market, !_isEmptyLimit(limit));
207
207
  }
208
208
 
@@ -216,7 +216,7 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
216
216
  uint256 exactSyIn,
217
217
  uint256 minPtOut,
218
218
  ApproxParams calldata guessPtOut,
219
- LimitOrderData calldata limit
219
+ LimitOrderData memory limit
220
220
  ) internal returns (uint256 netPtOut, uint256 netSyFee) {
221
221
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
222
222
  uint256 netSyLeft = exactSyIn;
@@ -248,7 +248,7 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
248
248
 
249
249
  // ----------------- YT SWAP -----------------
250
250
 
251
- function _entry_swapExactYtForSy(IPYieldToken YT, LimitOrderData calldata limit) internal view returns (address) {
251
+ function _entry_swapExactYtForSy(IPYieldToken YT, LimitOrderData memory limit) internal view returns (address) {
252
252
  return _entry_swapExactYtForSy(YT, !_isEmptyLimit(limit));
253
253
  }
254
254
 
@@ -263,7 +263,7 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
263
263
  IPYieldToken YT,
264
264
  uint256 exactYtIn,
265
265
  uint256 minSyOut,
266
- LimitOrderData calldata limit
266
+ LimitOrderData memory limit
267
267
  ) internal returns (uint256 netSyOut, uint256 netSyFee) {
268
268
  uint256 netYtLeft = exactYtIn;
269
269
  bool doMarketOrder = true;
@@ -292,7 +292,7 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
292
292
  if (netSyOut < minSyOut) revert("Slippage: INSUFFICIENT_SY_OUT");
293
293
  }
294
294
 
295
- function _entry_swapExactSyForYt(IPYieldToken YT, LimitOrderData calldata limit) internal view returns (address) {
295
+ function _entry_swapExactSyForYt(IPYieldToken YT, LimitOrderData memory limit) internal view returns (address) {
296
296
  return _entry_swapExactSyForYt(YT, !_isEmptyLimit(limit));
297
297
  }
298
298
 
@@ -308,7 +308,7 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
308
308
  uint256 exactSyIn,
309
309
  uint256 minYtOut,
310
310
  ApproxParams calldata guessYtOut,
311
- LimitOrderData calldata limit
311
+ LimitOrderData memory limit
312
312
  ) internal returns (uint256 netYtOut, uint256 netSyFee) {
313
313
  uint256 netSyLeft = exactSyIn;
314
314
  bool doMarketOrder = true;
@@ -346,8 +346,15 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
346
346
  address receiver,
347
347
  IERC20 tokenIn,
348
348
  uint256 netInput,
349
- LimitOrderData calldata lim
349
+ LimitOrderData memory lim
350
350
  ) internal returns (uint256 netLeft, uint256 netOut, uint256 netSyFee, bool doMarketOrder) {
351
+ {
352
+ if (lim.optData.length != 0) {
353
+ LimitOrder_OptData_V1 memory optData = abi.decode(lim.optData, (LimitOrder_OptData_V1));
354
+ _scaleLimitOrderData(lim, netInput, optData.netOffchain);
355
+ }
356
+ }
357
+
351
358
  IPLimitRouter router = IPLimitRouter(lim.limitRouter);
352
359
  netLeft = netInput;
353
360
 
@@ -386,13 +393,13 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
386
393
  doMarketOrder = netLeft > netInput.mulDown(lim.epsSkipMarket);
387
394
  }
388
395
 
389
- function _isEmptyLimit(LimitOrderData calldata a) internal pure returns (bool) {
396
+ function _isEmptyLimit(LimitOrderData memory a) internal pure returns (bool) {
390
397
  return a.normalFills.length == 0 && a.flashFills.length == 0;
391
398
  }
392
399
 
393
400
  // ----------------- ADD & REMOVE LIQUIDITY -----------------
394
401
 
395
- function _entry_addLiquiditySinglePt(address market, LimitOrderData calldata lim) internal view returns (address) {
402
+ function _entry_addLiquiditySinglePt(address market, LimitOrderData memory lim) internal view returns (address) {
396
403
  return _entry_addLiquiditySinglePt(market, !_isEmptyLimit(lim));
397
404
  }
398
405
 
@@ -400,7 +407,7 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
400
407
  return hasLimitOrder ? address(this) : market;
401
408
  }
402
409
 
403
- function _entry_addLiquiditySingleSy(address market, LimitOrderData calldata lim) internal view returns (address) {
410
+ function _entry_addLiquiditySingleSy(address market, LimitOrderData memory lim) internal view returns (address) {
404
411
  return _entry_addLiquiditySingleSy(market, !_isEmptyLimit(lim));
405
412
  }
406
413
 
@@ -423,4 +430,20 @@ abstract contract ActionBase is TokenHelper, CallbackHelper, IPLimitOrderType {
423
430
  }
424
431
  }
425
432
  }
433
+
434
+ function _scaleLimitOrderData(
435
+ LimitOrderData memory limit,
436
+ uint256 onchainAmount,
437
+ uint256 offchainAmount
438
+ ) private pure {
439
+ // we can't scale up. If it's equal, skip
440
+ if (onchainAmount >= offchainAmount) return;
441
+
442
+ for (uint256 i = 0; i < limit.normalFills.length; i++) {
443
+ limit.normalFills[i].makingAmount = (limit.normalFills[i].makingAmount * onchainAmount) / offchainAmount;
444
+ }
445
+ for (uint256 i = 0; i < limit.flashFills.length; i++) {
446
+ limit.flashFills[i].makingAmount = (limit.flashFills[i].makingAmount * onchainAmount) / offchainAmount;
447
+ }
448
+ }
426
449
  }
@@ -120,7 +120,7 @@ contract ActionDelegateBase is ActionBase {
120
120
 
121
121
  function canUseOnchainApproximation(
122
122
  ApproxParams calldata approx,
123
- LimitOrderData calldata limit
123
+ LimitOrderData memory limit
124
124
  ) internal pure returns (bool) {
125
125
  return approx.guessOffchain == 0 && _isEmptyLimit(limit);
126
126
  }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "SY ETH",
3
+ "SY": "0x730A5E2AcEbccAA5e9095723B3CB862739DA793c",
4
+ "YT": "0x9335A7A9208cdA49f287Ea9af7B3D1faAdfcfe80",
5
+ "PT": "0xE08C45F3cfE70f4e03668Dc6E84Af842bEE95A68",
6
+ "market": "0xfD482179DdEe989C45eaB19991852F80fF31457a",
7
+ "expiry": 1750896000,
8
+ "scalarRoot": "89241410861000000000",
9
+ "initAnchor": "1029050450000000000",
10
+ "lnFeeRateRoot": "499875041000000",
11
+ "deployTxHash": "0x95046b375a4f59baa5e3edabc749a43c02091e94ed7c8b2cc2b3f26289c273fd",
12
+ "deployBlockNumber": 21126538,
13
+ "reversedFee": 0.04999999993486881
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "SY ETH",
3
+ "SY": "0xac0047886a985071476a1186be89222659970d65",
4
+ "YT": "0x08AEfe9dFe7818CaaedD94E38e910d2155b7d2b0",
5
+ "PT": "0xEF6122835a2Bbf575D0117D394fDa24aB7d09d4E",
6
+ "market": "0xF4Cf59259D007a96C641B41621aB52C93b9691B1",
7
+ "expiry": 1750896000,
8
+ "scalarRoot": "89316496353000000000",
9
+ "initAnchor": "1028180525000000000",
10
+ "lnFeeRateRoot": "499875041000000",
11
+ "deployTxHash": "0x07a9014ad4f589dbe9b9a965fd8a23a05aff6e8776212a9112ebd5b3f8ea5593",
12
+ "deployBlockNumber": 21132911,
13
+ "reversedFee": 0.04999999993486881
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "SY ETH",
3
+ "SY": "0xf176fB51F4eB826136a54FDc71C50fCd2202E272",
4
+ "YT": "0x8fEDCa9DE6c792275335B41D0ef74D3A03361733",
5
+ "PT": "0x8Db96f2FcCf7Cdd74a60e8eFf5801df043cd11dE",
6
+ "market": "0x816F59FfA2239Fd7106F94eAbdC0a9547a892F2f",
7
+ "expiry": 1750896000,
8
+ "scalarRoot": "89241410861000000000",
9
+ "initAnchor": "1029050450000000000",
10
+ "lnFeeRateRoot": "499875041000000",
11
+ "deployTxHash": "0x649b34fdb1b9340268445324873c2b8cf65101dd53fb709b6ba503931f59e88b",
12
+ "deployBlockNumber": 271511094,
13
+ "reversedFee": 0.04999999993486881
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "SY spSILO",
3
+ "SY": "0x374C07997B3C0Df6DB0f370Ed8561404b729A43A",
4
+ "YT": "0xD29151dE7fBf87c068E715FAd113Bdd5EE556318",
5
+ "PT": "0x0AB24eCB207602983A20cfCF0E3045c08C651778",
6
+ "market": "0x3be83Cc235455Ae1B624Cf6e326505769AD8f9eA",
7
+ "expiry": 1743033600,
8
+ "scalarRoot": "12129893540000000000",
9
+ "initAnchor": "1104433417000000000",
10
+ "lnFeeRateRoot": "4987541511000000",
11
+ "deployTxHash": "0x28b7e4f3f49b27f81b49e406662f23948e7935f15e4011eadeb3edb90d87ae15",
12
+ "deployBlockNumber": 271599840,
13
+ "reversedFee": 0.49999999999608136
14
+ }