@pendle/core-v2 0.9.3-beta → 0.10.1-beta

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} +154 -909
  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 +349 -57
  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 +447 -49
  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/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol +1 -1
  178. package/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol +7 -7
  179. package/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol +7 -6
  180. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +4 -5
  181. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol +6 -3
  182. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol +6 -3
  183. package/contracts/core/LiquidityMining/PendleGauge.sol +3 -2
  184. package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +22 -28
  185. package/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +71 -13
  186. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +7 -4
  187. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +6 -2
  188. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +4 -3
  189. package/contracts/core/Market/PendleMarket.sol +91 -55
  190. package/contracts/core/Market/PendleMarketFactory.sol +18 -33
  191. package/contracts/core/PendleRouter.sol +60 -52
  192. package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +12 -12
  193. package/contracts/core/YieldContracts/PendleYieldToken.sol +1 -1
  194. package/contracts/core/actions/ActionAddRemoveLiq.sol +366 -0
  195. package/contracts/core/actions/ActionCallback.sol +6 -6
  196. package/contracts/core/actions/ActionMintRedeem.sol +124 -0
  197. package/contracts/core/actions/ActionMisc.sol +24 -0
  198. package/contracts/core/actions/ActionSwapPT.sol +199 -0
  199. package/contracts/core/actions/{base/ActionSCYAndYTBase.sol → ActionSwapYT.sol} +109 -74
  200. package/contracts/core/actions/base/{ActionSCYAndPYBase.sol → ActionBaseMintRedeem.sol} +9 -8
  201. package/contracts/interfaces/IBenQiComptroller.sol +2 -0
  202. package/contracts/interfaces/IPActionAddRemoveLiq.sol +188 -0
  203. package/contracts/interfaces/IPActionMintRedeem.sol +115 -0
  204. package/contracts/interfaces/IPActionMisc.sol +9 -0
  205. package/contracts/interfaces/IPActionSwapPT.sol +69 -0
  206. package/contracts/interfaces/{IPActionYT.sol → IPActionSwapYT.sol} +12 -10
  207. package/contracts/interfaces/IPAllAction.sol +12 -3
  208. package/contracts/interfaces/IPGauge.sol +6 -0
  209. package/contracts/interfaces/IPGaugeController.sol +0 -2
  210. package/contracts/interfaces/IPMarket.sol +28 -10
  211. package/contracts/interfaces/IPMarketFactory.sol +1 -7
  212. package/contracts/interfaces/IPVeToken.sol +1 -1
  213. package/contracts/interfaces/IPVotingController.sol +0 -2
  214. package/contracts/interfaces/IRewardManager.sol +1 -1
  215. package/contracts/libraries/OracleLib.sol +214 -0
  216. package/contracts/libraries/RewardManagerAbstract.sol +1 -1
  217. package/contracts/libraries/math/MarketApproxLib.sol +227 -14
  218. package/contracts/libraries/math/MarketMathCore.sol +0 -33
  219. package/contracts/offchain-helpers/MarketMathStatic.sol +565 -0
  220. package/contracts/offchain-helpers/RouterStatic.sol +196 -262
  221. package/contracts/periphery/BoringOwnableUpgradeable.sol +62 -0
  222. package/deployments/43113-benqi.json +2 -2
  223. package/deployments/43113-core.json +7 -8
  224. package/deployments/43113-markets/benqi-market-6440d6.json +8 -0
  225. package/deployments/43113-markets/benqi-market-Dc7592.json +8 -0
  226. package/deployments/80001-core.json +6 -7
  227. package/deployments/80001-markets/benqi-market-1542e0.json +8 -0
  228. package/deployments/80001-markets/benqi-market-2b6D02.json +8 -0
  229. package/package.json +11 -11
  230. package/typechain-types/ActionAddRemoveLiq.ts +1037 -0
  231. package/typechain-types/ActionBaseMintRedeem.ts +87 -0
  232. package/typechain-types/ActionCore.ts +116 -104
  233. package/typechain-types/ActionMintRedeem.ts +665 -0
  234. package/typechain-types/ActionMisc.ts +105 -0
  235. package/typechain-types/ActionSwapPT.ts +515 -0
  236. package/typechain-types/ActionSwapYT.ts +515 -0
  237. package/typechain-types/ActionYT.ts +5 -4
  238. package/typechain-types/BoringOwnable.ts +194 -0
  239. package/typechain-types/BoringOwnableData.ts +100 -0
  240. package/typechain-types/BoringOwnableUpgradeable.ts +194 -0
  241. package/typechain-types/BoringOwnableUpgradeableData.ts +100 -0
  242. package/typechain-types/CelerReceiverUpg.ts +124 -19
  243. package/typechain-types/CelerSenderUpg.ts +116 -11
  244. package/typechain-types/IBenQiComptroller.ts +39 -0
  245. package/typechain-types/IPActionAddRemoveLiq.ts +1018 -0
  246. package/typechain-types/IPActionCore.ts +116 -104
  247. package/typechain-types/IPActionMintRedeem.ts +646 -0
  248. package/typechain-types/IPActionMisc.ts +105 -0
  249. package/typechain-types/IPActionSwapPT.ts +496 -0
  250. package/typechain-types/IPActionSwapYT.ts +496 -0
  251. package/typechain-types/IPActionYT.ts +5 -4
  252. package/typechain-types/IPAllAction.ts +499 -250
  253. package/typechain-types/IPGauge.ts +87 -0
  254. package/typechain-types/IPMarket.ts +133 -50
  255. package/typechain-types/IPMarketFactory.ts +7 -17
  256. package/typechain-types/IPVeToken.ts +8 -8
  257. package/typechain-types/IPVotingController.ts +0 -20
  258. package/typechain-types/IPYieldToken.ts +3 -3
  259. package/typechain-types/IRewardManager.ts +3 -3
  260. package/typechain-types/MarketMathStatic.ts +198 -0
  261. package/typechain-types/OracleLib.ts +124 -0
  262. package/typechain-types/PendleGaugeControllerBaseUpg.ts +118 -15
  263. package/typechain-types/PendleGaugeControllerMainchainUpg.ts +136 -9
  264. package/typechain-types/PendleGaugeControllerSidechainUpg.ts +138 -11
  265. package/typechain-types/PendleMarket.ts +178 -59
  266. package/typechain-types/PendleMarketFactory.ts +135 -61
  267. package/typechain-types/PendleRouter.ts +201 -31
  268. package/typechain-types/PendleVotingControllerUpg.ts +325 -149
  269. package/typechain-types/PendleYieldContractFactory.ts +144 -21
  270. package/typechain-types/RouterStatic.ts +404 -114
  271. package/typechain-types/VotingControllerStorageUpg.ts +182 -113
  272. package/typechain-types/VotingEscrowPendleMainchain.ts +170 -63
  273. package/typechain-types/VotingEscrowPendleSidechain.ts +163 -17
  274. package/typechain-types/VotingEscrowTokenBase.ts +27 -8
  275. package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +1083 -0
  276. package/typechain-types/factories/ActionBaseMintRedeem__factory.ts +43 -0
  277. package/typechain-types/factories/ActionCallback__factory.ts +1 -1
  278. package/typechain-types/factories/ActionCore__factory.ts +39 -23
  279. package/typechain-types/factories/ActionMintRedeem__factory.ts +680 -0
  280. package/typechain-types/factories/ActionMisc__factory.ts +85 -0
  281. package/typechain-types/factories/ActionSwapPT__factory.ts +514 -0
  282. package/typechain-types/factories/ActionSwapYT__factory.ts +514 -0
  283. package/typechain-types/factories/ActionYT__factory.ts +2 -2
  284. package/typechain-types/factories/BoringOwnableData__factory.ts +90 -0
  285. package/typechain-types/factories/BoringOwnableUpgradeableData__factory.ts +96 -0
  286. package/typechain-types/factories/BoringOwnableUpgradeable__factory.ts +143 -0
  287. package/typechain-types/factories/BoringOwnable__factory.ts +141 -0
  288. package/typechain-types/factories/CelerReceiverUpg__factory.ts +67 -5
  289. package/typechain-types/factories/CelerSenderUpg__factory.ts +63 -1
  290. package/typechain-types/factories/IBenQiComptroller__factory.ts +24 -0
  291. package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +1020 -0
  292. package/typechain-types/factories/IPActionCore__factory.ts +38 -22
  293. package/typechain-types/factories/IPActionMintRedeem__factory.ts +613 -0
  294. package/typechain-types/factories/IPActionMisc__factory.ts +47 -0
  295. package/typechain-types/factories/IPActionSwapPT__factory.ts +450 -0
  296. package/typechain-types/factories/IPActionSwapYT__factory.ts +450 -0
  297. package/typechain-types/factories/IPActionYT__factory.ts +1 -1
  298. package/typechain-types/factories/IPAllAction__factory.ts +349 -57
  299. package/typechain-types/factories/IPGauge__factory.ts +36 -0
  300. package/typechain-types/factories/IPMarketFactory__factory.ts +0 -11
  301. package/typechain-types/factories/IPMarket__factory.ts +72 -29
  302. package/typechain-types/factories/IPVeToken__factory.ts +1 -1
  303. package/typechain-types/factories/IPVotingController__factory.ts +0 -37
  304. package/typechain-types/factories/IPYieldToken__factory.ts +1 -1
  305. package/typechain-types/factories/IRewardManager__factory.ts +1 -1
  306. package/typechain-types/factories/MarketMathStatic__factory.ts +146 -0
  307. package/typechain-types/factories/OracleLib__factory.ts +124 -0
  308. package/typechain-types/factories/PendleAaveV3SCY__factory.ts +1 -1
  309. package/typechain-types/factories/PendleERC4626SCY__factory.ts +1 -1
  310. package/typechain-types/factories/PendleEulerSCY__factory.ts +10 -1
  311. package/typechain-types/factories/PendleGaugeControllerBaseUpg__factory.ts +65 -3
  312. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +73 -13
  313. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +79 -23
  314. package/typechain-types/factories/PendleMarketFactory__factory.ts +84 -86
  315. package/typechain-types/factories/PendleMarket__factory.ts +131 -37
  316. package/typechain-types/factories/PendlePrincipalToken__factory.ts +1 -1
  317. package/typechain-types/factories/PendleQiSAvaxSCY__factory.ts +1 -1
  318. package/typechain-types/factories/PendleQiTokenSCY__factory.ts +1 -1
  319. package/typechain-types/factories/PendleRouter__factory.ts +141 -22
  320. package/typechain-types/factories/PendleSAvaxSCY__factory.ts +1 -1
  321. package/typechain-types/factories/PendleSJoeSCY__factory.ts +1 -1
  322. package/typechain-types/factories/PendleStargateSCY__factory.ts +1 -1
  323. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +203 -129
  324. package/typechain-types/factories/PendleWstEthSCY__factory.ts +1 -1
  325. package/typechain-types/factories/PendleYearnVaultSCY__factory.ts +1 -1
  326. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +97 -72
  327. package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
  328. package/typechain-types/factories/RouterStatic__factory.ts +253 -49
  329. package/typechain-types/factories/VotingControllerStorageUpg__factory.ts +126 -72
  330. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +93 -41
  331. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +90 -17
  332. package/typechain-types/factories/VotingEscrowTokenBase__factory.ts +14 -1
  333. package/typechain-types/hardhat.d.ts +162 -0
  334. package/typechain-types/index.ts +36 -0
  335. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +0 -4
  336. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.dbg.json +0 -4
  337. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.json +0 -1785
  338. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +0 -4
  339. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +0 -447
  340. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +0 -4
  341. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +0 -4
  342. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +0 -4
  343. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.json +0 -24
  344. package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +0 -4
  345. package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +0 -4
  346. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +0 -4
  347. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.json +0 -874
  348. package/contracts/core/actions/ActionCore.sol +0 -377
  349. package/contracts/core/actions/ActionYT.sol +0 -93
  350. package/contracts/core/actions/base/ActionSCYAndPTBase.sol +0 -303
  351. package/contracts/interfaces/IPActionCore.sol +0 -305
  352. package/contracts/interfaces/IPRouterStatic.sol +0 -152
  353. package/deployments/43113-markets/benqi-market-599408.json +0 -7
  354. package/deployments/43113-markets/benqi-market-93bbf0.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
@@ -1,26 +1,49 @@
1
1
  // SPDX-License-Identifier: GPL-3.0-or-later
2
2
  pragma solidity 0.8.15;
3
3
 
4
- import "../interfaces/ISuperComposableYield.sol";
5
- import "../interfaces/IRewardManager.sol";
6
- import "../interfaces/IPRouterStatic.sol";
7
- import "../interfaces/IPMarket.sol";
8
4
  import "../interfaces/IPYieldContractFactory.sol";
9
5
  import "../interfaces/IPMarketFactory.sol";
10
- import "../libraries/math/MarketApproxLib.sol";
6
+ import "./MarketMathStatic.sol";
11
7
  import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
12
8
  import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
13
9
  import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
14
10
 
15
11
  /// EXCLUDED FROM ALL AUDITS, TO BE CALLED ONLY BY PENDLE's SDK
16
- contract RouterStatic is IPRouterStatic {
17
- using MarketMathCore for MarketState;
18
- using MarketApproxLib for MarketState;
12
+ contract RouterStatic is OwnableUpgradeable, UUPSUpgradeable {
19
13
  using Math for uint256;
20
- using Math for int256;
21
- using LogExpMath for int256;
22
- using PYIndexLib for PYIndex;
23
- using PYIndexLib for IPYieldToken;
14
+
15
+ struct TokenAmount {
16
+ address token;
17
+ uint256 amount;
18
+ }
19
+
20
+ struct AssetAmount {
21
+ ISuperComposableYield.AssetType assetType;
22
+ address assetAddress;
23
+ uint256 amount;
24
+ }
25
+
26
+ struct RewardIndex {
27
+ address rewardToken;
28
+ uint256 index;
29
+ }
30
+
31
+ struct UserPYInfo {
32
+ address yt;
33
+ address pt;
34
+ uint256 ytBalance;
35
+ uint256 ptBalance;
36
+ TokenAmount unclaimedInterest;
37
+ TokenAmount[] unclaimedRewards;
38
+ }
39
+
40
+ struct UserMarketInfo {
41
+ address market;
42
+ uint256 lpBalance;
43
+ TokenAmount ptBalance;
44
+ TokenAmount scyBalance;
45
+ AssetAmount assetBalance;
46
+ }
24
47
 
25
48
  IPYieldContractFactory internal immutable yieldContractFactory;
26
49
  IPMarketFactory internal immutable marketFactory;
@@ -33,11 +56,19 @@ contract RouterStatic is IPRouterStatic {
33
56
  eps: 1e15
34
57
  });
35
58
 
36
- constructor(IPYieldContractFactory _yieldContractFactory, IPMarketFactory _marketFactory) {
59
+ constructor(IPYieldContractFactory _yieldContractFactory, IPMarketFactory _marketFactory)
60
+ initializer
61
+ {
37
62
  yieldContractFactory = _yieldContractFactory;
38
63
  marketFactory = _marketFactory;
39
64
  }
40
65
 
66
+ function initialize() external initializer {
67
+ __Ownable_init();
68
+ }
69
+
70
+ function _authorizeUpgrade(address newImplementation) internal override onlyOwner {}
71
+
41
72
  // ============= SYSTEM INFO =============
42
73
 
43
74
  function getPYInfo(address py)
@@ -77,6 +108,16 @@ contract RouterStatic is IPRouterStatic {
77
108
  else if (marketFactory.isValidMarket(token)) isMarket = true;
78
109
  }
79
110
 
111
+ function getPY(address py) public view returns (address pt, address yt) {
112
+ if (yieldContractFactory.isYT(py)) {
113
+ pt = IPYieldToken(py).PT();
114
+ yt = py;
115
+ } else {
116
+ pt = py;
117
+ yt = IPPrincipalToken(py).YT();
118
+ }
119
+ }
120
+
80
121
  function getMarketInfo(address market)
81
122
  external
82
123
  returns (
@@ -92,9 +133,9 @@ contract RouterStatic is IPRouterStatic {
92
133
 
93
134
  pt = address(PT);
94
135
  scy = address(SCY);
95
- state = _market.readState(true);
136
+ state = _market.readState();
96
137
  impliedYield = getPtImpliedYield(market);
97
- exchangeRate = getExchangeRate(market);
138
+ exchangeRate = MarketMathStatic.getExchangeRate(market);
98
139
  }
99
140
 
100
141
  // ============= USER INFO =============
@@ -137,6 +178,72 @@ contract RouterStatic is IPRouterStatic {
137
178
  }
138
179
  }
139
180
 
181
+ function getUserPYInfo(address py, address user)
182
+ public
183
+ view
184
+ returns (UserPYInfo memory userPYInfo)
185
+ {
186
+ (userPYInfo.pt, userPYInfo.yt) = getPY(py);
187
+ IPYieldToken YT = IPYieldToken(userPYInfo.yt);
188
+ userPYInfo.ytBalance = YT.balanceOf(user);
189
+ userPYInfo.ptBalance = IPPrincipalToken(userPYInfo.pt).balanceOf(user);
190
+ userPYInfo.unclaimedInterest.token = YT.SCY();
191
+ (, userPYInfo.unclaimedInterest.amount) = YT.userInterest(user);
192
+ address[] memory rewardTokens = YT.getRewardTokens();
193
+ TokenAmount[] memory unclaimedRewards = new TokenAmount[](rewardTokens.length);
194
+ uint256 length = 0;
195
+ for (uint256 i = 0; i < rewardTokens.length; ++i) {
196
+ address rewardToken = rewardTokens[i];
197
+ (, uint256 amount) = YT.userReward(rewardToken, user);
198
+ if (amount > 0) {
199
+ unclaimedRewards[length].token = rewardToken;
200
+ unclaimedRewards[length].amount = amount;
201
+ ++length;
202
+ }
203
+ }
204
+ userPYInfo.unclaimedRewards = new TokenAmount[](length);
205
+ for (uint256 i = 0; i < length; ++i) {
206
+ userPYInfo.unclaimedRewards[i] = unclaimedRewards[i];
207
+ }
208
+ }
209
+
210
+ function getUserMarketInfo(address market, address user)
211
+ public
212
+ view
213
+ returns (UserMarketInfo memory userMarketInfo)
214
+ {
215
+ IPMarket _market = IPMarket(market);
216
+ uint256 userLp = _market.balanceOf(user);
217
+
218
+ userMarketInfo.market = market;
219
+ userMarketInfo.lpBalance = userLp;
220
+
221
+ (ISuperComposableYield SCY, IPPrincipalToken PT, ) = _market.readTokens();
222
+ (userMarketInfo.assetBalance.assetType, userMarketInfo.assetBalance.assetAddress, ) = SCY
223
+ .assetInfo();
224
+
225
+ MarketState memory state = _market.readState();
226
+ uint256 totalLp = uint256(state.totalLp);
227
+
228
+ if (totalLp == 0) {
229
+ return userMarketInfo;
230
+ }
231
+
232
+ uint256 userPt = (userLp * uint256(state.totalPt)) / totalLp;
233
+ uint256 userScy = (userLp * uint256(state.totalScy)) / totalLp;
234
+
235
+ userMarketInfo.ptBalance = TokenAmount(address(PT), userPt);
236
+ userMarketInfo.scyBalance = TokenAmount(address(SCY), userScy);
237
+ userMarketInfo.assetBalance.amount = (userScy * SCY.exchangeRate()) / Math.ONE;
238
+ }
239
+
240
+ function hasPYPosition(UserPYInfo calldata userPYInfo) public pure returns (bool hasPosition) {
241
+ hasPosition = (userPYInfo.ytBalance > 0 ||
242
+ userPYInfo.ptBalance > 0 ||
243
+ userPYInfo.unclaimedInterest.amount > 0 ||
244
+ userPYInfo.unclaimedRewards.length > 0);
245
+ }
246
+
140
247
  // ============= MARKET ACTIONS =============
141
248
 
142
249
  function addLiquidityDualScyAndPtStatic(
@@ -151,42 +258,29 @@ contract RouterStatic is IPRouterStatic {
151
258
  uint256 ptUsed
152
259
  )
153
260
  {
154
- MarketState memory state = IPMarket(market).readState(false);
155
- (, netLpOut, scyUsed, ptUsed) = state.addLiquidity(
156
- pyIndex(market),
157
- scyDesired,
158
- ptDesired,
159
- block.timestamp
160
- );
261
+ return MarketMathStatic.addLiquidityDualScyAndPtStatic(market, scyDesired, ptDesired);
161
262
  }
162
263
 
163
- function addLiquidityDualIbTokenAndPtStatic(
264
+ function addLiquidityDualTokenAndPtStatic(
164
265
  address market,
165
- uint256 ibTokenDesired,
266
+ address tokenIn,
267
+ uint256 tokenDesired,
166
268
  uint256 ptDesired
167
269
  )
168
270
  external
169
271
  returns (
170
272
  uint256 netLpOut,
171
- uint256 ibTokenUsed,
273
+ uint256 tokenUsed,
172
274
  uint256 ptUsed
173
275
  )
174
276
  {
175
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
176
-
177
- address ibToken = SCY.yieldToken();
178
- uint256 scyDesired = SCY.previewDeposit(ibToken, ibTokenDesired);
179
- uint256 scyUsed;
180
-
181
- MarketState memory state = IPMarket(market).readState(false);
182
- (, netLpOut, scyUsed, ptUsed) = state.addLiquidity(
183
- pyIndex(market),
184
- scyDesired,
185
- ptDesired,
186
- block.timestamp
187
- );
188
-
189
- ibTokenUsed = (ibTokenDesired * scyUsed).rawDivUp(scyDesired);
277
+ return
278
+ MarketMathStatic.addLiquidityDualTokenAndPtStatic(
279
+ market,
280
+ tokenIn,
281
+ tokenDesired,
282
+ ptDesired
283
+ );
190
284
  }
191
285
 
192
286
  function addLiquiditySinglePtStatic(address market, uint256 netPtIn)
@@ -197,18 +291,18 @@ contract RouterStatic is IPRouterStatic {
197
291
  uint256 priceImpact
198
292
  )
199
293
  {
200
- require(false, "NOT IMPLEMENTED");
294
+ return MarketMathStatic.addLiquiditySinglePtStatic(market, netPtIn, approxParams);
201
295
  }
202
296
 
203
297
  function addLiquiditySingleScyStatic(address market, uint256 netScyIn)
204
- external
298
+ public
205
299
  returns (
206
300
  uint256 netLpOut,
207
301
  uint256 netScyFee,
208
302
  uint256 priceImpact
209
303
  )
210
304
  {
211
- require(false, "NOT IMPLEMENTED");
305
+ return MarketMathStatic.addLiquiditySingleScyStatic(market, netScyIn, approxParams);
212
306
  }
213
307
 
214
308
  function addLiquiditySingleBaseTokenStatic(
@@ -223,7 +317,13 @@ contract RouterStatic is IPRouterStatic {
223
317
  uint256 priceImpact
224
318
  )
225
319
  {
226
- require(false, "NOT IMPLEMENTED");
320
+ return
321
+ MarketMathStatic.addLiquiditySingleBaseTokenStatic(
322
+ market,
323
+ baseToken,
324
+ netBaseTokenIn,
325
+ approxParams
326
+ );
227
327
  }
228
328
 
229
329
  function removeLiquidityDualScyAndPtStatic(address market, uint256 lpToRemove)
@@ -231,24 +331,15 @@ contract RouterStatic is IPRouterStatic {
231
331
  view
232
332
  returns (uint256 netScyOut, uint256 netPtOut)
233
333
  {
234
- MarketState memory state = IPMarket(market).readState(false);
235
- (netScyOut, netPtOut) = state.removeLiquidity(lpToRemove);
334
+ return MarketMathStatic.removeLiquidityDualScyAndPtStatic(market, lpToRemove);
236
335
  }
237
336
 
238
- function removeLiquidityDualIbTokenAndPtStatic(address market, uint256 lpToRemove)
239
- external
240
- view
241
- returns (uint256 netIbTokenOut, uint256 netPtOut)
242
- {
243
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
244
-
245
- address ibToken = SCY.yieldToken();
246
-
247
- uint256 netScyOut;
248
- MarketState memory state = IPMarket(market).readState(false);
249
- (netScyOut, netPtOut) = state.removeLiquidity(lpToRemove);
250
-
251
- netIbTokenOut = SCY.previewRedeem(ibToken, netScyOut);
337
+ function removeLiquidityDualTokenAndPtStatic(
338
+ address market,
339
+ uint256 lpToRemove,
340
+ address tokenOut
341
+ ) external view returns (uint256 netTokenOut, uint256 netPtOut) {
342
+ return MarketMathStatic.removeLiquidityDualTokenAndPtStatic(market, lpToRemove, tokenOut);
252
343
  }
253
344
 
254
345
  function removeLiquiditySinglePtStatic(address market, uint256 lpToRemove)
@@ -259,18 +350,18 @@ contract RouterStatic is IPRouterStatic {
259
350
  uint256 priceImpact
260
351
  )
261
352
  {
262
- require(false, "NOT IMPLEMENTED");
353
+ return MarketMathStatic.removeLiquiditySinglePtStatic(market, lpToRemove, approxParams);
263
354
  }
264
355
 
265
356
  function removeLiquiditySingleScyStatic(address market, uint256 lpToRemove)
266
- external
357
+ public
267
358
  returns (
268
359
  uint256 netScyOut,
269
360
  uint256 netScyFee,
270
361
  uint256 priceImpact
271
362
  )
272
363
  {
273
- require(false, "NOT IMPLEMENTED");
364
+ return MarketMathStatic.removeLiquiditySingleScyStatic(market, lpToRemove);
274
365
  }
275
366
 
276
367
  function removeLiquiditySingleBaseTokenStatic(
@@ -285,7 +376,8 @@ contract RouterStatic is IPRouterStatic {
285
376
  uint256 priceImpact
286
377
  )
287
378
  {
288
- require(false, "NOT IMPLEMENTED");
379
+ return
380
+ MarketMathStatic.removeLiquiditySingleBaseTokenStatic(market, lpToRemove, baseToken);
289
381
  }
290
382
 
291
383
  function swapExactPtForScyStatic(address market, uint256 exactPtIn)
@@ -296,13 +388,7 @@ contract RouterStatic is IPRouterStatic {
296
388
  uint256 priceImpact
297
389
  )
298
390
  {
299
- MarketState memory state = IPMarket(market).readState(false);
300
- (netScyOut, netScyFee) = state.swapExactPtForScy(
301
- pyIndex(market),
302
- exactPtIn,
303
- block.timestamp
304
- );
305
- priceImpact = calcPriceImpact(market, exactPtIn.neg());
391
+ return MarketMathStatic.swapExactPtForScyStatic(market, exactPtIn);
306
392
  }
307
393
 
308
394
  function swapScyForExactPtStatic(address market, uint256 exactPtOut)
@@ -313,13 +399,7 @@ contract RouterStatic is IPRouterStatic {
313
399
  uint256 priceImpact
314
400
  )
315
401
  {
316
- MarketState memory state = IPMarket(market).readState(false);
317
- (netScyIn, netScyFee) = state.swapScyForExactPt(
318
- pyIndex(market),
319
- exactPtOut,
320
- block.timestamp
321
- );
322
- priceImpact = calcPriceImpact(market, exactPtOut.Int());
402
+ return MarketMathStatic.swapScyForExactPtStatic(market, exactPtOut);
323
403
  }
324
404
 
325
405
  function swapExactScyForPtStatic(address market, uint256 exactScyIn)
@@ -330,14 +410,7 @@ contract RouterStatic is IPRouterStatic {
330
410
  uint256 priceImpact
331
411
  )
332
412
  {
333
- MarketState memory state = IPMarket(market).readState(false);
334
- (netPtOut, , netScyFee) = state.approxSwapExactScyForPt(
335
- pyIndex(market),
336
- exactScyIn,
337
- block.timestamp,
338
- approxParams
339
- );
340
- priceImpact = calcPriceImpact(market, netPtOut.Int());
413
+ return MarketMathStatic.swapExactScyForPtStatic(market, exactScyIn, approxParams);
341
414
  }
342
415
 
343
416
  function swapPtForExactScyStatic(address market, uint256 exactScyOut)
@@ -348,15 +421,7 @@ contract RouterStatic is IPRouterStatic {
348
421
  uint256 priceImpact
349
422
  )
350
423
  {
351
- MarketState memory state = IPMarket(market).readState(false);
352
-
353
- (netPtIn, , netScyFee) = state.approxSwapPtForExactScy(
354
- pyIndex(market),
355
- exactScyOut,
356
- block.timestamp,
357
- approxParams
358
- );
359
- priceImpact = calcPriceImpact(market, netPtIn.neg());
424
+ return MarketMathStatic.swapPtForExactScyStatic(market, exactScyOut, approxParams);
360
425
  }
361
426
 
362
427
  function swapExactBaseTokenForPtStatic(
@@ -371,9 +436,13 @@ contract RouterStatic is IPRouterStatic {
371
436
  uint256 priceImpact
372
437
  )
373
438
  {
374
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
375
-
376
- return swapExactScyForPtStatic(market, SCY.previewDeposit(baseToken, amountBaseToken));
439
+ return
440
+ MarketMathStatic.swapExactBaseTokenForPtStatic(
441
+ market,
442
+ baseToken,
443
+ amountBaseToken,
444
+ approxParams
445
+ );
377
446
  }
378
447
 
379
448
  function swapExactPtForBaseTokenStatic(
@@ -388,11 +457,7 @@ contract RouterStatic is IPRouterStatic {
388
457
  uint256 priceImpact
389
458
  )
390
459
  {
391
- uint256 netScyOut;
392
- (netScyOut, netScyFee, priceImpact) = swapExactPtForScyStatic(market, exactYtIn);
393
-
394
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
395
- netBaseTokenOut = SCY.previewRedeem(baseToken, netScyOut);
460
+ return MarketMathStatic.swapExactPtForBaseTokenStatic(market, exactYtIn, baseToken);
396
461
  }
397
462
 
398
463
  function swapScyForExactYtStatic(address market, uint256 exactYtOut)
@@ -403,21 +468,7 @@ contract RouterStatic is IPRouterStatic {
403
468
  uint256 priceImpact
404
469
  )
405
470
  {
406
- MarketState memory state = IPMarket(market).readState(false);
407
-
408
- PYIndex index = pyIndex(market);
409
-
410
- uint256 scyReceived;
411
- (scyReceived, netScyFee) = state.swapExactPtForScy(
412
- pyIndex(market),
413
- exactYtOut,
414
- block.timestamp
415
- );
416
-
417
- uint256 totalScyNeed = index.assetToScyUp(exactYtOut);
418
- netScyIn = totalScyNeed.subMax0(scyReceived);
419
-
420
- priceImpact = calcPriceImpact(market, exactYtOut.neg());
471
+ return MarketMathStatic.swapScyForExactYtStatic(market, exactYtOut);
421
472
  }
422
473
 
423
474
  function swapExactScyForYtStatic(address market, uint256 exactScyIn)
@@ -428,17 +479,7 @@ contract RouterStatic is IPRouterStatic {
428
479
  uint256 priceImpact
429
480
  )
430
481
  {
431
- MarketState memory state = IPMarket(market).readState(false);
432
- PYIndex index = pyIndex(market);
433
-
434
- (netYtOut, , netScyFee) = state.approxSwapExactScyForYt(
435
- index,
436
- exactScyIn,
437
- block.timestamp,
438
- approxParams
439
- );
440
-
441
- priceImpact = calcPriceImpact(market, netYtOut.neg());
482
+ return MarketMathStatic.swapExactScyForYtStatic(market, exactScyIn, approxParams);
442
483
  }
443
484
 
444
485
  function swapExactYtForScyStatic(address market, uint256 exactYtIn)
@@ -449,18 +490,7 @@ contract RouterStatic is IPRouterStatic {
449
490
  uint256 priceImpact
450
491
  )
451
492
  {
452
- MarketState memory state = IPMarket(market).readState(false);
453
-
454
- PYIndex index = pyIndex(market);
455
-
456
- uint256 scyOwed;
457
- (scyOwed, netScyFee) = state.swapScyForExactPt(index, exactYtIn, block.timestamp);
458
-
459
- uint256 amountPYToRepayScyOwed = index.scyToAssetUp(scyOwed);
460
- uint256 amountPYToRedeemScyOut = exactYtIn - amountPYToRepayScyOwed;
461
-
462
- netScyOut = index.assetToScy(amountPYToRedeemScyOut);
463
- priceImpact = calcPriceImpact(market, exactYtIn.Int());
493
+ return MarketMathStatic.swapExactYtForScyStatic(market, exactYtIn);
464
494
  }
465
495
 
466
496
  function swapYtForExactScyStatic(address market, uint256 exactScyOut)
@@ -471,17 +501,7 @@ contract RouterStatic is IPRouterStatic {
471
501
  uint256 priceImpact
472
502
  )
473
503
  {
474
- MarketState memory state = IPMarket(market).readState(false);
475
-
476
- PYIndex index = pyIndex(market);
477
-
478
- (netYtIn, , netScyFee) = state.approxSwapYtForExactScy(
479
- index,
480
- exactScyOut,
481
- block.timestamp,
482
- approxParams
483
- );
484
- priceImpact = calcPriceImpact(market, netYtIn.Int());
504
+ return MarketMathStatic.swapYtForExactScyStatic(market, exactScyOut, approxParams);
485
505
  }
486
506
 
487
507
  function swapExactYtForBaseTokenStatic(
@@ -496,11 +516,7 @@ contract RouterStatic is IPRouterStatic {
496
516
  uint256 priceImpact
497
517
  )
498
518
  {
499
- uint256 netScyOut;
500
- (netScyOut, netScyFee, priceImpact) = swapExactYtForScyStatic(market, exactYtIn);
501
-
502
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
503
- netBaseTokenOut = SCY.previewRedeem(baseToken, netScyOut);
519
+ return MarketMathStatic.swapExactYtForBaseTokenStatic(market, exactYtIn, baseToken);
504
520
  }
505
521
 
506
522
  function swapExactBaseTokenForYtStatic(
@@ -515,9 +531,13 @@ contract RouterStatic is IPRouterStatic {
515
531
  uint256 priceImpact
516
532
  )
517
533
  {
518
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
519
-
520
- return swapExactScyForYtStatic(market, SCY.previewDeposit(baseToken, amountBaseToken));
534
+ return
535
+ MarketMathStatic.swapExactBaseTokenForYtStatic(
536
+ market,
537
+ baseToken,
538
+ amountBaseToken,
539
+ approxParams
540
+ );
521
541
  }
522
542
 
523
543
  // ============= OTHER HELPERS =============
@@ -557,27 +577,12 @@ contract RouterStatic is IPRouterStatic {
557
577
  return SCY.previewRedeem(baseToken, redeemPYToScyStatic(YT, amountPYToRedeem));
558
578
  }
559
579
 
560
- function pyIndex(address market) public returns (PYIndex index) {
561
- (, , IPYieldToken YT) = IPMarket(market).readTokens();
562
-
563
- return YT.newIndex();
564
- }
565
-
566
- function getPY(address py) public view returns (address pt, address yt) {
567
- if (yieldContractFactory.isYT(py)) {
568
- pt = IPYieldToken(py).PT();
569
- yt = py;
570
- } else {
571
- pt = py;
572
- yt = IPPrincipalToken(py).YT();
573
- }
580
+ function getPtImpliedYield(address market) public view returns (int256) {
581
+ return MarketMathStatic.getPtImpliedYield(market);
574
582
  }
575
583
 
576
- function getPtImpliedYield(address market) public returns (int256) {
577
- MarketState memory state = IPMarket(market).readState(false);
578
-
579
- int256 lnImpliedRate = (state.lastLnImpliedRate).Int();
580
- return lnImpliedRate.exp();
584
+ function pyIndex(address market) public returns (PYIndex index) {
585
+ return MarketMathStatic.pyIndex(market);
581
586
  }
582
587
 
583
588
  function getExchangeRate(address market) public returns (uint256) {
@@ -588,100 +593,29 @@ contract RouterStatic is IPRouterStatic {
588
593
  public
589
594
  returns (uint256)
590
595
  {
591
- int256 netPtToAccount = netPtOut;
592
- MarketState memory state = IPMarket(market).readState(false);
593
- MarketPreCompute memory comp = state.getMarketPreCompute(pyIndex(market), block.timestamp);
594
-
595
- int256 preFeeExchangeRate = MarketMathCore._getExchangeRate(
596
- state.totalPt,
597
- comp.totalAsset,
598
- comp.rateScalar,
599
- comp.rateAnchor,
600
- netPtToAccount
601
- );
602
-
603
- if (netPtToAccount > 0) {
604
- int256 postFeeExchangeRate = preFeeExchangeRate.divDown(comp.feeRate);
605
- require(postFeeExchangeRate >= Math.IONE, "exchange rate below 1");
606
- return postFeeExchangeRate.Uint();
607
- } else {
608
- return preFeeExchangeRate.mulDown(comp.feeRate).Uint();
609
- }
596
+ return MarketMathStatic.getTradeExchangeRateIncludeFee(market, netPtOut);
610
597
  }
611
598
 
612
599
  function calcPriceImpact(address market, int256 netPtOut)
613
600
  public
614
601
  returns (uint256 priceImpact)
615
602
  {
616
- uint256 preTradeRate = getExchangeRate(market);
617
- uint256 tradedRate = getTradeExchangeRateIncludeFee(market, netPtOut);
618
-
619
- priceImpact = (tradedRate.Int() - preTradeRate.Int()).abs().divDown(preTradeRate);
603
+ return MarketMathStatic.calcPriceImpact(market, netPtOut);
620
604
  }
621
605
 
622
- function getUserPYInfo(address py, address user)
606
+ // either but not both pyToken or market must be != 0
607
+ function getTokensInOut(address pyToken, address market)
623
608
  public
624
609
  view
625
- returns (UserPYInfo memory userPYInfo)
610
+ returns (address[] memory tokensIn, address[] memory tokensOut)
626
611
  {
627
- (userPYInfo.pt, userPYInfo.yt) = getPY(py);
628
- IPYieldToken YT = IPYieldToken(userPYInfo.yt);
629
- userPYInfo.ytBalance = YT.balanceOf(user);
630
- userPYInfo.ptBalance = IPPrincipalToken(userPYInfo.pt).balanceOf(user);
631
- userPYInfo.unclaimedInterest.token = YT.SCY();
632
- (, userPYInfo.unclaimedInterest.amount) = YT.userInterest(user);
633
- address[] memory rewardTokens = YT.getRewardTokens();
634
- TokenAmount[] memory unclaimedRewards = new TokenAmount[](rewardTokens.length);
635
- uint256 length = 0;
636
- for (uint256 i = 0; i < rewardTokens.length; ++i) {
637
- address rewardToken = rewardTokens[i];
638
- (, uint256 amount) = YT.userReward(rewardToken, user);
639
- if (amount > 0) {
640
- unclaimedRewards[length].token = rewardToken;
641
- unclaimedRewards[length].amount = amount;
642
- ++length;
643
- }
644
- }
645
- userPYInfo.unclaimedRewards = new TokenAmount[](length);
646
- for (uint256 i = 0; i < length; ++i) {
647
- userPYInfo.unclaimedRewards[i] = unclaimedRewards[i];
648
- }
649
- }
650
-
651
- function getUserMarketInfo(address market, address user)
652
- public
653
- view
654
- returns (UserMarketInfo memory userMarketInfo)
655
- {
656
- IPMarket _market = IPMarket(market);
657
- uint256 userLp = _market.balanceOf(user);
658
-
659
- userMarketInfo.market = market;
660
- userMarketInfo.lpBalance = userLp;
661
-
662
- (ISuperComposableYield SCY, IPPrincipalToken PT, ) = _market.readTokens();
663
- (userMarketInfo.assetBalance.assetType, userMarketInfo.assetBalance.assetAddress, ) = SCY
664
- .assetInfo();
665
-
666
- MarketState memory state = _market.readState(false);
667
- uint256 totalLp = uint256(state.totalLp);
668
-
669
- if (totalLp == 0) {
670
- return userMarketInfo;
612
+ if (pyToken != address(0)) {
613
+ // SCY interface is shared between pt & yt
614
+ ISuperComposableYield SCY = ISuperComposableYield(IPPrincipalToken(pyToken).SCY());
615
+ return (SCY.getTokensIn(), SCY.getTokensOut());
616
+ } else {
617
+ (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
618
+ return (SCY.getTokensIn(), SCY.getTokensOut());
671
619
  }
672
-
673
- uint256 userPt = (userLp * uint256(state.totalPt)) / totalLp;
674
- uint256 userScy = (userLp * uint256(state.totalScy)) / totalLp;
675
-
676
- userMarketInfo.ptBalance = TokenAmount(address(PT), userPt);
677
- userMarketInfo.scyBalance = TokenAmount(address(SCY), userScy);
678
- userMarketInfo.assetBalance.amount = (userScy * SCY.exchangeRate()) / Math.ONE;
679
- }
680
-
681
- function hasPYPosition(UserPYInfo calldata userPYInfo) public pure returns (bool hasPosition) {
682
- hasPosition = (userPYInfo.ytBalance > 0 ||
683
- userPYInfo.ptBalance > 0 ||
684
- userPYInfo.unclaimedInterest.amount > 0 ||
685
- userPYInfo.unclaimedRewards.length > 0);
686
620
  }
687
621
  }