@pendle/core-v2 0.9.4-beta → 0.10.2-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 (360) hide show
  1. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +1 -1
  2. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.json +2 -2
  3. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +1 -1
  4. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.dbg.json +1 -1
  5. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.json +2 -2
  6. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  7. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.dbg.json +1 -1
  8. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.json +2 -2
  9. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.dbg.json +1 -1
  10. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.json +2 -2
  11. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.dbg.json +1 -1
  12. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.json +7 -2
  13. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +1 -1
  14. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.json +2 -2
  15. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.dbg.json +1 -1
  16. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.json +2 -2
  17. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +1 -1
  18. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.json +2 -2
  19. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultSCY.sol/PendleYearnVaultSCY.dbg.json +4 -0
  20. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/{PendleYearnVaultScy.sol → PendleYearnVaultSCY.sol}/PendleYearnVaultSCY.json +3 -3
  21. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.dbg.json +1 -1
  22. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.json +2 -2
  23. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.dbg.json +1 -1
  24. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +1 -1
  25. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.dbg.json +1 -1
  26. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.json +67 -5
  27. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +1 -1
  28. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.json +63 -1
  29. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  30. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.json +65 -3
  31. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  32. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +74 -10
  33. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  34. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +79 -15
  35. package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  36. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  37. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +204 -123
  38. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  39. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.json +127 -73
  40. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  41. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +93 -34
  42. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  43. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +90 -14
  44. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.json +14 -1
  46. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +139 -37
  48. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  49. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +84 -56
  50. package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +1 -1
  51. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  52. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.json +122 -11
  53. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  54. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  55. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +2 -2
  56. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  57. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +96 -40
  58. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  59. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
  60. package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +4 -0
  61. package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +1025 -0
  62. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.dbg.json +1 -1
  63. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.json +2 -2
  64. package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +4 -0
  65. package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.json +622 -0
  66. package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.dbg.json +4 -0
  67. package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.json +35 -0
  68. package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.dbg.json +4 -0
  69. package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.json +459 -0
  70. package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.dbg.json +4 -0
  71. package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.json +459 -0
  72. package/build/artifacts/contracts/core/actions/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +4 -0
  73. package/build/artifacts/contracts/core/actions/base/{ActionSCYAndPTBase.sol/ActionSCYAndPTBase.json → ActionBaseMintRedeem.sol/ActionBaseMintRedeem.json} +2 -2
  74. package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
  75. package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
  76. package/build/artifacts/contracts/interfaces/IAavePool.sol/IAavePool.dbg.json +1 -1
  77. package/build/artifacts/contracts/interfaces/IAaveRewardsController.sol/IAaveRewardsController.dbg.json +1 -1
  78. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.dbg.json +1 -1
  79. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.json +24 -0
  80. package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +1 -1
  81. package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +1 -1
  82. package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +1 -1
  83. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
  84. package/build/artifacts/contracts/interfaces/IEulerEToken.sol/IEulerEToken.dbg.json +1 -1
  85. package/build/artifacts/contracts/interfaces/IEulerMarkets.sol/IEulerMarkets.dbg.json +1 -1
  86. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +4 -0
  87. package/build/artifacts/contracts/interfaces/{IPActionCore.sol/IPActionCore.json → IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.json} +141 -912
  88. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +4 -0
  89. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.json +598 -0
  90. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +4 -0
  91. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.json +35 -0
  92. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +4 -0
  93. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.json +435 -0
  94. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +4 -0
  95. package/build/artifacts/contracts/interfaces/{IPActionYT.sol/IPActionYT.json → IPActionSwapYT.sol/IPActionSwapYT.json} +23 -11
  96. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  97. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +323 -47
  98. package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.dbg.json +4 -0
  99. package/build/artifacts/contracts/{core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.json → interfaces/IPGauge.sol/IPGauge.json} +5 -5
  100. package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +1 -1
  101. package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +1 -1
  102. package/build/artifacts/contracts/interfaces/IPGovernanceManager.sol/IPGovernanceManager.dbg.json +1 -1
  103. package/build/artifacts/contracts/interfaces/IPInterestManagerYT.sol/IPInterestManagerYT.dbg.json +1 -1
  104. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  105. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.json +72 -29
  106. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.json +0 -11
  108. package/build/artifacts/contracts/interfaces/IPMarketSwapCallback.sol/IPMarketSwapCallback.dbg.json +1 -1
  109. package/build/artifacts/contracts/interfaces/IPPermissionsV2Upg.sol/IPermissionsV2Upg.dbg.json +1 -1
  110. package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
  111. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
  112. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.json +1 -1
  113. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  114. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.json +0 -37
  115. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +1 -1
  116. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
  117. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
  118. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.json +1 -1
  119. package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +1 -1
  120. package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
  121. package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
  122. package/build/artifacts/contracts/interfaces/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
  123. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +1 -1
  124. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.json +1 -1
  125. package/build/artifacts/contracts/interfaces/ISAvax.sol/ISAvax.dbg.json +1 -1
  126. package/build/artifacts/contracts/interfaces/ISJoe.sol/ISJoe.dbg.json +1 -1
  127. package/build/artifacts/contracts/interfaces/IStETH.sol/IStETH.dbg.json +1 -1
  128. package/build/artifacts/contracts/interfaces/IStargateLPStaking.sol/IStargateLPStaking.dbg.json +1 -1
  129. package/build/artifacts/contracts/interfaces/IStargatePool.sol/IStargatePool.dbg.json +1 -1
  130. package/build/artifacts/contracts/interfaces/IStargateRouter.sol/IStargateRouter.dbg.json +1 -1
  131. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +1 -1
  132. package/build/artifacts/contracts/interfaces/IWAvax.sol/IWAvax.dbg.json +1 -1
  133. package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
  134. package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.dbg.json +1 -1
  135. package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.dbg.json +1 -1
  136. package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
  137. package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.dbg.json +4 -0
  138. package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.json +74 -0
  139. package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +1 -1
  140. package/build/artifacts/contracts/libraries/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  141. package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +1 -1
  142. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  143. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  144. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
  145. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
  146. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
  147. package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.dbg.json +1 -1
  148. package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.json +2 -2
  149. package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.dbg.json +1 -1
  150. package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  151. package/build/artifacts/contracts/libraries/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +1 -1
  152. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
  153. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.dbg.json +1 -1
  154. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.json +2 -2
  155. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  156. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.json +2 -2
  157. package/build/artifacts/contracts/libraries/math/Math.sol/Math.dbg.json +1 -1
  158. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.dbg.json +1 -1
  159. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +1 -1
  160. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +4 -0
  161. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +93 -0
  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 +427 -39
  164. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.dbg.json +4 -0
  165. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.json +86 -0
  166. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.dbg.json +4 -0
  167. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.json +37 -0
  168. package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.dbg.json +1 -1
  169. package/build/artifacts/contracts/periphery/PermissionsV2Upg.sol/PermissionsV2Upg.dbg.json +1 -1
  170. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +8 -0
  171. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol +1 -1
  172. package/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol +11 -5
  173. package/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol +0 -1
  174. package/contracts/SuperComposableYield/SCY-implementations/{PendleYearnVaultScy.sol → PendleYearnVaultSCY.sol} +0 -0
  175. package/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol +1 -0
  176. package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +1 -1
  177. package/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol +7 -7
  178. package/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol +7 -6
  179. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +4 -5
  180. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol +6 -3
  181. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol +6 -3
  182. package/contracts/core/LiquidityMining/PendleGauge.sol +3 -2
  183. package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +22 -28
  184. package/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +71 -13
  185. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +7 -4
  186. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +6 -2
  187. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +4 -3
  188. package/contracts/core/Market/PendleMarket.sol +93 -57
  189. package/contracts/core/Market/PendleMarketFactory.sol +18 -33
  190. package/contracts/core/PendleRouter.sol +60 -52
  191. package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +12 -12
  192. package/contracts/core/YieldContracts/PendleYieldToken.sol +1 -1
  193. package/contracts/core/actions/ActionAddRemoveLiq.sol +366 -0
  194. package/contracts/core/actions/ActionCallback.sol +6 -6
  195. package/contracts/core/actions/ActionMintRedeem.sol +124 -0
  196. package/contracts/core/actions/ActionMisc.sol +24 -0
  197. package/contracts/core/actions/ActionSwapPT.sol +199 -0
  198. package/contracts/core/actions/{base/ActionSCYAndYTBase.sol → ActionSwapYT.sol} +109 -74
  199. package/contracts/core/actions/base/{ActionSCYAndPYBase.sol → ActionBaseMintRedeem.sol} +9 -8
  200. package/contracts/interfaces/IBenQiComptroller.sol +2 -0
  201. package/contracts/interfaces/IPActionAddRemoveLiq.sol +188 -0
  202. package/contracts/interfaces/IPActionMintRedeem.sol +115 -0
  203. package/contracts/interfaces/IPActionMisc.sol +9 -0
  204. package/contracts/interfaces/IPActionSwapPT.sol +69 -0
  205. package/contracts/interfaces/{IPActionYT.sol → IPActionSwapYT.sol} +12 -10
  206. package/contracts/interfaces/IPAllAction.sol +12 -3
  207. package/contracts/interfaces/IPGauge.sol +6 -0
  208. package/contracts/interfaces/IPGaugeController.sol +0 -2
  209. package/contracts/interfaces/IPMarket.sol +28 -10
  210. package/contracts/interfaces/IPMarketFactory.sol +1 -7
  211. package/contracts/interfaces/IPVeToken.sol +1 -1
  212. package/contracts/interfaces/IPVotingController.sol +0 -2
  213. package/contracts/interfaces/IRewardManager.sol +1 -1
  214. package/contracts/libraries/OracleLib.sol +214 -0
  215. package/contracts/libraries/RewardManagerAbstract.sol +1 -1
  216. package/contracts/libraries/math/MarketApproxLib.sol +227 -14
  217. package/contracts/libraries/math/MarketMathCore.sol +0 -33
  218. package/contracts/offchain-helpers/MarketMathStatic.sol +565 -0
  219. package/contracts/offchain-helpers/RouterStatic.sol +187 -251
  220. package/contracts/periphery/BoringOwnableUpgradeable.sol +62 -0
  221. package/deployments/43113-core.json +7 -8
  222. package/deployments/43113-markets/benqi-market-590025.json +8 -0
  223. package/deployments/43113-markets/benqi-market-c93916.json +8 -0
  224. package/deployments/80001-core.json +6 -7
  225. package/deployments/80001-markets/benqi-market-3b8BD1.json +8 -0
  226. package/deployments/80001-markets/benqi-market-b61e7f.json +8 -0
  227. package/package.json +11 -11
  228. package/typechain-types/ActionAddRemoveLiq.ts +1037 -0
  229. package/typechain-types/ActionBaseMintRedeem.ts +87 -0
  230. package/typechain-types/ActionCore.ts +21 -20
  231. package/typechain-types/ActionMintRedeem.ts +665 -0
  232. package/typechain-types/ActionMisc.ts +105 -0
  233. package/typechain-types/ActionSwapPT.ts +515 -0
  234. package/typechain-types/ActionSwapYT.ts +515 -0
  235. package/typechain-types/ActionYT.ts +5 -4
  236. package/typechain-types/BoringOwnable.ts +194 -0
  237. package/typechain-types/BoringOwnableData.ts +100 -0
  238. package/typechain-types/BoringOwnableUpgradeable.ts +194 -0
  239. package/typechain-types/BoringOwnableUpgradeableData.ts +100 -0
  240. package/typechain-types/CelerReceiverUpg.ts +124 -19
  241. package/typechain-types/CelerSenderUpg.ts +116 -11
  242. package/typechain-types/IBenQiComptroller.ts +39 -0
  243. package/typechain-types/IPActionAddRemoveLiq.ts +1018 -0
  244. package/typechain-types/IPActionCore.ts +21 -20
  245. package/typechain-types/IPActionMintRedeem.ts +646 -0
  246. package/typechain-types/IPActionMisc.ts +105 -0
  247. package/typechain-types/IPActionSwapPT.ts +496 -0
  248. package/typechain-types/IPActionSwapYT.ts +496 -0
  249. package/typechain-types/IPActionYT.ts +5 -4
  250. package/typechain-types/IPAllAction.ts +431 -193
  251. package/typechain-types/IPGauge.ts +87 -0
  252. package/typechain-types/IPMarket.ts +133 -50
  253. package/typechain-types/IPMarketFactory.ts +7 -17
  254. package/typechain-types/IPVeToken.ts +8 -8
  255. package/typechain-types/IPVotingController.ts +0 -20
  256. package/typechain-types/IPYieldToken.ts +3 -3
  257. package/typechain-types/IRewardManager.ts +3 -3
  258. package/typechain-types/MarketMathStatic.ts +198 -0
  259. package/typechain-types/OracleLib.ts +124 -0
  260. package/typechain-types/PendleGaugeControllerBaseUpg.ts +118 -15
  261. package/typechain-types/PendleGaugeControllerMainchainUpg.ts +136 -9
  262. package/typechain-types/PendleGaugeControllerSidechainUpg.ts +138 -11
  263. package/typechain-types/PendleMarket.ts +178 -59
  264. package/typechain-types/PendleMarketFactory.ts +135 -61
  265. package/typechain-types/PendleRouter.ts +201 -31
  266. package/typechain-types/PendleVotingControllerUpg.ts +325 -149
  267. package/typechain-types/PendleYieldContractFactory.ts +144 -21
  268. package/typechain-types/RouterStatic.ts +344 -64
  269. package/typechain-types/VotingControllerStorageUpg.ts +182 -113
  270. package/typechain-types/VotingEscrowPendleMainchain.ts +170 -63
  271. package/typechain-types/VotingEscrowPendleSidechain.ts +163 -17
  272. package/typechain-types/VotingEscrowTokenBase.ts +27 -8
  273. package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +1083 -0
  274. package/typechain-types/factories/ActionBaseMintRedeem__factory.ts +43 -0
  275. package/typechain-types/factories/ActionCallback__factory.ts +1 -1
  276. package/typechain-types/factories/ActionCore__factory.ts +6 -6
  277. package/typechain-types/factories/ActionMintRedeem__factory.ts +680 -0
  278. package/typechain-types/factories/ActionMisc__factory.ts +85 -0
  279. package/typechain-types/factories/ActionSwapPT__factory.ts +514 -0
  280. package/typechain-types/factories/ActionSwapYT__factory.ts +514 -0
  281. package/typechain-types/factories/ActionYT__factory.ts +2 -2
  282. package/typechain-types/factories/BoringOwnableData__factory.ts +90 -0
  283. package/typechain-types/factories/BoringOwnableUpgradeableData__factory.ts +96 -0
  284. package/typechain-types/factories/BoringOwnableUpgradeable__factory.ts +143 -0
  285. package/typechain-types/factories/BoringOwnable__factory.ts +141 -0
  286. package/typechain-types/factories/CelerReceiverUpg__factory.ts +67 -5
  287. package/typechain-types/factories/CelerSenderUpg__factory.ts +63 -1
  288. package/typechain-types/factories/IBenQiComptroller__factory.ts +24 -0
  289. package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +1020 -0
  290. package/typechain-types/factories/IPActionCore__factory.ts +5 -5
  291. package/typechain-types/factories/IPActionMintRedeem__factory.ts +613 -0
  292. package/typechain-types/factories/IPActionMisc__factory.ts +47 -0
  293. package/typechain-types/factories/IPActionSwapPT__factory.ts +450 -0
  294. package/typechain-types/factories/IPActionSwapYT__factory.ts +450 -0
  295. package/typechain-types/factories/IPActionYT__factory.ts +1 -1
  296. package/typechain-types/factories/IPAllAction__factory.ts +323 -47
  297. package/typechain-types/factories/IPGauge__factory.ts +36 -0
  298. package/typechain-types/factories/IPMarketFactory__factory.ts +0 -11
  299. package/typechain-types/factories/IPMarket__factory.ts +72 -29
  300. package/typechain-types/factories/IPVeToken__factory.ts +1 -1
  301. package/typechain-types/factories/IPVotingController__factory.ts +0 -37
  302. package/typechain-types/factories/IPYieldToken__factory.ts +1 -1
  303. package/typechain-types/factories/IRewardManager__factory.ts +1 -1
  304. package/typechain-types/factories/MarketMathStatic__factory.ts +146 -0
  305. package/typechain-types/factories/OracleLib__factory.ts +124 -0
  306. package/typechain-types/factories/PendleAaveV3SCY__factory.ts +1 -1
  307. package/typechain-types/factories/PendleERC4626SCY__factory.ts +1 -1
  308. package/typechain-types/factories/PendleEulerSCY__factory.ts +10 -1
  309. package/typechain-types/factories/PendleGaugeControllerBaseUpg__factory.ts +65 -3
  310. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +73 -13
  311. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +79 -23
  312. package/typechain-types/factories/PendleMarketFactory__factory.ts +84 -86
  313. package/typechain-types/factories/PendleMarket__factory.ts +131 -37
  314. package/typechain-types/factories/PendlePrincipalToken__factory.ts +1 -1
  315. package/typechain-types/factories/PendleQiSAvaxSCY__factory.ts +1 -1
  316. package/typechain-types/factories/PendleQiTokenSCY__factory.ts +1 -1
  317. package/typechain-types/factories/PendleRouter__factory.ts +141 -22
  318. package/typechain-types/factories/PendleSAvaxSCY__factory.ts +1 -1
  319. package/typechain-types/factories/PendleSJoeSCY__factory.ts +1 -1
  320. package/typechain-types/factories/PendleStargateSCY__factory.ts +1 -1
  321. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +203 -129
  322. package/typechain-types/factories/PendleWstEthSCY__factory.ts +1 -1
  323. package/typechain-types/factories/PendleYearnVaultSCY__factory.ts +1 -1
  324. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +97 -72
  325. package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
  326. package/typechain-types/factories/RouterStatic__factory.ts +233 -39
  327. package/typechain-types/factories/VotingControllerStorageUpg__factory.ts +126 -72
  328. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +93 -41
  329. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +90 -17
  330. package/typechain-types/factories/VotingEscrowTokenBase__factory.ts +14 -1
  331. package/typechain-types/hardhat.d.ts +162 -0
  332. package/typechain-types/index.ts +36 -0
  333. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +0 -4
  334. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.dbg.json +0 -4
  335. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.json +0 -1801
  336. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +0 -4
  337. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +0 -447
  338. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +0 -4
  339. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +0 -4
  340. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +0 -4
  341. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.json +0 -24
  342. package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +0 -4
  343. package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +0 -4
  344. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +0 -4
  345. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.json +0 -874
  346. package/contracts/core/actions/ActionCore.sol +0 -382
  347. package/contracts/core/actions/ActionYT.sol +0 -93
  348. package/contracts/core/actions/base/ActionSCYAndPTBase.sol +0 -303
  349. package/contracts/interfaces/IPActionCore.sol +0 -306
  350. package/contracts/interfaces/IPRouterStatic.sol +0 -152
  351. package/deployments/43113-markets/benqi-market-599408.json +0 -7
  352. package/deployments/43113-markets/benqi-market-93bbf0.json +0 -7
  353. package/deployments/43113-markets/benqi-market-95E744.json +0 -7
  354. package/deployments/43113-markets/benqi-market-D91a3F.json +0 -7
  355. package/deployments/80001-markets/benqi-market-007811.json +0 -7
  356. package/deployments/80001-markets/benqi-market-3fe528.json +0 -7
  357. package/typechain-types/FeeDistributorAbstract.ts +0 -164
  358. package/typechain-types/IPVotingControllerStorage.ts +0 -169
  359. package/typechain-types/factories/FeeDistributorAbstract__factory.ts +0 -90
  360. package/typechain-types/factories/IPVotingControllerStorage__factory.ts +0 -107
@@ -0,0 +1,124 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.15;
3
+
4
+ import "./base/ActionBaseMintRedeem.sol";
5
+ import "../../interfaces/IPMarket.sol";
6
+ import "../../interfaces/IPActionMintRedeem.sol";
7
+
8
+ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
9
+ using MarketMathCore for MarketState;
10
+ using Math for uint256;
11
+ using Math for int256;
12
+
13
+ /// @dev since this contract will be proxied, it must not contains non-immutable variables
14
+ constructor(address _kyberSwapRouter)
15
+ ActionBaseMintRedeem(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
16
+ {}
17
+
18
+ /// @dev refer to the internal function
19
+ function mintScyFromToken(
20
+ address receiver,
21
+ address SCY,
22
+ uint256 minScyOut,
23
+ TokenInput calldata input
24
+ ) external payable returns (uint256 netScyOut) {
25
+ netScyOut = _mintScyFromToken(receiver, SCY, minScyOut, input);
26
+
27
+ emit MintScyFromToken(
28
+ msg.sender,
29
+ receiver,
30
+ SCY,
31
+ input.tokenIn,
32
+ input.netTokenIn,
33
+ netScyOut
34
+ );
35
+ }
36
+
37
+ /// @dev refer to the internal function
38
+ function redeemScyToToken(
39
+ address receiver,
40
+ address SCY,
41
+ uint256 netScyIn,
42
+ TokenOutput calldata output
43
+ ) external returns (uint256 netTokenOut) {
44
+ netTokenOut = _redeemScyToToken(receiver, SCY, netScyIn, output, true);
45
+ emit RedeemScyToToken(msg.sender, receiver, SCY, netScyIn, output.tokenOut, netTokenOut);
46
+ }
47
+
48
+ /// @dev refer to the internal function
49
+ function mintPyFromToken(
50
+ address receiver,
51
+ address YT,
52
+ uint256 minPyOut,
53
+ TokenInput calldata input
54
+ ) external payable returns (uint256 netPyOut) {
55
+ netPyOut = _mintPyFromToken(receiver, YT, minPyOut, input);
56
+ emit MintPyFromToken(msg.sender, receiver, YT, input.tokenIn, input.netTokenIn, netPyOut);
57
+ }
58
+
59
+ /// @dev refer to the internal function
60
+ function redeemPyToToken(
61
+ address receiver,
62
+ address YT,
63
+ uint256 netPyIn,
64
+ TokenOutput calldata output
65
+ ) external returns (uint256 netTokenOut) {
66
+ netTokenOut = _redeemPyToToken(receiver, YT, netPyIn, output, true);
67
+ emit RedeemPyToToken(msg.sender, receiver, YT, netPyIn, output.tokenOut, netTokenOut);
68
+ }
69
+
70
+ function mintPyFromScy(
71
+ address receiver,
72
+ address YT,
73
+ uint256 netScyIn,
74
+ uint256 minPyOut
75
+ ) external returns (uint256 netPyOut) {
76
+ netPyOut = _mintPyFromScy(receiver, YT, netScyIn, minPyOut, true);
77
+ emit MintPyFromScy(msg.sender, receiver, YT, netScyIn, netPyOut);
78
+ }
79
+
80
+ function redeemPyToScy(
81
+ address receiver,
82
+ address YT,
83
+ uint256 netPyIn,
84
+ uint256 minScyOut
85
+ ) external returns (uint256 netScyOut) {
86
+ netScyOut = _redeemPyToScy(receiver, YT, netPyIn, minScyOut, true);
87
+ emit RedeemPyToScy(msg.sender, receiver, YT, netPyIn, netScyOut);
88
+ }
89
+
90
+ function redeemDueInterestAndRewards(
91
+ address user,
92
+ address[] calldata scys,
93
+ address[] calldata yts,
94
+ address[] calldata markets
95
+ )
96
+ external
97
+ returns (
98
+ uint256[][] memory scyRewards,
99
+ uint256[] memory ytInterests,
100
+ uint256[][] memory ytRewards,
101
+ uint256[][] memory marketRewards
102
+ )
103
+ {
104
+ scyRewards = new uint256[][](scys.length);
105
+ for (uint256 i = 0; i < scys.length; ++i) {
106
+ scyRewards[i] = ISuperComposableYield(scys[i]).claimRewards(user);
107
+ }
108
+
109
+ ytInterests = new uint256[](yts.length);
110
+ ytRewards = new uint256[][](yts.length);
111
+ for (uint256 i = 0; i < yts.length; ++i) {
112
+ (ytInterests[i], ytRewards[i]) = IPYieldToken(yts[i]).redeemDueInterestAndRewards(
113
+ user,
114
+ true,
115
+ true
116
+ );
117
+ }
118
+
119
+ marketRewards = new uint256[][](markets.length);
120
+ for (uint256 i = 0; i < markets.length; ++i) {
121
+ marketRewards[i] = IPMarket(markets[i]).redeemRewards(user);
122
+ }
123
+ }
124
+ }
@@ -0,0 +1,24 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.15;
3
+
4
+ import "../../interfaces/IPMarket.sol";
5
+ import "../../interfaces/IPActionMisc.sol";
6
+
7
+ contract ActionMisc is IPActionMisc {
8
+ using Math for uint256;
9
+
10
+ function consult(address market, uint32 secondsAgo)
11
+ external
12
+ view
13
+ returns (uint96 lnImpliedRateMean)
14
+ {
15
+ require(secondsAgo != 0, "time range is zero");
16
+ uint32[] memory secondsAgos = new uint32[](2);
17
+ secondsAgos[0] = secondsAgo;
18
+ secondsAgos[1] = 0;
19
+ uint216[] memory lnImpliedRateCumulatives = IPMarket(market).observe(secondsAgos);
20
+ return
21
+ (uint256(lnImpliedRateCumulatives[1] - lnImpliedRateCumulatives[0]) / secondsAgo)
22
+ .Uint96();
23
+ }
24
+ }
@@ -0,0 +1,199 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.15;
3
+
4
+ import "./base/ActionBaseMintRedeem.sol";
5
+ import "../../interfaces/IPActionSwapPT.sol";
6
+ import "../../interfaces/IPMarket.sol";
7
+
8
+ contract ActionSwapPT is IPActionSwapPT, ActionBaseMintRedeem {
9
+ using MarketMathCore for MarketState;
10
+ using MarketApproxLib for MarketState;
11
+ using Math for uint256;
12
+ using Math for int256;
13
+ using SafeERC20 for IERC20;
14
+ using PYIndexLib for IPYieldToken;
15
+
16
+ /// @dev since this contract will be proxied, it must not contains non-immutable variables
17
+ constructor(address _kyberSwapRouter)
18
+ ActionBaseMintRedeem(_kyberSwapRouter) //solhint-disable-next-line no-empty-blocks
19
+ {}
20
+
21
+ function swapExactPtForScy(
22
+ address receiver,
23
+ address market,
24
+ uint256 exactPtIn,
25
+ uint256 minScyOut
26
+ ) external returns (uint256 netScyOut) {
27
+ (, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
28
+ IERC20(address(PT)).safeTransferFrom(msg.sender, market, exactPtIn);
29
+
30
+ (netScyOut, ) = IPMarket(market).swapExactPtForScy(receiver, exactPtIn, EMPTY_BYTES);
31
+
32
+ require(netScyOut >= minScyOut, "insufficient SCY out");
33
+
34
+ emit SwapPtAndScy(msg.sender, market, receiver, exactPtIn.neg(), netScyOut.Int());
35
+ }
36
+
37
+ /**
38
+ * @notice Note that the amount of SCY out will be a bit more than `exactScyOut`, since an approximation is used. It's
39
+ guaranteed that the `netScyOut` is at least `exactScyOut`
40
+ */
41
+ function swapPtForExactScy(
42
+ address receiver,
43
+ address market,
44
+ uint256 exactScyOut,
45
+ uint256 maxPtIn,
46
+ ApproxParams calldata guessPtIn
47
+ ) external returns (uint256 netPtIn) {
48
+ MarketState memory state = IPMarket(market).readState();
49
+ (, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market).readTokens();
50
+
51
+ (netPtIn, , ) = state.approxSwapPtForExactScy(
52
+ YT.newIndex(),
53
+ exactScyOut,
54
+ block.timestamp,
55
+ guessPtIn
56
+ );
57
+ require(netPtIn <= maxPtIn, "exceed limit PT in");
58
+
59
+ IERC20(PT).safeTransferFrom(msg.sender, market, netPtIn);
60
+
61
+ (uint256 netScyOut, ) = IPMarket(market).swapExactPtForScy(receiver, netPtIn, EMPTY_BYTES);
62
+
63
+ // fail-safe
64
+ require(netScyOut >= exactScyOut, "FS insufficient SCY out");
65
+
66
+ emit SwapPtAndScy(msg.sender, market, receiver, netPtIn.neg(), exactScyOut.Int());
67
+ }
68
+
69
+ function swapScyForExactPt(
70
+ address receiver,
71
+ address market,
72
+ uint256 exactPtOut,
73
+ uint256 maxScyIn
74
+ ) external returns (uint256 netScyIn) {
75
+ MarketState memory state = IPMarket(market).readState();
76
+ (ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
77
+
78
+ (netScyIn, ) = state.swapScyForExactPt(YT.newIndex(), exactPtOut, block.timestamp);
79
+
80
+ require(netScyIn <= maxScyIn, "exceed limit SCY in");
81
+
82
+ IERC20(SCY).safeTransferFrom(msg.sender, market, netScyIn);
83
+
84
+ IPMarket(market).swapScyForExactPt(receiver, exactPtOut, EMPTY_BYTES); // ignore return
85
+
86
+ // no fail-safe since exactly netScyIn will go into the market
87
+ emit SwapPtAndScy(msg.sender, market, receiver, exactPtOut.Int(), netScyIn.neg());
88
+ }
89
+
90
+ function swapExactScyForPt(
91
+ address receiver,
92
+ address market,
93
+ uint256 exactScyIn,
94
+ uint256 minPtOut,
95
+ ApproxParams calldata guessPtOut
96
+ ) external returns (uint256 netPtOut) {
97
+ (ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
98
+
99
+ IERC20(SCY).safeTransferFrom(msg.sender, market, exactScyIn);
100
+
101
+ netPtOut = _swapExactScyForPt(receiver, market, YT, exactScyIn, minPtOut, guessPtOut);
102
+
103
+ emit SwapPtAndScy(msg.sender, market, receiver, netPtOut.Int(), exactScyIn.neg());
104
+ }
105
+
106
+ /**
107
+ * @notice swap from any ERC20 tokens, through Uniswap's forks, to get baseTokens to make SCY, then swap
108
+ from SCY to PT
109
+ * @dev simply a combination of _mintScyFromToken & _swapExactScyForPt
110
+ */
111
+ function swapExactTokenForPt(
112
+ address receiver,
113
+ address market,
114
+ uint256 minPtOut,
115
+ ApproxParams calldata guessPtOut,
116
+ TokenInput calldata input
117
+ ) external payable returns (uint256 netPtOut) {
118
+ (ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
119
+
120
+ // all output SCY is transferred directly to the market
121
+ uint256 netScyUseToBuyPt = _mintScyFromToken(address(market), address(SCY), 1, input);
122
+
123
+ // SCY is already in the market, hence doPull = false
124
+ netPtOut = _swapExactScyForPt(
125
+ receiver,
126
+ market,
127
+ YT,
128
+ netScyUseToBuyPt,
129
+ minPtOut,
130
+ guessPtOut
131
+ );
132
+
133
+ emit SwapPtAndToken(
134
+ msg.sender,
135
+ market,
136
+ input.tokenIn,
137
+ receiver,
138
+ netPtOut.Int(),
139
+ input.netTokenIn.neg()
140
+ );
141
+ }
142
+
143
+ /**
144
+ * @notice swap from PT to SCY, then redeem SCY to baseToken & swap through Uniswap's forks to get tokenOut
145
+ * @dev simply a combination of _swapExactPtForScy & _redeemScyToToken
146
+ */
147
+ function swapExactPtForToken(
148
+ address receiver,
149
+ address market,
150
+ uint256 exactPtIn,
151
+ TokenOutput calldata output
152
+ ) external returns (uint256 netTokenOut) {
153
+ (ISuperComposableYield SCY, IPPrincipalToken PT, ) = IPMarket(market).readTokens();
154
+
155
+ IERC20(address(PT)).safeTransferFrom(msg.sender, market, exactPtIn);
156
+
157
+ // all output SCY is directly transferred to the SCY contract
158
+ (uint256 netScyReceived, ) = IPMarket(market).swapExactPtForScy(
159
+ address(SCY),
160
+ exactPtIn,
161
+ EMPTY_BYTES
162
+ );
163
+
164
+ // since all SCY is already at the SCY contract, doPull = false
165
+ netTokenOut = _redeemScyToToken(receiver, address(SCY), netScyReceived, output, false);
166
+
167
+ emit SwapPtAndToken(
168
+ msg.sender,
169
+ market,
170
+ output.tokenOut,
171
+ receiver,
172
+ exactPtIn.neg(),
173
+ netTokenOut.Int()
174
+ );
175
+ }
176
+
177
+ function _swapExactScyForPt(
178
+ address receiver,
179
+ address market,
180
+ IPYieldToken YT,
181
+ uint256 exactScyIn,
182
+ uint256 minPtOut,
183
+ ApproxParams calldata guessPtOut
184
+ ) internal returns (uint256 netPtOut) {
185
+ MarketState memory state = IPMarket(market).readState();
186
+
187
+ (netPtOut, , ) = state.approxSwapExactScyForPt(
188
+ YT.newIndex(),
189
+ exactScyIn,
190
+ block.timestamp,
191
+ guessPtOut
192
+ );
193
+
194
+ require(netPtOut >= minPtOut, "insufficient PT out");
195
+
196
+ IPMarket(market).swapScyForExactPt(receiver, netPtOut, EMPTY_BYTES); // ignore return
197
+ // no fail-safe since exactly netPtOut >= minPtOut will be out
198
+ }
199
+ }
@@ -1,15 +1,12 @@
1
1
  // SPDX-License-Identifier: GPL-3.0-or-later
2
2
  pragma solidity 0.8.15;
3
3
 
4
- import "../../../interfaces/IPMarketFactory.sol";
5
- import "../../../interfaces/IPMarket.sol";
6
- import "../../../libraries/SCY/SCYUtils.sol";
7
- import "../../../libraries/math/MarketApproxLib.sol";
8
- import "./ActionSCYAndPYBase.sol";
9
- import "./CallbackHelper.sol";
10
- import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
11
-
12
- abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
4
+ import "./base/ActionBaseMintRedeem.sol";
5
+ import "./base/CallbackHelper.sol";
6
+ import "../../interfaces/IPActionSwapYT.sol";
7
+ import "../../interfaces/IPMarket.sol";
8
+
9
+ contract ActionSwapYT is IPActionSwapYT, ActionBaseMintRedeem, CallbackHelper {
13
10
  using Math for uint256;
14
11
  using Math for int256;
15
12
  using MarketMathCore for MarketState;
@@ -18,6 +15,11 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
18
15
  using SafeERC20 for IPYieldToken;
19
16
  using PYIndexLib for IPYieldToken;
20
17
 
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
21
+ {}
22
+
21
23
  /**
22
24
  * @notice swap exact SCY to YT with the help of flashswaps & YT tokenization / redemption
23
25
  * @dev inner working of this function:
@@ -28,36 +30,20 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
28
30
  transferred to the receiver
29
31
  * @dev this function works in conjunction with ActionCallback
30
32
  */
31
- function _swapExactScyForYt(
33
+ function swapExactScyForYt(
32
34
  address receiver,
33
35
  address market,
34
36
  uint256 exactScyIn,
35
37
  uint256 minYtOut,
36
- ApproxParams memory guessYtOut,
37
- bool doPull
38
- ) internal returns (uint256 netYtOut) {
38
+ ApproxParams memory guessYtOut
39
+ ) external returns (uint256 netYtOut) {
39
40
  (ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
40
- MarketState memory state = IPMarket(market).readState(false);
41
-
42
- (netYtOut, , ) = state.approxSwapExactScyForYt(
43
- YT.newIndex(),
44
- exactScyIn,
45
- block.timestamp,
46
- guessYtOut
47
- );
48
41
 
49
- // early-check
50
- require(netYtOut >= minYtOut, "insufficient YT out");
42
+ SCY.safeTransferFrom(msg.sender, address(YT), exactScyIn);
51
43
 
52
- if (doPull) {
53
- SCY.safeTransferFrom(msg.sender, address(YT), exactScyIn);
54
- }
44
+ _swapExactScyForYt(receiver, market, YT, exactScyIn, minYtOut, guessYtOut);
55
45
 
56
- IPMarket(market).swapExactPtForScy(
57
- address(YT),
58
- netYtOut, // exactPtIn = netYtOut
59
- _encodeSwapExactScyForYt(receiver, minYtOut)
60
- );
46
+ emit SwapYtAndScy(msg.sender, market, receiver, netYtOut.Int(), exactScyIn.neg());
61
47
  }
62
48
 
63
49
  /**
@@ -70,28 +56,19 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
70
56
  the rest is transferred to the `receiver`
71
57
  * @dev this function works in conjunction with ActionCallback
72
58
  */
73
- function _swapExactYtForScy(
59
+ function swapExactYtForScy(
74
60
  address receiver,
75
61
  address market,
76
62
  uint256 exactYtIn,
77
- uint256 minScyOut,
78
- bool doPull
79
- ) internal returns (uint256 netScyOut) {
63
+ uint256 minScyOut
64
+ ) external returns (uint256 netScyOut) {
80
65
  (ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
81
66
 
82
- if (doPull) {
83
- YT.safeTransferFrom(msg.sender, address(YT), exactYtIn);
84
- }
85
-
86
- uint256 preScyBalance = SCY.balanceOf(receiver);
67
+ YT.safeTransferFrom(msg.sender, address(YT), exactYtIn);
87
68
 
88
- IPMarket(market).swapScyForExactPt(
89
- address(YT),
90
- exactYtIn, // exactPtOut = exactYtIn
91
- _encodeSwapYtForScy(receiver, minScyOut)
92
- ); // ignore return
69
+ netScyOut = _swapExactYtForScy(receiver, market, SCY, YT, exactYtIn, minScyOut);
93
70
 
94
- netScyOut = SCY.balanceOf(receiver) - preScyBalance;
71
+ emit SwapYtAndScy(msg.sender, market, receiver, exactYtIn.neg(), netScyOut.Int());
95
72
  }
96
73
 
97
74
  /**
@@ -103,12 +80,12 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
103
80
  while YT is transferred to the user
104
81
  * @dev this function works in conjunction with ActionCallback
105
82
  */
106
- function _swapScyForExactYt(
83
+ function swapScyForExactYt(
107
84
  address receiver,
108
85
  address market,
109
86
  uint256 exactYtOut,
110
87
  uint256 maxScyIn
111
- ) internal returns (uint256 netScyIn) {
88
+ ) external returns (uint256 netScyIn) {
112
89
  (ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
113
90
 
114
91
  uint256 preScyBalance = SCY.balanceOf(msg.sender);
@@ -120,6 +97,8 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
120
97
  );
121
98
 
122
99
  netScyIn = preScyBalance - SCY.balanceOf(msg.sender);
100
+
101
+ emit SwapYtAndScy(msg.sender, market, receiver, exactYtOut.Int(), netScyIn.neg());
123
102
  }
124
103
 
125
104
  /**
@@ -132,15 +111,14 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
132
111
  transferred to `receiver`
133
112
  * @dev this function works in conjunction with ActionCallback
134
113
  */
135
- function _swapYtForExactScy(
114
+ function swapYtForExactScy(
136
115
  address receiver,
137
116
  address market,
138
117
  uint256 exactScyOut,
139
118
  uint256 maxYtIn,
140
- ApproxParams memory guessYtIn,
141
- bool doPull
142
- ) internal returns (uint256 netYtIn) {
143
- MarketState memory state = IPMarket(market).readState(false);
119
+ ApproxParams memory guessYtIn
120
+ ) external returns (uint256 netYtIn) {
121
+ MarketState memory state = IPMarket(market).readState();
144
122
  (, , IPYieldToken YT) = IPMarket(market).readTokens();
145
123
 
146
124
  (netYtIn, , ) = state.approxSwapYtForExactScy(
@@ -152,28 +130,24 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
152
130
 
153
131
  require(netYtIn <= maxYtIn, "exceed YT in limit");
154
132
 
155
- if (doPull) {
156
- YT.safeTransferFrom(msg.sender, address(YT), netYtIn);
157
- }
133
+ YT.safeTransferFrom(msg.sender, address(YT), netYtIn);
158
134
 
159
135
  IPMarket(market).swapScyForExactPt(
160
136
  address(YT),
161
137
  netYtIn, // exactPtOut = netYtIn
162
138
  _encodeSwapYtForScy(receiver, exactScyOut)
163
139
  ); // ignore return
140
+
141
+ emit SwapYtAndScy(msg.sender, market, receiver, netYtIn.neg(), exactScyOut.Int());
164
142
  }
165
143
 
166
- /**
167
- * @notice swap any ERC20 tokens, through Uniswap's forks, to baseToken of the corresponding SCY of YT. These SCY is then
168
- used to swap to YT. Please refer to swapExactScyForYt for more details.
169
- */
170
- function _swapExactTokenForYt(
144
+ function swapExactTokenForYt(
171
145
  address receiver,
172
146
  address market,
173
147
  uint256 minYtOut,
174
148
  ApproxParams memory guessYtOut,
175
149
  TokenInput calldata input
176
- ) internal returns (uint256 netYtOut) {
150
+ ) external payable returns (uint256 netYtOut) {
177
151
  (ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
178
152
 
179
153
  uint256 netScyUsedToBuyYT = _mintScyFromToken(address(YT), address(SCY), 1, input);
@@ -181,28 +155,89 @@ abstract contract ActionSCYAndYTBase is ActionSCYAndPYBase, CallbackHelper {
181
155
  netYtOut = _swapExactScyForYt(
182
156
  receiver,
183
157
  market,
158
+ YT,
184
159
  netScyUsedToBuyYT,
185
160
  minYtOut,
186
- guessYtOut,
187
- false
161
+ guessYtOut
162
+ );
163
+
164
+ emit SwapYtAndToken(
165
+ msg.sender,
166
+ market,
167
+ receiver,
168
+ input.tokenIn,
169
+ netYtOut.Int(),
170
+ input.netTokenIn.neg()
188
171
  );
189
172
  }
190
173
 
191
- /**
192
- * @notice swap YT to SCY (using `swapExactYtForScy` logic), then redeem SCY to baseToken & swap baseToken to token
193
- through Uniswap's forks
194
- */
195
- function _swapExactYtForToken(
174
+ function swapExactYtForToken(
196
175
  address receiver,
197
176
  address market,
198
177
  uint256 netYtIn,
199
- TokenOutput calldata output,
200
- bool doPull
201
- ) internal returns (uint256 netTokenOut) {
202
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
178
+ TokenOutput calldata output
179
+ ) external returns (uint256 netTokenOut) {
180
+ (ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
203
181
 
204
- uint256 netScyOut = _swapExactYtForScy(address(SCY), market, netYtIn, 1, doPull);
182
+ YT.safeTransferFrom(msg.sender, address(YT), netYtIn);
183
+
184
+ uint256 netScyOut = _swapExactYtForScy(address(SCY), market, SCY, YT, netYtIn, 1);
205
185
 
206
186
  netTokenOut = _redeemScyToToken(receiver, address(SCY), netScyOut, output, false);
187
+
188
+ emit SwapYtAndToken(
189
+ msg.sender,
190
+ market,
191
+ receiver,
192
+ output.tokenOut,
193
+ netYtIn.neg(),
194
+ netTokenOut.Int()
195
+ );
196
+ }
197
+
198
+ function _swapExactScyForYt(
199
+ address receiver,
200
+ address market,
201
+ IPYieldToken YT,
202
+ uint256 exactScyIn,
203
+ uint256 minYtOut,
204
+ ApproxParams memory guessYtOut
205
+ ) internal returns (uint256 netYtOut) {
206
+ MarketState memory state = IPMarket(market).readState();
207
+
208
+ (netYtOut, , ) = state.approxSwapExactScyForYt(
209
+ YT.newIndex(),
210
+ exactScyIn,
211
+ block.timestamp,
212
+ guessYtOut
213
+ );
214
+
215
+ // early-check
216
+ require(netYtOut >= minYtOut, "insufficient YT out");
217
+
218
+ IPMarket(market).swapExactPtForScy(
219
+ address(YT),
220
+ netYtOut, // exactPtIn = netYtOut
221
+ _encodeSwapExactScyForYt(receiver, minYtOut)
222
+ );
223
+ }
224
+
225
+ function _swapExactYtForScy(
226
+ address receiver,
227
+ address market,
228
+ ISuperComposableYield SCY,
229
+ IPYieldToken YT,
230
+ uint256 exactYtIn,
231
+ uint256 minScyOut
232
+ ) internal returns (uint256 netScyOut) {
233
+ uint256 preScyBalance = SCY.balanceOf(receiver);
234
+
235
+ IPMarket(market).swapScyForExactPt(
236
+ address(YT),
237
+ exactYtIn, // exactPtOut = exactYtIn
238
+ _encodeSwapYtForScy(receiver, minScyOut)
239
+ ); // ignore return
240
+
241
+ netScyOut = SCY.balanceOf(receiver) - preScyBalance;
207
242
  }
208
243
  }
@@ -1,23 +1,20 @@
1
1
  // SPDX-License-Identifier: GPL-3.0-or-later
2
2
  pragma solidity 0.8.15;
3
3
 
4
- import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
5
4
  import "../../../libraries/kyberswap/KyberSwapHelper.sol";
6
- import "../../../libraries/helpers/MiniHelpers.sol";
7
5
  import "../../../libraries/helpers/TokenHelper.sol";
8
6
  import "../../../interfaces/ISuperComposableYield.sol";
9
7
  import "../../../interfaces/IPYieldToken.sol";
10
8
 
11
9
  // solhint-disable no-empty-blocks
12
- abstract contract ActionSCYAndPYBase is TokenHelper, KyberSwapHelper {
10
+ abstract contract ActionBaseMintRedeem is TokenHelper, KyberSwapHelper {
13
11
  using SafeERC20 for IERC20;
14
12
 
13
+ bytes internal constant EMPTY_BYTES = abi.encode();
14
+
15
15
  /// @dev since this contract will be proxied, it must not contains non-immutable variables
16
16
  constructor(address _kyberSwapRouter) KyberSwapHelper(_kyberSwapRouter) {}
17
17
 
18
- /// @dev for Path. If no swap is needed, path = [token]
19
- /// else, path = [inputToken, token0, token1, ...., outputToken]
20
-
21
18
  /**
22
19
  * @notice swap token to baseToken through Uniswap's forks & use it to mint SCY
23
20
  */
@@ -33,10 +30,14 @@ abstract contract ActionSCYAndPYBase is TokenHelper, KyberSwapHelper {
33
30
  }
34
31
 
35
32
  _safeApproveInf(input.tokenMintScy, SCY);
36
- netScyOut = ISuperComposableYield(SCY).deposit(
33
+
34
+ uint256 tokenMintScyBal = _selfBalance(input.tokenMintScy);
35
+ uint256 nativeAmountToAttach = input.tokenMintScy == NATIVE ? tokenMintScyBal : 0;
36
+
37
+ netScyOut = ISuperComposableYield(SCY).deposit{ value: nativeAmountToAttach }(
37
38
  receiver,
38
39
  input.tokenMintScy,
39
- _selfBalance(input.tokenMintScy),
40
+ tokenMintScyBal,
40
41
  minScyOut
41
42
  );
42
43
  }
@@ -32,4 +32,6 @@ interface IBenQiComptroller {
32
32
  ) external;
33
33
 
34
34
  function qiAddress() external view returns (address);
35
+
36
+ function rewardAccrued(uint8 rewardType, address user) external view returns (uint256);
35
37
  }