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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) 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/IPRouterStatic.sol/IPRouterStatic.json +20 -15
  91. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
  92. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  93. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +1 -1
  94. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
  95. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.json +30 -4
  96. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
  97. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.json +8 -92
  98. package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +1 -1
  99. package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
  100. package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
  101. package/build/artifacts/contracts/interfaces/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
  102. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +1 -1
  103. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +1 -1
  104. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.json +31 -2
  105. package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
  106. package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.dbg.json +1 -1
  108. package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
  109. package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +1 -1
  110. package/build/artifacts/contracts/libraries/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  111. package/build/artifacts/contracts/libraries/SCY/SCYIndex.sol/SCYIndexLib.dbg.json +1 -1
  112. package/build/artifacts/contracts/libraries/SCY/SCYIndex.sol/SCYIndexLib.json +2 -2
  113. package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +1 -1
  114. package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.json +2 -2
  115. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  116. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.json +2 -2
  117. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  118. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.json +2 -2
  119. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
  120. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.json +2 -2
  121. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
  122. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.json +2 -2
  123. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
  124. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.json +2 -2
  125. package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.dbg.json +1 -1
  126. package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.json +2 -2
  127. package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  128. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
  129. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.json +2 -2
  130. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.dbg.json +1 -1
  131. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.json +2 -2
  132. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  133. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.json +2 -2
  134. package/build/artifacts/contracts/libraries/math/Math.sol/Math.dbg.json +1 -1
  135. package/build/artifacts/contracts/libraries/math/Math.sol/Math.json +2 -2
  136. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.dbg.json +1 -1
  137. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.json +2 -2
  138. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +1 -1
  139. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.json +2 -2
  140. package/build/artifacts/contracts/libraries/traderjoe/JoeLibrary.sol/JoeLibrary.dbg.json +1 -1
  141. package/build/artifacts/contracts/libraries/traderjoe/JoeLibrary.sol/JoeLibrary.json +2 -2
  142. package/build/artifacts/contracts/libraries/traderjoe/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.dbg.json +1 -1
  143. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
  144. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +166 -13
  145. package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.dbg.json +1 -1
  146. package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.json +2 -2
  147. package/build/artifacts/contracts/periphery/PermissionsV2Upg.sol/PermissionsV2Upg.dbg.json +1 -1
  148. package/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol +16 -12
  149. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol +3 -3
  150. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +20 -0
  151. package/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol +20 -0
  152. package/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol +20 -0
  153. package/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol +29 -2
  154. package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +63 -41
  155. package/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol +0 -7
  156. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +1 -1
  157. package/contracts/core/LiquidityMining/PendleGauge.sol +24 -8
  158. package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +47 -96
  159. package/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +86 -73
  160. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +17 -16
  161. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +1 -1
  162. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +3 -4
  163. package/contracts/core/Market/PendleMarket.sol +32 -62
  164. package/contracts/core/PendleRouter.sol +1 -1
  165. package/contracts/core/YieldContracts/InterestManagerYT.sol +11 -8
  166. package/contracts/core/YieldContracts/PendlePrincipalToken.sol +3 -3
  167. package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +18 -12
  168. package/contracts/core/YieldContracts/PendleYieldToken.sol +167 -140
  169. package/contracts/core/actions/ActionCallback.sol +11 -10
  170. package/contracts/core/actions/ActionCore.sol +84 -22
  171. package/contracts/core/actions/ActionYT.sol +33 -15
  172. package/contracts/core/actions/base/ActionSCYAndPTBase.sol +4 -15
  173. package/contracts/core/actions/base/ActionSCYAndPYBase.sol +20 -50
  174. package/contracts/core/actions/base/ActionSCYAndYTBase.sol +2 -12
  175. package/contracts/interfaces/IPActionCore.sol +72 -1
  176. package/contracts/interfaces/IPActionYT.sol +15 -0
  177. package/contracts/interfaces/IPMarket.sol +7 -26
  178. package/contracts/interfaces/IPRouterStatic.sol +67 -47
  179. package/contracts/interfaces/IPVeToken.sol +0 -2
  180. package/contracts/interfaces/IPVotingEscrow.sol +1 -1
  181. package/contracts/interfaces/IPYieldContractFactory.sol +6 -2
  182. package/contracts/interfaces/IPYieldToken.sol +21 -11
  183. package/contracts/interfaces/ISuperComposableYield.sol +22 -28
  184. package/contracts/interfaces/IYearnVault.sol +8 -0
  185. package/contracts/libraries/RewardManager.sol +9 -6
  186. package/contracts/libraries/RewardManagerAbstract.sol +6 -8
  187. package/contracts/libraries/SCY/SCYIndex.sol +10 -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/Math.sol +2 -4
  193. package/contracts/offchain-helpers/RouterStatic.sol +144 -115
  194. package/deployments/43113-core.json +11 -9
  195. package/deployments/43113-markets/benqi-market-0xF3150c14F776c50C9D397054d38979c7B77FC41D.json +7 -0
  196. package/deployments/80001-core.json +10 -8
  197. package/deployments/80001-markets/benqi-market-0x150b6eb90Bf636eC0c4328d13d1e1d4adDBAF904.json +7 -0
  198. package/package.json +2 -2
  199. package/typechain-types/ActionCore.ts +8 -8
  200. package/typechain-types/CelerReceiver.ts +267 -0
  201. package/typechain-types/CelerSender.ts +164 -0
  202. package/typechain-types/IPActionCore.ts +8 -8
  203. package/typechain-types/IPAllAction.ts +8 -8
  204. package/typechain-types/IPMarket.ts +66 -109
  205. package/typechain-types/IPRouterStatic.ts +64 -41
  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/RouterStatic.ts +297 -24
  227. package/typechain-types/SCYBase.ts +54 -29
  228. package/typechain-types/SCYBaseWithRewards.ts +54 -29
  229. package/typechain-types/VotingControllerStorage.ts +410 -0
  230. package/typechain-types/VotingEscrowController.ts +154 -0
  231. package/typechain-types/VotingEscrowToken.ts +335 -0
  232. package/typechain-types/factories/ActionCallback__factory.ts +1 -1
  233. package/typechain-types/factories/ActionCore__factory.ts +2 -2
  234. package/typechain-types/factories/ActionYT__factory.ts +1 -1
  235. package/typechain-types/factories/CelerReceiver__factory.ts +140 -0
  236. package/typechain-types/factories/CelerSender__factory.ts +67 -0
  237. package/typechain-types/factories/ERC20__factory.ts +1 -1
  238. package/typechain-types/factories/IPActionCore__factory.ts +1 -1
  239. package/typechain-types/factories/IPAllAction__factory.ts +1 -1
  240. package/typechain-types/factories/IPMarket__factory.ts +48 -83
  241. package/typechain-types/factories/IPRouterStatic__factory.ts +20 -15
  242. package/typechain-types/factories/IPVotingEscrowController__factory.ts +80 -0
  243. package/typechain-types/factories/IPYieldContractFactory__factory.ts +30 -4
  244. package/typechain-types/factories/IPYieldToken__factory.ts +6 -90
  245. package/typechain-types/factories/ISuperComposableYield__factory.ts +31 -2
  246. package/typechain-types/factories/PendleAaveV3SCY__factory.ts +32 -16
  247. package/typechain-types/factories/PendleBtrflyScy__factory.ts +52 -28
  248. package/typechain-types/factories/PendleERC20Permit__factory.ts +1 -1
  249. package/typechain-types/factories/PendleERC20__factory.ts +1 -1
  250. package/typechain-types/factories/PendleERC4626SCY__factory.ts +32 -16
  251. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +1 -1
  252. package/typechain-types/factories/PendleGaugeControllerMainchain__factory.ts +269 -0
  253. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +1 -1
  254. package/typechain-types/factories/PendleGaugeControllerSidechain__factory.ts +328 -0
  255. package/typechain-types/factories/PendleGaugeController__factory.ts +149 -0
  256. package/typechain-types/factories/PendleGauge__factory.ts +0 -26
  257. package/typechain-types/factories/PendleGovernanceManager__factory.ts +1 -1
  258. package/typechain-types/factories/PendleJoeLpSCY__factory.ts +34 -28
  259. package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
  260. package/typechain-types/factories/PendleMarket__factory.ts +124 -110
  261. package/typechain-types/factories/PendlePrincipalToken__factory.ts +76 -1
  262. package/typechain-types/factories/PendleQiTokenHelper__factory.ts +1 -1
  263. package/typechain-types/factories/PendleQiTokenSCY__factory.ts +32 -16
  264. package/typechain-types/factories/PendleRouter__factory.ts +1 -1
  265. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +1 -1
  266. package/typechain-types/factories/PendleVotingController__factory.ts +584 -0
  267. package/typechain-types/factories/PendleWstEthSCY__factory.ts +32 -16
  268. package/typechain-types/factories/PendleYearnVaultSCY__factory.ts +32 -16
  269. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +54 -19
  270. package/typechain-types/factories/PendleYieldToken__factory.ts +70 -91
  271. package/typechain-types/factories/RouterStatic__factory.ts +165 -12
  272. package/typechain-types/factories/SCYBaseWithRewards__factory.ts +31 -15
  273. package/typechain-types/factories/SCYBase__factory.ts +31 -15
  274. package/typechain-types/factories/VotingControllerStorage__factory.ts +298 -0
  275. package/typechain-types/factories/VotingEscrowController__factory.ts +80 -0
  276. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +1 -1
  277. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +1 -1
  278. package/typechain-types/factories/VotingEscrowToken__factory.ts +225 -0
  279. package/typechain-types/hardhat.d.ts +0 -27
  280. package/typechain-types/index.ts +0 -6
  281. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol/PendleBtrflyScy.dbg.json +0 -4
  282. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol/PendleBtrflyScy.json +0 -635
  283. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol/PendleJoeLpSCY.dbg.json +0 -4
  284. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol/PendleJoeLpSCY.json +0 -653
  285. package/build/artifacts/contracts/interfaces/IPMarketAddRemoveCallback.sol/IPMarketAddRemoveCallback.dbg.json +0 -4
  286. package/build/artifacts/contracts/interfaces/IPMarketAddRemoveCallback.sol/IPMarketAddRemoveCallback.json +0 -67
  287. package/build/artifacts/contracts/libraries/solmate/Bytes32AddressLib.sol/Bytes32AddressLib.dbg.json +0 -4
  288. package/build/artifacts/contracts/libraries/solmate/Bytes32AddressLib.sol/Bytes32AddressLib.json +0 -10
  289. package/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol +0 -123
  290. package/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol +0 -245
  291. package/contracts/interfaces/IPMarketAddRemoveCallback.sol +0 -18
  292. package/contracts/libraries/solmate/Bytes32AddressLib.sol +0 -14
  293. package/deployments/43113-markets/benqi-market.json +0 -7
  294. package/deployments/80001-markets/benqi-market.json +0 -7
@@ -68,18 +68,6 @@ contract PendleAaveV3SCY is SCYBaseWithRewards {
68
68
  }
69
69
  }
70
70
 
71
- function _updateYieldReserve() internal virtual override {
72
- yieldTokenReserve = IAToken(aToken).scaledBalanceOf(address(this));
73
- }
74
-
75
- function _getFloatingAmount(address token) internal view virtual override returns (uint256) {
76
- if (token != aToken) return _selfBalance(token) - rewardState[token].lastBalance;
77
- // the only reserve token is aToken
78
- uint256 scaledATokenAmount = IAToken(aToken).scaledBalanceOf(address(this)) -
79
- yieldTokenReserve;
80
- return _scaledBalanceToAToken(scaledATokenAmount);
81
- }
82
-
83
71
  /*///////////////////////////////////////////////////////////////
84
72
  EXCHANGE-RATE
85
73
  //////////////////////////////////////////////////////////////*/
@@ -123,6 +111,22 @@ contract PendleAaveV3SCY is SCYBaseWithRewards {
123
111
  MISC FUNCTIONS FOR METADATA
124
112
  //////////////////////////////////////////////////////////////*/
125
113
 
114
+ function _previewDeposit(
115
+ address, /*tokenIn*/
116
+ uint256 amountTokenToDeposit
117
+ ) internal view override returns (uint256 amountSharesOut) {
118
+ // if tokenIn == aToken => convert aToken to scaledBalance
119
+ // if tokenIn == underlying => also convert aToken to scaledBalance since 1 aToken = 1 underlying
120
+ amountSharesOut = _aTokenToScaledBalance(amountTokenToDeposit);
121
+ }
122
+
123
+ function _previewRedeem(
124
+ address, /*tokenOut*/
125
+ uint256 amountSharesToRedeem
126
+ ) internal view override returns (uint256 amountTokenOut) {
127
+ amountTokenOut = _scaledBalanceToAToken(amountSharesToRedeem);
128
+ }
129
+
126
130
  function getBaseTokens() public view virtual override returns (address[] memory res) {
127
131
  res = new address[](2);
128
132
  res[0] = underlying;
@@ -33,7 +33,7 @@ contract PendleQiTokenHelper {
33
33
  reservesPrior
34
34
  );
35
35
 
36
- require(borrowRateMantissa <= borrowRateMantissa, "borrow rate is absurdly high");
36
+ require(borrowRateMantissa <= borrowRateMaxMantissa, "borrow rate is absurdly high");
37
37
 
38
38
  uint256 timestampDelta = currentBlockTimestamp - accrualBlockTimestampPrior;
39
39
 
@@ -43,8 +43,8 @@ contract PendleQiTokenHelper {
43
43
 
44
44
  uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;
45
45
 
46
- uint256 totalReservesNew = qiToken.reserveFactorMantissa() *
47
- interestAccumulated +
46
+ uint256 totalReservesNew = (qiToken.reserveFactorMantissa() * interestAccumulated) /
47
+ 1e18 +
48
48
  reservesPrior;
49
49
 
50
50
  return
@@ -153,6 +153,26 @@ contract PendleQiTokenSCY is SCYBaseWithRewards, PendleQiTokenHelper {
153
153
  MISC FUNCTIONS FOR METADATA
154
154
  //////////////////////////////////////////////////////////////*/
155
155
 
156
+ function _previewDeposit(address tokenIn, uint256 amountTokenToDeposit)
157
+ internal
158
+ view
159
+ override
160
+ returns (uint256 amountSharesOut)
161
+ {
162
+ if (tokenIn == qiToken) amountSharesOut = amountTokenToDeposit;
163
+ else amountSharesOut = (amountTokenToDeposit * 1e18) / exchangeRate();
164
+ }
165
+
166
+ function _previewRedeem(address tokenOut, uint256 amountSharesToRedeem)
167
+ internal
168
+ view
169
+ override
170
+ returns (uint256 amountTokenOut)
171
+ {
172
+ if (tokenOut == qiToken) amountTokenOut = amountSharesToRedeem;
173
+ else amountTokenOut = (amountSharesToRedeem * exchangeRate()) / 1e18;
174
+ }
175
+
156
176
  /**
157
177
  * @dev See {ISuperComposableYield-getBaseTokens}
158
178
  */
@@ -75,6 +75,26 @@ contract PendleERC4626SCY is SCYBase {
75
75
  MISC FUNCTIONS FOR METADATA
76
76
  //////////////////////////////////////////////////////////////*/
77
77
 
78
+ function _previewDeposit(address tokenIn, uint256 amountTokenToDeposit)
79
+ internal
80
+ view
81
+ override
82
+ returns (uint256 amountSharesOut)
83
+ {
84
+ if (tokenIn == yieldToken) amountSharesOut = amountTokenToDeposit;
85
+ else amountSharesOut = (amountTokenToDeposit * 1e18) / exchangeRate();
86
+ }
87
+
88
+ function _previewRedeem(address tokenOut, uint256 amountSharesToRedeem)
89
+ internal
90
+ view
91
+ override
92
+ returns (uint256 amountTokenOut)
93
+ {
94
+ if (tokenOut == yieldToken) amountTokenOut = amountSharesToRedeem;
95
+ else amountTokenOut = (amountSharesToRedeem * exchangeRate()) / 1e18;
96
+ }
97
+
78
98
  function getBaseTokens() public view virtual override returns (address[] memory res) {
79
99
  res = new address[](2);
80
100
  res[0] = underlying;
@@ -77,6 +77,26 @@ contract PendleWstEthSCY is SCYBase {
77
77
  MISC FUNCTIONS FOR METADATA
78
78
  //////////////////////////////////////////////////////////////*/
79
79
 
80
+ function _previewDeposit(address tokenIn, uint256 amountTokenToDeposit)
81
+ internal
82
+ view
83
+ override
84
+ returns (uint256 amountSharesOut)
85
+ {
86
+ if (tokenIn == wstETH) amountSharesOut = amountTokenToDeposit;
87
+ else amountSharesOut = (amountTokenToDeposit * 1e18) / exchangeRate();
88
+ }
89
+
90
+ function _previewRedeem(address tokenOut, uint256 amountSharesToRedeem)
91
+ internal
92
+ view
93
+ override
94
+ returns (uint256 amountTokenOut)
95
+ {
96
+ if (tokenOut == wstETH) amountTokenOut = amountSharesToRedeem;
97
+ else amountTokenOut = (amountSharesToRedeem * exchangeRate()) / 1e18;
98
+ }
99
+
80
100
  /**
81
101
  * @dev See {ISuperComposableYield-getBaseTokens}
82
102
  */
@@ -7,6 +7,7 @@ import "../../interfaces/IYearnVault.sol";
7
7
  contract PendleYearnVaultSCY is SCYBase {
8
8
  address public immutable underlying;
9
9
  address public immutable yvToken;
10
+ uint256 internal immutable yvTokenDecimals;
10
11
 
11
12
  constructor(
12
13
  string memory _name,
@@ -16,6 +17,7 @@ contract PendleYearnVaultSCY is SCYBase {
16
17
  require(_yvToken != address(0), "zero address");
17
18
  yvToken = _yvToken;
18
19
  underlying = IYearnVault(yvToken).token();
20
+ yvTokenDecimals = IYearnVault(yvToken).decimals();
19
21
  _safeApprove(underlying, yvToken, type(uint256).max);
20
22
  }
21
23
 
@@ -66,7 +68,7 @@ contract PendleYearnVaultSCY is SCYBase {
66
68
  uint256 sharesRedeemed = IYearnVault(yvToken).withdraw(amountSharesToRedeem);
67
69
 
68
70
  require(
69
- sharesRedeemed != amountSharesToRedeem,
71
+ sharesRedeemed == amountSharesToRedeem,
70
72
  "Yearn Vault SCY: Not allowed to redeem all shares"
71
73
  );
72
74
 
@@ -83,13 +85,38 @@ contract PendleYearnVaultSCY is SCYBase {
83
85
  * @dev It is the price per share of the yvToken
84
86
  */
85
87
  function exchangeRate() public view override returns (uint256) {
86
- return IYearnVault(yvToken).pricePerShare();
88
+ uint256 price = IYearnVault(yvToken).pricePerShare();
89
+ if (yvTokenDecimals <= 18) {
90
+ return price * (10**(18 - yvTokenDecimals));
91
+ } else {
92
+ return price / (10**(yvTokenDecimals - 18));
93
+ }
87
94
  }
88
95
 
89
96
  /*///////////////////////////////////////////////////////////////
90
97
  MISC FUNCTIONS FOR METADATA
91
98
  //////////////////////////////////////////////////////////////*/
92
99
 
100
+ function _previewDeposit(address tokenIn, uint256 amountTokenToDeposit)
101
+ internal
102
+ view
103
+ override
104
+ returns (uint256 amountSharesOut)
105
+ {
106
+ if (tokenIn == yvToken) amountSharesOut = amountTokenToDeposit;
107
+ else amountSharesOut = (amountTokenToDeposit * 1e18) / exchangeRate();
108
+ }
109
+
110
+ function _previewRedeem(address tokenOut, uint256 amountSharesToRedeem)
111
+ internal
112
+ view
113
+ override
114
+ returns (uint256 amountTokenOut)
115
+ {
116
+ if (tokenOut == yvToken) amountTokenOut = amountSharesToRedeem;
117
+ else amountTokenOut = (amountSharesToRedeem * exchangeRate()) / 1e18;
118
+ }
119
+
93
120
  /**
94
121
  * @dev See {ISuperComposableYield-getBaseTokens}
95
122
  */
@@ -14,13 +14,6 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
14
14
 
15
15
  address public immutable yieldToken;
16
16
 
17
- uint256 public yieldTokenReserve;
18
-
19
- modifier updateYieldReserve() {
20
- _;
21
- _updateYieldReserve();
22
- }
23
-
24
17
  constructor(
25
18
  string memory _name,
26
19
  string memory _symbol,
@@ -42,21 +35,20 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
42
35
  function deposit(
43
36
  address receiver,
44
37
  address tokenIn,
45
- uint256 amountTokenToPull,
38
+ uint256 amountTokenToDeposit,
46
39
  uint256 minSharesOut
47
- ) external payable nonReentrant updateYieldReserve returns (uint256 amountSharesOut) {
40
+ ) external payable nonReentrant returns (uint256 amountSharesOut) {
48
41
  require(isValidBaseToken(tokenIn), "SCY: Invalid tokenIn");
42
+ require(amountTokenToDeposit != 0, "SCY: amountTokenToDeposit cannot be 0");
49
43
 
50
- if (tokenIn == NATIVE) require(amountTokenToPull == 0, "can't pull eth");
51
- else if (amountTokenToPull != 0) _transferIn(tokenIn, msg.sender, amountTokenToPull);
44
+ if (tokenIn == NATIVE) require(msg.value == amountTokenToDeposit, "SCY: eth mismatch");
45
+ else _transferIn(tokenIn, msg.sender, amountTokenToDeposit);
52
46
 
53
- uint256 amountDeposited = _getFloatingAmount(tokenIn);
54
-
55
- amountSharesOut = _deposit(tokenIn, amountDeposited);
56
- require(amountSharesOut >= minSharesOut, "insufficient out");
47
+ amountSharesOut = _deposit(tokenIn, amountTokenToDeposit);
48
+ require(amountSharesOut >= minSharesOut, "SCY: insufficient out");
57
49
 
58
50
  _mint(receiver, amountSharesOut);
59
- emit Deposit(msg.sender, receiver, tokenIn, amountDeposited, amountSharesOut);
51
+ emit Deposit(msg.sender, receiver, tokenIn, amountTokenToDeposit, amountSharesOut);
60
52
  }
61
53
 
62
54
  /**
@@ -64,22 +56,36 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
64
56
  */
65
57
  function redeem(
66
58
  address receiver,
67
- uint256 amountSharesToPull,
59
+ uint256 amountSharesToRedeem,
68
60
  address tokenOut,
69
61
  uint256 minTokenOut
70
- ) external nonReentrant updateYieldReserve returns (uint256 amountTokenOut) {
71
- require(isValidBaseToken(tokenOut), "SCY: invalid tokenOut");
62
+ ) external nonReentrant returns (uint256 amountTokenOut) {
63
+ _burn(msg.sender, amountSharesToRedeem);
64
+ amountTokenOut = _redeem(receiver, amountSharesToRedeem, tokenOut, minTokenOut);
65
+ }
72
66
 
73
- if (amountSharesToPull != 0) {
74
- _transfer(msg.sender, address(this), amountSharesToPull);
75
- }
67
+ function redeemAfterTransfer(
68
+ address receiver,
69
+ address tokenOut,
70
+ uint256 minTokenOut
71
+ ) external nonReentrant returns (uint256 amountTokenOut) {
72
+ uint256 amountSharesToRedeem = balanceOf(address(this));
73
+ _burn(address(this), amountSharesToRedeem);
74
+ amountTokenOut = _redeem(receiver, amountSharesToRedeem, tokenOut, minTokenOut);
75
+ }
76
76
 
77
- uint256 amountSharesToRedeem = _getFloatingAmount(address(this));
77
+ function _redeem(
78
+ address receiver,
79
+ uint256 amountSharesToRedeem,
80
+ address tokenOut,
81
+ uint256 minTokenOut
82
+ ) internal returns (uint256 amountTokenOut) {
83
+ require(isValidBaseToken(tokenOut), "SCY: invalid tokenOut");
84
+ require(amountSharesToRedeem != 0, "SCY: amountSharesToRedeem cannot be 0");
78
85
 
79
86
  amountTokenOut = _redeem(tokenOut, amountSharesToRedeem);
80
- require(amountTokenOut >= minTokenOut, "insufficient out");
87
+ require(amountTokenOut >= minTokenOut, "SCY: insufficient out");
81
88
 
82
- _burn(address(this), amountSharesToRedeem);
83
89
  _transferOut(tokenOut, receiver, amountTokenOut);
84
90
 
85
91
  emit Redeem(msg.sender, receiver, tokenOut, amountSharesToRedeem, amountTokenOut);
@@ -107,22 +113,6 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
107
113
  virtual
108
114
  returns (uint256 amountTokenOut);
109
115
 
110
- /**
111
- * @notice updates the amount of yield token reserves in this contract
112
- */
113
- function _updateYieldReserve() internal virtual {
114
- yieldTokenReserve = _selfBalance(yieldToken);
115
- }
116
-
117
- /**
118
- * @notice returns the amount of unprocessed tokens owned by this contract
119
- * @param token address of the token to be queried
120
- */
121
- function _getFloatingAmount(address token) internal view virtual returns (uint256) {
122
- if (token != yieldToken) return _selfBalance(token);
123
- return _selfBalance(token) - yieldTokenReserve;
124
- }
125
-
126
116
  /*///////////////////////////////////////////////////////////////
127
117
  EXCHANGE-RATE
128
118
  //////////////////////////////////////////////////////////////*/
@@ -185,6 +175,38 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
185
175
  MISC METADATA FUNCTIONS
186
176
  //////////////////////////////////////////////////////////////*/
187
177
 
178
+ function previewDeposit(address tokenIn, uint256 amountTokenToDeposit)
179
+ external
180
+ view
181
+ virtual
182
+ returns (uint256 amountSharesOut)
183
+ {
184
+ require(isValidBaseToken(tokenIn), "SCY: Invalid tokenIn");
185
+ return _previewDeposit(tokenIn, amountTokenToDeposit);
186
+ }
187
+
188
+ function previewRedeem(address tokenOut, uint256 amountSharesToRedeem)
189
+ external
190
+ view
191
+ virtual
192
+ returns (uint256 amountTokenOut)
193
+ {
194
+ require(isValidBaseToken(tokenOut), "SCY: Invalid tokenOut");
195
+ return _previewRedeem(tokenOut, amountSharesToRedeem);
196
+ }
197
+
198
+ function _previewDeposit(address tokenIn, uint256 amountTokenToDeposit)
199
+ internal
200
+ view
201
+ virtual
202
+ returns (uint256 amountSharesOut);
203
+
204
+ function _previewRedeem(address tokenOut, uint256 amountSharesToRedeem)
205
+ internal
206
+ view
207
+ virtual
208
+ returns (uint256 amountTokenOut);
209
+
188
210
  /**
189
211
  * @notice See {ISuperComposableYield-getBaseTokens}
190
212
  */
@@ -20,13 +20,6 @@ abstract contract SCYBaseWithRewards is SCYBase, RewardManager {
20
20
  SCYBase(_name, _symbol, _yieldToken) // solhint-disable-next-line no-empty-blocks
21
21
  {}
22
22
 
23
- function _getFloatingAmount(address token) internal view virtual override returns (uint256) {
24
- // there are only 2 type of tokens stored in the contract: yieldToken & rewardToken. Since
25
- // this is not yield, it must be reward
26
- if (token != yieldToken) return _selfBalance(token) - rewardState[token].lastBalance;
27
- return _selfBalance(token) - yieldTokenReserve;
28
- }
29
-
30
23
  /*///////////////////////////////////////////////////////////////
31
24
  REWARDS-RELATED
32
25
  //////////////////////////////////////////////////////////////*/
@@ -35,7 +35,7 @@ abstract contract PendleGaugeControllerBaseUpg is IPGaugeController, Permissions
35
35
  uint128 incentiveEndsAt;
36
36
  }
37
37
 
38
- uint128 public constant WEEK = 1 weeks;
38
+ uint128 internal constant WEEK = 1 weeks;
39
39
 
40
40
  address public immutable pendle;
41
41
  IPMarketFactory public immutable marketFactory;
@@ -9,6 +9,10 @@ import "../../libraries/math/Math.sol";
9
9
  import "../../libraries/helpers/ArrayLib.sol";
10
10
  import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
11
11
 
12
+ /**
13
+ Invariants to maintain:
14
+ - before any changes to active balance, updateAndDistributeRewards() must be called
15
+ */
12
16
  abstract contract PendleGauge is RewardManager {
13
17
  using Math for uint256;
14
18
  using SafeERC20 for IERC20;
@@ -17,10 +21,10 @@ abstract contract PendleGauge is RewardManager {
17
21
  address private immutable SCY;
18
22
 
19
23
  uint256 internal constant TOKENLESS_PRODUCTION = 40;
20
- address internal immutable PENDLE;
21
24
 
22
- IPVeToken public immutable vePENDLE;
23
- address public immutable gaugeController;
25
+ address internal immutable PENDLE;
26
+ IPVeToken internal immutable vePENDLE;
27
+ address internal immutable gaugeController;
24
28
 
25
29
  uint256 public totalActiveSupply;
26
30
  mapping(address => uint256) public activeBalance;
@@ -37,7 +41,9 @@ abstract contract PendleGauge is RewardManager {
37
41
  }
38
42
 
39
43
  /**
40
- * @dev It is intended to have user's active balance updated when they try to redeem
44
+ * @dev Since rewardShares is based on activeBalance, user's activeBalance must be updated AFTER
45
+ rewards is updated
46
+ * @dev It's intended to have user's activeBalance updated when rewards is redeemed
41
47
  */
42
48
  function _redeemRewards(address user) internal virtual returns (uint256[] memory) {
43
49
  _updateAndDistributeRewards(user);
@@ -45,10 +51,21 @@ abstract contract PendleGauge is RewardManager {
45
51
  return _doTransferOutRewards(user, user);
46
52
  }
47
53
 
54
+ function _updateUserActiveBalance(address user) internal virtual {
55
+ _updateUserActiveBalanceForTwo(user, address(0));
56
+ }
57
+
58
+ function _updateUserActiveBalanceForTwo(address user1, address user2) internal virtual {
59
+ if (user1 != address(0) && user1 != address(this)) _updateUserActiveBalancePrivate(user1);
60
+ if (user2 != address(0) && user2 != address(this)) _updateUserActiveBalancePrivate(user2);
61
+ }
62
+
48
63
  /**
49
- * @dev since rewardShares will be modified after this function, it should update user reward beforehand
64
+ * @dev should only be callable from `_updateUserActiveBalanceForTwo` to guarantee user != address(0) && user != address(this)
50
65
  */
51
- function _updateUserActiveBalance(address user) internal virtual {
66
+ function _updateUserActiveBalancePrivate(address user) private {
67
+ assert(user != address(0) && user != address(this));
68
+
52
69
  uint256 lpBalance = _stakedBalance(user);
53
70
  uint256 veBoostedLpBalance = _calcVeBoostedLpBalance(user, lpBalance);
54
71
 
@@ -112,7 +129,6 @@ abstract contract PendleGauge is RewardManager {
112
129
  address to,
113
130
  uint256
114
131
  ) internal virtual {
115
- if (from != address(0) && from != address(this)) _updateUserActiveBalance(from);
116
- if (to != address(0) && to != address(this)) _updateUserActiveBalance(to);
132
+ _updateUserActiveBalanceForTwo(from, to);
117
133
  }
118
134
  }