@pendle/core-v2 0.21.0-testnet → 1.0.0-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 (329) 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 +2 -2
  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 +2 -2
  6. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol/PendleMsgSenderAppUpg.dbg.json +1 -1
  7. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  8. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  9. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +2 -2
  10. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  11. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +2 -2
  12. package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.dbg.json +1 -1
  13. package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.json +2 -2
  14. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  15. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +2 -2
  16. package/build/artifacts/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  17. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  18. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +2 -2
  19. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  20. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +2 -2
  21. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  22. package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  23. package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.json +2 -2
  24. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.dbg.json +1 -1
  25. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.json +2 -2
  26. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  27. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.json +2 -2
  28. package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.dbg.json +1 -1
  29. package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.json +2 -2
  30. package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.dbg.json +1 -1
  31. package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.json +2 -2
  32. package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.dbg.json +1 -1
  33. package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.json +2 -2
  34. package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  35. package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.json +2 -2
  36. package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.dbg.json +1 -1
  37. package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.json +2 -2
  38. package/build/artifacts/contracts/core/Market/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  39. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  40. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +2 -2
  41. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  42. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +2 -2
  43. package/build/artifacts/contracts/core/RewardManager/RewardManager.sol/RewardManager.dbg.json +1 -1
  44. package/build/artifacts/contracts/core/RewardManager/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/StandardizedYield/SYBase.sol/SYBase.dbg.json +1 -1
  46. package/build/artifacts/contracts/core/StandardizedYield/SYBaseWithRewards.sol/SYBaseWithRewards.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/StandardizedYield/StEthHelper.sol/StEthHelper.dbg.json +1 -1
  48. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol/sAPE.dbg.json +1 -1
  49. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol/sAPE.json +2 -2
  50. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAura3EthSY.sol/PendleAura3EthSY.dbg.json +1 -1
  51. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAura3EthSY.sol/PendleAura3EthSY.json +2 -2
  52. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraCbethWstethSY.sol/PendleAuraCbethWstethSY.dbg.json +1 -1
  53. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraCbethWstethSY.sol/PendleAuraCbethWstethSY.json +2 -2
  54. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRethSY.sol/PendleAuraWethRethSY.dbg.json +1 -1
  55. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRethSY.sol/PendleAuraWethRethSY.json +2 -2
  56. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSY.sol/PendleAuraWethWstethSY.dbg.json +1 -1
  57. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSY.sol/PendleAuraWethWstethSY.json +2 -2
  58. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSY.sol/PendleAuraBalancerStableLPSY.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 +1 -1
  64. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.json +2 -2
  65. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.dbg.json +1 -1
  66. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.json +2 -2
  67. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol/PendleConvexLPSY.dbg.json +1 -1
  68. package/build/artifacts/contracts/core/StandardizedYield/implementations/GMX/GMXPreviewHelper.sol/GMXPreviewHelper.dbg.json +4 -0
  69. package/build/artifacts/contracts/core/StandardizedYield/implementations/GMX/GMXPreviewHelper.sol/GMXPreviewHelper.json +50 -0
  70. package/build/artifacts/contracts/core/StandardizedYield/implementations/GMX/PendleGlpSY.sol/PendleGlpSY.dbg.json +4 -0
  71. package/build/artifacts/contracts/core/StandardizedYield/implementations/GMX/PendleGlpSY.sol/PendleGlpSY.json +1163 -0
  72. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.dbg.json +1 -1
  73. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.json +2 -2
  74. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.dbg.json +1 -1
  75. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.json +2 -2
  76. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  77. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  78. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +2 -2
  79. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  80. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +2 -2
  81. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  82. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
  83. package/build/artifacts/contracts/core/YieldContractsV2/InterestManagerYTV2.sol/InterestManagerYTV2.dbg.json +4 -0
  84. package/build/artifacts/contracts/core/YieldContractsV2/InterestManagerYTV2.sol/InterestManagerYTV2.json +66 -0
  85. package/build/artifacts/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol/PendlePrincipalTokenV2.dbg.json +4 -0
  86. package/build/artifacts/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol/PendlePrincipalTokenV2.json +476 -0
  87. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.dbg.json +4 -0
  88. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.json +590 -0
  89. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.dbg.json +4 -0
  90. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.json +1017 -0
  91. package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.dbg.json +1 -1
  92. package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.json +50 -2
  93. package/build/artifacts/contracts/core/libraries/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  94. package/build/artifacts/contracts/interfaces/GMX/IGMXVault.sol/IGMXVault.dbg.json +4 -0
  95. package/build/artifacts/contracts/interfaces/GMX/IGMXVault.sol/IGMXVault.json +308 -0
  96. package/build/artifacts/contracts/interfaces/GMX/IGlpManager.sol/IGlpManager.dbg.json +4 -0
  97. package/build/artifacts/contracts/interfaces/GMX/IGlpManager.sol/IGlpManager.json +43 -0
  98. package/build/artifacts/contracts/interfaces/GMX/IRewardRouterV2.sol/IRewardRouterV2.dbg.json +4 -0
  99. package/build/artifacts/contracts/interfaces/GMX/IRewardRouterV2.sol/IRewardRouterV2.json +165 -0
  100. package/build/artifacts/contracts/interfaces/GMX/IVaultPriceFeed.sol/IVaultPriceFeed.dbg.json +4 -0
  101. package/build/artifacts/contracts/interfaces/GMX/IVaultPriceFeed.sol/IVaultPriceFeed.json +45 -0
  102. package/build/artifacts/contracts/interfaces/IDiamondCut.sol/IDiamondCut.dbg.json +4 -0
  103. package/build/artifacts/contracts/interfaces/IDiamondCut.sol/IDiamondCut.json +93 -0
  104. package/build/artifacts/contracts/interfaces/IDiamondLoupe.sol/IDiamondLoupe.dbg.json +4 -0
  105. package/build/artifacts/contracts/interfaces/IDiamondLoupe.sol/IDiamondLoupe.json +87 -0
  106. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.json +338 -16
  108. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
  109. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.json +105 -224
  110. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +1 -1
  111. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.json +56 -12
  112. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
  113. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.json +52 -8
  114. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
  115. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.json +231 -8
  116. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  117. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +675 -241
  118. package/build/artifacts/contracts/interfaces/IPBulkSeller.sol/IPBulkSeller.dbg.json +1 -1
  119. package/build/artifacts/contracts/interfaces/IPInterestManagerYTV2.sol/IPInterestManagerYTV2.dbg.json +4 -0
  120. package/build/artifacts/contracts/interfaces/IPInterestManagerYTV2.sol/IPInterestManagerYTV2.json +40 -0
  121. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  122. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  123. package/build/artifacts/contracts/interfaces/IPVotingEscrowMainchain.sol/IPVotingEscrowMainchain.dbg.json +1 -1
  124. package/build/artifacts/contracts/interfaces/IPYieldTokenV2.sol/IPYieldTokenV2.dbg.json +4 -0
  125. package/build/artifacts/contracts/interfaces/IPYieldTokenV2.sol/IPYieldTokenV2.json +679 -0
  126. package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.dbg.json +1 -1
  127. package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.json +2 -2
  128. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +1 -1
  129. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +2 -28
  130. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
  131. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +144 -60
  132. package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
  133. package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +345 -62
  134. package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
  135. package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.json +107 -260
  136. package/build/artifacts/contracts/router/ActionMisc.sol/ActionMisc.dbg.json +1 -1
  137. package/build/artifacts/contracts/router/ActionMisc.sol/ActionMisc.json +57 -18
  138. package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
  139. package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.json +54 -65
  140. package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
  141. package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.json +338 -45
  142. package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  143. package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.json +76 -67
  144. package/build/artifacts/contracts/router/base/ActionBaseCallback.sol/ActionBaseCallback.dbg.json +4 -0
  145. package/build/artifacts/contracts/router/base/ActionBaseCallback.sol/ActionBaseCallback.json +141 -0
  146. package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
  147. package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.json +1 -15
  148. package/build/artifacts/contracts/router/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
  149. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
  150. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.json +2 -2
  151. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
  152. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.json +2 -2
  153. package/build/artifacts/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol/I1inchAggregationRouterV5.dbg.json +4 -0
  154. package/build/artifacts/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol/I1inchAggregationRouterV5.json +160 -0
  155. package/build/artifacts/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol/OneInchAggregationRouterHelper.dbg.json +4 -0
  156. package/build/artifacts/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol/OneInchAggregationRouterHelper.json +10 -0
  157. package/build/artifacts/contracts/router/swap-aggregator/IPSwapAggregator.sol/IPSwapAggregator.dbg.json +4 -0
  158. package/build/artifacts/contracts/router/swap-aggregator/IPSwapAggregator.sol/IPSwapAggregator.json +56 -0
  159. package/build/artifacts/contracts/router/swap-aggregator/PendleSwapAggregator.sol/PendleSwapAggregator.dbg.json +4 -0
  160. package/build/artifacts/contracts/router/swap-aggregator/PendleSwapAggregator.sol/PendleSwapAggregator.json +97 -0
  161. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/KyberAggregationRouterHelper.sol/KyberAggregationRouterHelper.dbg.json +4 -0
  162. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/KyberAggregationRouterHelper.sol/KyberAggregationRouterHelper.json +10 -0
  163. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/ScaleDataHelperEthereum1.sol/ScaleDataHelperEthereum1.dbg.json +4 -0
  164. package/build/artifacts/contracts/router/{kyberswap → swap-aggregator/kyberswap}/ScaleDataHelperEthereum1.sol/ScaleDataHelperEthereum1.json +3 -3
  165. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IAggregationExecutor.sol/IAggregationExecutor.dbg.json +4 -0
  166. package/build/artifacts/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IAggregationExecutor.sol/IAggregationExecutor.json +1 -1
  167. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperEthereum1.sol/IExecutorHelperEthereum1.dbg.json +4 -0
  168. package/build/artifacts/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IExecutorHelperEthereum1.sol/IExecutorHelperEthereum1.json +1 -1
  169. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IHashflow.sol/IHashflow.dbg.json +4 -0
  170. package/build/artifacts/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IHashflow.sol/IHashflow.json +1 -1
  171. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IMetaAggregationRouterV2.sol/IMetaAggregationRouterV2.dbg.json +4 -0
  172. package/build/artifacts/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IMetaAggregationRouterV2.sol/IMetaAggregationRouterV2.json +1 -1
  173. package/contracts/core/StandardizedYield/implementations/GMX/GMXPreviewHelper.sol +142 -0
  174. package/contracts/core/StandardizedYield/implementations/GMX/PendleGlpSY.sol +244 -0
  175. package/contracts/core/StandardizedYield/implementations/GMX/README.md +61 -0
  176. package/contracts/core/YieldContractsV2/InterestManagerYTV2.sol +114 -0
  177. package/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol +63 -0
  178. package/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol +200 -0
  179. package/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol +485 -0
  180. package/contracts/core/libraries/Errors.sol +5 -0
  181. package/contracts/core/libraries/TokenHelper.sol +10 -0
  182. package/contracts/interfaces/GMX/IGMXVault.sol +47 -0
  183. package/contracts/interfaces/GMX/IGlpManager.sol +8 -0
  184. package/contracts/interfaces/GMX/IRewardRouterV2.sol +35 -0
  185. package/contracts/interfaces/GMX/IVaultPriceFeed.sol +11 -0
  186. package/contracts/interfaces/IDiamondCut.sol +36 -0
  187. package/contracts/interfaces/IDiamondLoupe.sol +38 -0
  188. package/contracts/interfaces/IPActionAddRemoveLiq.sol +36 -1
  189. package/contracts/interfaces/IPActionMintRedeem.sol +2 -55
  190. package/contracts/interfaces/IPActionMisc.sol +20 -3
  191. package/contracts/interfaces/IPActionSwapPT.sol +1 -1
  192. package/contracts/interfaces/IPActionSwapYT.sol +28 -4
  193. package/contracts/interfaces/IPAllAction.sol +5 -3
  194. package/contracts/interfaces/IPInterestManagerYTV2.sol +13 -0
  195. package/contracts/interfaces/IPYieldTokenV2.sol +66 -0
  196. package/contracts/offchain-helpers/MarketMathStatic.sol +15 -0
  197. package/contracts/offchain-helpers/RouterStatic.sol +22 -0
  198. package/contracts/router/ActionAddRemoveLiq.sol +116 -6
  199. package/contracts/router/ActionMintRedeem.sol +12 -202
  200. package/contracts/router/ActionMisc.sol +45 -19
  201. package/contracts/router/ActionSwapPT.sol +0 -5
  202. package/contracts/router/ActionSwapYT.sol +98 -13
  203. package/contracts/router/PendleRouter.sol +211 -72
  204. package/contracts/router/{ActionCallback.sol → base/ActionBaseCallback.sol} +47 -47
  205. package/contracts/router/base/ActionBaseMintRedeem.sol +105 -60
  206. package/contracts/router/base/CallbackHelper.sol +137 -44
  207. package/contracts/router/base/MarketApproxLib.sol +227 -350
  208. package/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol +45 -0
  209. package/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol +69 -0
  210. package/contracts/router/swap-aggregator/IPSwapAggregator.sol +30 -0
  211. package/contracts/router/swap-aggregator/PendleSwapAggregator.sol +63 -0
  212. package/contracts/router/{kyberswap/AggregationRouterHelper.sol → swap-aggregator/kyberswap/KyberAggregationRouterHelper.sol} +3 -108
  213. package/contracts/router/{kyberswap → swap-aggregator/kyberswap}/ScaleDataHelperEthereum1.sol +0 -0
  214. package/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IAggregationExecutor.sol +0 -0
  215. package/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IExecutorHelperEthereum1.sol +0 -0
  216. package/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IHashflow.sol +0 -0
  217. package/contracts/router/{kyberswap → swap-aggregator/kyberswap}/interfaces/IMetaAggregationRouterV2.sol +0 -0
  218. package/deployments/43113-core.json +2 -1
  219. package/deployments/{43113-helper.json → 43113-offchain-helper.json} +0 -0
  220. package/deployments/80001-core.json +2 -1
  221. package/deployments/80001-markets/GLP-DEC-8TH.json +10 -0
  222. package/deployments/{80001-helper.json → 80001-offchain-helper.json} +0 -0
  223. package/package.json +1 -1
  224. package/typechain-types/ActionAddRemoveLiq.ts +203 -23
  225. package/typechain-types/ActionBaseCallback.ts +115 -0
  226. package/typechain-types/ActionMintRedeem.ts +29 -230
  227. package/typechain-types/ActionMisc.ts +78 -27
  228. package/typechain-types/ActionSwapPT.ts +26 -31
  229. package/typechain-types/ActionSwapYT.ts +202 -21
  230. package/typechain-types/GMXPreviewHelper.ts +0 -13
  231. package/typechain-types/IDiamondCut.ts +152 -0
  232. package/typechain-types/IDiamondLoupe.ts +190 -0
  233. package/typechain-types/IPActionAddRemoveLiq.ts +213 -14
  234. package/typechain-types/IPActionMintRedeem.ts +29 -211
  235. package/typechain-types/IPActionMisc.ts +78 -27
  236. package/typechain-types/IPActionSwapPT.ts +26 -12
  237. package/typechain-types/IPActionSwapYT.ts +168 -12
  238. package/typechain-types/IPAllAction.ts +445 -227
  239. package/typechain-types/IPInterestManagerYTV2.ts +117 -0
  240. package/typechain-types/IPSwapAggregator.ts +126 -0
  241. package/typechain-types/IPYieldTokenV2.ts +9 -23
  242. package/typechain-types/InterestManagerYTV2.ts +36 -3
  243. package/typechain-types/PendleGlpSY.ts +27 -13
  244. package/typechain-types/PendleRouter.ts +109 -131
  245. package/typechain-types/PendleSwapAggregator.ts +167 -0
  246. package/typechain-types/PendleYieldTokenV2.ts +70 -76
  247. package/typechain-types/RouterStatic.ts +92 -0
  248. package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +346 -68
  249. package/typechain-types/factories/ActionBaseCallback__factory.ts +156 -0
  250. package/typechain-types/factories/ActionMintRedeem__factory.ts +108 -266
  251. package/typechain-types/factories/ActionMisc__factory.ts +56 -17
  252. package/typechain-types/factories/ActionSwapPT__factory.ts +55 -71
  253. package/typechain-types/factories/ActionSwapYT__factory.ts +341 -48
  254. package/typechain-types/factories/BulkSellerFactory__factory.ts +1 -1
  255. package/typechain-types/factories/BulkSellerOffchain__factory.ts +1 -1
  256. package/typechain-types/factories/BulkSeller__factory.ts +1 -1
  257. package/typechain-types/factories/Errors__factory.ts +49 -1
  258. package/typechain-types/factories/GMXPreviewHelper__factory.ts +0 -13
  259. package/typechain-types/factories/IDiamondCut__factory.ts +105 -0
  260. package/typechain-types/factories/IDiamondLoupe__factory.ts +99 -0
  261. package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +338 -16
  262. package/typechain-types/factories/IPActionMintRedeem__factory.ts +105 -224
  263. package/typechain-types/factories/IPActionMisc__factory.ts +55 -11
  264. package/typechain-types/factories/IPActionSwapPT__factory.ts +52 -8
  265. package/typechain-types/factories/IPActionSwapYT__factory.ts +231 -8
  266. package/typechain-types/factories/IPAllAction__factory.ts +675 -241
  267. package/typechain-types/factories/IPInterestManagerYTV2__factory.ts +59 -0
  268. package/typechain-types/factories/IPSwapAggregator__factory.ts +71 -0
  269. package/typechain-types/factories/IPYieldTokenV2__factory.ts +6 -14
  270. package/typechain-types/factories/InterestManagerYTV2__factory.ts +18 -0
  271. package/typechain-types/factories/MarketMathStatic__factory.ts +1 -27
  272. package/typechain-types/factories/OracleLib__factory.ts +1 -1
  273. package/typechain-types/factories/PendleAura3EthSY__factory.ts +1 -1
  274. package/typechain-types/factories/PendleAuraCbethWstethSY__factory.ts +1 -1
  275. package/typechain-types/factories/PendleAuraWethRethSY__factory.ts +1 -1
  276. package/typechain-types/factories/PendleAuraWethWstethSY__factory.ts +1 -1
  277. package/typechain-types/factories/PendleCurveFraxUsdcSY__factory.ts +1 -1
  278. package/typechain-types/factories/PendleCurveUsdd3CrvSY__factory.ts +1 -1
  279. package/typechain-types/factories/PendleFeeDistributor__factory.ts +1 -1
  280. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +1 -1
  281. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +1 -1
  282. package/typechain-types/factories/PendleGlpSY__factory.ts +8 -14
  283. package/typechain-types/factories/PendleLooksStakingSY__factory.ts +1 -1
  284. package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
  285. package/typechain-types/factories/PendleMarket__factory.ts +1 -1
  286. package/typechain-types/factories/PendleMsgReceiveEndpointUpg__factory.ts +1 -1
  287. package/typechain-types/factories/PendleMsgSendEndpointUpg__factory.ts +1 -1
  288. package/typechain-types/factories/PendlePrincipalTokenV2__factory.ts +1 -1
  289. package/typechain-types/factories/PendlePrincipalToken__factory.ts +1 -1
  290. package/typechain-types/factories/PendleQiTokenHelper__factory.ts +1 -1
  291. package/typechain-types/factories/PendleQiTokenSY__factory.ts +1 -1
  292. package/typechain-types/factories/PendleRouter__factory.ts +75 -74
  293. package/typechain-types/factories/PendleSwapAggregator__factory.ts +154 -0
  294. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +1 -1
  295. package/typechain-types/factories/PendleWstEthSY__factory.ts +1 -1
  296. package/typechain-types/factories/PendleYieldContractFactoryV2__factory.ts +1 -1
  297. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +1 -1
  298. package/typechain-types/factories/PendleYieldTokenV2__factory.ts +35 -48
  299. package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
  300. package/typechain-types/factories/RouterStatic__factory.ts +69 -1
  301. package/typechain-types/factories/SAPE__factory.ts +1 -1
  302. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +1 -1
  303. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +1 -1
  304. package/typechain-types/hardhat.d.ts +96 -60
  305. package/typechain-types/index.ts +26 -18
  306. package/build/artifacts/contracts/interfaces/IPActionSwapPTYT.sol/IPActionSwapPTYT.dbg.json +0 -4
  307. package/build/artifacts/contracts/interfaces/IPActionSwapPTYT.sol/IPActionSwapPTYT.json +0 -190
  308. package/build/artifacts/contracts/router/ActionCallback.sol/ActionCallback.dbg.json +0 -4
  309. package/build/artifacts/contracts/router/ActionCallback.sol/ActionCallback.json +0 -165
  310. package/build/artifacts/contracts/router/ActionSwapPTYT.sol/ActionSwapPTYT.dbg.json +0 -4
  311. package/build/artifacts/contracts/router/ActionSwapPTYT.sol/ActionSwapPTYT.json +0 -343
  312. package/build/artifacts/contracts/router/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.dbg.json +0 -4
  313. package/build/artifacts/contracts/router/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.json +0 -224
  314. package/build/artifacts/contracts/router/kyberswap/IAggregatorRouterHelper.sol/IAggregationRouterHelper.dbg.json +0 -4
  315. package/build/artifacts/contracts/router/kyberswap/IAggregatorRouterHelper.sol/IAggregationRouterHelper.json +0 -35
  316. package/build/artifacts/contracts/router/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +0 -4
  317. package/build/artifacts/contracts/router/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.json +0 -24
  318. package/build/artifacts/contracts/router/kyberswap/ScaleDataHelperEthereum1.sol/ScaleDataHelperEthereum1.dbg.json +0 -4
  319. package/build/artifacts/contracts/router/kyberswap/interfaces/IAggregationExecutor.sol/IAggregationExecutor.dbg.json +0 -4
  320. package/build/artifacts/contracts/router/kyberswap/interfaces/IExecutorHelperEthereum1.sol/IExecutorHelperEthereum1.dbg.json +0 -4
  321. package/build/artifacts/contracts/router/kyberswap/interfaces/IHashflow.sol/IHashflow.dbg.json +0 -4
  322. package/build/artifacts/contracts/router/kyberswap/interfaces/IMetaAggregationRouter.sol/IMetaAggregationRouter.dbg.json +0 -4
  323. package/build/artifacts/contracts/router/kyberswap/interfaces/IMetaAggregationRouter.sol/IMetaAggregationRouter.json +0 -183
  324. package/build/artifacts/contracts/router/kyberswap/interfaces/IMetaAggregationRouterV2.sol/IMetaAggregationRouterV2.dbg.json +0 -4
  325. package/contracts/interfaces/IPActionSwapPTYT.sol +0 -31
  326. package/contracts/router/ActionSwapPTYT.sol +0 -108
  327. package/contracts/router/kyberswap/IAggregatorRouterHelper.sol +0 -10
  328. package/contracts/router/kyberswap/KyberSwapHelper.sol +0 -79
  329. package/contracts/router/kyberswap/interfaces/IMetaAggregationRouter.sol +0 -33
@@ -21,13 +21,9 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
21
21
  using MarketApproxPtInLib for MarketState;
22
22
  using MarketApproxPtOutLib for MarketState;
23
23
  using PYIndexLib for IPYieldToken;
24
+ using PYIndexLib for PYIndex;
24
25
  using BulkSellerMathCore for BulkSellerState;
25
26
 
26
- /// @dev since this contract will be proxied, it must not contains non-immutable variables
27
- constructor(address _kyberScalingLib)
28
- ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
29
- {}
30
-
31
27
  /**
32
28
  * @notice Adds liquidity to the SY/PT market, granting LP tokens in return
33
29
  * @dev Will mint as much LP as possible given no more than `netSyDesired` and `netPtDesired`,
@@ -258,6 +254,78 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
258
254
  );
259
255
  }
260
256
 
257
+ /**
258
+ * @notice Mints partial SY to PT+YT, returns YT to user, then uses PT+SY to add liquidity
259
+ * @param netSyIn amount of SY to be transferred in from caller
260
+ * @return netLpOut actual LP output, will not be lower than `minLpOut`
261
+ * @return netYtOut actual YT output, will not be lower than `minYtOut`
262
+ * @dev Reverts if market is expired
263
+ */
264
+ function addLiquiditySingleSyKeepYt(
265
+ address receiver,
266
+ address market,
267
+ uint256 netSyIn,
268
+ uint256 minLpOut,
269
+ uint256 minYtOut
270
+ ) external returns (uint256 netLpOut, uint256 netYtOut) {
271
+ (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
272
+
273
+ _transferIn(address(SY), msg.sender, netSyIn);
274
+
275
+ (netLpOut, netYtOut) = _addLiquiditySingleSyKeepYt(
276
+ receiver,
277
+ market,
278
+ SY,
279
+ YT,
280
+ netSyIn,
281
+ minLpOut,
282
+ minYtOut
283
+ );
284
+
285
+ emit AddLiquiditySingleSyKeepYt(msg.sender, market, receiver, netSyIn, netLpOut, netYtOut);
286
+ }
287
+
288
+ /**
289
+ * @notice Adds liquidity and returns leftover YT using a single token input. The input token
290
+ * is first swapped through Kyberswap to a SY-mintable token, the rest is the same as
291
+ * `addLiquiditySingleSyKeepYt()`
292
+ * @param input data for input token, see {`./kyberswap/KyberSwapHelper.sol`}
293
+ * @return netLpOut actual LP output, will not be lower than `minLpOut`
294
+ * @return netYtOut actual YT output, will not be lower than `minYtOut`
295
+ * @dev Reverts if market is expired
296
+ */
297
+ function addLiquiditySingleTokenKeepYt(
298
+ address receiver,
299
+ address market,
300
+ uint256 minLpOut,
301
+ uint256 minYtOut,
302
+ TokenInput calldata input
303
+ ) external returns (uint256 netLpOut, uint256 netYtOut) {
304
+ (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
305
+
306
+ uint256 netSyUsed = _mintSyFromToken(address(this), address(SY), 1, input);
307
+
308
+ (netLpOut, netYtOut) = _addLiquiditySingleSyKeepYt(
309
+ receiver,
310
+ market,
311
+ SY,
312
+ YT,
313
+ netSyUsed,
314
+ minLpOut,
315
+ minYtOut
316
+ );
317
+
318
+ emit AddLiquiditySingleTokenKeepYt(
319
+ msg.sender,
320
+ market,
321
+ input.tokenIn,
322
+ receiver,
323
+ input.netTokenIn,
324
+ netLpOut,
325
+ netYtOut
326
+ );
327
+ }
328
+
261
329
  /**
262
330
  * @notice Burns LP token to remove SY/PT liquidity
263
331
  * @param netLpToRemove amount of LP to be burned from caller
@@ -473,6 +541,48 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
473
541
  if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
474
542
  }
475
543
 
544
+ /**
545
+ * @dev algorithm:
546
+ - Split SY into a SY and b SY (with a + b = netSyIn)
547
+ - Mint PY with a SY ---> gives (a * pyIndex / ONE) PT + YT
548
+ - Mint LP with (a * pyIndex / ONE) PT and b SY
549
+
550
+ -> We want (a * pyIndex / ONE) / totalPt = b / totalSy
551
+ -> a * (1 + pyIndex * totalSy / ONE / totalPt) = netSyIn
552
+ -> a = (netSyIn * totalPt) / (totalPt + (pyIndex * totalSy / ONE))
553
+ -> a = (netSyIn * totalPt) / (totalPt + totalAsset)
554
+ */
555
+ function _addLiquiditySingleSyKeepYt(
556
+ address receiver,
557
+ address market,
558
+ IStandardizedYield SY,
559
+ IPYieldToken YT,
560
+ uint256 netSyIn,
561
+ uint256 minLpOut,
562
+ uint256 minYtOut
563
+ ) internal returns (uint256 netLpOut, uint256 netYtOut) {
564
+ MarketState memory state = IPMarket(market).readState(address(this));
565
+
566
+ PYIndex pyIndex = YT.newIndex();
567
+
568
+ uint256 netSyToPt = (netSyIn * state.totalPt.Uint()) /
569
+ (state.totalPt.Uint() + pyIndex.syToAsset(state.totalSy.Uint()));
570
+
571
+ // transfer SY to mint PY
572
+ _transferOut(address(SY), address(YT), netSyToPt);
573
+
574
+ // the rest of SY goes to market
575
+ _transferOut(address(SY), market, netSyIn - netSyToPt);
576
+
577
+ // PT goes to market, YT goes to receiver
578
+ netYtOut = YT.mintPY(market, receiver);
579
+
580
+ (netLpOut, , ) = IPMarket(market).mint(receiver, netSyIn - netSyToPt, netYtOut);
581
+
582
+ if (netLpOut < minLpOut) revert Errors.RouterInsufficientLpOut(netLpOut, minLpOut);
583
+ if (netYtOut < minYtOut) revert Errors.RouterInsufficientYtOut(netYtOut, minYtOut);
584
+ }
585
+
476
586
  /// @dev removes SY/PT liquidity, then converts PT to SY
477
587
  function _removeLiquiditySingleSy(
478
588
  address receiver,
@@ -497,7 +607,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
497
607
  ) internal returns (uint256 netSyOut) {
498
608
  (, , IPYieldToken YT) = IPMarket(market).readTokens();
499
609
  (uint256 syFromBurn, ) = IPMarket(market).burn(receiver, address(YT), netLpToRemove);
500
- netSyOut = syFromBurn + IPYieldToken(YT).redeemPY(receiver);
610
+ netSyOut = syFromBurn + YT.redeemPY(receiver);
501
611
  }
502
612
 
503
613
  /// @dev swaps PT to SY pre-expiry
@@ -11,11 +11,6 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
11
11
  using Math for uint256;
12
12
  using Math for int256;
13
13
 
14
- /// @dev since this contract will be proxied, it must not contains non-immutable variables
15
- constructor(address _kyberScalingLib)
16
- ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
17
- {}
18
-
19
14
  /**
20
15
  * @notice swaps input token for SY-mintable tokens (if needed), then mints SY from such
21
16
  * @param input data for input token, see {`./kyberswap/KyberSwapHelper.sol`}
@@ -61,7 +56,7 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
61
56
  address SY = IPYieldToken(YT).SY();
62
57
 
63
58
  uint256 netSyToMint = _mintSyFromToken(YT, SY, 0, input);
64
- netPyOut = _mintPyFromSy(receiver, YT, netSyToMint, minPyOut, false);
59
+ netPyOut = _mintPyFromSy(receiver, SY, YT, netSyToMint, minPyOut, false);
65
60
 
66
61
  emit MintPyFromToken(msg.sender, input.tokenIn, YT, receiver, input.netTokenIn, netPyOut);
67
62
  }
@@ -96,7 +91,7 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
96
91
  uint256 netSyIn,
97
92
  uint256 minPyOut
98
93
  ) external returns (uint256 netPyOut) {
99
- netPyOut = _mintPyFromSy(receiver, YT, netSyIn, minPyOut, true);
94
+ netPyOut = _mintPyFromSy(receiver, IPYieldToken(YT).SY(), YT, netSyIn, minPyOut, true);
100
95
  emit MintPyFromSy(msg.sender, receiver, YT, netSyIn, netPyOut);
101
96
  }
102
97
 
@@ -121,204 +116,19 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
121
116
  address[] calldata sys,
122
117
  address[] calldata yts,
123
118
  address[] calldata markets
124
- )
125
- external
126
- returns (
127
- uint256[][] memory syRewards,
128
- uint256[] memory ytInterests,
129
- uint256[][] memory ytRewards,
130
- uint256[][] memory marketRewards
131
- )
132
- {
133
- syRewards = new uint256[][](sys.length);
134
- for (uint256 i = 0; i < sys.length; ++i) {
135
- syRewards[i] = IStandardizedYield(sys[i]).claimRewards(user);
136
- }
137
-
138
- ytInterests = new uint256[](yts.length);
139
- ytRewards = new uint256[][](yts.length);
140
- for (uint256 i = 0; i < yts.length; ++i) {
141
- (ytInterests[i], ytRewards[i]) = IPYieldToken(yts[i]).redeemDueInterestAndRewards(
142
- user,
143
- true,
144
- true
145
- );
146
- }
147
-
148
- marketRewards = new uint256[][](markets.length);
149
- for (uint256 i = 0; i < markets.length; ++i) {
150
- marketRewards[i] = IPMarket(markets[i]).redeemRewards(user);
151
- }
152
- emit RedeemDueInterestAndRewards(
153
- user,
154
- sys,
155
- yts,
156
- markets,
157
- syRewards,
158
- ytInterests,
159
- ytRewards,
160
- marketRewards
161
- );
162
- }
163
-
164
- struct RouterTokenAmounts {
165
- address[] tokens;
166
- uint256[] amounts;
167
- }
168
-
169
- /**
170
- * @notice A function to:
171
- - Redeem all of caller's due interest and rewards in SYs, YTs, and markets
172
- - Redeem SYs themselves
173
- - Finally swaps all resulting tokens to `dataSwap.outputToken`
174
- * @return netTokenOut total token output amount, will not be lower than `dataSwap.minTokenOut`
175
- * @return amountsSwapped the amounts swapped for each token defined in `dataSwap.tokens`
176
- */
177
- function redeemDueInterestAndRewardsThenSwapAll(
178
- address[] calldata sys,
179
- RouterYtRedeemStruct calldata dataYT,
180
- address[] calldata markets,
181
- RouterSwapAllStruct calldata dataSwap
182
- ) external returns (uint256 netTokenOut, uint256[] memory amountsSwapped) {
183
- if (dataSwap.tokens.length != dataSwap.kybercalls.length)
184
- revert Errors.ArrayLengthMismatch();
185
-
186
- if (dataYT.tokenRedeemSys.length != dataYT.syAddrs.length)
187
- revert Errors.ArrayLengthMismatch();
188
-
189
- RouterTokenAmounts memory tokensOut = _newRouterTokenAmounts(dataSwap.tokens);
190
- RouterTokenAmounts memory sysOut = _newRouterTokenAmounts(dataYT.syAddrs);
191
-
192
- // redeem SY
193
- for (uint256 i = 0; i < sys.length; ++i) {
194
- IStandardizedYield SY = IStandardizedYield(sys[i]);
195
-
196
- address[] memory rewardTokens = SY.getRewardTokens();
197
- uint256[] memory rewardAmounts = SY.claimRewards(msg.sender);
198
- _addTokenAmounts(tokensOut, rewardTokens, rewardAmounts);
199
- }
200
-
201
- // redeem YT
202
- for (uint256 i = 0; i < dataYT.yts.length; ++i) {
203
- IPYieldToken YT = IPYieldToken(dataYT.yts[i]);
204
-
205
- (uint256 interestAmount, uint256[] memory rewardAmounts) = YT
206
- .redeemDueInterestAndRewards(msg.sender, true, true);
207
-
208
- address syAddr = YT.SY();
209
- address[] memory rewardTokens = YT.getRewardTokens();
210
-
211
- _addTokenAmount(sysOut, syAddr, interestAmount);
212
- _addTokenAmounts(tokensOut, rewardTokens, rewardAmounts);
213
- }
214
-
215
- // redeem market
216
- for (uint256 i = 0; i < markets.length; ++i) {
217
- IPMarket market = IPMarket(markets[i]);
218
-
219
- address[] memory rewardTokens = market.getRewardTokens();
220
- uint256[] memory rewardAmounts = market.redeemRewards(msg.sender);
221
- _addTokenAmounts(tokensOut, rewardTokens, rewardAmounts);
222
- }
223
-
224
- // guaranteed no ETH, all rewards are ERC20
225
- for (uint256 i = 0; i < tokensOut.tokens.length; ++i) {
226
- _transferFrom(
227
- IERC20(tokensOut.tokens[i]),
228
- msg.sender,
229
- address(this),
230
- tokensOut.amounts[i]
231
- );
232
- }
233
- _redeemAllSys(sysOut, dataYT.bulks, dataYT.tokenRedeemSys, tokensOut);
234
-
235
- // now swap all to outputToken
236
- netTokenOut = _swapAllToOutputToken(tokensOut, dataSwap);
237
-
238
- if (netTokenOut < dataSwap.minTokenOut)
239
- revert Errors.RouterInsufficientTokenOut(netTokenOut, dataSwap.minTokenOut);
240
-
241
- amountsSwapped = tokensOut.amounts;
242
-
243
- emit RedeemDueInterestAndRewardsThenSwapAll(
244
- msg.sender,
245
- sys,
246
- dataYT.yts,
247
- markets,
248
- dataSwap.outputToken,
249
- netTokenOut
250
- );
251
- }
252
-
253
- function _newRouterTokenAmounts(address[] memory tokens)
254
- internal
255
- pure
256
- returns (RouterTokenAmounts memory)
257
- {
258
- return RouterTokenAmounts(tokens, new uint256[](tokens.length));
259
- }
260
-
261
- /// @dev pull SYs from users & redeem them, then add to tokensOut
262
- function _redeemAllSys(
263
- RouterTokenAmounts memory sys,
264
- address[] calldata bulks,
265
- address[] calldata tokenRedeemSys,
266
- RouterTokenAmounts memory tokensOut
267
- ) internal {
268
- for (uint256 i = 0; i < sys.tokens.length; ++i) {
269
- if (sys.amounts[i] == 0) continue;
270
-
271
- TokenOutput memory output = _wrapTokenOutput(tokenRedeemSys[i], 1, bulks[i]);
272
- uint256 amountOut = _redeemSyToToken(
273
- address(this),
274
- sys.tokens[i],
275
- sys.amounts[i],
276
- output,
277
- true
278
- );
279
-
280
- _addTokenAmount(tokensOut, tokenRedeemSys[i], amountOut);
281
- }
282
- }
283
-
284
- function _swapAllToOutputToken(
285
- RouterTokenAmounts memory tokens,
286
- RouterSwapAllStruct memory dataSwap
287
- ) internal returns (uint256 netTokenOut) {
288
- for (uint256 i = 0; i < tokens.tokens.length; ++i) {
289
- if (tokens.amounts[i] == 0) continue;
290
- _kyberswap(
291
- tokens.tokens[i],
292
- tokens.amounts[i],
293
- dataSwap.kyberRouter,
294
- dataSwap.kybercalls[i]
295
- );
296
- }
297
- netTokenOut = _selfBalance(dataSwap.outputToken);
298
- _transferOut(dataSwap.outputToken, msg.sender, netTokenOut);
299
- }
119
+ ) external {
120
+ unchecked {
121
+ for (uint256 i = 0; i < sys.length; ++i) {
122
+ IStandardizedYield(sys[i]).claimRewards(user);
123
+ }
300
124
 
301
- function _addTokenAmount(
302
- RouterTokenAmounts memory data,
303
- address token,
304
- uint256 amount
305
- ) internal pure {
306
- for (uint256 j = 0; j < data.tokens.length; j++) {
307
- if (data.tokens[j] == token) {
308
- data.amounts[j] += amount;
309
- return;
125
+ for (uint256 i = 0; i < yts.length; ++i) {
126
+ IPYieldToken(yts[i]).redeemDueInterestAndRewards(user, true, true);
310
127
  }
311
- }
312
- revert("token not found");
313
- }
314
128
 
315
- function _addTokenAmounts(
316
- RouterTokenAmounts memory data,
317
- address[] memory tokens,
318
- uint256[] memory amounts
319
- ) internal pure {
320
- for (uint256 i = 0; i < tokens.length; i++) {
321
- _addTokenAmount(data, tokens[i], amounts[i]);
129
+ for (uint256 i = 0; i < markets.length; ++i) {
130
+ IPMarket(markets[i]).redeemRewards(user);
131
+ }
322
132
  }
323
133
  }
324
134
  }
@@ -1,25 +1,51 @@
1
1
  // SPDX-License-Identifier: GPL-3.0-or-later
2
2
  pragma solidity 0.8.17;
3
3
 
4
- import "../interfaces/IPMarket.sol";
5
4
  import "../interfaces/IPActionMisc.sol";
6
- import "../core/libraries/Errors.sol";
7
-
8
- contract ActionMisc is IPActionMisc {
9
- using Math for uint256;
10
-
11
- function consult(address market, uint32 secondsAgo)
12
- external
13
- view
14
- returns (uint96 lnImpliedRateMean)
15
- {
16
- if (secondsAgo == 0) revert Errors.RouterTimeRangeZero();
17
- uint32[] memory secondsAgos = new uint32[](2);
18
- secondsAgos[0] = secondsAgo;
19
- secondsAgos[1] = 0;
20
- uint216[] memory lnImpliedRateCumulatives = IPMarket(market).observe(secondsAgos);
21
- return
22
- (uint256(lnImpliedRateCumulatives[1] - lnImpliedRateCumulatives[0]) / secondsAgo)
23
- .Uint96();
5
+ import "../core/libraries/TokenHelper.sol";
6
+
7
+ contract ActionMisc is IPActionMisc, TokenHelper {
8
+ function approveInf(MultiApproval[] calldata arr) external {
9
+ for (uint256 i = 0; i < arr.length; ) {
10
+ MultiApproval calldata ele = arr[i];
11
+ for (uint256 j = 0; j < ele.tokens.length; ) {
12
+ _safeApproveInf(ele.tokens[j], ele.spender);
13
+ unchecked {
14
+ j++;
15
+ }
16
+ }
17
+ unchecked {
18
+ i++;
19
+ }
20
+ }
21
+ }
22
+
23
+ function batchExec(Call3[] calldata calls) external payable returns (Result[] memory res) {
24
+ uint256 length = calls.length;
25
+
26
+ res = new Result[](length);
27
+
28
+ Call3 calldata calli;
29
+
30
+ for (uint256 i = 0; i < length; ) {
31
+ calli = calls[i];
32
+
33
+ // delegatecall to itself, it turns allowing invoking functions from other actions
34
+ (bool success, bytes memory result) = address(this).delegatecall(calli.callData);
35
+
36
+ if (!success && !calli.allowFailure) {
37
+ assembly {
38
+ // We use Yul's revert() to bubble up errors from the target contract.
39
+ revert(add(32, result), mload(result))
40
+ }
41
+ }
42
+
43
+ res[i].success = success;
44
+ res[i].returnData = result;
45
+
46
+ unchecked {
47
+ ++i;
48
+ }
49
+ }
24
50
  }
25
51
  }
@@ -15,11 +15,6 @@ contract ActionSwapPT is IPActionSwapPT, ActionBaseMintRedeem {
15
15
  using Math for int256;
16
16
  using PYIndexLib for IPYieldToken;
17
17
 
18
- /// @dev since this contract will be proxied, it must not contains non-immutable variables
19
- constructor(address _kyberScalingLib)
20
- ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
21
- {}
22
-
23
18
  /**
24
19
  * @notice swaps exact amount of PT for SY
25
20
  * @param exactPtIn will always consume this exact amount of PT for as much SY as possible
@@ -7,8 +7,10 @@ import "../interfaces/IPActionSwapYT.sol";
7
7
  import "../interfaces/IPMarket.sol";
8
8
  import "../core/libraries/Errors.sol";
9
9
 
10
+ import "./base/ActionBaseCallback.sol";
11
+
10
12
  /// @dev All swap actions will revert if market is expired
11
- contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
13
+ contract ActionSwapYT is ActionBaseCallback, IPActionSwapYT, ActionBaseMintRedeem {
12
14
  using Math for uint256;
13
15
  using Math for int256;
14
16
  using MarketMathCore for MarketState;
@@ -16,10 +18,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
16
18
  using MarketApproxPtOutLib for MarketState;
17
19
  using PYIndexLib for IPYieldToken;
18
20
 
19
- /// @dev since this contract will be proxied, it must not contains non-immutable variables
20
- constructor(address _kyberScalingLib)
21
- ActionBaseMintRedeem(_kyberScalingLib) //solhint-disable-next-line no-empty-blocks
22
- {}
21
+ constructor(address _marketFactory) ActionBaseCallback(_marketFactory) {}
23
22
 
24
23
  /**
25
24
  * @notice swap exact SY to YT with the help of flashswaps & YT tokenization / redemption
@@ -38,7 +37,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
38
37
  address market,
39
38
  uint256 exactSyIn,
40
39
  uint256 minYtOut,
41
- ApproxParams memory guessYtOut
40
+ ApproxParams calldata guessYtOut
42
41
  ) external returns (uint256 netYtOut, uint256 netSyFee) {
43
42
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
44
43
 
@@ -105,7 +104,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
105
104
  (, netSyFee) = IPMarket(market).swapExactPtForSy(
106
105
  address(YT),
107
106
  exactYtOut, // exactPtIn = exactYtOut
108
- _encodeSwapSyForExactYt(msg.sender, receiver, maxSyIn)
107
+ _encodeSwapSyForExactYt(msg.sender, receiver, maxSyIn, SY, YT)
109
108
  );
110
109
 
111
110
  netSyIn = preSyBalance - SY.balanceOf(msg.sender);
@@ -129,7 +128,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
129
128
  address market,
130
129
  uint256 exactSyOut,
131
130
  uint256 maxYtIn,
132
- ApproxParams memory guessYtIn
131
+ ApproxParams calldata guessYtIn
133
132
  ) external returns (uint256 netYtIn, uint256 netSyFee) {
134
133
  MarketState memory state = IPMarket(market).readState(address(this));
135
134
  (, , IPYieldToken YT) = IPMarket(market).readTokens();
@@ -148,7 +147,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
148
147
  (, netSyFee) = IPMarket(market).swapSyForExactPt(
149
148
  address(YT),
150
149
  netYtIn, // exactPtOut = netYtIn
151
- _encodeSwapYtForSy(receiver, exactSyOut)
150
+ _encodeSwapYtForSy(receiver, exactSyOut, YT)
152
151
  );
153
152
 
154
153
  emit SwapYtAndSy(msg.sender, market, receiver, netYtIn.neg(), exactSyOut.Int());
@@ -163,7 +162,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
163
162
  address receiver,
164
163
  address market,
165
164
  uint256 minYtOut,
166
- ApproxParams memory guessYtOut,
165
+ ApproxParams calldata guessYtOut,
167
166
  TokenInput calldata input
168
167
  ) external payable returns (uint256 netYtOut, uint256 netSyFee) {
169
168
  (IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
@@ -227,13 +226,99 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
227
226
  );
228
227
  }
229
228
 
229
+ /**
230
+ * @notice swap exact PT to YT with the help of flashswaps & YT tokenization / redemption
231
+ * @dev inner working of this function:
232
+ - `exactPtIn` PT is transferred to market contract
233
+ - `market.swapExactPtForSy` is called, which will transfer SY directly to YT contract & callback is invoked.
234
+ Note that we will owe PT, the amount before is not sufficient
235
+ - in callback, all SY in YT contract is used to mint PT + YT, with PT used to pay the rest of the loan, and YT
236
+ transferred to the receiver
237
+ * @param exactPtIn will always consume this amount of PT for as much YT as possible
238
+ * @param guessTotalPtToSwap approximation data for PT used for the PT-to-SY flashswap
239
+ * @dev this function works in conjunction with ActionCallback
240
+ */
241
+ function swapExactPtForYt(
242
+ address receiver,
243
+ address market,
244
+ uint256 exactPtIn,
245
+ uint256 minYtOut,
246
+ ApproxParams calldata guessTotalPtToSwap
247
+ ) external returns (uint256 netYtOut, uint256 netSyFee) {
248
+ (, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market).readTokens();
249
+ MarketState memory state = IPMarket(market).readState(address(this));
250
+
251
+ _transferFrom(IERC20(PT), msg.sender, market, exactPtIn);
252
+
253
+ uint256 totalPtToSwap;
254
+ (netYtOut, totalPtToSwap, netSyFee) = state.approxSwapExactPtForYt(
255
+ YT.newIndex(),
256
+ exactPtIn,
257
+ block.timestamp,
258
+ guessTotalPtToSwap
259
+ );
260
+
261
+ if (netYtOut < minYtOut) revert Errors.RouterInsufficientYtOut(netYtOut, minYtOut);
262
+
263
+ IPMarket(market).swapExactPtForSy(
264
+ address(YT),
265
+ totalPtToSwap,
266
+ _encodeSwapExactPtForYt(receiver, exactPtIn, minYtOut, YT)
267
+ );
268
+
269
+ emit SwapPtAndYt(msg.sender, market, receiver, exactPtIn.neg(), netYtOut.Int());
270
+ }
271
+
272
+ /**
273
+ * @notice swap exact YT to PT with the help of flashswaps & YT tokenization / redemption
274
+ * @dev inner working of this function:
275
+ - `exactYtIn` YT is transferred to yield contract
276
+ - `market.swapSyForExactPt` is called, which will transfer PT directly to this contract & callback is invoked.
277
+ Note that we now owe SY
278
+ - in callback, a portion of PT + YT is used to redeem SY, which is then used to payback the loan. The rest of
279
+ of the PT is transferred to `receiver`
280
+ * @param exactYtIn will always consume this amount of YT for as much PT as possible
281
+ * @param guessTotalPtFromSwap approximation data for PT output of the SY-to-PT flashswap
282
+ * @dev this function works in conjunction with ActionCallback
283
+ */
284
+ function swapExactYtForPt(
285
+ address receiver,
286
+ address market,
287
+ uint256 exactYtIn,
288
+ uint256 minPtOut,
289
+ ApproxParams calldata guessTotalPtFromSwap
290
+ ) external returns (uint256 netPtOut, uint256 netSyFee) {
291
+ (, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market).readTokens();
292
+ MarketState memory state = IPMarket(market).readState(address(this));
293
+
294
+ _transferFrom(IERC20(YT), msg.sender, address(YT), exactYtIn);
295
+
296
+ uint256 totalPtFromSwap;
297
+ (netPtOut, totalPtFromSwap, netSyFee) = state.approxSwapExactYtForPt(
298
+ YT.newIndex(),
299
+ exactYtIn,
300
+ block.timestamp,
301
+ guessTotalPtFromSwap
302
+ );
303
+
304
+ if (netPtOut < minPtOut) revert Errors.RouterInsufficientPtOut(netPtOut, minPtOut);
305
+
306
+ IPMarket(market).swapSyForExactPt(
307
+ address(this),
308
+ totalPtFromSwap,
309
+ _encodeSwapExactYtForPt(receiver, exactYtIn, minPtOut, PT, YT)
310
+ );
311
+
312
+ emit SwapPtAndYt(msg.sender, market, receiver, netPtOut.Int(), exactYtIn.neg());
313
+ }
314
+
230
315
  function _swapExactSyForYt(
231
316
  address receiver,
232
317
  address market,
233
318
  IPYieldToken YT,
234
319
  uint256 exactSyIn,
235
320
  uint256 minYtOut,
236
- ApproxParams memory guessYtOut
321
+ ApproxParams calldata guessYtOut
237
322
  ) internal returns (uint256 netYtOut, uint256 netSyFee) {
238
323
  MarketState memory state = IPMarket(market).readState(address(this));
239
324
 
@@ -250,7 +335,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
250
335
  (, netSyFee) = IPMarket(market).swapExactPtForSy(
251
336
  address(YT),
252
337
  netYtOut, // exactPtIn = netYtOut
253
- _encodeSwapExactSyForYt(receiver, minYtOut)
338
+ _encodeSwapExactSyForYt(receiver, minYtOut, YT)
254
339
  );
255
340
  }
256
341
 
@@ -267,7 +352,7 @@ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
267
352
  (, netSyFee) = IPMarket(market).swapSyForExactPt(
268
353
  address(YT),
269
354
  exactYtIn, // exactPtOut = exactYtIn
270
- _encodeSwapYtForSy(receiver, minSyOut)
355
+ _encodeSwapYtForSy(receiver, minSyOut, YT)
271
356
  );
272
357
 
273
358
  netSyOut = SY.balanceOf(receiver) - preSyBalance;