@pendle/core-v2 0.10.5-testnet → 0.11.1-testnet

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 (228) hide show
  1. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +1 -1
  2. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +1 -1
  3. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.dbg.json +1 -1
  4. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  5. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.dbg.json +1 -1
  6. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.dbg.json +1 -1
  7. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.dbg.json +1 -1
  8. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +1 -1
  9. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.dbg.json +1 -1
  10. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +1 -1
  11. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultSCY.sol/PendleYearnVaultSCY.dbg.json +1 -1
  12. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.dbg.json +1 -1
  13. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.json +2 -2
  14. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.dbg.json +1 -1
  15. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +1 -1
  16. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.dbg.json +1 -1
  17. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +1 -1
  18. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/FeeDistributorVePendle.sol/FeeDistributorVePendle.dbg.json +4 -0
  19. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/FeeDistributorVePendle.sol/FeeDistributorVePendle.json +188 -0
  20. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorAbstract.sol/PendleFeeDistributorAbstract.dbg.json +4 -0
  21. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorAbstract.sol/PendleFeeDistributorAbstract.json +164 -0
  22. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorVoting.sol/PendleFeeDistributorVoting.dbg.json +4 -0
  23. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorVoting.sol/PendleFeeDistributorVoting.json +206 -0
  24. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorVotingFactory.sol/PendleFeeDistributorVotingFactory.dbg.json +4 -0
  25. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorVotingFactory.sol/PendleFeeDistributorVotingFactory.json +149 -0
  26. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  27. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  28. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +2 -2
  29. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  30. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +2 -2
  31. package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  32. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  33. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +62 -14
  34. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  35. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.json +192 -12
  36. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  37. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +51 -8
  38. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  39. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +2 -2
  40. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  41. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  42. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +33 -8
  43. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  44. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +2 -2
  45. package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +1 -1
  46. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  48. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  49. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  50. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  51. package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
  52. package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +3 -3
  53. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.dbg.json +1 -1
  54. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.json +2 -2
  55. package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
  56. package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.json +2 -2
  57. package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.dbg.json +1 -1
  58. package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.json +2 -2
  59. package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
  60. package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.json +2 -2
  61. package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
  62. package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.json +2 -2
  63. package/build/artifacts/contracts/core/actions/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
  64. package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
  65. package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
  66. package/build/artifacts/contracts/interfaces/IAavePool.sol/IAavePool.dbg.json +1 -1
  67. package/build/artifacts/contracts/interfaces/IAaveRewardsController.sol/IAaveRewardsController.dbg.json +1 -1
  68. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.dbg.json +1 -1
  69. package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +1 -1
  70. package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +1 -1
  71. package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +1 -1
  72. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
  73. package/build/artifacts/contracts/interfaces/IEulerEToken.sol/IEulerEToken.dbg.json +1 -1
  74. package/build/artifacts/contracts/interfaces/IEulerMarkets.sol/IEulerMarkets.dbg.json +1 -1
  75. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
  76. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
  77. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +1 -1
  78. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
  79. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
  80. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  81. package/build/artifacts/contracts/interfaces/IPFeeDistributor.sol/IPFeeDistributor.dbg.json +4 -0
  82. package/build/artifacts/contracts/interfaces/IPFeeDistributor.sol/IPFeeDistributor.json +151 -0
  83. package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.dbg.json +1 -1
  84. package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +1 -1
  85. package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +1 -1
  86. package/build/artifacts/contracts/interfaces/IPInterestManagerYT.sol/IPInterestManagerYT.dbg.json +1 -1
  87. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  88. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.json +25 -0
  89. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
  90. package/build/artifacts/contracts/interfaces/IPMarketSwapCallback.sol/IPMarketSwapCallback.dbg.json +1 -1
  91. package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
  92. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
  93. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  94. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.json +124 -0
  95. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +1 -1
  96. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.json +86 -0
  97. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
  98. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
  99. package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +1 -1
  100. package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
  101. package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
  102. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +1 -1
  103. package/build/artifacts/contracts/interfaces/ISAvax.sol/ISAvax.dbg.json +1 -1
  104. package/build/artifacts/contracts/interfaces/ISJoe.sol/ISJoe.dbg.json +1 -1
  105. package/build/artifacts/contracts/interfaces/IStETH.sol/IStETH.dbg.json +1 -1
  106. package/build/artifacts/contracts/interfaces/IStargateLPStaking.sol/IStargateLPStaking.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/IStargatePool.sol/IStargatePool.dbg.json +1 -1
  108. package/build/artifacts/contracts/interfaces/IStargateRouter.sol/IStargateRouter.dbg.json +1 -1
  109. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +1 -1
  110. package/build/artifacts/contracts/interfaces/IWAvax.sol/IWAvax.dbg.json +1 -1
  111. package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
  112. package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.dbg.json +1 -1
  113. package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
  114. package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.dbg.json +1 -1
  115. package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +1 -1
  116. package/build/artifacts/contracts/libraries/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  117. package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +1 -1
  118. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  119. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  120. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.json +2 -2
  121. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
  122. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
  123. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
  124. package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.dbg.json +1 -1
  125. package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.dbg.json +1 -1
  126. package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  127. package/build/artifacts/contracts/libraries/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +1 -1
  128. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
  129. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
  130. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
  131. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  132. package/build/artifacts/contracts/libraries/math/Math.sol/Math.dbg.json +1 -1
  133. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.dbg.json +1 -1
  134. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.json +2 -2
  135. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +1 -1
  136. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +1 -1
  137. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +2 -2
  138. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
  139. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +2 -2
  140. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.dbg.json +1 -1
  141. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.dbg.json +1 -1
  142. package/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol +0 -1
  143. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +1 -1
  144. package/contracts/core/LiquidityMining/PendleGauge.sol +1 -1
  145. package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +1 -2
  146. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +2 -2
  147. package/contracts/core/Market/PendleMarket.sol +32 -19
  148. package/contracts/core/Market/PendleMarketFactory.sol +11 -16
  149. package/contracts/core/PendleRouter.sol +1 -3
  150. package/contracts/core/YieldContracts/PendlePrincipalToken.sol +1 -1
  151. package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +5 -5
  152. package/contracts/core/actions/ActionAddRemoveLiq.sol +41 -21
  153. package/contracts/interfaces/IPGauge.sol +2 -0
  154. package/contracts/interfaces/IPGaugeController.sol +1 -1
  155. package/contracts/interfaces/IPMarket.sol +16 -4
  156. package/contracts/interfaces/IPMarketFactory.sol +1 -1
  157. package/contracts/interfaces/ISJoe.sol +3 -6
  158. package/contracts/libraries/kyberswap/AggregationRouterHelper.sol +308 -0
  159. package/contracts/libraries/kyberswap/IMultihopRouter.sol +139 -0
  160. package/contracts/libraries/kyberswap/KyberSwapHelper.sol +7 -1
  161. package/contracts/libraries/math/WeekMath.sol +1 -1
  162. package/contracts/offchain-helpers/RouterStatic.sol +5 -5
  163. package/contracts/offchain-helpers/SSTORE2DeployerContract.sol +21 -0
  164. package/contracts/periphery/BoringOwnableUpgradeable.sol +2 -2
  165. package/deployments/43113-core.json +8 -7
  166. package/deployments/43113-markets/benqi-market-QI-USDC-FEB-2ND.json +8 -0
  167. package/deployments/43113-markets/benqi-market-QI-USDC-SEP-22TH.json +8 -0
  168. package/deployments/43113-markets/benqi-market-QI-WETH-DEC-1ST.json +8 -0
  169. package/deployments/43113-testenv.json +1 -1
  170. package/deployments/80001-core.json +4 -4
  171. package/package.json +4 -5
  172. package/typechain-types/ActionAddRemoveLiq.ts +1 -1
  173. package/typechain-types/FeeDistributorAbstract.ts +240 -0
  174. package/typechain-types/FeeDistributorVePendle.ts +302 -0
  175. package/typechain-types/FeeDistributorVoting.ts +272 -0
  176. package/typechain-types/FeeDistributorVotingFactory.ts +293 -0
  177. package/typechain-types/IPFeeDistributor.ts +270 -0
  178. package/typechain-types/IPMarket.ts +32 -5
  179. package/typechain-types/IPVotingController.ts +205 -7
  180. package/typechain-types/IPVotingControllerStorage.ts +169 -0
  181. package/typechain-types/IPVotingEscrow.ts +117 -0
  182. package/typechain-types/PendleFeeDistributorAbstract.ts +289 -0
  183. package/typechain-types/PendleFeeDistributorVoting.ts +321 -0
  184. package/typechain-types/PendleFeeDistributorVotingFactory.ts +294 -0
  185. package/typechain-types/PendleMarket.ts +32 -5
  186. package/typechain-types/PendleVotingControllerUpg.ts +73 -24
  187. package/typechain-types/VotingControllerStorageUpg.ts +207 -27
  188. package/typechain-types/VotingEscrowPendleMainchain.ts +57 -13
  189. package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +2 -2
  190. package/typechain-types/factories/ActionCallback__factory.ts +1 -1
  191. package/typechain-types/factories/ActionMintRedeem__factory.ts +1 -1
  192. package/typechain-types/factories/ActionMisc__factory.ts +1 -1
  193. package/typechain-types/factories/ActionSwapPT__factory.ts +1 -1
  194. package/typechain-types/factories/ActionSwapYT__factory.ts +1 -1
  195. package/typechain-types/factories/FeeDistributorAbstract__factory.ts +127 -0
  196. package/typechain-types/factories/FeeDistributorVePendle__factory.ts +250 -0
  197. package/typechain-types/factories/FeeDistributorVotingFactory__factory.ts +211 -0
  198. package/typechain-types/factories/FeeDistributorVoting__factory.ts +219 -0
  199. package/typechain-types/factories/IPFeeDistributor__factory.ts +166 -0
  200. package/typechain-types/factories/IPMarket__factory.ts +25 -0
  201. package/typechain-types/factories/IPVotingControllerStorage__factory.ts +107 -0
  202. package/typechain-types/factories/IPVotingController__factory.ts +124 -0
  203. package/typechain-types/factories/IPVotingEscrow__factory.ts +86 -0
  204. package/typechain-types/factories/MarketMathStatic__factory.ts +1 -1
  205. package/typechain-types/factories/PendleFeeDistributorAbstract__factory.ts +183 -0
  206. package/typechain-types/factories/PendleFeeDistributorVotingFactory__factory.ts +213 -0
  207. package/typechain-types/factories/PendleFeeDistributorVoting__factory.ts +275 -0
  208. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +1 -1
  209. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +1 -1
  210. package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
  211. package/typechain-types/factories/PendleMarket__factory.ts +26 -1
  212. package/typechain-types/factories/PendleSJoeSCY__factory.ts +1 -1
  213. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +61 -13
  214. package/typechain-types/factories/RouterStatic__factory.ts +1 -1
  215. package/typechain-types/factories/VotingControllerStorageUpg__factory.ts +192 -12
  216. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +50 -7
  217. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +1 -1
  218. package/typechain-types/hardhat.d.ts +54 -0
  219. package/typechain-types/index.ts +12 -0
  220. package/contracts/periphery/PendleGovernanceManager.sol +0 -38
  221. package/contracts/periphery/PermissionsV2Upg.sol +0 -29
  222. package/deployments/43113-markets/benqi-market-35237d.json +0 -8
  223. package/deployments/43113-markets/benqi-market-438DAA.json +0 -8
  224. package/deployments/43113-markets/benqi-market-590025.json +0 -8
  225. package/deployments/43113-markets/benqi-market-a45e40.json +0 -8
  226. package/deployments/43113-markets/benqi-market-c93916.json +0 -8
  227. package/deployments/80001-markets/benqi-market-3b8BD1.json +0 -8
  228. package/deployments/80001-markets/benqi-market-b61e7f.json +0 -8
@@ -29,7 +29,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
29
29
  external
30
30
  returns (
31
31
  uint256 netLpOut,
32
- uint256 scyUsed,
32
+ uint256 netScyUsed,
33
33
  uint256 netPtUsed
34
34
  )
35
35
  {
@@ -37,7 +37,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
37
37
  .readTokens();
38
38
 
39
39
  MarketState memory state = IPMarket(market).readState();
40
- (, netLpOut, scyUsed, netPtUsed) = state.addLiquidity(
40
+ (, netLpOut, netScyUsed, netPtUsed) = state.addLiquidity(
41
41
  YT.newIndex(),
42
42
  netScyDesired,
43
43
  netPtDesired,
@@ -47,14 +47,21 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
47
47
  // early-check
48
48
  require(netLpOut >= minLpOut, "insufficient lp out");
49
49
 
50
- IERC20(SCY).safeTransferFrom(msg.sender, market, scyUsed);
50
+ IERC20(SCY).safeTransferFrom(msg.sender, market, netScyUsed);
51
51
  IERC20(PT).safeTransferFrom(msg.sender, market, netPtUsed);
52
52
 
53
- netLpOut = IPMarket(market).mint(receiver);
53
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netScyUsed, netPtUsed);
54
54
 
55
55
  // fail-safe
56
56
  require(netLpOut >= minLpOut, "FS insufficient lp out");
57
- emit AddLiquidityDualScyAndPt(msg.sender, market, receiver, scyUsed, netPtUsed, netLpOut);
57
+ emit AddLiquidityDualScyAndPt(
58
+ msg.sender,
59
+ market,
60
+ receiver,
61
+ netScyUsed,
62
+ netPtUsed,
63
+ netLpOut
64
+ );
58
65
  }
59
66
 
60
67
  function addLiquidityDualTokenAndPt(
@@ -77,11 +84,11 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
77
84
  .readTokens();
78
85
 
79
86
  uint256 netScyDesired = SCY.previewDeposit(tokenIn, netTokenDesired);
80
- uint256 scyUsed;
87
+ uint256 netScyUsed;
81
88
 
82
89
  {
83
90
  MarketState memory state = IPMarket(market).readState();
84
- (, netLpOut, scyUsed, netPtUsed) = state.addLiquidity(
91
+ (, netLpOut, netScyUsed, netPtUsed) = state.addLiquidity(
85
92
  YT.newIndex(),
86
93
  netScyDesired,
87
94
  netPtDesired,
@@ -95,19 +102,19 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
95
102
  IERC20(PT).safeTransferFrom(msg.sender, market, netPtUsed);
96
103
 
97
104
  // convert tokenIn to SCY to deposit
98
- netTokenUsed = (netTokenDesired * scyUsed).rawDivUp(netScyDesired);
105
+ netTokenUsed = (netTokenDesired * netScyUsed).rawDivUp(netScyDesired);
99
106
 
100
107
  if (tokenIn == NATIVE) {
101
108
  _transferIn(tokenIn, msg.sender, netTokenDesired);
102
- SCY.deposit{ value: netTokenUsed }(market, tokenIn, netTokenUsed, scyUsed);
109
+ SCY.deposit{ value: netTokenUsed }(market, tokenIn, netTokenUsed, netScyUsed);
103
110
  _transferOut(tokenIn, msg.sender, netTokenDesired - netTokenUsed);
104
111
  } else {
105
112
  _transferIn(tokenIn, msg.sender, netTokenUsed);
106
113
  _safeApproveInf(tokenIn, address(SCY));
107
- SCY.deposit(market, tokenIn, netTokenUsed, scyUsed);
114
+ SCY.deposit(market, tokenIn, netTokenUsed, netScyUsed);
108
115
  }
109
116
 
110
- netLpOut = IPMarket(market).mint(receiver);
117
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netScyUsed, netPtUsed);
111
118
  // fail-safe
112
119
  require(netLpOut >= minLpOut, "FS insufficient lp out");
113
120
 
@@ -142,8 +149,12 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
142
149
 
143
150
  IERC20(PT).safeTransferFrom(msg.sender, market, netPtIn);
144
151
 
145
- IPMarket(market).swapExactPtForScy(market, netPtSwap, EMPTY_BYTES); // ignore return, receiver = market
146
- netLpOut = IPMarket(market).mint(receiver);
152
+ (uint256 netScyReceived, ) = IPMarket(market).swapExactPtForScy(
153
+ market,
154
+ netPtSwap,
155
+ EMPTY_BYTES
156
+ ); // ignore return, receiver = market
157
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netScyReceived, netPtIn - netPtSwap);
147
158
 
148
159
  require(netLpOut >= minLpOut, "insufficient lp out");
149
160
 
@@ -212,7 +223,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
212
223
  ) external returns (uint256 netScyOut, uint256 netPtOut) {
213
224
  IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
214
225
 
215
- (netScyOut, netPtOut) = IPMarket(market).burn(receiver, receiver);
226
+ (netScyOut, netPtOut) = IPMarket(market).burn(receiver, receiver, netLpToRemove);
216
227
 
217
228
  require(netScyOut >= minScyOut, "insufficient SCY out");
218
229
  require(netPtOut >= minPtOut, "insufficient PT out");
@@ -239,7 +250,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
239
250
 
240
251
  IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
241
252
 
242
- (, netPtOut) = IPMarket(market).burn(address(SCY), receiver);
253
+ (, netPtOut) = IPMarket(market).burn(address(SCY), receiver, netLpToRemove);
243
254
 
244
255
  netTokenOut = SCY.redeemAfterTransfer(receiver, tokenOut, minTokenOut);
245
256
 
@@ -279,7 +290,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
279
290
  // early-check
280
291
  require(ptFromBurn + ptFromSwap >= minPtOut, "insufficient lp out");
281
292
 
282
- (, ptFromBurn) = IPMarket(market).burn(market, receiver);
293
+ (, ptFromBurn) = IPMarket(market).burn(market, receiver, netLpToRemove);
283
294
  IPMarket(market).swapScyForExactPt(receiver, ptFromSwap, EMPTY_BYTES); // ignore return
284
295
 
285
296
  // fail-safe
@@ -296,7 +307,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
296
307
  uint256 minScyOut
297
308
  ) external returns (uint256 netScyOut) {
298
309
  IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
299
- netScyOut = _removeLiquiditySingleScy(receiver, market, minScyOut);
310
+ netScyOut = _removeLiquiditySingleScy(receiver, market, netLpToRemove, minScyOut);
300
311
  emit RemoveLiquiditySingleScy(msg.sender, market, receiver, netLpToRemove, netScyOut);
301
312
  }
302
313
 
@@ -311,7 +322,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
311
322
  IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
312
323
 
313
324
  // all output SCY is directly transferred to the SCY contract
314
- uint256 netScyReceived = _removeLiquiditySingleScy(address(SCY), market, 1);
325
+ uint256 netScyReceived = _removeLiquiditySingleScy(address(SCY), market, netLpToRemove, 1);
315
326
 
316
327
  // since all SCY is already at the SCY contract, doPull = false
317
328
  netTokenOut = _redeemScyToToken(receiver, address(SCY), netScyReceived, output, false);
@@ -343,8 +354,12 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
343
354
  guessPtReceivedFromScy
344
355
  );
345
356
 
346
- IPMarket(market).swapScyForExactPt(market, netPtReceived, EMPTY_BYTES); // ignore return, receiver = market
347
- netLpOut = IPMarket(market).mint(receiver);
357
+ (uint256 netScySwapped, ) = IPMarket(market).swapScyForExactPt(
358
+ market,
359
+ netPtReceived,
360
+ EMPTY_BYTES
361
+ ); // ignore return, receiver = market
362
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netScyIn - netScySwapped, netPtReceived);
348
363
 
349
364
  require(netLpOut >= minLpOut, "insufficient lp out");
350
365
  }
@@ -352,9 +367,14 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
352
367
  function _removeLiquiditySingleScy(
353
368
  address receiver,
354
369
  address market,
370
+ uint256 netLpToRemove,
355
371
  uint256 minScyOut
356
372
  ) internal returns (uint256 netScyOut) {
357
- (uint256 scyFromBurn, uint256 ptFromBurn) = IPMarket(market).burn(receiver, market);
373
+ (uint256 scyFromBurn, uint256 ptFromBurn) = IPMarket(market).burn(
374
+ receiver,
375
+ market,
376
+ netLpToRemove
377
+ );
358
378
  (uint256 scyFromSwap, ) = IPMarket(market).swapExactPtForScy(
359
379
  receiver,
360
380
  ptFromBurn,
@@ -3,4 +3,6 @@ pragma solidity 0.8.15;
3
3
 
4
4
  interface IPGauge {
5
5
  function totalActiveSupply() external view returns (uint256);
6
+
7
+ function activeBalance(address user) external view returns (uint256);
6
8
  }
@@ -12,7 +12,7 @@ interface IPGaugeController {
12
12
 
13
13
  function pendle() external returns (address);
14
14
 
15
- function claimMarketReward() external;
15
+ function redeemMarketReward() external;
16
16
 
17
17
  function rewardData(address pool)
18
18
  external
@@ -38,11 +38,23 @@ interface IPMarket is IERC20Metadata, IPGauge {
38
38
  uint16 observationCardinalityNextNew
39
39
  );
40
40
 
41
- function mint(address receiver) external returns (uint256 netLpOut);
42
-
43
- function burn(address receiverScy, address receiverPt)
41
+ function mint(
42
+ address receiver,
43
+ uint256 netScyDesired,
44
+ uint256 netPtDesired
45
+ )
44
46
  external
45
- returns (uint256 netScyOut, uint256 netPtOut);
47
+ returns (
48
+ uint256 netLpOut,
49
+ uint256 netScyUsed,
50
+ uint256 netPtUsed
51
+ );
52
+
53
+ function burn(
54
+ address receiverScy,
55
+ address receiverPt,
56
+ uint256 netLpToBurn
57
+ ) external returns (uint256 netScyOut, uint256 netPtOut);
46
58
 
47
59
  function swapExactPtForScy(
48
60
  address receiver,
@@ -21,7 +21,7 @@ interface IPMarketFactory {
21
21
  view
22
22
  returns (
23
23
  address treasury,
24
- uint96 lnFeeRateRoot,
24
+ uint88 lnFeeRateRoot,
25
25
  uint8 reserveFeePercent
26
26
  );
27
27
  }
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: GPL-3.0-or-later
2
2
  pragma solidity 0.8.15;
3
3
 
4
- import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
4
+ import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
5
5
 
6
6
  interface ISJoe {
7
7
  function joe() external view returns (address);
@@ -23,7 +23,7 @@ interface ISJoe {
23
23
  * @return The amount of JOE user has deposited
24
24
  * @return The reward debt for the chosen token
25
25
  */
26
- function getUserInfo(address _user, IERC20Upgradeable _rewardToken)
26
+ function getUserInfo(address _user, IERC20 _rewardToken)
27
27
  external
28
28
  view
29
29
  returns (uint256, uint256);
@@ -42,10 +42,7 @@ interface ISJoe {
42
42
  * @param _token The address of the token
43
43
  * @return `_user`'s pending reward token
44
44
  */
45
- function pendingReward(address _user, IERC20Upgradeable _token)
46
- external
47
- view
48
- returns (uint256);
45
+ function pendingReward(address _user, IERC20 _token) external view returns (uint256);
49
46
 
50
47
  /**
51
48
  * @notice Withdraw JOE and harvest the rewards
@@ -0,0 +1,308 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity 0.8.15;
4
+ import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
5
+ import "./IMultihopRouter.sol";
6
+
7
+ library AggregationRouterHelper {
8
+ uint256 private constant _PARTIAL_FILL = 0x01;
9
+ uint256 private constant _REQUIRES_EXTRA_ETH = 0x02;
10
+ uint256 private constant _SHOULD_CLAIM = 0x04;
11
+ uint256 private constant _BURN_FROM_MSG_SENDER = 0x08;
12
+ uint256 private constant _BURN_FROM_TX_ORIGIN = 0x10;
13
+ uint256 private constant _SIMPLE_SWAP = 0x20;
14
+
15
+ uint256 private constant SLIPPAGE_RANGE = 10; // over 100
16
+
17
+ enum DexType {
18
+ UNI,
19
+ STABLESWAP,
20
+ CURVE,
21
+ KYBERDMM,
22
+ SADDLE,
23
+ UNIV3PROMM,
24
+ BALANCERV2,
25
+ KYBERRFQ,
26
+ DODO,
27
+ VELODROME,
28
+ PLATYPUS
29
+ }
30
+
31
+ struct SwapDescription {
32
+ IERC20 srcToken;
33
+ IERC20 dstToken;
34
+ address[] srcReceivers;
35
+ uint256[] srcAmounts;
36
+ address dstReceiver;
37
+ uint256 amount;
38
+ uint256 minReturnAmount;
39
+ uint256 flags;
40
+ bytes permit;
41
+ }
42
+
43
+ struct SimpleSwapData {
44
+ address[] firstPools;
45
+ uint256[] firstSwapAmounts;
46
+ bytes[] swapDatas;
47
+ uint256 deadline;
48
+ bytes destTokenFeeData;
49
+ }
50
+
51
+ struct SwapExecutorDescription {
52
+ IMultihopRouter.Swap[][] swapSequences;
53
+ address tokenIn;
54
+ address tokenOut;
55
+ uint256 minTotalAmountOut;
56
+ address to;
57
+ uint256 deadline;
58
+ bytes destTokenFeeData;
59
+ }
60
+
61
+ function getScaledInputData(bytes calldata kybercall, uint256 newAmount)
62
+ external
63
+ pure
64
+ returns (bytes memory)
65
+ {
66
+ bytes4 selector = bytes4(kybercall[:4]);
67
+ (
68
+ address caller,
69
+ SwapDescription memory desc,
70
+ bytes memory executorData,
71
+ bytes memory clientData
72
+ ) = abi.decode(kybercall[4:], (address, SwapDescription, bytes, bytes));
73
+
74
+ (desc, executorData) = _getScaledInputData(desc, executorData, newAmount);
75
+ return abi.encodeWithSelector(selector, caller, desc, executorData, clientData);
76
+ }
77
+
78
+ function _getScaledInputData(
79
+ SwapDescription memory desc,
80
+ bytes memory executorData,
81
+ uint256 newAmount
82
+ ) internal pure returns (SwapDescription memory, bytes memory) {
83
+ uint256 flags = desc.flags;
84
+ uint256 oldAmount = desc.amount;
85
+ if (oldAmount == newAmount) {
86
+ return (desc, executorData);
87
+ }
88
+
89
+ //if the difference of newAmount and oldAmount > 5%, revert
90
+ require(
91
+ (oldAmount * (100 - SLIPPAGE_RANGE)) / 100 <= newAmount &&
92
+ newAmount <= (oldAmount * (100 + SLIPPAGE_RANGE)) / 100,
93
+ "kyber: difference too large"
94
+ );
95
+
96
+ // simple mode swap
97
+ if (flags & _SIMPLE_SWAP != 0) {
98
+ require(desc.srcReceivers.length == 0, "kyber: can't scale if take fee");
99
+ return (
100
+ _getNewDescription(desc, oldAmount, newAmount),
101
+ _getNewSimpleSwapData(executorData, oldAmount, newAmount)
102
+ );
103
+ }
104
+
105
+ //normal mode swap
106
+ bytes memory newExecutorData = _getNewExecutorData(executorData, oldAmount, newAmount);
107
+ return (_getNewDescription(desc, oldAmount, newAmount), newExecutorData);
108
+ }
109
+
110
+ function _getNewDescription(
111
+ SwapDescription memory desc,
112
+ uint256 oldAmount,
113
+ uint256 newAmount
114
+ ) internal pure returns (SwapDescription memory) {
115
+ uint256 oldMinReturnAmount = desc.minReturnAmount;
116
+ desc.minReturnAmount = (desc.minReturnAmount * newAmount) / oldAmount;
117
+ //newMinReturnAmount should no be 0 if oldMinReturnAmount > 0
118
+ if (oldMinReturnAmount > 0 && desc.minReturnAmount == 0) desc.minReturnAmount = 1;
119
+ desc.amount = newAmount;
120
+ if (desc.srcReceivers.length == 0) {
121
+ return desc;
122
+ }
123
+
124
+ uint256 newTotal;
125
+ for (uint256 i = 0; i < desc.srcReceivers.length; i++) {
126
+ if (i == desc.srcReceivers.length - 1) {
127
+ desc.srcAmounts[i] = newAmount - newTotal;
128
+ } else {
129
+ desc.srcAmounts[i] = (desc.srcAmounts[i] * newAmount) / oldAmount;
130
+ }
131
+ newTotal += desc.srcAmounts[i];
132
+ }
133
+ return desc;
134
+ }
135
+
136
+ function _getNewSimpleSwapData(
137
+ bytes memory data,
138
+ uint256 oldAmount,
139
+ uint256 newAmount
140
+ ) internal pure returns (bytes memory) {
141
+ SimpleSwapData memory swapData = abi.decode(data, (SimpleSwapData));
142
+ uint256 numberSeq = swapData.firstPools.length;
143
+ uint256 newTotalSwapAmount;
144
+ for (uint256 i = 0; i < numberSeq; i++) {
145
+ if (i == numberSeq - 1) {
146
+ swapData.firstSwapAmounts[i] = newAmount - newTotalSwapAmount;
147
+ } else {
148
+ swapData.firstSwapAmounts[i] =
149
+ (swapData.firstSwapAmounts[i] * newAmount) /
150
+ oldAmount;
151
+ }
152
+ newTotalSwapAmount += swapData.firstSwapAmounts[i];
153
+ }
154
+ return abi.encode(swapData);
155
+ }
156
+
157
+ function _getNewExecutorData(
158
+ bytes memory data,
159
+ uint256 oldAmount,
160
+ uint256 newAmount
161
+ ) internal pure returns (bytes memory) {
162
+ SwapExecutorDescription memory swapExecutorDescription = abi.decode(
163
+ data,
164
+ (SwapExecutorDescription)
165
+ );
166
+ swapExecutorDescription.minTotalAmountOut =
167
+ (swapExecutorDescription.minTotalAmountOut * newAmount) /
168
+ oldAmount;
169
+
170
+ uint256 newTotalSwapAmount;
171
+ for (uint256 i = 0; i < swapExecutorDescription.swapSequences.length; i++) {
172
+ IMultihopRouter.Swap memory swap = swapExecutorDescription.swapSequences[i][0];
173
+ uint8 dexType = uint8(swap.dexOption >> 8);
174
+ uint256 value;
175
+ if (i == swapExecutorDescription.swapSequences.length - 1)
176
+ value = newAmount - newTotalSwapAmount;
177
+
178
+ if (dexType == uint8(DexType.UNI)) {
179
+ (swap.data, value) = _newUniSwap(swap.data, value, oldAmount, newAmount);
180
+ } else if (dexType == uint8(DexType.STABLESWAP) || dexType == uint8(DexType.SADDLE)) {
181
+ (swap.data, value) = _newStableSwap(swap.data, value, oldAmount, newAmount);
182
+ } else if (dexType == uint8(DexType.CURVE)) {
183
+ (swap.data, value) = _newCurveSwap(swap.data, value, oldAmount, newAmount);
184
+ } else if (dexType == uint8(DexType.KYBERDMM)) {
185
+ (swap.data, value) = _newKyberDMMSwap(swap.data, value, oldAmount, newAmount);
186
+ } else if (dexType == uint8(DexType.UNIV3PROMM)) {
187
+ (swap.data, value) = _newUniV3ProMMSwap(swap.data, value, oldAmount, newAmount);
188
+ } else if (dexType == uint8(DexType.BALANCERV2)) {
189
+ (swap.data, value) = _newBalancerV2Swap(swap.data, value, oldAmount, newAmount);
190
+ } else if (dexType == uint8(DexType.KYBERRFQ)) {
191
+ revert("kyber: can't scale kyberrfq");
192
+ } else if (dexType == uint8(DexType.DODO)) {
193
+ (swap.data, value) = _newDODOSwap(swap.data, value, oldAmount, newAmount);
194
+ } else if (dexType == uint8(DexType.VELODROME)) {
195
+ (swap.data, value) = _newVelodromeSwap(swap.data, value, oldAmount, newAmount);
196
+ } else {
197
+ revert("AggregationExecutor: Dex type not supported");
198
+ }
199
+ newTotalSwapAmount += value;
200
+ }
201
+ return abi.encode(swapExecutorDescription);
202
+ }
203
+
204
+ function _newUniSwap(
205
+ bytes memory data,
206
+ uint256 value,
207
+ uint256 oldAmount,
208
+ uint256 newAmount
209
+ ) internal pure returns (bytes memory, uint256) {
210
+ IMultihopRouter.UniSwap memory uniSwap = abi.decode(data, (IMultihopRouter.UniSwap));
211
+ if (value > 0) uniSwap.collectAmount = value;
212
+ else uniSwap.collectAmount = (uniSwap.collectAmount * newAmount) / oldAmount;
213
+ return (abi.encode(uniSwap), uniSwap.collectAmount);
214
+ }
215
+
216
+ function _newStableSwap(
217
+ bytes memory data,
218
+ uint256 value,
219
+ uint256 oldAmount,
220
+ uint256 newAmount
221
+ ) internal pure returns (bytes memory, uint256) {
222
+ IMultihopRouter.StableSwap memory stableSwap = abi.decode(
223
+ data,
224
+ (IMultihopRouter.StableSwap)
225
+ );
226
+ if (value > 0) stableSwap.dx = value;
227
+ else stableSwap.dx = (stableSwap.dx * newAmount) / oldAmount;
228
+ return (abi.encode(stableSwap), stableSwap.dx);
229
+ }
230
+
231
+ function _newCurveSwap(
232
+ bytes memory data,
233
+ uint256 value,
234
+ uint256 oldAmount,
235
+ uint256 newAmount
236
+ ) internal pure returns (bytes memory, uint256) {
237
+ IMultihopRouter.CurveSwap memory curveSwap = abi.decode(data, (IMultihopRouter.CurveSwap));
238
+ if (value > 0) curveSwap.dx = value;
239
+ else curveSwap.dx = (curveSwap.dx * newAmount) / oldAmount;
240
+ return (abi.encode(curveSwap), curveSwap.dx);
241
+ }
242
+
243
+ function _newKyberDMMSwap(
244
+ bytes memory data,
245
+ uint256 value,
246
+ uint256 oldAmount,
247
+ uint256 newAmount
248
+ ) internal pure returns (bytes memory, uint256) {
249
+ IMultihopRouter.UniSwap memory kyberDMMSwap = abi.decode(data, (IMultihopRouter.UniSwap));
250
+ if (value > 0) kyberDMMSwap.collectAmount = value;
251
+ else kyberDMMSwap.collectAmount = (kyberDMMSwap.collectAmount * newAmount) / oldAmount;
252
+ return (abi.encode(kyberDMMSwap), kyberDMMSwap.collectAmount);
253
+ }
254
+
255
+ function _newUniV3ProMMSwap(
256
+ bytes memory data,
257
+ uint256 value,
258
+ uint256 oldAmount,
259
+ uint256 newAmount
260
+ ) internal pure returns (bytes memory, uint256) {
261
+ IMultihopRouter.UniSwapV3ProMM memory uniSwapV3ProMM = abi.decode(
262
+ data,
263
+ (IMultihopRouter.UniSwapV3ProMM)
264
+ );
265
+ if (value > 0) uniSwapV3ProMM.swapAmount = value;
266
+ else uniSwapV3ProMM.swapAmount = (uniSwapV3ProMM.swapAmount * newAmount) / oldAmount;
267
+ return (abi.encode(uniSwapV3ProMM), uniSwapV3ProMM.swapAmount);
268
+ }
269
+
270
+ function _newBalancerV2Swap(
271
+ bytes memory data,
272
+ uint256 value,
273
+ uint256 oldAmount,
274
+ uint256 newAmount
275
+ ) internal pure returns (bytes memory, uint256) {
276
+ IMultihopRouter.BalancerV2 memory balancerV2 = abi.decode(
277
+ data,
278
+ (IMultihopRouter.BalancerV2)
279
+ );
280
+ if (value > 0) balancerV2.amount = value;
281
+ else balancerV2.amount = (balancerV2.amount * newAmount) / oldAmount;
282
+ return (abi.encode(balancerV2, balancerV2.amount), balancerV2.amount);
283
+ }
284
+
285
+ function _newDODOSwap(
286
+ bytes memory data,
287
+ uint256 value,
288
+ uint256 oldAmount,
289
+ uint256 newAmount
290
+ ) internal pure returns (bytes memory, uint256) {
291
+ IMultihopRouter.DODO memory dodo = abi.decode(data, (IMultihopRouter.DODO));
292
+ if (value > 0) dodo.amount = value;
293
+ else dodo.amount = (dodo.amount * newAmount) / oldAmount;
294
+ return (abi.encode(dodo), dodo.amount);
295
+ }
296
+
297
+ function _newVelodromeSwap(
298
+ bytes memory data,
299
+ uint256 value,
300
+ uint256 oldAmount,
301
+ uint256 newAmount
302
+ ) internal pure returns (bytes memory, uint256) {
303
+ IMultihopRouter.UniSwap memory velodrome = abi.decode(data, (IMultihopRouter.UniSwap));
304
+ if (value > 0) velodrome.collectAmount = value;
305
+ else velodrome.collectAmount = (velodrome.collectAmount * newAmount) / oldAmount;
306
+ return (abi.encode(velodrome), velodrome.collectAmount);
307
+ }
308
+ }