@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
@@ -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,13 +258,7 @@ 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
264
  function addLiquidityDualTokenAndPtStatic(
@@ -173,20 +274,13 @@ contract RouterStatic is IPRouterStatic {
173
274
  uint256 ptUsed
174
275
  )
175
276
  {
176
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
177
-
178
- uint256 scyDesired = SCY.previewDeposit(tokenIn, tokenDesired);
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
- tokenUsed = (tokenDesired * 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,8 +331,7 @@ 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
337
  function removeLiquidityDualTokenAndPtStatic(
@@ -240,13 +339,7 @@ contract RouterStatic is IPRouterStatic {
240
339
  uint256 lpToRemove,
241
340
  address tokenOut
242
341
  ) external view returns (uint256 netTokenOut, uint256 netPtOut) {
243
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
244
-
245
- uint256 netScyOut;
246
- MarketState memory state = IPMarket(market).readState(false);
247
- (netScyOut, netPtOut) = state.removeLiquidity(lpToRemove);
248
-
249
- netTokenOut = SCY.previewRedeem(tokenOut, netScyOut);
342
+ return MarketMathStatic.removeLiquidityDualTokenAndPtStatic(market, lpToRemove, tokenOut);
250
343
  }
251
344
 
252
345
  function removeLiquiditySinglePtStatic(address market, uint256 lpToRemove)
@@ -257,18 +350,18 @@ contract RouterStatic is IPRouterStatic {
257
350
  uint256 priceImpact
258
351
  )
259
352
  {
260
- require(false, "NOT IMPLEMENTED");
353
+ return MarketMathStatic.removeLiquiditySinglePtStatic(market, lpToRemove, approxParams);
261
354
  }
262
355
 
263
356
  function removeLiquiditySingleScyStatic(address market, uint256 lpToRemove)
264
- external
357
+ public
265
358
  returns (
266
359
  uint256 netScyOut,
267
360
  uint256 netScyFee,
268
361
  uint256 priceImpact
269
362
  )
270
363
  {
271
- require(false, "NOT IMPLEMENTED");
364
+ return MarketMathStatic.removeLiquiditySingleScyStatic(market, lpToRemove);
272
365
  }
273
366
 
274
367
  function removeLiquiditySingleBaseTokenStatic(
@@ -283,7 +376,8 @@ contract RouterStatic is IPRouterStatic {
283
376
  uint256 priceImpact
284
377
  )
285
378
  {
286
- require(false, "NOT IMPLEMENTED");
379
+ return
380
+ MarketMathStatic.removeLiquiditySingleBaseTokenStatic(market, lpToRemove, baseToken);
287
381
  }
288
382
 
289
383
  function swapExactPtForScyStatic(address market, uint256 exactPtIn)
@@ -294,13 +388,7 @@ contract RouterStatic is IPRouterStatic {
294
388
  uint256 priceImpact
295
389
  )
296
390
  {
297
- MarketState memory state = IPMarket(market).readState(false);
298
- (netScyOut, netScyFee) = state.swapExactPtForScy(
299
- pyIndex(market),
300
- exactPtIn,
301
- block.timestamp
302
- );
303
- priceImpact = calcPriceImpact(market, exactPtIn.neg());
391
+ return MarketMathStatic.swapExactPtForScyStatic(market, exactPtIn);
304
392
  }
305
393
 
306
394
  function swapScyForExactPtStatic(address market, uint256 exactPtOut)
@@ -311,13 +399,7 @@ contract RouterStatic is IPRouterStatic {
311
399
  uint256 priceImpact
312
400
  )
313
401
  {
314
- MarketState memory state = IPMarket(market).readState(false);
315
- (netScyIn, netScyFee) = state.swapScyForExactPt(
316
- pyIndex(market),
317
- exactPtOut,
318
- block.timestamp
319
- );
320
- priceImpact = calcPriceImpact(market, exactPtOut.Int());
402
+ return MarketMathStatic.swapScyForExactPtStatic(market, exactPtOut);
321
403
  }
322
404
 
323
405
  function swapExactScyForPtStatic(address market, uint256 exactScyIn)
@@ -328,14 +410,7 @@ contract RouterStatic is IPRouterStatic {
328
410
  uint256 priceImpact
329
411
  )
330
412
  {
331
- MarketState memory state = IPMarket(market).readState(false);
332
- (netPtOut, , netScyFee) = state.approxSwapExactScyForPt(
333
- pyIndex(market),
334
- exactScyIn,
335
- block.timestamp,
336
- approxParams
337
- );
338
- priceImpact = calcPriceImpact(market, netPtOut.Int());
413
+ return MarketMathStatic.swapExactScyForPtStatic(market, exactScyIn, approxParams);
339
414
  }
340
415
 
341
416
  function swapPtForExactScyStatic(address market, uint256 exactScyOut)
@@ -346,15 +421,7 @@ contract RouterStatic is IPRouterStatic {
346
421
  uint256 priceImpact
347
422
  )
348
423
  {
349
- MarketState memory state = IPMarket(market).readState(false);
350
-
351
- (netPtIn, , netScyFee) = state.approxSwapPtForExactScy(
352
- pyIndex(market),
353
- exactScyOut,
354
- block.timestamp,
355
- approxParams
356
- );
357
- priceImpact = calcPriceImpact(market, netPtIn.neg());
424
+ return MarketMathStatic.swapPtForExactScyStatic(market, exactScyOut, approxParams);
358
425
  }
359
426
 
360
427
  function swapExactBaseTokenForPtStatic(
@@ -369,9 +436,13 @@ contract RouterStatic is IPRouterStatic {
369
436
  uint256 priceImpact
370
437
  )
371
438
  {
372
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
373
-
374
- return swapExactScyForPtStatic(market, SCY.previewDeposit(baseToken, amountBaseToken));
439
+ return
440
+ MarketMathStatic.swapExactBaseTokenForPtStatic(
441
+ market,
442
+ baseToken,
443
+ amountBaseToken,
444
+ approxParams
445
+ );
375
446
  }
376
447
 
377
448
  function swapExactPtForBaseTokenStatic(
@@ -386,11 +457,7 @@ contract RouterStatic is IPRouterStatic {
386
457
  uint256 priceImpact
387
458
  )
388
459
  {
389
- uint256 netScyOut;
390
- (netScyOut, netScyFee, priceImpact) = swapExactPtForScyStatic(market, exactYtIn);
391
-
392
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
393
- netBaseTokenOut = SCY.previewRedeem(baseToken, netScyOut);
460
+ return MarketMathStatic.swapExactPtForBaseTokenStatic(market, exactYtIn, baseToken);
394
461
  }
395
462
 
396
463
  function swapScyForExactYtStatic(address market, uint256 exactYtOut)
@@ -401,21 +468,7 @@ contract RouterStatic is IPRouterStatic {
401
468
  uint256 priceImpact
402
469
  )
403
470
  {
404
- MarketState memory state = IPMarket(market).readState(false);
405
-
406
- PYIndex index = pyIndex(market);
407
-
408
- uint256 scyReceived;
409
- (scyReceived, netScyFee) = state.swapExactPtForScy(
410
- pyIndex(market),
411
- exactYtOut,
412
- block.timestamp
413
- );
414
-
415
- uint256 totalScyNeed = index.assetToScyUp(exactYtOut);
416
- netScyIn = totalScyNeed.subMax0(scyReceived);
417
-
418
- priceImpact = calcPriceImpact(market, exactYtOut.neg());
471
+ return MarketMathStatic.swapScyForExactYtStatic(market, exactYtOut);
419
472
  }
420
473
 
421
474
  function swapExactScyForYtStatic(address market, uint256 exactScyIn)
@@ -426,17 +479,7 @@ contract RouterStatic is IPRouterStatic {
426
479
  uint256 priceImpact
427
480
  )
428
481
  {
429
- MarketState memory state = IPMarket(market).readState(false);
430
- PYIndex index = pyIndex(market);
431
-
432
- (netYtOut, , netScyFee) = state.approxSwapExactScyForYt(
433
- index,
434
- exactScyIn,
435
- block.timestamp,
436
- approxParams
437
- );
438
-
439
- priceImpact = calcPriceImpact(market, netYtOut.neg());
482
+ return MarketMathStatic.swapExactScyForYtStatic(market, exactScyIn, approxParams);
440
483
  }
441
484
 
442
485
  function swapExactYtForScyStatic(address market, uint256 exactYtIn)
@@ -447,18 +490,7 @@ contract RouterStatic is IPRouterStatic {
447
490
  uint256 priceImpact
448
491
  )
449
492
  {
450
- MarketState memory state = IPMarket(market).readState(false);
451
-
452
- PYIndex index = pyIndex(market);
453
-
454
- uint256 scyOwed;
455
- (scyOwed, netScyFee) = state.swapScyForExactPt(index, exactYtIn, block.timestamp);
456
-
457
- uint256 amountPYToRepayScyOwed = index.scyToAssetUp(scyOwed);
458
- uint256 amountPYToRedeemScyOut = exactYtIn - amountPYToRepayScyOwed;
459
-
460
- netScyOut = index.assetToScy(amountPYToRedeemScyOut);
461
- priceImpact = calcPriceImpact(market, exactYtIn.Int());
493
+ return MarketMathStatic.swapExactYtForScyStatic(market, exactYtIn);
462
494
  }
463
495
 
464
496
  function swapYtForExactScyStatic(address market, uint256 exactScyOut)
@@ -469,17 +501,7 @@ contract RouterStatic is IPRouterStatic {
469
501
  uint256 priceImpact
470
502
  )
471
503
  {
472
- MarketState memory state = IPMarket(market).readState(false);
473
-
474
- PYIndex index = pyIndex(market);
475
-
476
- (netYtIn, , netScyFee) = state.approxSwapYtForExactScy(
477
- index,
478
- exactScyOut,
479
- block.timestamp,
480
- approxParams
481
- );
482
- priceImpact = calcPriceImpact(market, netYtIn.Int());
504
+ return MarketMathStatic.swapYtForExactScyStatic(market, exactScyOut, approxParams);
483
505
  }
484
506
 
485
507
  function swapExactYtForBaseTokenStatic(
@@ -494,11 +516,7 @@ contract RouterStatic is IPRouterStatic {
494
516
  uint256 priceImpact
495
517
  )
496
518
  {
497
- uint256 netScyOut;
498
- (netScyOut, netScyFee, priceImpact) = swapExactYtForScyStatic(market, exactYtIn);
499
-
500
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
501
- netBaseTokenOut = SCY.previewRedeem(baseToken, netScyOut);
519
+ return MarketMathStatic.swapExactYtForBaseTokenStatic(market, exactYtIn, baseToken);
502
520
  }
503
521
 
504
522
  function swapExactBaseTokenForYtStatic(
@@ -513,9 +531,13 @@ contract RouterStatic is IPRouterStatic {
513
531
  uint256 priceImpact
514
532
  )
515
533
  {
516
- (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
517
-
518
- return swapExactScyForYtStatic(market, SCY.previewDeposit(baseToken, amountBaseToken));
534
+ return
535
+ MarketMathStatic.swapExactBaseTokenForYtStatic(
536
+ market,
537
+ baseToken,
538
+ amountBaseToken,
539
+ approxParams
540
+ );
519
541
  }
520
542
 
521
543
  // ============= OTHER HELPERS =============
@@ -555,27 +577,12 @@ contract RouterStatic is IPRouterStatic {
555
577
  return SCY.previewRedeem(baseToken, redeemPYToScyStatic(YT, amountPYToRedeem));
556
578
  }
557
579
 
558
- function pyIndex(address market) public returns (PYIndex index) {
559
- (, , IPYieldToken YT) = IPMarket(market).readTokens();
560
-
561
- return YT.newIndex();
562
- }
563
-
564
- function getPY(address py) public view returns (address pt, address yt) {
565
- if (yieldContractFactory.isYT(py)) {
566
- pt = IPYieldToken(py).PT();
567
- yt = py;
568
- } else {
569
- pt = py;
570
- yt = IPPrincipalToken(py).YT();
571
- }
580
+ function getPtImpliedYield(address market) public view returns (int256) {
581
+ return MarketMathStatic.getPtImpliedYield(market);
572
582
  }
573
583
 
574
- function getPtImpliedYield(address market) public returns (int256) {
575
- MarketState memory state = IPMarket(market).readState(false);
576
-
577
- int256 lnImpliedRate = (state.lastLnImpliedRate).Int();
578
- return lnImpliedRate.exp();
584
+ function pyIndex(address market) public returns (PYIndex index) {
585
+ return MarketMathStatic.pyIndex(market);
579
586
  }
580
587
 
581
588
  function getExchangeRate(address market) public returns (uint256) {
@@ -586,100 +593,29 @@ contract RouterStatic is IPRouterStatic {
586
593
  public
587
594
  returns (uint256)
588
595
  {
589
- int256 netPtToAccount = netPtOut;
590
- MarketState memory state = IPMarket(market).readState(false);
591
- MarketPreCompute memory comp = state.getMarketPreCompute(pyIndex(market), block.timestamp);
592
-
593
- int256 preFeeExchangeRate = MarketMathCore._getExchangeRate(
594
- state.totalPt,
595
- comp.totalAsset,
596
- comp.rateScalar,
597
- comp.rateAnchor,
598
- netPtToAccount
599
- );
600
-
601
- if (netPtToAccount > 0) {
602
- int256 postFeeExchangeRate = preFeeExchangeRate.divDown(comp.feeRate);
603
- require(postFeeExchangeRate >= Math.IONE, "exchange rate below 1");
604
- return postFeeExchangeRate.Uint();
605
- } else {
606
- return preFeeExchangeRate.mulDown(comp.feeRate).Uint();
607
- }
596
+ return MarketMathStatic.getTradeExchangeRateIncludeFee(market, netPtOut);
608
597
  }
609
598
 
610
599
  function calcPriceImpact(address market, int256 netPtOut)
611
600
  public
612
601
  returns (uint256 priceImpact)
613
602
  {
614
- uint256 preTradeRate = getExchangeRate(market);
615
- uint256 tradedRate = getTradeExchangeRateIncludeFee(market, netPtOut);
616
-
617
- priceImpact = (tradedRate.Int() - preTradeRate.Int()).abs().divDown(preTradeRate);
618
- }
619
-
620
- function getUserPYInfo(address py, address user)
621
- public
622
- view
623
- returns (UserPYInfo memory userPYInfo)
624
- {
625
- (userPYInfo.pt, userPYInfo.yt) = getPY(py);
626
- IPYieldToken YT = IPYieldToken(userPYInfo.yt);
627
- userPYInfo.ytBalance = YT.balanceOf(user);
628
- userPYInfo.ptBalance = IPPrincipalToken(userPYInfo.pt).balanceOf(user);
629
- userPYInfo.unclaimedInterest.token = YT.SCY();
630
- (, userPYInfo.unclaimedInterest.amount) = YT.userInterest(user);
631
- address[] memory rewardTokens = YT.getRewardTokens();
632
- TokenAmount[] memory unclaimedRewards = new TokenAmount[](rewardTokens.length);
633
- uint256 length = 0;
634
- for (uint256 i = 0; i < rewardTokens.length; ++i) {
635
- address rewardToken = rewardTokens[i];
636
- (, uint256 amount) = YT.userReward(rewardToken, user);
637
- if (amount > 0) {
638
- unclaimedRewards[length].token = rewardToken;
639
- unclaimedRewards[length].amount = amount;
640
- ++length;
641
- }
642
- }
643
- userPYInfo.unclaimedRewards = new TokenAmount[](length);
644
- for (uint256 i = 0; i < length; ++i) {
645
- userPYInfo.unclaimedRewards[i] = unclaimedRewards[i];
646
- }
603
+ return MarketMathStatic.calcPriceImpact(market, netPtOut);
647
604
  }
648
605
 
649
- function getUserMarketInfo(address market, address user)
606
+ // either but not both pyToken or market must be != 0
607
+ function getTokensInOut(address pyToken, address market)
650
608
  public
651
609
  view
652
- returns (UserMarketInfo memory userMarketInfo)
610
+ returns (address[] memory tokensIn, address[] memory tokensOut)
653
611
  {
654
- IPMarket _market = IPMarket(market);
655
- uint256 userLp = _market.balanceOf(user);
656
-
657
- userMarketInfo.market = market;
658
- userMarketInfo.lpBalance = userLp;
659
-
660
- (ISuperComposableYield SCY, IPPrincipalToken PT, ) = _market.readTokens();
661
- (userMarketInfo.assetBalance.assetType, userMarketInfo.assetBalance.assetAddress, ) = SCY
662
- .assetInfo();
663
-
664
- MarketState memory state = _market.readState(false);
665
- uint256 totalLp = uint256(state.totalLp);
666
-
667
- if (totalLp == 0) {
668
- 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());
669
619
  }
670
-
671
- uint256 userPt = (userLp * uint256(state.totalPt)) / totalLp;
672
- uint256 userScy = (userLp * uint256(state.totalScy)) / totalLp;
673
-
674
- userMarketInfo.ptBalance = TokenAmount(address(PT), userPt);
675
- userMarketInfo.scyBalance = TokenAmount(address(SCY), userScy);
676
- userMarketInfo.assetBalance.amount = (userScy * SCY.exchangeRate()) / Math.ONE;
677
- }
678
-
679
- function hasPYPosition(UserPYInfo calldata userPYInfo) public pure returns (bool hasPosition) {
680
- hasPosition = (userPYInfo.ytBalance > 0 ||
681
- userPYInfo.ptBalance > 0 ||
682
- userPYInfo.unclaimedInterest.amount > 0 ||
683
- userPYInfo.unclaimedRewards.length > 0);
684
620
  }
685
621
  }