@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
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import "./CalldataReader.sol";
5
+
6
+ library Common {
7
+ using CalldataReader for bytes;
8
+
9
+ function _readPool(bytes memory data, uint256 startByte) internal pure returns (address, uint256) {
10
+ uint24 poolId;
11
+ address poolAddress;
12
+ (poolId, startByte) = data._readUint24(startByte);
13
+ if (poolId == 0) {
14
+ (poolAddress, startByte) = data._readAddress(startByte);
15
+ }
16
+ return (poolAddress, startByte);
17
+ }
18
+
19
+ function _readRecipient(bytes memory data, uint256 startByte) internal pure returns (address, uint256) {
20
+ uint8 recipientFlag;
21
+ address recipient;
22
+ (recipientFlag, startByte) = data._readUint8(startByte);
23
+ if (recipientFlag != 2 && recipientFlag != 1) {
24
+ (recipient, startByte) = data._readAddress(startByte);
25
+ }
26
+ return (recipient, startByte);
27
+ }
28
+
29
+ function _readBytes32Array(
30
+ bytes memory data,
31
+ uint256 startByte
32
+ ) internal pure returns (bytes32[] memory bytesArray, uint256) {
33
+ bytes memory ret;
34
+ (ret, startByte) = data._calldataVal(startByte, 1);
35
+ uint256 length = uint256(uint8(bytes1(ret)));
36
+ bytesArray = new bytes32[](length);
37
+ for (uint8 i = 0; i < length; ++i) {
38
+ (bytesArray[i], startByte) = data._readBytes32(startByte);
39
+ }
40
+ return (bytesArray, startByte);
41
+ }
42
+ }
@@ -0,0 +1,382 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import "./CalldataReader.sol";
5
+ import "../interfaces/IExecutorHelperL2.sol";
6
+ import {BytesHelper} from "./BytesHelper.sol";
7
+ import {Common} from "./Common.sol";
8
+
9
+ /// @title DexScaler
10
+ /// @notice Contain functions to scale DEX structs
11
+ /// @dev For this repo's scope, we only care about swap amounts, so we just need to decode until we get swap amounts
12
+ library DexScaler {
13
+ using BytesHelper for bytes;
14
+ using CalldataReader for bytes;
15
+ using Common for bytes;
16
+
17
+ function scaleUniSwap(
18
+ bytes memory data,
19
+ uint256 oldAmount,
20
+ uint256 newAmount
21
+ ) internal pure returns (bytes memory) {
22
+ uint256 startByte;
23
+ // decode
24
+ (, startByte) = data._readPool(startByte);
25
+ (, startByte) = data._readRecipient(startByte);
26
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
27
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleUniSwap");
28
+ }
29
+
30
+ function scaleStableSwap(
31
+ bytes memory data,
32
+ uint256 oldAmount,
33
+ uint256 newAmount
34
+ ) internal pure returns (bytes memory) {
35
+ uint256 startByte;
36
+ (, startByte) = data._readPool(startByte);
37
+ (, startByte) = data._readUint8(startByte);
38
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
39
+ return
40
+ data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleStableSwap");
41
+ }
42
+
43
+ function scaleCurveSwap(
44
+ bytes memory data,
45
+ uint256 oldAmount,
46
+ uint256 newAmount
47
+ ) internal pure returns (bytes memory) {
48
+ uint256 startByte;
49
+ bool canGetIndex;
50
+ (canGetIndex, startByte) = data._readBool(0);
51
+ (, startByte) = data._readPool(startByte);
52
+ if (!canGetIndex) {
53
+ (, startByte) = data._readAddress(startByte);
54
+ (, startByte) = data._readUint8(startByte);
55
+ }
56
+ (, startByte) = data._readUint8(startByte);
57
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
58
+ return
59
+ data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleCurveSwap");
60
+ }
61
+
62
+ function scaleUniswapV3KSElastic(
63
+ bytes memory data,
64
+ uint256 oldAmount,
65
+ uint256 newAmount
66
+ ) internal pure returns (bytes memory) {
67
+ uint256 startByte;
68
+ (, startByte) = data._readRecipient(startByte);
69
+ (, startByte) = data._readPool(startByte);
70
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
71
+ return
72
+ data.write16Bytes(
73
+ startByte,
74
+ oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount,
75
+ "scaleUniswapV3KSElastic"
76
+ );
77
+ }
78
+
79
+ function scaleBalancerV2(
80
+ bytes memory data,
81
+ uint256 oldAmount,
82
+ uint256 newAmount
83
+ ) internal pure returns (bytes memory) {
84
+ uint256 startByte;
85
+ (, startByte) = data._readPool(startByte);
86
+ (, startByte) = data._readBytes32(startByte);
87
+ (, startByte) = data._readUint8(startByte);
88
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
89
+ return
90
+ data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleBalancerV2");
91
+ }
92
+
93
+ function scaleDODO(bytes memory data, uint256 oldAmount, uint256 newAmount) internal pure returns (bytes memory) {
94
+ uint256 startByte;
95
+ (, startByte) = data._readRecipient(startByte);
96
+ (, startByte) = data._readPool(startByte);
97
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
98
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleDODO");
99
+ }
100
+
101
+ function scaleGMX(bytes memory data, uint256 oldAmount, uint256 newAmount) internal pure returns (bytes memory) {
102
+ uint256 startByte;
103
+ // decode
104
+ (, startByte) = data._readPool(startByte);
105
+
106
+ (, startByte) = data._readAddress(startByte);
107
+
108
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
109
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleGMX");
110
+ }
111
+
112
+ function scaleSynthetix(
113
+ bytes memory data,
114
+ uint256 oldAmount,
115
+ uint256 newAmount
116
+ ) internal pure returns (bytes memory) {
117
+ uint256 startByte;
118
+
119
+ // decode
120
+ (, startByte) = data._readPool(startByte);
121
+
122
+ (, startByte) = data._readAddress(startByte);
123
+ (, startByte) = data._readBytes32(startByte);
124
+
125
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
126
+ return
127
+ data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleSynthetix");
128
+ }
129
+
130
+ function scaleWrappedstETH(
131
+ bytes memory data,
132
+ uint256 oldAmount,
133
+ uint256 newAmount
134
+ ) internal pure returns (bytes memory) {
135
+ uint256 startByte;
136
+
137
+ // decode
138
+ (, startByte) = data._readPool(startByte);
139
+
140
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
141
+ return
142
+ data.write16Bytes(
143
+ startByte,
144
+ oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount,
145
+ "scaleWrappedstETH"
146
+ );
147
+ }
148
+
149
+ function scaleStETH(bytes memory data, uint256 oldAmount, uint256 newAmount) internal pure returns (bytes memory) {
150
+ (uint256 swapAmount, ) = data._readUint128AsUint256(0);
151
+ return data.write16Bytes(0, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleStETH");
152
+ }
153
+
154
+ function scalePlatypus(
155
+ bytes memory data,
156
+ uint256 oldAmount,
157
+ uint256 newAmount
158
+ ) internal pure returns (bytes memory) {
159
+ uint256 startByte;
160
+
161
+ // decode
162
+ (, startByte) = data._readPool(startByte);
163
+
164
+ (, startByte) = data._readAddress(startByte);
165
+
166
+ (, startByte) = data._readRecipient(startByte);
167
+
168
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
169
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scalePlatypus");
170
+ }
171
+
172
+ function scalePSM(bytes memory data, uint256 oldAmount, uint256 newAmount) internal pure returns (bytes memory) {
173
+ uint256 startByte;
174
+
175
+ // decode
176
+ (, startByte) = data._readPool(startByte);
177
+
178
+ (, startByte) = data._readAddress(startByte);
179
+
180
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
181
+
182
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scalePSM");
183
+ }
184
+
185
+ function scaleMaverick(
186
+ bytes memory data,
187
+ uint256 oldAmount,
188
+ uint256 newAmount
189
+ ) internal pure returns (bytes memory) {
190
+ uint256 startByte;
191
+
192
+ // decode
193
+ (, startByte) = data._readPool(startByte);
194
+
195
+ (, startByte) = data._readAddress(startByte);
196
+
197
+ (, startByte) = data._readRecipient(startByte);
198
+
199
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
200
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleMaverick");
201
+ }
202
+
203
+ function scaleSyncSwap(
204
+ bytes memory data,
205
+ uint256 oldAmount,
206
+ uint256 newAmount
207
+ ) internal pure returns (bytes memory) {
208
+ uint256 startByte;
209
+
210
+ // decode
211
+ (, startByte) = data._readBytes(startByte);
212
+ (, startByte) = data._readPool(startByte);
213
+
214
+ (, startByte) = data._readAddress(startByte);
215
+
216
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
217
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleSyncSwap");
218
+ }
219
+
220
+ function scaleAlgebraV1(
221
+ bytes memory data,
222
+ uint256 oldAmount,
223
+ uint256 newAmount
224
+ ) internal pure returns (bytes memory) {
225
+ uint256 startByte;
226
+
227
+ (, startByte) = data._readRecipient(startByte);
228
+
229
+ (, startByte) = data._readPool(startByte);
230
+
231
+ (, startByte) = data._readAddress(startByte);
232
+
233
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
234
+
235
+ return
236
+ data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleAlgebraV1");
237
+ }
238
+
239
+ function scaleBalancerBatch(
240
+ bytes memory data,
241
+ uint256 oldAmount,
242
+ uint256 newAmount
243
+ ) internal pure returns (bytes memory) {
244
+ uint256 startByte;
245
+
246
+ // decode
247
+ (, startByte) = data._readPool(startByte);
248
+
249
+ (, startByte) = data._readBytes32Array(startByte);
250
+ (, startByte) = data._readAddressArray(startByte);
251
+ (, startByte) = data._readBytesArray(startByte);
252
+
253
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte);
254
+ return
255
+ data.write16Bytes(
256
+ startByte,
257
+ oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount,
258
+ "scaleBalancerBatch"
259
+ );
260
+ }
261
+
262
+ function scaleMantis(bytes memory data, uint256 oldAmount, uint256 newAmount) internal pure returns (bytes memory) {
263
+ uint256 startByte;
264
+
265
+ (, startByte) = data._readPool(startByte); // pool
266
+
267
+ (, startByte) = data._readAddress(startByte); // tokenOut
268
+
269
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte); // amount
270
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleMantis");
271
+ }
272
+
273
+ function scaleIziSwap(
274
+ bytes memory data,
275
+ uint256 oldAmount,
276
+ uint256 newAmount
277
+ ) internal pure returns (bytes memory) {
278
+ uint256 startByte;
279
+
280
+ (, startByte) = data._readPool(startByte); // pool
281
+
282
+ (, startByte) = data._readAddress(startByte); // tokenOut
283
+
284
+ // recipient
285
+ (, startByte) = data._readRecipient(startByte);
286
+
287
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte); // amount
288
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleIziSwap");
289
+ }
290
+
291
+ function scaleTraderJoeV2(
292
+ bytes memory data,
293
+ uint256 oldAmount,
294
+ uint256 newAmount
295
+ ) internal pure returns (bytes memory) {
296
+ uint256 startByte;
297
+
298
+ // recipient
299
+ (, startByte) = data._readRecipient(startByte);
300
+
301
+ (, startByte) = data._readPool(startByte); // pool
302
+
303
+ (, startByte) = data._readAddress(startByte); // tokenOut
304
+
305
+ (, startByte) = data._readBool(startByte); // isV2
306
+
307
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte); // amount
308
+ return
309
+ data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleTraderJoeV2");
310
+ }
311
+
312
+ function scaleLevelFiV2(
313
+ bytes memory data,
314
+ uint256 oldAmount,
315
+ uint256 newAmount
316
+ ) internal pure returns (bytes memory) {
317
+ uint256 startByte;
318
+
319
+ (, startByte) = data._readPool(startByte); // pool
320
+
321
+ (, startByte) = data._readAddress(startByte); // tokenOut
322
+
323
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte); // amount
324
+ return
325
+ data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleLevelFiV2");
326
+ }
327
+
328
+ function scaleGMXGLP(bytes memory data, uint256 oldAmount, uint256 newAmount) internal pure returns (bytes memory) {
329
+ uint256 startByte;
330
+
331
+ (, startByte) = data._readPool(startByte); // pool
332
+
333
+ (, startByte) = data._readAddress(startByte); // yearnVault
334
+
335
+ uint8 directionFlag;
336
+ (directionFlag, startByte) = data._readUint8(startByte);
337
+ if (directionFlag == 1) (, startByte) = data._readAddress(startByte); // tokenOut
338
+
339
+ (uint256 swapAmount, ) = data._readUint128AsUint256(startByte); // amount
340
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (swapAmount * newAmount) / oldAmount, "scaleGMXGLP");
341
+ }
342
+
343
+ function scaleVooi(bytes memory data, uint256 oldAmount, uint256 newAmount) internal pure returns (bytes memory) {
344
+ uint256 startByte;
345
+
346
+ (, startByte) = data._readPool(startByte); // pool
347
+
348
+ (, startByte) = data._readUint8(startByte); // toId
349
+
350
+ (uint256 fromAmount, ) = data._readUint128AsUint256(startByte); // amount
351
+
352
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (fromAmount * newAmount) / oldAmount, "scaleVooi");
353
+ }
354
+
355
+ function scaleVelocoreV2(
356
+ bytes memory data,
357
+ uint256 oldAmount,
358
+ uint256 newAmount
359
+ ) internal pure returns (bytes memory) {
360
+ uint256 startByte;
361
+
362
+ (, startByte) = data._readPool(startByte); // pool
363
+
364
+ (, startByte) = data._readAddress(startByte); // tokenOut
365
+
366
+ (uint256 amount, ) = data._readUint128AsUint256(startByte); // amount
367
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (amount * newAmount) / oldAmount, "scaleVelocoreV2");
368
+ }
369
+
370
+ function scaleKokonut(
371
+ bytes memory data,
372
+ uint256 oldAmount,
373
+ uint256 newAmount
374
+ ) internal pure returns (bytes memory) {
375
+ uint256 startByte;
376
+
377
+ (, startByte) = data._readPool(startByte); // pool
378
+
379
+ (uint256 amount, ) = data._readUint128AsUint256(startByte); // amount
380
+ return data.write16Bytes(startByte, oldAmount == 0 ? 0 : (amount * newAmount) / oldAmount, "scaleKokonut");
381
+ }
382
+ }
@@ -0,0 +1,61 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import "./CalldataReader.sol";
5
+ import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
6
+ import "../interfaces/IAggregationExecutorOptimistic.sol";
7
+
8
+ library ExecutorReader {
9
+ function readSwapExecutorDescription(bytes memory data) internal pure returns (bytes memory) {
10
+ uint256 startByte = 0;
11
+ IAggregationExecutorOptimistic.SwapExecutorDescription memory desc;
12
+
13
+ // Swap array
14
+ bytes memory ret;
15
+ (ret, startByte) = CalldataReader._calldataVal(data, startByte, 1);
16
+ uint256 lX = uint256(uint8(bytes1(ret)));
17
+ desc.swapSequences = new IAggregationExecutorOptimistic.Swap[][](lX);
18
+ for (uint8 i = 0; i < lX; ++i) {
19
+ (ret, startByte) = CalldataReader._calldataVal(data, startByte, 1);
20
+ uint256 lY = uint256(uint8(bytes1(ret)));
21
+ desc.swapSequences[i] = new IAggregationExecutorOptimistic.Swap[](lY);
22
+ for (uint8 j = 0; j < lY; ++j) {
23
+ (desc.swapSequences[i][j], startByte) = _readSwap(data, startByte);
24
+ }
25
+ }
26
+
27
+ // basic members
28
+ (desc.tokenIn, startByte) = CalldataReader._readAddress(data, startByte);
29
+ (desc.tokenOut, startByte) = CalldataReader._readAddress(data, startByte);
30
+ (desc.to, startByte) = CalldataReader._readAddress(data, startByte);
31
+ (desc.deadline, startByte) = CalldataReader._readUint128AsUint256(data, startByte);
32
+ (desc.positiveSlippageData, startByte) = CalldataReader._readBytes(data, startByte);
33
+
34
+ return abi.encode(desc);
35
+ }
36
+
37
+ function readSwapSingleSequence(
38
+ bytes memory data
39
+ ) internal pure returns (IAggregationExecutorOptimistic.Swap[] memory swaps, address tokenIn) {
40
+ uint256 startByte = 0;
41
+ bytes memory ret;
42
+ (ret, startByte) = CalldataReader._calldataVal(data, startByte, 1);
43
+ uint256 len = uint256(uint8(bytes1(ret)));
44
+ swaps = new IAggregationExecutorOptimistic.Swap[](len);
45
+ for (uint8 i = 0; i < len; ++i) {
46
+ (swaps[i], startByte) = _readSwap(data, startByte);
47
+ }
48
+ (tokenIn, startByte) = CalldataReader._readAddress(data, startByte);
49
+ }
50
+
51
+ function _readSwap(
52
+ bytes memory data,
53
+ uint256 startByte
54
+ ) internal pure returns (IAggregationExecutorOptimistic.Swap memory swap, uint256) {
55
+ (swap.data, startByte) = CalldataReader._readBytes(data, startByte);
56
+ bytes1 t;
57
+ (t, startByte) = CalldataReader._readBytes1(data, startByte);
58
+ swap.functionSelector = bytes4(uint32(uint8(t)));
59
+ return (swap, startByte);
60
+ }
61
+ }