@pendle/core-v2 0.7.1-beta-2 → 0.8.0-beta-2

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 (292) 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 +33 -17
  3. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +1 -1
  4. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.json +2 -2
  5. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  6. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.json +2 -2
  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 +33 -17
  9. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +1 -1
  10. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.json +33 -17
  11. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +1 -1
  12. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.json +33 -17
  13. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +1 -1
  14. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.json +33 -17
  15. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.dbg.json +1 -1
  16. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.json +31 -15
  17. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +1 -1
  18. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.json +31 -15
  19. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.dbg.json +1 -1
  20. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +1 -1
  21. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  22. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchain.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  23. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchain.sol/PendleGaugeControllerMainchainUpg.json +2 -2
  24. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechain.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  25. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechain.sol/PendleGaugeControllerSidechainUpg.json +2 -2
  26. package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  27. package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.json +0 -26
  28. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  29. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +2 -2
  30. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  31. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  32. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +2 -2
  33. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  34. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +2 -2
  35. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  36. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  37. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +125 -111
  38. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  39. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +2 -2
  40. package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +1 -1
  41. package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.json +2 -2
  42. package/build/artifacts/contracts/core/PendleERC20Permit.sol/PendleERC20Permit.dbg.json +1 -1
  43. package/build/artifacts/contracts/core/PendleERC20Permit.sol/PendleERC20Permit.json +2 -2
  44. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.json +2 -2
  46. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  48. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +77 -2
  49. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  50. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +51 -20
  51. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  52. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +72 -93
  53. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.dbg.json +1 -1
  54. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.json +2 -2
  55. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.dbg.json +1 -1
  56. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.json +3 -3
  57. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +1 -1
  58. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +2 -2
  59. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +1 -1
  60. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +1 -1
  61. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +1 -1
  62. package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
  63. package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
  64. package/build/artifacts/contracts/interfaces/IAavePool.sol/IAavePool.dbg.json +1 -1
  65. package/build/artifacts/contracts/interfaces/IAaveRewardsController.sol/IAaveRewardsController.dbg.json +1 -1
  66. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.dbg.json +1 -1
  67. package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +1 -1
  68. package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +1 -1
  69. package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +1 -1
  70. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
  71. package/build/artifacts/contracts/interfaces/IJoePair.sol/IJoePair.dbg.json +1 -1
  72. package/build/artifacts/contracts/interfaces/IJoeRouter01.sol/IJoeRouter01.dbg.json +1 -1
  73. package/build/artifacts/contracts/interfaces/IJoeRouter02.sol/IJoeRouter02.dbg.json +1 -1
  74. package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +1 -1
  75. package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.json +1 -1
  76. package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +1 -1
  77. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  78. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +1 -1
  79. package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +1 -1
  80. package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +1 -1
  81. package/build/artifacts/contracts/interfaces/IPGovernanceManager.sol/IPGovernanceManager.dbg.json +1 -1
  82. package/build/artifacts/contracts/interfaces/IPInterestManagerYT.sol/IPInterestManagerYT.dbg.json +1 -1
  83. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  84. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.json +48 -83
  85. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
  86. package/build/artifacts/contracts/interfaces/IPMarketSwapCallback.sol/IPMarketSwapCallback.dbg.json +1 -1
  87. package/build/artifacts/contracts/interfaces/IPPermissionsV2Upg.sol/IPermissionsV2Upg.dbg.json +1 -1
  88. package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
  89. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
  90. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
  91. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  92. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +1 -1
  93. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
  94. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.json +30 -4
  95. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
  96. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.json +8 -92
  97. package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +1 -1
  98. package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
  99. package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
  100. package/build/artifacts/contracts/interfaces/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
  101. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +1 -1
  102. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +1 -1
  103. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.json +31 -2
  104. package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
  105. package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.dbg.json +1 -1
  106. package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
  108. package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +1 -1
  109. package/build/artifacts/contracts/libraries/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  110. package/build/artifacts/contracts/libraries/SCY/SCYIndex.sol/SCYIndexLib.dbg.json +1 -1
  111. package/build/artifacts/contracts/libraries/SCY/SCYIndex.sol/SCYIndexLib.json +2 -2
  112. package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +1 -1
  113. package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.json +2 -2
  114. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  115. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.json +2 -2
  116. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  117. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.json +2 -2
  118. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
  119. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.json +2 -2
  120. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
  121. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.json +2 -2
  122. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
  123. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.json +2 -2
  124. package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.dbg.json +1 -1
  125. package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.json +2 -2
  126. package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  127. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
  128. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.json +2 -2
  129. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.dbg.json +1 -1
  130. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.json +2 -2
  131. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  132. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.json +2 -2
  133. package/build/artifacts/contracts/libraries/math/Math.sol/Math.dbg.json +1 -1
  134. package/build/artifacts/contracts/libraries/math/Math.sol/Math.json +2 -2
  135. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.dbg.json +1 -1
  136. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.json +2 -2
  137. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +1 -1
  138. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.json +2 -2
  139. package/build/artifacts/contracts/libraries/traderjoe/JoeLibrary.sol/JoeLibrary.dbg.json +1 -1
  140. package/build/artifacts/contracts/libraries/traderjoe/JoeLibrary.sol/JoeLibrary.json +2 -2
  141. package/build/artifacts/contracts/libraries/traderjoe/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.dbg.json +1 -1
  142. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
  143. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +2 -2
  144. package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.dbg.json +1 -1
  145. package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.json +2 -2
  146. package/build/artifacts/contracts/periphery/PermissionsV2Upg.sol/PermissionsV2Upg.dbg.json +1 -1
  147. package/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol +16 -12
  148. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol +3 -3
  149. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +20 -0
  150. package/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol +20 -0
  151. package/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol +20 -0
  152. package/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol +36 -5
  153. package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +64 -42
  154. package/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol +0 -7
  155. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +1 -1
  156. package/contracts/core/LiquidityMining/PendleGauge.sol +24 -8
  157. package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +47 -96
  158. package/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +86 -73
  159. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +17 -16
  160. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +1 -1
  161. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +3 -4
  162. package/contracts/core/Market/PendleMarket.sol +34 -64
  163. package/contracts/core/PendleRouter.sol +1 -1
  164. package/contracts/core/YieldContracts/InterestManagerYT.sol +11 -8
  165. package/contracts/core/YieldContracts/PendlePrincipalToken.sol +3 -3
  166. package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +18 -12
  167. package/contracts/core/YieldContracts/PendleYieldToken.sol +191 -138
  168. package/contracts/core/actions/ActionCallback.sol +12 -13
  169. package/contracts/core/actions/ActionCore.sol +84 -22
  170. package/contracts/core/actions/ActionYT.sol +33 -15
  171. package/contracts/core/actions/base/ActionSCYAndPTBase.sol +6 -17
  172. package/contracts/core/actions/base/ActionSCYAndPYBase.sol +20 -50
  173. package/contracts/core/actions/base/ActionSCYAndYTBase.sol +6 -13
  174. package/contracts/interfaces/IPActionCore.sol +72 -1
  175. package/contracts/interfaces/IPActionYT.sol +15 -0
  176. package/contracts/interfaces/IPMarket.sol +7 -26
  177. package/contracts/interfaces/IPRouterStatic.sol +7 -2
  178. package/contracts/interfaces/IPVeToken.sol +0 -2
  179. package/contracts/interfaces/IPVotingEscrow.sol +1 -1
  180. package/contracts/interfaces/IPYieldContractFactory.sol +6 -2
  181. package/contracts/interfaces/IPYieldToken.sol +21 -11
  182. package/contracts/interfaces/ISuperComposableYield.sol +22 -28
  183. package/contracts/interfaces/IYearnVault.sol +13 -1
  184. package/contracts/libraries/RewardManager.sol +9 -6
  185. package/contracts/libraries/RewardManagerAbstract.sol +6 -8
  186. package/contracts/libraries/SCY/SCYIndex.sol +17 -0
  187. package/contracts/libraries/SCY/SCYUtils.sol +16 -0
  188. package/contracts/libraries/VeBalanceLib.sol +0 -1
  189. package/contracts/libraries/helpers/ArrayLib.sol +11 -0
  190. package/contracts/libraries/helpers/TokenHelper.sol +6 -5
  191. package/contracts/libraries/math/MarketApproxLib.sol +91 -36
  192. package/contracts/libraries/math/MarketMathCore.sol +21 -25
  193. package/contracts/libraries/math/Math.sol +0 -7
  194. package/contracts/offchain-helpers/RouterStatic.sol +139 -7
  195. package/deployments/43113-core.json +11 -11
  196. package/deployments/43113-markets/benqi-market-0x9f080Af83E84099ED92b1b9b4B4BbE4400f2A3CB.json +7 -0
  197. package/deployments/80001-core.json +10 -10
  198. package/deployments/80001-markets/benqi-market-0x78699fa58C484e9867B8047A12E959ccB8BaD90E.json +7 -0
  199. package/package.json +2 -2
  200. package/typechain-types/ActionCore.ts +8 -8
  201. package/typechain-types/CelerReceiver.ts +267 -0
  202. package/typechain-types/CelerSender.ts +164 -0
  203. package/typechain-types/IPActionCore.ts +8 -8
  204. package/typechain-types/IPAllAction.ts +8 -8
  205. package/typechain-types/IPMarket.ts +66 -109
  206. package/typechain-types/IPVotingEscrowController.ts +154 -0
  207. package/typechain-types/IPYieldContractFactory.ts +34 -0
  208. package/typechain-types/IPYieldToken.ts +12 -112
  209. package/typechain-types/ISuperComposableYield.ts +54 -10
  210. package/typechain-types/PendleAaveV3SCY.ts +54 -29
  211. package/typechain-types/PendleBtrflyScy.ts +56 -58
  212. package/typechain-types/PendleERC4626SCY.ts +54 -29
  213. package/typechain-types/PendleGauge.ts +0 -32
  214. package/typechain-types/PendleGaugeController.ts +282 -0
  215. package/typechain-types/PendleGaugeControllerMainchain.ts +346 -0
  216. package/typechain-types/PendleGaugeControllerSidechain.ts +460 -0
  217. package/typechain-types/PendleJoeLpSCY.ts +56 -58
  218. package/typechain-types/PendleMarket.ts +169 -140
  219. package/typechain-types/PendlePrincipalToken.ts +104 -0
  220. package/typechain-types/PendleQiTokenSCY.ts +54 -29
  221. package/typechain-types/PendleVotingController.ts +865 -0
  222. package/typechain-types/PendleWstEthSCY.ts +54 -29
  223. package/typechain-types/PendleYearnVaultSCY.ts +54 -29
  224. package/typechain-types/PendleYieldContractFactory.ts +66 -19
  225. package/typechain-types/PendleYieldToken.ts +122 -158
  226. package/typechain-types/SCYBase.ts +54 -29
  227. package/typechain-types/SCYBaseWithRewards.ts +54 -29
  228. package/typechain-types/VotingControllerStorage.ts +410 -0
  229. package/typechain-types/VotingEscrowController.ts +154 -0
  230. package/typechain-types/VotingEscrowToken.ts +335 -0
  231. package/typechain-types/factories/ActionCallback__factory.ts +1 -1
  232. package/typechain-types/factories/ActionCore__factory.ts +2 -2
  233. package/typechain-types/factories/ActionYT__factory.ts +1 -1
  234. package/typechain-types/factories/CelerReceiver__factory.ts +140 -0
  235. package/typechain-types/factories/CelerSender__factory.ts +67 -0
  236. package/typechain-types/factories/ERC20__factory.ts +1 -1
  237. package/typechain-types/factories/IPActionCore__factory.ts +1 -1
  238. package/typechain-types/factories/IPAllAction__factory.ts +1 -1
  239. package/typechain-types/factories/IPMarket__factory.ts +48 -83
  240. package/typechain-types/factories/IPVotingEscrowController__factory.ts +80 -0
  241. package/typechain-types/factories/IPYieldContractFactory__factory.ts +30 -4
  242. package/typechain-types/factories/IPYieldToken__factory.ts +6 -90
  243. package/typechain-types/factories/ISuperComposableYield__factory.ts +31 -2
  244. package/typechain-types/factories/PendleAaveV3SCY__factory.ts +32 -16
  245. package/typechain-types/factories/PendleBtrflyScy__factory.ts +52 -28
  246. package/typechain-types/factories/PendleERC20Permit__factory.ts +1 -1
  247. package/typechain-types/factories/PendleERC20__factory.ts +1 -1
  248. package/typechain-types/factories/PendleERC4626SCY__factory.ts +32 -16
  249. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +1 -1
  250. package/typechain-types/factories/PendleGaugeControllerMainchain__factory.ts +269 -0
  251. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +1 -1
  252. package/typechain-types/factories/PendleGaugeControllerSidechain__factory.ts +328 -0
  253. package/typechain-types/factories/PendleGaugeController__factory.ts +149 -0
  254. package/typechain-types/factories/PendleGauge__factory.ts +0 -26
  255. package/typechain-types/factories/PendleGovernanceManager__factory.ts +1 -1
  256. package/typechain-types/factories/PendleJoeLpSCY__factory.ts +34 -28
  257. package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
  258. package/typechain-types/factories/PendleMarket__factory.ts +124 -110
  259. package/typechain-types/factories/PendlePrincipalToken__factory.ts +76 -1
  260. package/typechain-types/factories/PendleQiTokenHelper__factory.ts +1 -1
  261. package/typechain-types/factories/PendleQiTokenSCY__factory.ts +32 -16
  262. package/typechain-types/factories/PendleRouter__factory.ts +1 -1
  263. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +1 -1
  264. package/typechain-types/factories/PendleVotingController__factory.ts +584 -0
  265. package/typechain-types/factories/PendleWstEthSCY__factory.ts +32 -16
  266. package/typechain-types/factories/PendleYearnVaultSCY__factory.ts +32 -16
  267. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +54 -19
  268. package/typechain-types/factories/PendleYieldToken__factory.ts +70 -91
  269. package/typechain-types/factories/RouterStatic__factory.ts +1 -1
  270. package/typechain-types/factories/SCYBaseWithRewards__factory.ts +31 -15
  271. package/typechain-types/factories/SCYBase__factory.ts +31 -15
  272. package/typechain-types/factories/VotingControllerStorage__factory.ts +298 -0
  273. package/typechain-types/factories/VotingEscrowController__factory.ts +80 -0
  274. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +1 -1
  275. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +1 -1
  276. package/typechain-types/factories/VotingEscrowToken__factory.ts +225 -0
  277. package/typechain-types/hardhat.d.ts +0 -27
  278. package/typechain-types/index.ts +0 -6
  279. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol/PendleBtrflyScy.dbg.json +0 -4
  280. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol/PendleBtrflyScy.json +0 -635
  281. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol/PendleJoeLpSCY.dbg.json +0 -4
  282. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol/PendleJoeLpSCY.json +0 -653
  283. package/build/artifacts/contracts/interfaces/IPMarketAddRemoveCallback.sol/IPMarketAddRemoveCallback.dbg.json +0 -4
  284. package/build/artifacts/contracts/interfaces/IPMarketAddRemoveCallback.sol/IPMarketAddRemoveCallback.json +0 -67
  285. package/build/artifacts/contracts/libraries/solmate/Bytes32AddressLib.sol/Bytes32AddressLib.dbg.json +0 -4
  286. package/build/artifacts/contracts/libraries/solmate/Bytes32AddressLib.sol/Bytes32AddressLib.json +0 -10
  287. package/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol +0 -123
  288. package/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol +0 -245
  289. package/contracts/interfaces/IPMarketAddRemoveCallback.sol +0 -18
  290. package/contracts/libraries/solmate/Bytes32AddressLib.sol +0 -14
  291. package/deployments/43113-markets/benqi-market.json +0 -7
  292. package/deployments/80001-markets/benqi-market.json +0 -7
@@ -39,6 +39,7 @@ library MarketApproxLib {
39
39
  struct VarsSwapPtForExactScy {
40
40
  uint256 netPtInGuess;
41
41
  int256 assetToAccount;
42
+ int256 assetToReserve;
42
43
  uint256 netAssetOut;
43
44
  uint256 minAssetOut;
44
45
  uint256 largestGoodSlope;
@@ -58,7 +59,8 @@ library MarketApproxLib {
58
59
  pure
59
60
  returns (
60
61
  uint256, /*netPtIn*/
61
- uint256 /*netScyOut*/
62
+ uint256, /*netScyOut*/
63
+ uint256 /*netScyToReserve*/
62
64
  )
63
65
  {
64
66
  /*
@@ -81,9 +83,8 @@ library MarketApproxLib {
81
83
  VarsSwapPtForExactScy memory vars;
82
84
  MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
83
85
 
84
- if (approx.guessMax == type(uint256).max) {
85
- approx.guessMax = calcMaxPtIn(market.totalPt, comp.totalAsset);
86
- }
86
+ if (approx.guessMax == type(uint256).max) approx.guessMax = calcMaxPtIn(comp.totalAsset);
87
+
87
88
  vars.minAssetOut = index.scyToAsset(minScyOut);
88
89
 
89
90
  for (uint256 iter = 0; iter < approx.maxIteration; ) {
@@ -100,7 +101,10 @@ library MarketApproxLib {
100
101
  continue;
101
102
  }
102
103
 
103
- (vars.assetToAccount, ) = market.calcTrade(comp, vars.netPtInGuess.neg());
104
+ (vars.assetToAccount, vars.assetToReserve) = market.calcTrade(
105
+ comp,
106
+ vars.netPtInGuess.neg()
107
+ );
104
108
  vars.netAssetOut = vars.assetToAccount.Uint();
105
109
 
106
110
  if (vars.netAssetOut >= vars.minAssetOut) {
@@ -111,7 +115,11 @@ library MarketApproxLib {
111
115
  approx.eps
112
116
  );
113
117
  if (isAnswerAccepted)
114
- return (vars.netPtInGuess, index.assetToScy(vars.netAssetOut));
118
+ return (
119
+ vars.netPtInGuess,
120
+ index.assetToScy(vars.netAssetOut),
121
+ index.assetToScy(vars.assetToReserve.Uint())
122
+ );
115
123
  } else {
116
124
  approx.guessMin = vars.netPtInGuess;
117
125
  }
@@ -126,6 +134,7 @@ library MarketApproxLib {
126
134
  struct VarsSwapExactScyForYt {
127
135
  uint256 ptInGuess;
128
136
  int256 assetToAccount;
137
+ int256 assetToReserve;
129
138
  uint256 netAssetOut;
130
139
  uint256 amountAssetNeedMore;
131
140
  uint256 largestGoodSlope;
@@ -145,7 +154,8 @@ library MarketApproxLib {
145
154
  pure
146
155
  returns (
147
156
  uint256, /*netYtOut*/
148
- uint256 /*netScyIn*/
157
+ uint256, /*netScyIn*/
158
+ uint256
149
159
  )
150
160
  {
151
161
  /*
@@ -174,9 +184,7 @@ library MarketApproxLib {
174
184
  VarsSwapExactScyForYt memory vars;
175
185
  MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
176
186
 
177
- if (approx.guessMax == type(uint256).max) {
178
- approx.guessMax = calcMaxPtIn(market.totalPt, comp.totalAsset);
179
- }
187
+ if (approx.guessMax == type(uint256).max) approx.guessMax = calcMaxPtIn(comp.totalAsset);
180
188
 
181
189
  vars.maxAssetIn = index.scyToAsset(maxScyIn);
182
190
 
@@ -195,7 +203,10 @@ library MarketApproxLib {
195
203
  continue;
196
204
  }
197
205
 
198
- (vars.assetToAccount, ) = market.calcTrade(comp, vars.ptInGuess.neg());
206
+ (vars.assetToAccount, vars.assetToReserve) = market.calcTrade(
207
+ comp,
208
+ vars.ptInGuess.neg()
209
+ );
199
210
  vars.netAssetOut = vars.assetToAccount.Uint();
200
211
  vars.amountAssetNeedMore = vars.ptInGuess - vars.netAssetOut;
201
212
 
@@ -207,7 +218,11 @@ library MarketApproxLib {
207
218
  approx.eps
208
219
  );
209
220
  if (isAnswerAccepted)
210
- return (vars.ptInGuess, index.assetToScy(vars.amountAssetNeedMore));
221
+ return (
222
+ vars.ptInGuess,
223
+ index.assetToScy(vars.amountAssetNeedMore),
224
+ index.assetToScy(vars.assetToReserve.Uint())
225
+ );
211
226
  } else {
212
227
  approx.guessMax = vars.ptInGuess - 1;
213
228
  }
@@ -219,6 +234,14 @@ library MarketApproxLib {
219
234
  revert("approx fail");
220
235
  }
221
236
 
237
+ struct VarsSwapExactScyForPt {
238
+ uint256 maxAssetIn;
239
+ uint256 ptOutGuess;
240
+ int256 assetToAccount;
241
+ int256 assetToReserve;
242
+ uint256 netAssetIn;
243
+ }
244
+
222
245
  function approxSwapExactScyForPt(
223
246
  MarketState memory market,
224
247
  SCYIndex index,
@@ -230,7 +253,8 @@ library MarketApproxLib {
230
253
  pure
231
254
  returns (
232
255
  uint256, /*netPtOut*/
233
- uint256 /*netScyIn*/
256
+ uint256, /*netScyIn*/
257
+ uint256
234
258
  )
235
259
  {
236
260
  /*
@@ -251,24 +275,37 @@ library MarketApproxLib {
251
275
 
252
276
  require(isValidApproxParams(approx), "invalid approx approx");
253
277
 
278
+ VarsSwapExactScyForPt memory vars;
254
279
  MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
255
280
  if (approx.guessMax == type(uint256).max) {
256
281
  approx.guessMax = calcMaxPtOut(market.totalPt, comp);
257
282
  }
258
283
 
259
- uint256 maxAssetIn = index.scyToAsset(maxScyIn);
284
+ vars.maxAssetIn = index.scyToAsset(maxScyIn);
260
285
 
261
286
  for (uint256 iter = 0; iter < approx.maxIteration; ) {
262
- uint256 ptOutGuess = getCurrentGuess(iter, approx);
263
- (int256 assetToAccount, ) = market.calcTrade(comp, ptOutGuess.Int());
264
- uint256 netAssetIn = assetToAccount.abs();
265
-
266
- if (netAssetIn <= maxAssetIn) {
267
- approx.guessMin = ptOutGuess;
268
- bool isAnswerAccepted = Math.isASmallerApproxB(netAssetIn, maxAssetIn, approx.eps);
269
- if (isAnswerAccepted) return (ptOutGuess, index.assetToScy(netAssetIn));
287
+ vars.ptOutGuess = getCurrentGuess(iter, approx);
288
+ (vars.assetToAccount, vars.assetToReserve) = market.calcTrade(
289
+ comp,
290
+ vars.ptOutGuess.Int()
291
+ );
292
+ vars.netAssetIn = vars.assetToAccount.abs();
293
+
294
+ if (vars.netAssetIn <= vars.maxAssetIn) {
295
+ approx.guessMin = vars.ptOutGuess;
296
+ bool isAnswerAccepted = Math.isASmallerApproxB(
297
+ vars.netAssetIn,
298
+ vars.maxAssetIn,
299
+ approx.eps
300
+ );
301
+ if (isAnswerAccepted)
302
+ return (
303
+ vars.ptOutGuess,
304
+ index.assetToScy(vars.netAssetIn),
305
+ index.assetToScy(vars.assetToReserve.Uint())
306
+ );
270
307
  } else {
271
- approx.guessMax = ptOutGuess;
308
+ approx.guessMax = vars.ptOutGuess;
272
309
  }
273
310
 
274
311
  unchecked {
@@ -278,6 +315,15 @@ library MarketApproxLib {
278
315
  revert("approx fail");
279
316
  }
280
317
 
318
+ struct VarsSwapYtForExactScy {
319
+ uint256 minAssetOut;
320
+ uint256 ptOutGuess;
321
+ int256 assetToAccount;
322
+ int256 assetToReserve;
323
+ uint256 netAssetOwed;
324
+ uint256 netAssetOut;
325
+ }
326
+
281
327
  function approxSwapYtForExactScy(
282
328
  MarketState memory market,
283
329
  SCYIndex index,
@@ -289,7 +335,8 @@ library MarketApproxLib {
289
335
  pure
290
336
  returns (
291
337
  uint256, /*netYtIn*/
292
- uint256 /*netScyOut*/
338
+ uint256, /*netScyOut*/
339
+ uint256
293
340
  )
294
341
  {
295
342
  /*
@@ -315,32 +362,40 @@ library MarketApproxLib {
315
362
 
316
363
  require(isValidApproxParams(approx), "invalid approx approx");
317
364
 
365
+ VarsSwapYtForExactScy memory vars;
318
366
  MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
319
367
  if (approx.guessMax == type(uint256).max) {
320
368
  approx.guessMax = calcMaxPtOut(market.totalPt, comp);
321
369
  }
322
370
 
323
- uint256 minAssetOut = index.scyToAsset(minScyOut);
371
+ vars.minAssetOut = index.scyToAsset(minScyOut);
324
372
 
325
373
  for (uint256 iter = 0; iter < approx.maxIteration; ) {
326
374
  // ytInGuess = ptOutGuess
327
- uint256 ptOutGuess = getCurrentGuess(iter, approx);
375
+ vars.ptOutGuess = getCurrentGuess(iter, approx);
328
376
 
329
- (int256 assetToAccount, ) = market.calcTrade(comp, ptOutGuess.Int());
330
- uint256 netAssetOwed = assetToAccount.abs();
377
+ (vars.assetToAccount, vars.assetToReserve) = market.calcTrade(
378
+ comp,
379
+ vars.ptOutGuess.Int()
380
+ );
381
+ vars.netAssetOwed = vars.assetToAccount.abs();
331
382
 
332
383
  // since ptOutGuess is between guessMin & guessMax, it's guaranteed that
333
384
  // there are enough Yt to pair with ptOut
334
385
 
335
- uint256 netAssetOut = ptOutGuess - netAssetOwed;
386
+ vars.netAssetOut = vars.ptOutGuess - vars.netAssetOwed;
336
387
 
337
- if (netAssetOut >= minAssetOut) {
338
- approx.guessMax = ptOutGuess;
339
- if (Math.isAGreaterApproxB(netAssetOut, minAssetOut, approx.eps)) {
340
- return (ptOutGuess, index.assetToScy(netAssetOut));
388
+ if (vars.netAssetOut >= vars.minAssetOut) {
389
+ approx.guessMax = vars.ptOutGuess;
390
+ if (Math.isAGreaterApproxB(vars.netAssetOut, vars.minAssetOut, approx.eps)) {
391
+ return (
392
+ vars.ptOutGuess,
393
+ index.assetToScy(vars.netAssetOut),
394
+ index.assetToScy(vars.assetToReserve.Uint())
395
+ );
341
396
  }
342
397
  } else {
343
- approx.guessMin = ptOutGuess + 1;
398
+ approx.guessMin = vars.ptOutGuess + 1;
344
399
  }
345
400
 
346
401
  unchecked {
@@ -403,8 +458,8 @@ library MarketApproxLib {
403
458
  return (maxPtOut.Uint() * 999) / 1000;
404
459
  }
405
460
 
406
- function calcMaxPtIn(int256 totalPt, int256 totalAsset) internal pure returns (uint256) {
407
- return Math.min(totalPt, totalAsset).Uint() - 1;
461
+ function calcMaxPtIn(int256 totalAsset) internal pure returns (uint256) {
462
+ return totalAsset.Uint() - 1;
408
463
  }
409
464
 
410
465
  function isValidApproxParams(ApproxParams memory approx) internal pure returns (bool) {
@@ -57,7 +57,7 @@ library MarketMathCore {
57
57
  SCYIndex index,
58
58
  uint256 scyDesired,
59
59
  uint256 ptDesired,
60
- bool updateState
60
+ uint256 blockTime
61
61
  )
62
62
  internal
63
63
  pure
@@ -73,7 +73,7 @@ library MarketMathCore {
73
73
  int256 _lpToAccount,
74
74
  int256 _scyUsed,
75
75
  int256 _otUsed
76
- ) = addLiquidityCore(market, index, scyDesired.Int(), ptDesired.Int(), updateState);
76
+ ) = addLiquidityCore(market, index, scyDesired.Int(), ptDesired.Int(), blockTime);
77
77
 
78
78
  lpToReserve = _lpToReserve.Uint();
79
79
  lpToAccount = _lpToAccount.Uint();
@@ -81,15 +81,14 @@ library MarketMathCore {
81
81
  ptUsed = _otUsed.Uint();
82
82
  }
83
83
 
84
- function removeLiquidity(
85
- MarketState memory market,
86
- uint256 lpToRemove,
87
- bool updateState
88
- ) internal pure returns (uint256 scyToAccount, uint256 netPtToAccount) {
84
+ function removeLiquidity(MarketState memory market, uint256 lpToRemove)
85
+ internal
86
+ pure
87
+ returns (uint256 scyToAccount, uint256 netPtToAccount)
88
+ {
89
89
  (int256 _scyToAccount, int256 _ptToAccount) = removeLiquidityCore(
90
90
  market,
91
- lpToRemove.Int(),
92
- updateState
91
+ lpToRemove.Int()
93
92
  );
94
93
 
95
94
  scyToAccount = _scyToAccount.Uint();
@@ -139,7 +138,7 @@ library MarketMathCore {
139
138
  SCYIndex index,
140
139
  int256 scyDesired,
141
140
  int256 ptDesired,
142
- bool updateState
141
+ uint256 blockTime
143
142
  )
144
143
  internal
145
144
  pure
@@ -154,6 +153,7 @@ library MarketMathCore {
154
153
  /// CHECKS
155
154
  /// ------------------------------------------------------------
156
155
  require(scyDesired > 0 && ptDesired > 0, "ZERO_AMOUNTS");
156
+ require(!MiniHelpers.isExpired(market.expiry, blockTime), "market expired");
157
157
 
158
158
  /// ------------------------------------------------------------
159
159
  /// MATH
@@ -182,18 +182,16 @@ library MarketMathCore {
182
182
  /// ------------------------------------------------------------
183
183
  /// WRITE
184
184
  /// ------------------------------------------------------------
185
- if (updateState) {
186
- market.totalScy += scyUsed;
187
- market.totalPt += ptUsed;
188
- market.totalLp += lpToAccount + lpToReserve;
189
- }
185
+ market.totalScy += scyUsed;
186
+ market.totalPt += ptUsed;
187
+ market.totalLp += lpToAccount + lpToReserve;
190
188
  }
191
189
 
192
- function removeLiquidityCore(
193
- MarketState memory market,
194
- int256 lpToRemove,
195
- bool updateState
196
- ) internal pure returns (int256 netScyToAccount, int256 netPtToAccount) {
190
+ function removeLiquidityCore(MarketState memory market, int256 lpToRemove)
191
+ internal
192
+ pure
193
+ returns (int256 netScyToAccount, int256 netPtToAccount)
194
+ {
197
195
  /// ------------------------------------------------------------
198
196
  /// CHECKS
199
197
  /// ------------------------------------------------------------
@@ -209,11 +207,9 @@ library MarketMathCore {
209
207
  /// ------------------------------------------------------------
210
208
  /// WRITE
211
209
  /// ------------------------------------------------------------
212
- if (updateState) {
213
- market.totalLp = market.totalLp.subNoNeg(lpToRemove);
214
- market.totalPt = market.totalPt.subNoNeg(netPtToAccount);
215
- market.totalScy = market.totalScy.subNoNeg(netScyToAccount);
216
- }
210
+ market.totalLp = market.totalLp.subNoNeg(lpToRemove);
211
+ market.totalPt = market.totalPt.subNoNeg(netPtToAccount);
212
+ market.totalScy = market.totalScy.subNoNeg(netScyToAccount);
217
213
  }
218
214
 
219
215
  function executeTradeCore(
@@ -59,13 +59,6 @@ library Math {
59
59
  }
60
60
  }
61
61
 
62
- function rawDivUp(uint256 a, uint256 b) internal pure returns (uint256) {
63
- if (a == 0) return 0;
64
- else {
65
- return (a + b - 1) / b;
66
- }
67
- }
68
-
69
62
  function abs(int256 x) internal pure returns (uint256) {
70
63
  return uint256(x > 0 ? x : -x);
71
64
  }
@@ -7,6 +7,7 @@ import "../interfaces/IPRouterStatic.sol";
7
7
  import "../interfaces/IPMarket.sol";
8
8
  import "../interfaces/IPYieldContractFactory.sol";
9
9
  import "../interfaces/IPMarketFactory.sol";
10
+ import "../libraries/math/MarketApproxLib.sol";
10
11
  import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
11
12
  import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
12
13
  import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
@@ -14,12 +15,22 @@ import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
14
15
  /// EXCLUDED FROM ALL AUDITS, TO BE CALLED ONLY BY PENDLE's SDK
15
16
  contract RouterStatic is IPRouterStatic, Initializable, UUPSUpgradeable, OwnableUpgradeable {
16
17
  using MarketMathCore for MarketState;
18
+ using MarketApproxLib for MarketState;
17
19
  using Math for uint256;
18
20
  using Math for int256;
19
21
  using LogExpMath for int256;
22
+ using SCYIndexLib for SCYIndex;
20
23
 
21
24
  IPYieldContractFactory public immutable yieldContractFactory;
22
25
  IPMarketFactory public immutable marketFactory;
26
+ ApproxParams public approxParams =
27
+ ApproxParams({
28
+ guessMin: 0,
29
+ guessMax: type(uint256).max,
30
+ guessOffchain: 0,
31
+ maxIteration: 256,
32
+ eps: 1e15
33
+ });
23
34
 
24
35
  constructor(IPYieldContractFactory _yieldContractFactory, IPMarketFactory _marketFactory)
25
36
  initializer
@@ -43,7 +54,7 @@ contract RouterStatic is IPRouterStatic, Initializable, UUPSUpgradeable, Ownable
43
54
  RewardIndex[] memory rewardIndexes
44
55
  )
45
56
  {
46
- (address yt, ) = getPY(py);
57
+ (, address yt) = getPY(py);
47
58
  IPYieldToken YT = IPYieldToken(yt);
48
59
  exchangeRate = YT.scyIndexCurrent();
49
60
  totalSupply = YT.totalSupply();
@@ -151,7 +162,7 @@ contract RouterStatic is IPRouterStatic, Initializable, UUPSUpgradeable, Ownable
151
162
  scyIndex(market),
152
163
  scyDesired,
153
164
  ptDesired,
154
- false
165
+ block.timestamp
155
166
  );
156
167
  }
157
168
 
@@ -161,10 +172,10 @@ contract RouterStatic is IPRouterStatic, Initializable, UUPSUpgradeable, Ownable
161
172
  returns (uint256 netScyOut, uint256 netPtOut)
162
173
  {
163
174
  MarketState memory state = IPMarket(market).readState(false);
164
- (netScyOut, netPtOut) = state.removeLiquidity(lpToRemove, false);
175
+ (netScyOut, netPtOut) = state.removeLiquidity(lpToRemove);
165
176
  }
166
177
 
167
- function swapPtForScyStatic(address market, uint256 exactPtIn)
178
+ function swapExactPtForScyStatic(address market, uint256 exactPtIn)
168
179
  external
169
180
  view
170
181
  returns (uint256 netScyOut, uint256 netScyFee)
@@ -177,7 +188,7 @@ contract RouterStatic is IPRouterStatic, Initializable, UUPSUpgradeable, Ownable
177
188
  );
178
189
  }
179
190
 
180
- function swapScyForPtStatic(address market, uint256 exactPtOut)
191
+ function swapScyForExactPtStatic(address market, uint256 exactPtOut)
181
192
  external
182
193
  view
183
194
  returns (uint256 netScyIn, uint256 netScyFee)
@@ -190,8 +201,110 @@ contract RouterStatic is IPRouterStatic, Initializable, UUPSUpgradeable, Ownable
190
201
  );
191
202
  }
192
203
 
204
+ function swapExactScyForPtStatic(address market, uint256 exactScyIn)
205
+ external
206
+ view
207
+ returns (uint256 netPtOut, uint256 netScyFee)
208
+ {
209
+ MarketState memory state = IPMarket(market).readState(false);
210
+ (netPtOut, , netScyFee) = state.approxSwapExactScyForPt(
211
+ scyIndex(market),
212
+ exactScyIn,
213
+ block.timestamp,
214
+ approxParams
215
+ );
216
+ }
217
+
218
+ function swapScyForExactYtStatic(address market, uint256 exactYtOut)
219
+ external
220
+ view
221
+ returns (uint256 netScyIn, uint256 netScyFee)
222
+ {
223
+ MarketState memory state = IPMarket(market).readState(false);
224
+
225
+ SCYIndex index = scyIndex(market);
226
+
227
+ uint256 scyReceived;
228
+ (scyReceived, netScyFee) = state.swapExactPtForScy(
229
+ scyIndex(market),
230
+ exactYtOut,
231
+ block.timestamp
232
+ );
233
+
234
+ uint256 totalScyNeed = index.assetToScyUp(exactYtOut);
235
+ netScyIn = totalScyNeed.subMax0(scyReceived);
236
+ }
237
+
238
+ function swapExactScyForYtStatic(address market, uint256 exactScyIn)
239
+ external
240
+ view
241
+ returns (uint256 netYtOut, uint256 netScyFee)
242
+ {
243
+ MarketState memory state = IPMarket(market).readState(false);
244
+ SCYIndex index = scyIndex(market);
245
+
246
+ (netYtOut, , netScyFee) = state.approxSwapExactScyForYt(
247
+ index,
248
+ exactScyIn,
249
+ block.timestamp,
250
+ approxParams
251
+ );
252
+ }
253
+
254
+ function swapExactYtForScyStatic(address market, uint256 exactYtIn)
255
+ external
256
+ view
257
+ returns (uint256 netScyOut, uint256 netScyFee)
258
+ {
259
+ MarketState memory state = IPMarket(market).readState(false);
260
+
261
+ SCYIndex index = scyIndex(market);
262
+
263
+ uint256 scyOwed;
264
+ (scyOwed, netScyFee) = state.swapScyForExactPt(index, exactYtIn, block.timestamp);
265
+
266
+ uint256 amountPYToRepayScyOwed = index.scyToAssetUp(scyOwed);
267
+ uint256 amountPYToRedeemScyOut = exactYtIn - amountPYToRepayScyOwed;
268
+
269
+ netScyOut = index.assetToScy(amountPYToRedeemScyOut);
270
+ }
271
+
272
+ function swapYtForExactScyStatic(address market, uint256 exactScyOut)
273
+ external
274
+ view
275
+ returns (uint256 netYtIn, uint256 netScyFee)
276
+ {
277
+ MarketState memory state = IPMarket(market).readState(false);
278
+
279
+ SCYIndex index = scyIndex(market);
280
+
281
+ (netYtIn, , netScyFee) = state.approxSwapYtForExactScy(
282
+ index,
283
+ exactScyOut,
284
+ block.timestamp,
285
+ approxParams
286
+ );
287
+ }
288
+
193
289
  // ============= OTHER HELPERS =============
194
290
 
291
+ function previewMintPY(address YT, uint256 amountScyToMint)
292
+ external
293
+ returns (uint256 amountPY)
294
+ {
295
+ IPYieldToken _YT = IPYieldToken(YT);
296
+ require(!_YT.isExpired(), "YT is expired");
297
+ return amountScyToMint.mulDown(_YT.scyIndexCurrent());
298
+ }
299
+
300
+ function previewRedeemPY(address YT, uint256 amountPYToRedeem)
301
+ external
302
+ returns (uint256 amountPY)
303
+ {
304
+ IPYieldToken _YT = IPYieldToken(YT);
305
+ return amountPYToRedeem.divDown(_YT.scyIndexCurrent());
306
+ }
307
+
195
308
  function scyIndex(address market) public view returns (SCYIndex index) {
196
309
  (ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
197
310
 
@@ -215,12 +328,31 @@ contract RouterStatic is IPRouterStatic, Initializable, UUPSUpgradeable, Ownable
215
328
  return lnImpliedRate.exp();
216
329
  }
217
330
 
331
+ function getExchangeRate(address market) public view returns (uint256) {
332
+ MarketState memory state = IPMarket(market).readState(false);
333
+ MarketPreCompute memory comp = state.getMarketPreCompute(
334
+ scyIndex(market),
335
+ block.timestamp
336
+ );
337
+
338
+ return
339
+ MarketMathCore
340
+ ._getExchangeRate(
341
+ state.totalPt,
342
+ comp.totalAsset,
343
+ comp.rateScalar,
344
+ comp.rateAnchor,
345
+ 0
346
+ )
347
+ .Uint();
348
+ }
349
+
218
350
  function getUserPYInfo(address py, address user)
219
351
  public
220
352
  view
221
353
  returns (UserPYInfo memory userPYInfo)
222
354
  {
223
- (userPYInfo.yt, userPYInfo.pt) = getPY(py);
355
+ (userPYInfo.pt, userPYInfo.yt) = getPY(py);
224
356
  IPYieldToken YT = IPYieldToken(userPYInfo.yt);
225
357
  userPYInfo.ytBalance = YT.balanceOf(user);
226
358
  userPYInfo.ptBalance = IPPrincipalToken(userPYInfo.pt).balanceOf(user);
@@ -255,7 +387,7 @@ contract RouterStatic is IPRouterStatic, Initializable, UUPSUpgradeable, Ownable
255
387
  userMarketInfo.market = market;
256
388
  userMarketInfo.lpBalance = userLp;
257
389
 
258
- MarketState memory state = _market.readState(true);
390
+ MarketState memory state = _market.readState(false);
259
391
  uint256 totalLp = uint256(state.totalLp);
260
392
  uint256 userPt = (userLp * uint256(state.totalPt)) / totalLp;
261
393
  uint256 userScy = (userLp * uint256(state.totalScy)) / totalLp;
@@ -2,15 +2,15 @@
2
2
  "deployer": "0x1FcCC097db89A86Bfc474A1028F93958295b1Fb7",
3
3
  "network": 43113,
4
4
  "celerBus": "0xE9533976C590200E32d95C53f06AE12d292cFc47",
5
- "treasury": "0x8c73eEef8A74223717c129e6F18Df27508dbCb23",
6
- "governanceManager": "0xe8d12F4e6933107C797E369Dd577bfca9f412758",
7
- "PENDLE": "0xd6403Ff542290C38EE4fCFf48552FA85fbe8539B",
8
- "yieldContractFactory": "0x0EA46a4C257071352b57E9F6d054fC137F6E14b9",
9
- "marketFactory": "0x9e7be80205815111617B9578157e130ECd9757e4",
10
- "router": "0xb359F0A97Ca269Ae5574dc75be48b0e81eFD1dA2",
11
- "routerStatic": "0x860D23ADA1652CEEE1e3c77210CCE068bB4BD4e1",
12
- "startTime": 1656547200,
13
- "vePendle": "0x5CA98fBE317f0165499E886286A2737FE5A913E7",
14
- "votingController": "0xcb0d3d9147845C7F2B77DCFBE4dB8114d928DC93",
15
- "gaugeController": "0x38F5320795CE3BeD55b87decca0A60e52f65c522"
5
+ "treasury": "0xf176fB51F4eB826136a54FDc71C50fCd2202E272",
6
+ "governanceManager": "0x0A60B5D39b27E18F63aa937aD09Acc2B3d46d2a1",
7
+ "PENDLE": "0x519f3907379491c291Cf7b98425F35036a698080",
8
+ "yieldContractFactory": "0x2ff0de5593c85e0609675d07A6a33093A3838b17",
9
+ "marketFactory": "0x30340f337C27768e84CA5E957Fb22dcBF95857cD",
10
+ "router": "0xFEdBED4682D136925d30FFb9B8977CC9b3a6c406",
11
+ "routerStatic": "0xc49d8fdA920a46B21E1821780238f9E7A0de68df",
12
+ "startTime": 1657756800,
13
+ "vePendle": "0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9",
14
+ "votingController": "0x1001940C59e87AdfdB9f3b50aec5232c59d40Bc4",
15
+ "gaugeController": "0x3d47dBfB525cf8869B8c266a4c42E2c128F5639C"
16
16
  }
@@ -0,0 +1,7 @@
1
+ {
2
+ "SCY": "0x0acd905cCecd83505455701Eca4Efd92F232D007",
3
+ "expiry": 1673308800,
4
+ "PT": "0x132dc1190DFa55895d6F75C0720Da800AF424b81",
5
+ "YT": "0xC1ea94221d74c45695Fbc7867640F10DaE4E7e7d",
6
+ "market": "0x9f080Af83E84099ED92b1b9b4B4BbE4400f2A3CB"
7
+ }
@@ -2,14 +2,14 @@
2
2
  "deployer": "0x1FcCC097db89A86Bfc474A1028F93958295b1Fb7",
3
3
  "network": 80001,
4
4
  "celerBus": "0x7d43AABC515C356145049227CeE54B608342c0ad",
5
- "treasury": "0x3865D8a1Bd6D281f6c77d4e233d26Cd56380EF45",
6
- "governanceManager": "0xFC7eC014280A98850F4167aF47c0272f0E7490A5",
7
- "PENDLE": "0x53F435CEC95c597d905f0903a13F4dAbEA8491dB",
8
- "yieldContractFactory": "0x4e5De6339FC7Ef63c176f9A7e7a8B2aC21744B8D",
9
- "marketFactory": "0xCAd502Bb55d1A3F79952F969BFF3f011CF30a94a",
10
- "router": "0xA972fB7828f0bff8a22f7f8C63b17cfB971BFC0a",
11
- "routerStatic": "0x9a8Ff151BDA518ece44Cb1125F368F4C893D63b7",
12
- "startTime": 1656547200,
13
- "vePendle": "0x69A23F16974024A1b6A5362ac2A11BFeEEFd5827",
14
- "gaugeController": "0x847da006F940833bB44709CBa241c99e3c531F38"
5
+ "treasury": "0xFF4a4515888AEf82C9557A56E37A55a5dDe6EFF1",
6
+ "governanceManager": "0xE4a112A028D93e9E9b207eBedB1e1D6Cf5FdCEe9",
7
+ "PENDLE": "0x6D998d832b82f6307c5a2592d59A4cba7f15167f",
8
+ "yieldContractFactory": "0x058Ceec78EB7F854daBfdDd894e841423Ca344c3",
9
+ "marketFactory": "0xD33F62424acC95704D43E725B11b9e770505B425",
10
+ "router": "0x24d7CEaFBA7c7b32BE200aD6dA38C03797F0611f",
11
+ "routerStatic": "0x9902C57F6bc1e7737238777Fc52dA8A2161759f7",
12
+ "startTime": 1657756800,
13
+ "vePendle": "0x1b615005157B9B0DDc7c0Af817f4A570cE3b591e",
14
+ "gaugeController": "0x3663E54bf1334B60FC97d3781460Bcf73d008116"
15
15
  }
@@ -0,0 +1,7 @@
1
+ {
2
+ "SCY": "0x9Bdb1dfD15D9051D127c3cD6882e194cA1c89e56",
3
+ "expiry": 1673308800,
4
+ "PT": "0x36b83a38f5073Ef53EaaC74F2C6F29cC346f3a61",
5
+ "YT": "0x376F7aEE5e3C2Ba02CB53122e0c7D9E4FEd65801",
6
+ "market": "0x78699fa58C484e9867B8047A12E959ccB8BaD90E"
7
+ }