@pendle/core-v2 0.15.0-mainnet → 0.15.2-mainnet

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 (431) hide show
  1. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.dbg.json +1 -1
  2. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.json +110 -48
  3. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.dbg.json +1 -1
  4. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.dbg.json +1 -1
  5. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.json +75 -21
  6. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol/PendleMsgSenderAppUpg.dbg.json +1 -1
  7. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol/PendleMsgSenderAppUpg.json +39 -0
  8. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/ExcessivelySafeCall.sol/ExcessivelySafeCall.dbg.json +4 -0
  9. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/ExcessivelySafeCall.sol/ExcessivelySafeCall.json +10 -0
  10. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol/LayerZeroHelper.dbg.json +4 -0
  11. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol/LayerZeroHelper.json +10 -0
  12. package/build/artifacts/contracts/LiquidityMining/FeeDistributor/EpochResultManager.sol/EpochResultManager.dbg.json +1 -1
  13. package/build/artifacts/contracts/LiquidityMining/FeeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.dbg.json +1 -1
  14. package/build/artifacts/contracts/LiquidityMining/FeeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.json +15 -2
  15. package/build/artifacts/contracts/LiquidityMining/FeeDistributor/PendleFeeDistributorFactory.sol/PendleFeeDistributorFactory.dbg.json +1 -1
  16. package/build/artifacts/contracts/LiquidityMining/FeeDistributor/PendleFeeDistributorFactory.sol/PendleFeeDistributorFactory.json +15 -2
  17. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  18. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.json +13 -0
  19. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  20. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +15 -2
  21. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  22. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +15 -2
  23. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  24. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +46 -2
  25. package/build/artifacts/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  26. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  27. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +52 -8
  28. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  29. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +15 -2
  30. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  31. package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  32. package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.json +2 -2
  33. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.dbg.json +1 -1
  34. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.json +2 -2
  35. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  36. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.json +2 -2
  37. package/build/artifacts/contracts/LiquidityMining/libraries/WeekMath.sol/WeekMath.dbg.json +1 -1
  38. package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.dbg.json +4 -0
  39. package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.json +699 -0
  40. package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.dbg.json +4 -0
  41. package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.json +515 -0
  42. package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.dbg.json +4 -0
  43. package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.json +10 -0
  44. package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.json +2 -2
  46. package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.json +2 -2
  48. package/build/artifacts/contracts/core/Market/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  49. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  50. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +2 -2
  51. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  52. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +77 -17
  53. package/build/artifacts/contracts/core/RewardManager/RewardManager.sol/RewardManager.dbg.json +1 -1
  54. package/build/artifacts/contracts/core/RewardManager/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  55. package/build/artifacts/contracts/core/StandardizedYield/PYIndex.sol/PYIndexLib.dbg.json +1 -1
  56. package/build/artifacts/contracts/core/StandardizedYield/PYIndex.sol/PYIndexLib.json +2 -2
  57. package/build/artifacts/contracts/core/StandardizedYield/SYBase.sol/SYBase.dbg.json +1 -1
  58. package/build/artifacts/contracts/core/StandardizedYield/SYBaseWithRewards.sol/SYBaseWithRewards.dbg.json +1 -1
  59. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  60. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.json +2 -2
  61. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.dbg.json +1 -1
  62. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.json +2 -2
  63. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.dbg.json +4 -0
  64. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.json +1003 -0
  65. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.dbg.json +4 -0
  66. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.json +1068 -0
  67. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/Curve3CrvPoolHelper.sol/Curve3CrvPoolHelper.dbg.json +4 -0
  68. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/Curve3CrvPoolHelper.sol/Curve3CrvPoolHelper.json +10 -0
  69. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveFraxUsdcPoolHelper.sol/CurveFraxUsdcPoolHelper.dbg.json +4 -0
  70. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveFraxUsdcPoolHelper.sol/CurveFraxUsdcPoolHelper.json +10 -0
  71. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol/CurveUsdd3CrvPoolHelper.dbg.json +4 -0
  72. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol/CurveUsdd3CrvPoolHelper.json +10 -0
  73. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol/PendleConvexLPSY.dbg.json +4 -0
  74. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/{ConvexCurveLP → base}/PendleConvexLPSY.sol/PendleConvexLPSY.json +1 -1
  75. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.dbg.json +4 -0
  76. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.json +856 -0
  77. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.dbg.json +1 -1
  78. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.json +2 -2
  79. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  80. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  81. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +15 -2
  82. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  83. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +85 -4
  84. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  85. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +17 -4
  86. package/build/artifacts/contracts/core/erc20/PendleERC20.sol/PendleERC20.dbg.json +1 -1
  87. package/build/artifacts/contracts/core/erc20/PendleERC20.sol/PendleERC20.json +2 -2
  88. package/build/artifacts/contracts/core/erc20/PendleERC20Permit.sol/PendleERC20Permit.dbg.json +1 -1
  89. package/build/artifacts/contracts/core/erc20/PendleERC20Permit.sol/PendleERC20Permit.json +2 -2
  90. package/build/artifacts/contracts/core/libraries/BaseSplitCodeFactory.sol/BaseSplitCodeFactory.dbg.json +1 -1
  91. package/build/artifacts/contracts/core/libraries/BaseSplitCodeFactory.sol/BaseSplitCodeFactory.json +3 -38
  92. package/build/artifacts/contracts/core/libraries/BaseSplitCodeFactory.sol/CodeDeployer.dbg.json +1 -1
  93. package/build/artifacts/contracts/core/libraries/BaseSplitCodeFactory.sol/CodeDeployer.json +2 -2
  94. package/build/artifacts/contracts/core/libraries/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.dbg.json +1 -1
  95. package/build/artifacts/contracts/core/libraries/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.json +13 -0
  96. package/build/artifacts/contracts/core/libraries/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.dbg.json +1 -1
  97. package/build/artifacts/contracts/core/libraries/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.json +2 -2
  98. package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.dbg.json +1 -1
  99. package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.json +319 -35
  100. package/build/artifacts/contracts/core/libraries/StringLib.sol/StringLib.dbg.json +4 -0
  101. package/build/artifacts/contracts/core/libraries/StringLib.sol/StringLib.json +10 -0
  102. package/build/artifacts/contracts/core/libraries/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  103. package/build/artifacts/contracts/interfaces/ConvexCurve/IBooster.sol/IBooster.dbg.json +1 -1
  104. package/build/artifacts/contracts/interfaces/ConvexCurve/IBooster.sol/IBooster.json +1 -1
  105. package/build/artifacts/contracts/interfaces/Curve/ICrvPool.sol/ICrvPool.dbg.json +1 -1
  106. package/build/artifacts/contracts/interfaces/Curve/ICrvPool.sol/ICrvPool.json +39 -85
  107. package/build/artifacts/contracts/interfaces/Curve/ITriCrvPool.sol/ITriCrvPool.dbg.json +4 -0
  108. package/build/artifacts/contracts/interfaces/Curve/ITriCrvPool.sol/ITriCrvPool.json +213 -0
  109. package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
  110. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
  111. package/build/artifacts/contracts/interfaces/ILayerZeroEndpoint.sol/ILayerZeroEndpoint.dbg.json +4 -0
  112. package/build/artifacts/contracts/interfaces/ILayerZeroEndpoint.sol/ILayerZeroEndpoint.json +119 -0
  113. package/build/artifacts/contracts/interfaces/ILayerZeroReceiver.sol/ILayerZeroReceiver.dbg.json +4 -0
  114. package/build/artifacts/contracts/interfaces/ILayerZeroReceiver.sol/ILayerZeroReceiver.json +39 -0
  115. package/build/artifacts/contracts/interfaces/ILooksFeeSharing.sol/ILooksFeeSharing.dbg.json +4 -0
  116. package/build/artifacts/contracts/interfaces/ILooksFeeSharing.sol/ILooksFeeSharing.json +30 -0
  117. package/build/artifacts/contracts/interfaces/ILooksStaking.sol/ILooksStaking.dbg.json +4 -0
  118. package/build/artifacts/contracts/interfaces/ILooksStaking.sol/ILooksStaking.json +76 -0
  119. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
  120. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.json +91 -17
  121. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
  122. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.json +50 -0
  123. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
  124. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.json +20 -0
  125. package/build/artifacts/contracts/interfaces/IPActionSwapPTYT.sol/IPActionSwapPTYT.dbg.json +1 -1
  126. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
  127. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.json +20 -0
  128. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  129. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +181 -17
  130. package/build/artifacts/contracts/interfaces/IPBulkSeller.sol/IPBulkSeller.dbg.json +4 -0
  131. package/build/artifacts/contracts/interfaces/IPBulkSeller.sol/IPBulkSeller.json +173 -0
  132. package/build/artifacts/contracts/interfaces/IPBulkSellerFactory.sol/IPBulkSellerFactory.dbg.json +4 -0
  133. package/build/artifacts/contracts/interfaces/IPBulkSellerFactory.sol/IPBulkSellerFactory.json +86 -0
  134. package/build/artifacts/contracts/interfaces/IPBulkSellerSYCallback.sol/IPBulkSellerCallback.dbg.json +4 -0
  135. package/build/artifacts/contracts/interfaces/IPBulkSellerSYCallback.sol/IPBulkSellerCallback.json +34 -0
  136. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  137. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
  138. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.json +2 -2
  139. package/build/artifacts/contracts/interfaces/IPMsgSendEndpoint.sol/IPMsgSendEndpoint.dbg.json +1 -1
  140. package/build/artifacts/contracts/interfaces/IPMsgSendEndpoint.sol/IPMsgSendEndpoint.json +12 -2
  141. package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
  142. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  143. package/build/artifacts/contracts/interfaces/IPVotingEscrowMainchain.sol/IPVotingEscrowMainchain.dbg.json +1 -1
  144. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
  145. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.json +1 -1
  146. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
  147. package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +1 -1
  148. package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
  149. package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
  150. package/build/artifacts/contracts/interfaces/ISJoe.sol/ISJoe.dbg.json +1 -1
  151. package/build/artifacts/contracts/interfaces/IStETH.sol/IStETH.dbg.json +1 -1
  152. package/build/artifacts/contracts/interfaces/IStETH.sol/IStETH.json +45 -0
  153. package/build/artifacts/contracts/interfaces/IStandardizedYield.sol/IStandardizedYield.dbg.json +1 -1
  154. package/build/artifacts/contracts/interfaces/IWAvax.sol/IWAvax.dbg.json +1 -1
  155. package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
  156. package/build/artifacts/contracts/offchain-helpers/BaseSplitCodeFactoryContract.sol/BaseSplitCodeFactoryContract.dbg.json +1 -1
  157. package/build/artifacts/contracts/offchain-helpers/BaseSplitCodeFactoryContract.sol/BaseSplitCodeFactoryContract.json +15 -2
  158. package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.dbg.json +4 -0
  159. package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.json +35 -0
  160. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +1 -1
  161. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +2 -80
  162. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
  163. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +299 -60
  164. package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
  165. package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +118 -41
  166. package/build/artifacts/contracts/router/ActionCallback.sol/ActionCallback.dbg.json +1 -1
  167. package/build/artifacts/contracts/router/ActionCallback.sol/ActionCallback.json +2 -2
  168. package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
  169. package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.json +61 -24
  170. package/build/artifacts/contracts/router/ActionMisc.sol/ActionMisc.dbg.json +1 -1
  171. package/build/artifacts/contracts/router/ActionMisc.sol/ActionMisc.json +2 -2
  172. package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
  173. package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.json +31 -24
  174. package/build/artifacts/contracts/router/ActionSwapPTYT.sol/ActionSwapPTYT.dbg.json +1 -1
  175. package/build/artifacts/contracts/router/ActionSwapPTYT.sol/ActionSwapPTYT.json +2 -2
  176. package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
  177. package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.json +31 -24
  178. package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  179. package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.json +15 -2
  180. package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
  181. package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.json +1 -1
  182. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
  183. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.json +2 -2
  184. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
  185. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.json +2 -2
  186. package/build/artifacts/contracts/router/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.dbg.json +1 -1
  187. package/build/artifacts/contracts/router/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.json +191 -2
  188. package/build/artifacts/contracts/router/kyberswap/IAggregatorRouterHelper.sol/IAggregationRouterHelper.dbg.json +4 -0
  189. package/build/artifacts/contracts/router/kyberswap/IAggregatorRouterHelper.sol/IAggregationRouterHelper.json +35 -0
  190. package/build/artifacts/contracts/router/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +1 -1
  191. package/build/artifacts/contracts/router/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.json +1 -1
  192. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol +58 -27
  193. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol +46 -12
  194. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol +31 -7
  195. package/contracts/LiquidityMining/CrossChainMsg/libraries/ExcessivelySafeCall.sol +133 -0
  196. package/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol +27 -0
  197. package/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +9 -10
  198. package/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +9 -23
  199. package/contracts/core/BulkSeller/BulkSeller.sol +259 -0
  200. package/contracts/core/BulkSeller/BulkSellerFactory.sol +88 -0
  201. package/contracts/core/BulkSeller/BulkSellerMathCore.sol +143 -0
  202. package/contracts/core/Market/PendleMarket.sol +18 -7
  203. package/contracts/core/Market/PendleMarketFactory.sol +15 -5
  204. package/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol +102 -0
  205. package/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol +160 -0
  206. package/contracts/core/StandardizedYield/implementations/Convex/README.md +29 -0
  207. package/contracts/core/StandardizedYield/implementations/Convex/base/Curve3CrvPoolHelper.sol +215 -0
  208. package/contracts/core/StandardizedYield/implementations/Convex/base/CurveFraxUsdcPoolHelper.sol +127 -0
  209. package/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol +152 -0
  210. package/contracts/core/StandardizedYield/implementations/Convex/{ConvexCurveLP → base}/PendleConvexLPSY.sol +2 -4
  211. package/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol +122 -0
  212. package/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol +17 -8
  213. package/contracts/core/YieldContracts/PendlePrincipalToken.sol +3 -3
  214. package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +38 -11
  215. package/contracts/core/YieldContracts/PendleYieldToken.sol +54 -21
  216. package/contracts/core/erc20/PendleERC20.sol +4 -7
  217. package/contracts/core/libraries/BaseSplitCodeFactory.sol +1 -1
  218. package/contracts/core/libraries/BoringOwnableUpgradeable.sol +1 -1
  219. package/contracts/core/libraries/Errors.sol +32 -4
  220. package/contracts/core/libraries/StringLib.sol +782 -0
  221. package/contracts/core/libraries/TokenHelper.sol +9 -0
  222. package/contracts/interfaces/ConvexCurve/IBooster.sol +1 -1
  223. package/contracts/interfaces/Curve/ICrvPool.sol +12 -31
  224. package/contracts/interfaces/Curve/ITriCrvPool.sol +41 -0
  225. package/contracts/interfaces/ILayerZeroEndpoint.sol +39 -0
  226. package/contracts/interfaces/ILayerZeroReceiver.sol +12 -0
  227. package/contracts/interfaces/ILooksFeeSharing.sol +5 -0
  228. package/contracts/interfaces/ILooksStaking.sol +13 -0
  229. package/contracts/interfaces/IPActionAddRemoveLiq.sol +3 -5
  230. package/contracts/interfaces/IPActionMintRedeem.sol +2 -0
  231. package/contracts/interfaces/IPBulkSeller.sol +28 -0
  232. package/contracts/interfaces/IPBulkSellerFactory.sol +12 -0
  233. package/contracts/interfaces/IPBulkSellerSYCallback.sol +10 -0
  234. package/contracts/interfaces/IPMarketFactory.sol +1 -1
  235. package/contracts/interfaces/IPMsgSendEndpoint.sol +4 -2
  236. package/contracts/interfaces/IPYieldContractFactory.sol +1 -1
  237. package/contracts/interfaces/IStETH.sol +6 -0
  238. package/contracts/interfaces/IStandardizedYield.sol +15 -10
  239. package/contracts/offchain-helpers/BulkSellerOffchain.sol +43 -0
  240. package/contracts/offchain-helpers/MarketMathStatic.sol +0 -173
  241. package/contracts/offchain-helpers/RouterStatic.sol +189 -50
  242. package/contracts/router/ActionAddRemoveLiq.sol +71 -52
  243. package/contracts/router/ActionCallback.sol +4 -8
  244. package/contracts/router/ActionMintRedeem.sol +27 -18
  245. package/contracts/router/ActionSwapPT.sol +8 -9
  246. package/contracts/router/ActionSwapPTYT.sol +3 -7
  247. package/contracts/router/ActionSwapYT.sol +15 -10
  248. package/contracts/router/PendleRouter.sol +3 -0
  249. package/contracts/router/base/ActionBaseMintRedeem.sol +78 -83
  250. package/contracts/router/base/MarketApproxLib.sol +1 -1
  251. package/contracts/router/kyberswap/AggregationRouterHelper.sol +17 -1
  252. package/contracts/router/kyberswap/IAggregatorRouterHelper.sol +10 -0
  253. package/contracts/router/kyberswap/KyberSwapHelper.sol +21 -8
  254. package/deployments/1-markets/FRAX_30_MAR_23.json +8 -0
  255. package/deployments/1-markets/LOOKS_30_MAR_23.json +8 -0
  256. package/deployments/1-markets/STETH_MARCH_30.json +1 -1
  257. package/deployments/1-markets/USDD_MARCH_30.json +8 -0
  258. package/deployments/1-offchain-helper.json +3 -0
  259. package/package.json +3 -2
  260. package/typechain-types/AccessControl.ts +360 -0
  261. package/typechain-types/AccessControlUpgradeable.ts +369 -0
  262. package/typechain-types/ActionAddRemoveLiq.ts +64 -52
  263. package/typechain-types/ActionBaseMintRedeem.ts +8 -8
  264. package/typechain-types/ActionMintRedeem.ts +48 -16
  265. package/typechain-types/ActionSwapPT.ts +34 -12
  266. package/typechain-types/ActionSwapYT.ts +34 -12
  267. package/typechain-types/AggregationRouterHelper.ts +287 -3
  268. package/typechain-types/BaseSplitCodeFactoryContract.ts +9 -0
  269. package/typechain-types/BeaconProxy.ts +97 -0
  270. package/typechain-types/BoringOwnableUpgradeable.ts +9 -0
  271. package/typechain-types/BulkSeller.ts +777 -0
  272. package/typechain-types/BulkSellerFactory.ts +707 -0
  273. package/typechain-types/BulkSellerOffchain.ts +117 -0
  274. package/typechain-types/ContextUpgradeable.ts +68 -0
  275. package/typechain-types/Curve3CrvPoolHelper.ts +236 -0
  276. package/typechain-types/CurveFraxUsdcPoolHelper.ts +158 -0
  277. package/typechain-types/CurveUsdd3CrvPoolHelper.ts +184 -0
  278. package/typechain-types/ERC165.ts +102 -0
  279. package/typechain-types/ERC165Upgradeable.ts +113 -0
  280. package/typechain-types/IAccessControl.ts +305 -0
  281. package/typechain-types/IAccessControlUpgradeable.ts +305 -0
  282. package/typechain-types/IAggregationRouterHelper.ts +108 -0
  283. package/typechain-types/IBooster.ts +9 -3
  284. package/typechain-types/ICrvPool.ts +69 -172
  285. package/typechain-types/IERC165.ts +102 -0
  286. package/typechain-types/IERC165Upgradeable.ts +102 -0
  287. package/typechain-types/ILayerZeroEndpoint.ts +256 -0
  288. package/typechain-types/ILayerZeroReceiver.ts +117 -0
  289. package/typechain-types/ILooksFeeSharing.ts +102 -0
  290. package/typechain-types/ILooksStaking.ts +189 -0
  291. package/typechain-types/IPActionAddRemoveLiq.ts +56 -44
  292. package/typechain-types/IPActionMintRedeem.ts +40 -8
  293. package/typechain-types/IPActionSwapPT.ts +26 -4
  294. package/typechain-types/IPActionSwapYT.ts +26 -4
  295. package/typechain-types/IPAllAction.ts +76 -54
  296. package/typechain-types/IPBulkSeller.ts +290 -0
  297. package/typechain-types/IPBulkSellerCallback.ts +115 -0
  298. package/typechain-types/IPBulkSellerFactory.ts +147 -0
  299. package/typechain-types/IPMarketFactory.ts +2 -2
  300. package/typechain-types/IPMsgSendEndpoint.ts +24 -14
  301. package/typechain-types/IPYieldContractFactory.ts +3 -3
  302. package/typechain-types/IStETH.ts +56 -0
  303. package/typechain-types/ITriCrvPool.ts +345 -0
  304. package/typechain-types/ImplicitSwapfeeContract.ts +9 -17
  305. package/typechain-types/Initializable.ts +68 -0
  306. package/typechain-types/KyberSwapHelper.ts +8 -8
  307. package/typechain-types/MarketMathStatic.ts +0 -117
  308. package/typechain-types/PendleConvex2TokensSY.ts +1215 -0
  309. package/typechain-types/PendleCurveFraxUsdcSY.ts +1228 -0
  310. package/typechain-types/PendleCurveUsdd3CrvSY.ts +1299 -0
  311. package/typechain-types/PendleFeeDistributor.ts +9 -0
  312. package/typechain-types/PendleFeeDistributorFactory.ts +9 -0
  313. package/typechain-types/PendleGaugeControllerBaseUpg.ts +9 -0
  314. package/typechain-types/PendleGaugeControllerMainchainUpg.ts +9 -0
  315. package/typechain-types/PendleGaugeControllerSidechainUpg.ts +9 -0
  316. package/typechain-types/PendleLooksStaking.ts +1052 -0
  317. package/typechain-types/PendleLooksStakingSY.ts +1052 -0
  318. package/typechain-types/PendleMarketFactory.ts +51 -2
  319. package/typechain-types/PendleMsgReceiveEndpointUpg.ts +135 -68
  320. package/typechain-types/PendleMsgSendEndpointUpg.ts +108 -39
  321. package/typechain-types/PendleMsgSenderAppUpg.ts +64 -0
  322. package/typechain-types/PendlePrincipalToken.ts +9 -0
  323. package/typechain-types/PendleRouter.ts +9 -0
  324. package/typechain-types/PendleVotingControllerUpg.ts +64 -0
  325. package/typechain-types/PendleYieldContractFactory.ts +57 -8
  326. package/typechain-types/PendleYieldToken.ts +21 -0
  327. package/typechain-types/ReentrancyGuardUpgradeable.ts +68 -0
  328. package/typechain-types/RouterStatic.ts +302 -20
  329. package/typechain-types/VotingEscrowPendleMainchain.ts +70 -6
  330. package/typechain-types/VotingEscrowPendleSidechain.ts +9 -0
  331. package/typechain-types/factories/AccessControlUpgradeable__factory.ts +247 -0
  332. package/typechain-types/factories/AccessControl__factory.ts +227 -0
  333. package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +122 -59
  334. package/typechain-types/factories/ActionBaseMintRedeem__factory.ts +1 -1
  335. package/typechain-types/factories/ActionCallback__factory.ts +1 -1
  336. package/typechain-types/factories/ActionMintRedeem__factory.ts +65 -42
  337. package/typechain-types/factories/ActionMisc__factory.ts +1 -1
  338. package/typechain-types/factories/ActionSwapPTYT__factory.ts +1 -1
  339. package/typechain-types/factories/ActionSwapPT__factory.ts +35 -42
  340. package/typechain-types/factories/ActionSwapYT__factory.ts +35 -42
  341. package/typechain-types/factories/AggregationRouterHelper__factory.ts +190 -1
  342. package/typechain-types/factories/BaseSplitCodeFactoryContract__factory.ts +14 -1
  343. package/typechain-types/factories/BaseSplitCodeFactory__factory.ts +1 -1
  344. package/typechain-types/factories/BeaconProxy__factory.ts +141 -0
  345. package/typechain-types/factories/BoringOwnableUpgradeableData__factory.ts +1 -1
  346. package/typechain-types/factories/BoringOwnableUpgradeable__factory.ts +13 -0
  347. package/typechain-types/factories/BulkSellerFactory__factory.ts +568 -0
  348. package/typechain-types/factories/BulkSellerOffchain__factory.ts +88 -0
  349. package/typechain-types/factories/BulkSeller__factory.ts +749 -0
  350. package/typechain-types/factories/ContextUpgradeable__factory.ts +39 -0
  351. package/typechain-types/factories/Curve3CrvPoolHelper__factory.ts +220 -0
  352. package/typechain-types/factories/CurveFraxUsdcPoolHelper__factory.ts +146 -0
  353. package/typechain-types/factories/CurveUsdd3CrvPoolHelper__factory.ts +172 -0
  354. package/typechain-types/factories/ERC165Upgradeable__factory.ts +58 -0
  355. package/typechain-types/factories/ERC165__factory.ts +39 -0
  356. package/typechain-types/factories/ERC20__factory.ts +1 -1
  357. package/typechain-types/factories/Errors__factory.ts +318 -34
  358. package/typechain-types/factories/IAccessControlUpgradeable__factory.ts +202 -0
  359. package/typechain-types/factories/IAccessControl__factory.ts +198 -0
  360. package/typechain-types/factories/IAggregationRouterHelper__factory.ts +54 -0
  361. package/typechain-types/factories/IBooster__factory.ts +1 -1
  362. package/typechain-types/factories/ICrvPool__factory.ts +39 -85
  363. package/typechain-types/factories/IERC165Upgradeable__factory.ts +45 -0
  364. package/typechain-types/factories/IERC165__factory.ts +42 -0
  365. package/typechain-types/factories/ILayerZeroEndpoint__factory.ts +134 -0
  366. package/typechain-types/factories/ILayerZeroReceiver__factory.ts +54 -0
  367. package/typechain-types/factories/ILooksFeeSharing__factory.ts +45 -0
  368. package/typechain-types/factories/ILooksStaking__factory.ts +88 -0
  369. package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +91 -17
  370. package/typechain-types/factories/IPActionMintRedeem__factory.ts +50 -0
  371. package/typechain-types/factories/IPActionSwapPT__factory.ts +20 -0
  372. package/typechain-types/factories/IPActionSwapYT__factory.ts +20 -0
  373. package/typechain-types/factories/IPAllAction__factory.ts +181 -17
  374. package/typechain-types/factories/IPBulkSellerCallback__factory.ts +53 -0
  375. package/typechain-types/factories/IPBulkSellerFactory__factory.ts +101 -0
  376. package/typechain-types/factories/IPBulkSeller__factory.ts +185 -0
  377. package/typechain-types/factories/IPMarketFactory__factory.ts +2 -2
  378. package/typechain-types/factories/IPMsgSendEndpoint__factory.ts +12 -2
  379. package/typechain-types/factories/IPYieldContractFactory__factory.ts +1 -1
  380. package/typechain-types/factories/IStETH__factory.ts +45 -0
  381. package/typechain-types/factories/ITriCrvPool__factory.ts +225 -0
  382. package/typechain-types/factories/ImplicitSwapfeeContract__factory.ts +4 -12
  383. package/typechain-types/factories/Initializable__factory.ts +36 -0
  384. package/typechain-types/factories/KyberSwapHelper__factory.ts +1 -1
  385. package/typechain-types/factories/MarketMathStatic__factory.ts +1 -79
  386. package/typechain-types/factories/OracleLib__factory.ts +1 -1
  387. package/typechain-types/factories/Pendle3CrvAndTokenSY__factory.ts +1 -1
  388. package/typechain-types/factories/PendleConvex2TokensSY__factory.ts +1093 -0
  389. package/typechain-types/factories/PendleCurveFraxUsdcSY__factory.ts +1068 -0
  390. package/typechain-types/factories/PendleCurveUsdd3CrvSY__factory.ts +1133 -0
  391. package/typechain-types/factories/PendleERC20Permit__factory.ts +1 -1
  392. package/typechain-types/factories/PendleERC20__factory.ts +1 -1
  393. package/typechain-types/factories/PendleFeeDistributorFactory__factory.ts +14 -1
  394. package/typechain-types/factories/PendleFeeDistributor__factory.ts +14 -1
  395. package/typechain-types/factories/PendleGaugeControllerBaseUpg__factory.ts +13 -0
  396. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +14 -1
  397. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +14 -1
  398. package/typechain-types/factories/PendleLooksStakingSY__factory.ts +937 -0
  399. package/typechain-types/factories/PendleLooksStaking__factory.ts +933 -0
  400. package/typechain-types/factories/PendleMarketFactory__factory.ts +76 -16
  401. package/typechain-types/factories/PendleMarket__factory.ts +1 -1
  402. package/typechain-types/factories/PendleMsgReceiveEndpointUpg__factory.ts +113 -51
  403. package/typechain-types/factories/PendleMsgSendEndpointUpg__factory.ts +84 -23
  404. package/typechain-types/factories/PendleMsgSenderAppUpg__factory.ts +39 -0
  405. package/typechain-types/factories/PendlePrincipalToken__factory.ts +14 -1
  406. package/typechain-types/factories/PendleQiTokenHelper__factory.ts +1 -1
  407. package/typechain-types/factories/PendleQiTokenSY__factory.ts +1 -1
  408. package/typechain-types/factories/PendleRouter__factory.ts +14 -1
  409. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +57 -2
  410. package/typechain-types/factories/PendleWstEthSY__factory.ts +1 -1
  411. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +84 -3
  412. package/typechain-types/factories/PendleYieldToken__factory.ts +16 -3
  413. package/typechain-types/factories/ReentrancyGuardUpgradeable__factory.ts +43 -0
  414. package/typechain-types/factories/RouterStatic__factory.ts +244 -1
  415. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +63 -8
  416. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +14 -1
  417. package/typechain-types/hardhat.d.ts +260 -35
  418. package/typechain-types/index.ts +56 -10
  419. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/ConvexCurveLP/Pendle3CrvAndTokenSY.sol/Pendle3CrvAndTokenSY.dbg.json +0 -4
  420. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/ConvexCurveLP/Pendle3CrvAndTokenSY.sol/Pendle3CrvAndTokenSY.json +0 -1018
  421. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/ConvexCurveLP/PendleConvexLPSY.sol/PendleConvexLPSY.dbg.json +0 -4
  422. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/Pendle3CrvHelper.sol/Pendle3CrvHelper.dbg.json +0 -4
  423. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/Pendle3CrvHelper.sol/Pendle3CrvHelper.json +0 -76
  424. package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +0 -4
  425. package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.json +0 -53
  426. package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +0 -4
  427. package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.json +0 -45
  428. package/contracts/core/StandardizedYield/implementations/Convex/ConvexCurveLP/Pendle3CrvAndTokenSY.sol +0 -167
  429. package/contracts/core/StandardizedYield/implementations/Convex/Pendle3CrvHelper.sol +0 -83
  430. package/contracts/interfaces/ICelerMessageBus.sol +0 -28
  431. package/contracts/interfaces/ICelerMessageReceiverApp.sol +0 -25
@@ -12,12 +12,12 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
12
12
  using MarketMathCore for MarketState;
13
13
  using MarketApproxPtInLib for MarketState;
14
14
  using MarketApproxPtOutLib for MarketState;
15
- using SafeERC20 for IERC20;
16
15
  using PYIndexLib for IPYieldToken;
16
+ using BulkSellerMathCore for BulkSellerState;
17
17
 
18
18
  /// @dev since this contract will be proxied, it must not contains non-immutable variables
19
- constructor(address _kyberSwapRouter)
20
- ActionBaseMintRedeem(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
19
+ constructor(address _kyberScalingLib)
20
+ ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
21
21
  {}
22
22
 
23
23
  function addLiquidityDualSyAndPt(
@@ -36,6 +36,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
36
36
  {
37
37
  (IStandardizedYield SY, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
38
38
 
39
+ // calculate the amount of SY and PT to be used
39
40
  MarketState memory state = IPMarket(market).readState();
40
41
  (, netLpOut, netSyUsed, netPtUsed) = state.addLiquidity(
41
42
  netSyDesired,
@@ -46,8 +47,9 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
46
47
  // early-check
47
48
  if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
48
49
 
49
- IERC20(SY).safeTransferFrom(msg.sender, market, netSyUsed);
50
- IERC20(PT).safeTransferFrom(msg.sender, market, netPtUsed);
50
+ // execute the addLiquidity
51
+ _transferFrom(IERC20(SY), msg.sender, market, netSyUsed);
52
+ _transferFrom(IERC20(PT), msg.sender, market, netPtUsed);
51
53
 
52
54
  (netLpOut, , ) = IPMarket(market).mint(receiver, netSyUsed, netPtUsed);
53
55
 
@@ -57,11 +59,13 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
57
59
  emit AddLiquidityDualSyAndPt(msg.sender, market, receiver, netSyUsed, netPtUsed, netLpOut);
58
60
  }
59
61
 
62
+ /**
63
+ * @dev this function assumes that netTokenDesired = netTokenUsed, and fails if this does not hold
64
+ */
60
65
  function addLiquidityDualTokenAndPt(
61
66
  address receiver,
62
67
  address market,
63
- address tokenIn,
64
- uint256 netTokenDesired,
68
+ TokenInput calldata input,
65
69
  uint256 netPtDesired,
66
70
  uint256 minLpOut
67
71
  )
@@ -75,45 +79,38 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
75
79
  {
76
80
  (IStandardizedYield SY, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
77
81
 
78
- uint256 netSyDesired = SY.previewDeposit(tokenIn, netTokenDesired);
82
+ uint256 netSyDesired = _mintSyFromToken(market, address(SY), 1, input);
79
83
  uint256 netSyUsed;
80
84
 
81
85
  {
86
+ // calc the amount of SY and PT to be used
82
87
  MarketState memory state = IPMarket(market).readState();
83
88
  (, netLpOut, netSyUsed, netPtUsed) = state.addLiquidity(
84
89
  netSyDesired,
85
90
  netPtDesired,
86
91
  block.timestamp
87
92
  );
88
- }
89
-
90
- if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
91
-
92
- IERC20(PT).safeTransferFrom(msg.sender, market, netPtUsed);
93
93
 
94
- // convert tokenIn to SY to deposit
95
- netTokenUsed = (netTokenDesired * netSyUsed).rawDivUp(netSyDesired);
94
+ if (netSyDesired != netSyUsed)
95
+ revert Errors.RouterNotAllSyUsed(netSyDesired, netSyUsed);
96
+ if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
96
97
 
97
- if (tokenIn == NATIVE) {
98
- _transferIn(tokenIn, msg.sender, netTokenDesired);
99
- SY.deposit{ value: netTokenUsed }(market, tokenIn, netTokenUsed, netSyUsed);
100
- _transferOut(tokenIn, msg.sender, netTokenDesired - netTokenUsed);
101
- } else {
102
- _transferIn(tokenIn, msg.sender, netTokenUsed);
103
- _safeApproveInf(tokenIn, address(SY));
104
- SY.deposit(market, tokenIn, netTokenUsed, netSyUsed);
98
+ netTokenUsed = input.netTokenIn;
105
99
  }
106
100
 
101
+ // SY has been minted and transferred to the market
102
+ _transferFrom(IERC20(PT), msg.sender, market, netPtUsed);
107
103
  (netLpOut, , ) = IPMarket(market).mint(receiver, netSyUsed, netPtUsed);
108
104
 
105
+ // fail-safe
109
106
  if (netLpOut < minLpOut) assert(false);
110
107
 
111
108
  emit AddLiquidityDualTokenAndPt(
112
109
  msg.sender,
113
110
  market,
114
111
  receiver,
115
- tokenIn,
116
- netTokenDesired,
112
+ input.tokenIn,
113
+ netTokenUsed,
117
114
  netPtUsed,
118
115
  netLpOut
119
116
  );
@@ -128,6 +125,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
128
125
  ) external returns (uint256 netLpOut, uint256 netSyFee) {
129
126
  (, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market).readTokens();
130
127
 
128
+ // calculate the amount of PT to swap
131
129
  MarketState memory state = IPMarket(market).readState();
132
130
 
133
131
  (uint256 netPtSwap, , ) = state.approxSwapPtToAddLiquidity(
@@ -137,15 +135,17 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
137
135
  guessPtSwapToSy
138
136
  );
139
137
 
140
- IERC20(PT).safeTransferFrom(msg.sender, market, netPtIn);
138
+ // execute the swap
139
+ _transferFrom(IERC20(PT), msg.sender, market, netPtIn);
141
140
 
142
141
  uint256 netSyReceived;
143
142
  (netSyReceived, netSyFee) = IPMarket(market).swapExactPtForSy(
144
143
  market,
145
144
  netPtSwap,
146
145
  EMPTY_BYTES
147
- ); // ignore return, receiver = market
146
+ );
148
147
 
148
+ // execute the addLiquidity
149
149
  (netLpOut, , ) = IPMarket(market).mint(receiver, netSyReceived, netPtIn - netPtSwap);
150
150
 
151
151
  if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
@@ -161,8 +161,11 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
161
161
  ApproxParams calldata guessPtReceivedFromSy
162
162
  ) external returns (uint256 netLpOut, uint256 netSyFee) {
163
163
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
164
- IERC20(SY).safeTransferFrom(msg.sender, market, netSyIn);
165
164
 
165
+ // transfer SY to market
166
+ _transferFrom(IERC20(SY), msg.sender, market, netSyIn);
167
+
168
+ // mint LP
166
169
  (netLpOut, netSyFee) = _addLiquiditySingleSy(
167
170
  receiver,
168
171
  market,
@@ -184,9 +187,10 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
184
187
  ) external payable returns (uint256 netLpOut, uint256 netSyFee) {
185
188
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
186
189
 
187
- // all output SY is transferred directly to the market
188
- uint256 netSyUsed = _mintSyFromToken(address(market), address(SY), 1, input);
190
+ // mint SY directly to the market
191
+ uint256 netSyUsed = _mintSyFromToken(market, address(SY), 1, input);
189
192
 
193
+ // mint LP
190
194
  (netLpOut, netSyFee) = _addLiquiditySingleSy(
191
195
  receiver,
192
196
  market,
@@ -213,7 +217,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
213
217
  uint256 minSyOut,
214
218
  uint256 minPtOut
215
219
  ) external returns (uint256 netSyOut, uint256 netPtOut) {
216
- IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
220
+ _transferFrom(IERC20(market), msg.sender, market, netLpToRemove);
217
221
 
218
222
  (netSyOut, netPtOut) = IPMarket(market).burn(receiver, receiver, netLpToRemove);
219
223
 
@@ -234,28 +238,33 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
234
238
  address receiver,
235
239
  address market,
236
240
  uint256 netLpToRemove,
237
- address tokenOut,
238
- uint256 minTokenOut,
241
+ TokenOutput calldata output,
239
242
  uint256 minPtOut
240
243
  ) external returns (uint256 netTokenOut, uint256 netPtOut) {
241
244
  (IStandardizedYield SY, , ) = IPMarket(market).readTokens();
242
245
 
243
- IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
246
+ // burn LP, SY sent to either SY or bulk, PT sent to receiver
247
+ _transferFrom(IERC20(market), msg.sender, market, netLpToRemove);
244
248
 
245
249
  uint256 netSyOut;
246
- (netSyOut, netPtOut) = IPMarket(market).burn(address(SY), receiver, netLpToRemove);
247
-
248
- netTokenOut = SY.redeem(receiver, netSyOut, tokenOut, minTokenOut, true);
250
+ (netSyOut, netPtOut) = IPMarket(market).burn(
251
+ _syOrBulk(address(SY), output),
252
+ receiver,
253
+ netLpToRemove
254
+ );
249
255
 
250
256
  if (netPtOut < minPtOut) revert Errors.RouterInsufficientPtOut(netPtOut, minPtOut);
251
257
 
258
+ // redeem SY to token
259
+ netTokenOut = _redeemSyToToken(receiver, address(SY), netSyOut, output, false);
260
+
252
261
  emit RemoveLiquidityDualTokenAndPt(
253
262
  msg.sender,
254
263
  market,
255
264
  receiver,
256
265
  netLpToRemove,
257
266
  netPtOut,
258
- tokenOut,
267
+ output.tokenOut,
259
268
  netTokenOut
260
269
  );
261
270
  }
@@ -269,8 +278,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
269
278
  ) external returns (uint256 netPtOut, uint256 netSyFee) {
270
279
  (, , IPYieldToken YT) = IPMarket(market).readTokens();
271
280
 
272
- IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
273
-
281
+ // calculate the total amount of PT received from burning & selling SY
274
282
  MarketState memory state = IPMarket(market).readState();
275
283
  (uint256 syFromBurn, uint256 ptFromBurn) = state.removeLiquidity(netLpToRemove);
276
284
  (uint256 ptFromSwap, ) = state.approxSwapExactSyForPt(
@@ -283,14 +291,17 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
283
291
  if (ptFromBurn + ptFromSwap < minPtOut)
284
292
  revert Errors.RouterInsufficientPtOut(ptFromBurn + ptFromSwap, minPtOut);
285
293
 
294
+ // execute the burn & the swap
295
+ _transferFrom(IERC20(market), msg.sender, market, netLpToRemove);
296
+
286
297
  (, ptFromBurn) = IPMarket(market).burn(market, receiver, netLpToRemove);
287
298
  (, netSyFee) = IPMarket(market).swapSyForExactPt(receiver, ptFromSwap, EMPTY_BYTES);
288
299
 
289
- // fail-safe
290
- if (ptFromBurn + ptFromSwap < minPtOut) assert(false);
291
-
292
300
  netPtOut = ptFromBurn + ptFromSwap;
293
301
 
302
+ // fail-safe
303
+ if (netPtOut < minPtOut) assert(false);
304
+
294
305
  emit RemoveLiquiditySinglePt(msg.sender, market, receiver, netLpToRemove, netPtOut);
295
306
  }
296
307
 
@@ -300,8 +311,12 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
300
311
  uint256 netLpToRemove,
301
312
  uint256 minSyOut
302
313
  ) external returns (uint256 netSyOut, uint256 netSyFee) {
303
- IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
314
+ // transfer LP to market
315
+ _transferFrom(IERC20(market), msg.sender, market, netLpToRemove);
316
+
317
+ // burn LP, SY sent to receiver
304
318
  (netSyOut, netSyFee) = _removeLiquiditySingleSy(receiver, market, netLpToRemove, minSyOut);
319
+
305
320
  emit RemoveLiquiditySingleSy(msg.sender, market, receiver, netLpToRemove, netSyOut);
306
321
  }
307
322
 
@@ -313,19 +328,19 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
313
328
  ) external returns (uint256 netTokenOut, uint256 netSyFee) {
314
329
  (IStandardizedYield SY, , ) = IPMarket(market).readTokens();
315
330
 
316
- IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
331
+ // transfer LP to market, burn LP, SY sent to either SY or bulk
332
+ _transferFrom(IERC20(market), msg.sender, market, netLpToRemove);
317
333
 
318
- // all output SY is directly transferred to the SY contract
319
334
  uint256 netSyReceived;
320
335
 
321
336
  (netSyReceived, netSyFee) = _removeLiquiditySingleSy(
322
- address(SY),
337
+ _syOrBulk(address(SY), output),
323
338
  market,
324
339
  netLpToRemove,
325
340
  1
326
341
  );
327
342
 
328
- // since all SY is already at the SY contract, doPull = false
343
+ // redeem SY to token
329
344
  netTokenOut = _redeemSyToToken(receiver, address(SY), netSyReceived, output, false);
330
345
 
331
346
  emit RemoveLiquiditySingleToken(
@@ -348,20 +363,23 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
348
363
  ) internal returns (uint256 netLpOut, uint256 netSyFee) {
349
364
  MarketState memory state = IPMarket(market).readState();
350
365
 
351
- (uint256 netPtReceived, , ) = state.approxSwapSyToAddLiquidity(
366
+ // calculate the PT amount needed to add liquidity
367
+ (uint256 netPtFromSwap, , ) = state.approxSwapSyToAddLiquidity(
352
368
  YT.newIndex(),
353
369
  netSyIn,
354
370
  block.timestamp,
355
371
  guessPtReceivedFromSy
356
372
  );
357
373
 
374
+ // execute the swap & the addLiquidity
358
375
  uint256 netSySwapped;
359
376
  (netSySwapped, netSyFee) = IPMarket(market).swapSyForExactPt(
360
377
  market,
361
- netPtReceived,
378
+ netPtFromSwap,
362
379
  EMPTY_BYTES
363
- ); // ignore return, receiver = market
364
- (netLpOut, , ) = IPMarket(market).mint(receiver, netSyIn - netSySwapped, netPtReceived);
380
+ );
381
+
382
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netSyIn - netSySwapped, netPtFromSwap);
365
383
 
366
384
  if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
367
385
  }
@@ -408,6 +426,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
408
426
  ptFromBurn,
409
427
  EMPTY_BYTES
410
428
  );
429
+
411
430
  netSyOut = syFromBurn + syFromSwap;
412
431
  }
413
432
  }
@@ -12,13 +12,9 @@ import "./base/CallbackHelper.sol";
12
12
 
13
13
  import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
14
14
 
15
- contract ActionCallback is IPMarketSwapCallback, CallbackHelper {
15
+ contract ActionCallback is IPMarketSwapCallback, CallbackHelper, TokenHelper {
16
16
  using Math for int256;
17
17
  using Math for uint256;
18
- using SafeERC20 for IStandardizedYield;
19
- using SafeERC20 for IPYieldToken;
20
- using SafeERC20 for IPPrincipalToken;
21
- using SafeERC20 for IERC20;
22
18
  using PYIndexLib for PYIndex;
23
19
  using PYIndexLib for IPYieldToken;
24
20
 
@@ -114,7 +110,7 @@ contract ActionCallback is IPMarketSwapCallback, CallbackHelper {
114
110
  /// mint & transfer
115
111
  /// ------------------------------------------------------------
116
112
  if (netSyToPull > 0) {
117
- SY.safeTransferFrom(vars.payer, address(YT), netSyToPull);
113
+ _transferFrom(IERC20(SY), vars.payer, address(YT), netSyToPull);
118
114
  }
119
115
 
120
116
  uint256 netPyOut = YT.mintPY(market, vars.receiver);
@@ -175,7 +171,7 @@ contract ActionCallback is IPMarketSwapCallback, CallbackHelper {
175
171
 
176
172
  uint256 netSyOwed = syToAccount.abs();
177
173
 
178
- PT.safeTransfer(address(YT), exactYtIn);
174
+ _transferOut(address(PT), address(YT), exactYtIn);
179
175
  uint256 netSyToMarket = YT.redeemPY(market);
180
176
 
181
177
  if (netSyToMarket < netSyOwed)
@@ -184,6 +180,6 @@ contract ActionCallback is IPMarketSwapCallback, CallbackHelper {
184
180
  uint256 netPtOut = ptToAccount.Uint() - exactYtIn;
185
181
  if (netPtOut < minPtOut) revert Errors.RouterInsufficientPtOut(netPtOut, minPtOut);
186
182
 
187
- PT.safeTransfer(receiver, netPtOut);
183
+ _transferOut(address(PT), receiver, netPtOut);
188
184
  }
189
185
  }
@@ -10,14 +10,12 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
10
10
  using MarketMathCore for MarketState;
11
11
  using Math for uint256;
12
12
  using Math for int256;
13
- using SafeERC20 for IERC20;
14
13
 
15
14
  /// @dev since this contract will be proxied, it must not contains non-immutable variables
16
- constructor(address _kyberSwapRouter)
17
- ActionBaseMintRedeem(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
15
+ constructor(address _kyberScalingLib)
16
+ ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
18
17
  {}
19
18
 
20
- /// @dev refer to the internal function
21
19
  function mintSyFromToken(
22
20
  address receiver,
23
21
  address SY,
@@ -25,11 +23,9 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
25
23
  TokenInput calldata input
26
24
  ) external payable returns (uint256 netSyOut) {
27
25
  netSyOut = _mintSyFromToken(receiver, SY, minSyOut, input);
28
-
29
26
  emit MintSyFromToken(msg.sender, receiver, SY, input.tokenIn, input.netTokenIn, netSyOut);
30
27
  }
31
28
 
32
- /// @dev refer to the internal function
33
29
  function redeemSyToToken(
34
30
  address receiver,
35
31
  address SY,
@@ -40,25 +36,31 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
40
36
  emit RedeemSyToToken(msg.sender, receiver, SY, netSyIn, output.tokenOut, netTokenOut);
41
37
  }
42
38
 
43
- /// @dev refer to the internal function
44
39
  function mintPyFromToken(
45
40
  address receiver,
46
41
  address YT,
47
42
  uint256 minPyOut,
48
43
  TokenInput calldata input
49
44
  ) external payable returns (uint256 netPyOut) {
50
- netPyOut = _mintPyFromToken(receiver, YT, minPyOut, input);
45
+ address SY = IPYieldToken(YT).SY();
46
+
47
+ uint256 netSyToMint = _mintSyFromToken(YT, SY, 0, input);
48
+ netPyOut = _mintPyFromSy(receiver, YT, netSyToMint, minPyOut, false);
49
+
51
50
  emit MintPyFromToken(msg.sender, receiver, YT, input.tokenIn, input.netTokenIn, netPyOut);
52
51
  }
53
52
 
54
- /// @dev refer to the internal function
55
53
  function redeemPyToToken(
56
54
  address receiver,
57
55
  address YT,
58
56
  uint256 netPyIn,
59
57
  TokenOutput calldata output
60
58
  ) external returns (uint256 netTokenOut) {
61
- netTokenOut = _redeemPyToToken(receiver, YT, netPyIn, output, true);
59
+ address SY = IPYieldToken(YT).SY();
60
+
61
+ uint256 netSyToRedeem = _redeemPyToSy(_syOrBulk(SY, output), YT, netPyIn, 1);
62
+ netTokenOut = _redeemSyToToken(receiver, SY, netSyToRedeem, output, false);
63
+
62
64
  emit RedeemPyToToken(msg.sender, receiver, YT, netPyIn, output.tokenOut, netTokenOut);
63
65
  }
64
66
 
@@ -78,7 +80,7 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
78
80
  uint256 netPyIn,
79
81
  uint256 minSyOut
80
82
  ) external returns (uint256 netSyOut) {
81
- netSyOut = _redeemPyToSy(receiver, YT, netPyIn, minSyOut, true);
83
+ netSyOut = _redeemPyToSy(receiver, YT, netPyIn, minSyOut);
82
84
  emit RedeemPyToSy(msg.sender, receiver, YT, netPyIn, netSyOut);
83
85
  }
84
86
 
@@ -181,13 +183,14 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
181
183
 
182
184
  // guaranteed no ETH, all rewards are ERC20
183
185
  for (uint256 i = 0; i < tokensOut.tokens.length; ++i) {
184
- IERC20(tokensOut.tokens[i]).safeTransferFrom(
186
+ _transferFrom(
187
+ IERC20(tokensOut.tokens[i]),
185
188
  msg.sender,
186
189
  address(this),
187
190
  tokensOut.amounts[i]
188
191
  );
189
192
  }
190
- _redeemAllSys(sysOut, dataYT.tokenRedeemSys, tokensOut);
193
+ _redeemAllSys(sysOut, dataYT.bulks, dataYT.tokenRedeemSys, tokensOut);
191
194
 
192
195
  // now swap all to outputToken
193
196
  netTokenOut = _swapAllToOutputToken(tokensOut, dataSwap);
@@ -218,18 +221,19 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
218
221
  /// @dev pull SYs from users & redeem them, then add to tokensOut
219
222
  function _redeemAllSys(
220
223
  RouterTokenAmounts memory sys,
224
+ address[] calldata bulks,
221
225
  address[] calldata tokenRedeemSys,
222
226
  RouterTokenAmounts memory tokensOut
223
227
  ) internal {
224
228
  for (uint256 i = 0; i < sys.tokens.length; ++i) {
225
229
  if (sys.amounts[i] == 0) continue;
226
230
 
227
- IERC20(sys.tokens[i]).safeTransferFrom(msg.sender, sys.tokens[i], sys.amounts[i]);
228
- uint256 amountOut = IStandardizedYield(sys.tokens[i]).redeem(
231
+ TokenOutput memory output = _wrapTokenOutput(tokenRedeemSys[i], 1, bulks[i]);
232
+ uint256 amountOut = _redeemSyToToken(
229
233
  address(this),
234
+ sys.tokens[i],
230
235
  sys.amounts[i],
231
- tokenRedeemSys[i],
232
- 1,
236
+ output,
233
237
  true
234
238
  );
235
239
 
@@ -243,7 +247,12 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
243
247
  ) internal returns (uint256 netTokenOut) {
244
248
  for (uint256 i = 0; i < tokens.tokens.length; ++i) {
245
249
  if (tokens.amounts[i] == 0) continue;
246
- _kyberswap(tokens.tokens[i], tokens.amounts[i], dataSwap.kybercalls[i]);
250
+ _kyberswap(
251
+ tokens.tokens[i],
252
+ tokens.amounts[i],
253
+ dataSwap.kyberRouter,
254
+ dataSwap.kybercalls[i]
255
+ );
247
256
  }
248
257
  netTokenOut = _selfBalance(dataSwap.outputToken);
249
258
  _transferOut(dataSwap.outputToken, msg.sender, netTokenOut);
@@ -12,12 +12,11 @@ contract ActionSwapPT is IPActionSwapPT, ActionBaseMintRedeem {
12
12
  using MarketApproxPtOutLib for MarketState;
13
13
  using Math for uint256;
14
14
  using Math for int256;
15
- using SafeERC20 for IERC20;
16
15
  using PYIndexLib for IPYieldToken;
17
16
 
18
17
  /// @dev since this contract will be proxied, it must not contains non-immutable variables
19
- constructor(address _kyberSwapRouter)
20
- ActionBaseMintRedeem(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
18
+ constructor(address _kyberScalingLib)
19
+ ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
21
20
  {}
22
21
 
23
22
  function swapExactPtForSy(
@@ -27,7 +26,7 @@ contract ActionSwapPT is IPActionSwapPT, ActionBaseMintRedeem {
27
26
  uint256 minSyOut
28
27
  ) external returns (uint256 netSyOut, uint256 netSyFee) {
29
28
  (, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
30
- IERC20(address(PT)).safeTransferFrom(msg.sender, market, exactPtIn);
29
+ _transferFrom(IERC20(PT), msg.sender, market, exactPtIn);
31
30
 
32
31
  (netSyOut, netSyFee) = IPMarket(market).swapExactPtForSy(receiver, exactPtIn, EMPTY_BYTES);
33
32
 
@@ -59,7 +58,7 @@ contract ActionSwapPT is IPActionSwapPT, ActionBaseMintRedeem {
59
58
 
60
59
  if (netPtIn > maxPtIn) revert Errors.RouterExceededLimitPtIn(netPtIn, maxPtIn);
61
60
 
62
- IERC20(PT).safeTransferFrom(msg.sender, market, netPtIn);
61
+ _transferFrom(IERC20(PT), msg.sender, market, netPtIn);
63
62
 
64
63
  uint256 netSyOut;
65
64
  (netSyOut, netSyFee) = IPMarket(market).swapExactPtForSy(receiver, netPtIn, EMPTY_BYTES);
@@ -83,7 +82,7 @@ contract ActionSwapPT is IPActionSwapPT, ActionBaseMintRedeem {
83
82
 
84
83
  if (netSyIn > maxSyIn) revert Errors.RouterExceededLimitSyIn(netSyIn, maxSyIn);
85
84
 
86
- IERC20(SY).safeTransferFrom(msg.sender, market, netSyIn);
85
+ _transferFrom(IERC20(SY), msg.sender, market, netSyIn);
87
86
 
88
87
  (, netSyFee) = IPMarket(market).swapSyForExactPt(receiver, exactPtOut, EMPTY_BYTES); // ignore return
89
88
 
@@ -100,7 +99,7 @@ contract ActionSwapPT is IPActionSwapPT, ActionBaseMintRedeem {
100
99
  ) external returns (uint256 netPtOut, uint256 netSyFee) {
101
100
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
102
101
 
103
- IERC20(SY).safeTransferFrom(msg.sender, market, exactSyIn);
102
+ _transferFrom(IERC20(SY), msg.sender, market, exactSyIn);
104
103
 
105
104
  (netPtOut, netSyFee) = _swapExactSyForPt(
106
105
  receiver,
@@ -163,12 +162,12 @@ contract ActionSwapPT is IPActionSwapPT, ActionBaseMintRedeem {
163
162
  ) external returns (uint256 netTokenOut, uint256 netSyFee) {
164
163
  (IStandardizedYield SY, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
165
164
 
166
- IERC20(address(PT)).safeTransferFrom(msg.sender, market, exactPtIn);
165
+ _transferFrom(IERC20(PT), msg.sender, market, exactPtIn);
167
166
 
168
167
  // all output SY is directly transferred to the SY contract
169
168
  uint256 netSyReceived;
170
169
  (netSyReceived, netSyFee) = IPMarket(market).swapExactPtForSy(
171
- address(SY),
170
+ _syOrBulk(address(SY), output),
172
171
  exactPtIn,
173
172
  EMPTY_BYTES
174
173
  );
@@ -5,17 +5,13 @@ import "../interfaces/IPActionSwapPTYT.sol";
5
5
  import "../interfaces/IPMarket.sol";
6
6
  import "./base/CallbackHelper.sol";
7
7
 
8
- contract ActionSwapPTYT is IPActionSwapPTYT, CallbackHelper {
8
+ contract ActionSwapPTYT is IPActionSwapPTYT, CallbackHelper, TokenHelper {
9
9
  using MarketMathCore for MarketState;
10
10
  using MarketApproxPtInLib for MarketState;
11
11
  using MarketApproxPtOutLib for MarketState;
12
12
  using Math for uint256;
13
13
  using Math for int256;
14
- using SafeERC20 for IERC20;
15
14
  using PYIndexLib for IPYieldToken;
16
- using SafeERC20 for IStandardizedYield;
17
- using SafeERC20 for IPYieldToken;
18
- using SafeERC20 for IPPrincipalToken;
19
15
 
20
16
  /// @dev since this contract will be proxied, it must not contains non-immutable variables
21
17
  constructor() //solhint-disable-next-line no-empty-blocks
@@ -33,7 +29,7 @@ contract ActionSwapPTYT is IPActionSwapPTYT, CallbackHelper {
33
29
  (, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market).readTokens();
34
30
  MarketState memory state = IPMarket(market).readState();
35
31
 
36
- PT.safeTransferFrom(msg.sender, market, exactPtIn);
32
+ _transferFrom(IERC20(PT), msg.sender, market, exactPtIn);
37
33
 
38
34
  uint256 totalPtToSwap;
39
35
  (netYtOut, totalPtToSwap, netSyFee) = state.approxSwapExactPtForYt(
@@ -64,7 +60,7 @@ contract ActionSwapPTYT is IPActionSwapPTYT, CallbackHelper {
64
60
  (, , IPYieldToken YT) = IPMarket(market).readTokens();
65
61
  MarketState memory state = IPMarket(market).readState();
66
62
 
67
- YT.safeTransferFrom(msg.sender, address(YT), exactYtIn);
63
+ _transferFrom(IERC20(YT), msg.sender, address(YT), exactYtIn);
68
64
 
69
65
  uint256 totalPtSwapped;
70
66
  (netPtOut, totalPtSwapped, netSyFee) = state.approxSwapExactYtForPt(
@@ -13,13 +13,11 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
13
13
  using MarketMathCore for MarketState;
14
14
  using MarketApproxPtInLib for MarketState;
15
15
  using MarketApproxPtOutLib for MarketState;
16
- using SafeERC20 for IStandardizedYield;
17
- using SafeERC20 for IPYieldToken;
18
16
  using PYIndexLib for IPYieldToken;
19
17
 
20
18
  /// @dev since this contract will be proxied, it must not contains non-immutable variables
21
- constructor(address _kyberSwapRouter)
22
- ActionBaseMintRedeem(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
19
+ constructor(address _kyberScalingLib)
20
+ ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
23
21
  {}
24
22
 
25
23
  /**
@@ -41,7 +39,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
41
39
  ) external returns (uint256 netYtOut, uint256 netSyFee) {
42
40
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
43
41
 
44
- SY.safeTransferFrom(msg.sender, address(YT), exactSyIn);
42
+ _transferFrom(IERC20(SY), msg.sender, address(YT), exactSyIn);
45
43
 
46
44
  (netYtOut, netSyFee) = _swapExactSyForYt(
47
45
  receiver,
@@ -73,7 +71,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
73
71
  ) external returns (uint256 netSyOut, uint256 netSyFee) {
74
72
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
75
73
 
76
- YT.safeTransferFrom(msg.sender, address(YT), exactYtIn);
74
+ _transferFrom(IERC20(YT), msg.sender, address(YT), exactYtIn);
77
75
 
78
76
  (netSyOut, netSyFee) = _swapExactYtForSy(receiver, market, SY, YT, exactYtIn, minSyOut);
79
77
 
@@ -139,7 +137,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
139
137
 
140
138
  if (netYtIn > maxYtIn) revert Errors.RouterExceededLimitYtIn(netYtIn, maxYtIn);
141
139
 
142
- YT.safeTransferFrom(msg.sender, address(YT), netYtIn);
140
+ _transferFrom(IERC20(YT), msg.sender, address(YT), netYtIn);
143
141
 
144
142
  (, netSyFee) = IPMarket(market).swapSyForExactPt(
145
143
  address(YT),
@@ -188,11 +186,18 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
188
186
  ) external returns (uint256 netTokenOut, uint256 netSyFee) {
189
187
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
190
188
 
191
- YT.safeTransferFrom(msg.sender, address(YT), netYtIn);
189
+ _transferFrom(IERC20(YT), msg.sender, address(YT), netYtIn);
192
190
 
193
191
  uint256 netSyOut;
194
192
 
195
- (netSyOut, netSyFee) = _swapExactYtForSy(address(SY), market, SY, YT, netYtIn, 1);
193
+ (netSyOut, netSyFee) = _swapExactYtForSy(
194
+ _syOrBulk(address(SY), output),
195
+ market,
196
+ SY,
197
+ YT,
198
+ netYtIn,
199
+ 1
200
+ );
196
201
 
197
202
  netTokenOut = _redeemSyToToken(receiver, address(SY), netSyOut, output, false);
198
203
 
@@ -247,7 +252,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
247
252
  address(YT),
248
253
  exactYtIn, // exactPtOut = exactYtIn
249
254
  _encodeSwapYtForSy(receiver, minSyOut)
250
- ); // ignore return
255
+ );
251
256
 
252
257
  netSyOut = SY.balanceOf(receiver) - preSyBalance;
253
258
  }
@@ -40,6 +40,9 @@ contract PendleRouter is Proxy, Initializable, UUPSUpgradeable, BoringOwnableUpg
40
40
  ACTION_MISC = _ACTION_MISC;
41
41
  }
42
42
 
43
+ receive() external payable virtual override {
44
+ }
45
+
43
46
  function initialize() external initializer {
44
47
  __BoringOwnable_init();
45
48
  }