@pendle/core-v2 0.9.4-beta → 0.10.2-testnet

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +1 -1
  2. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.json +2 -2
  3. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +1 -1
  4. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.dbg.json +1 -1
  5. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.json +2 -2
  6. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  7. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.dbg.json +1 -1
  8. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.json +2 -2
  9. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.dbg.json +1 -1
  10. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.json +2 -2
  11. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.dbg.json +1 -1
  12. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.json +7 -2
  13. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +1 -1
  14. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.json +2 -2
  15. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.dbg.json +1 -1
  16. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.json +2 -2
  17. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +1 -1
  18. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.json +2 -2
  19. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultSCY.sol/PendleYearnVaultSCY.dbg.json +4 -0
  20. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/{PendleYearnVaultScy.sol → PendleYearnVaultSCY.sol}/PendleYearnVaultSCY.json +3 -3
  21. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.dbg.json +1 -1
  22. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.json +2 -2
  23. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.dbg.json +1 -1
  24. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +1 -1
  25. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.dbg.json +1 -1
  26. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.json +67 -5
  27. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +1 -1
  28. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.json +63 -1
  29. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  30. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.json +65 -3
  31. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  32. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +74 -10
  33. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  34. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +79 -15
  35. package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  36. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  37. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +204 -123
  38. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  39. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.json +127 -73
  40. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  41. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +93 -34
  42. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  43. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +90 -14
  44. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.json +14 -1
  46. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +139 -37
  48. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  49. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +84 -56
  50. package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +1 -1
  51. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  52. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.json +122 -11
  53. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  54. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  55. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +2 -2
  56. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  57. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +96 -40
  58. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  59. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
  60. package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +4 -0
  61. package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +1025 -0
  62. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.dbg.json +1 -1
  63. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.json +2 -2
  64. package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +4 -0
  65. package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.json +622 -0
  66. package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.dbg.json +4 -0
  67. package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.json +35 -0
  68. package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.dbg.json +4 -0
  69. package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.json +459 -0
  70. package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.dbg.json +4 -0
  71. package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.json +459 -0
  72. package/build/artifacts/contracts/core/actions/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +4 -0
  73. package/build/artifacts/contracts/core/actions/base/{ActionSCYAndPTBase.sol/ActionSCYAndPTBase.json → ActionBaseMintRedeem.sol/ActionBaseMintRedeem.json} +2 -2
  74. package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
  75. package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
  76. package/build/artifacts/contracts/interfaces/IAavePool.sol/IAavePool.dbg.json +1 -1
  77. package/build/artifacts/contracts/interfaces/IAaveRewardsController.sol/IAaveRewardsController.dbg.json +1 -1
  78. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.dbg.json +1 -1
  79. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.json +24 -0
  80. package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +1 -1
  81. package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +1 -1
  82. package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +1 -1
  83. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
  84. package/build/artifacts/contracts/interfaces/IEulerEToken.sol/IEulerEToken.dbg.json +1 -1
  85. package/build/artifacts/contracts/interfaces/IEulerMarkets.sol/IEulerMarkets.dbg.json +1 -1
  86. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +4 -0
  87. package/build/artifacts/contracts/interfaces/{IPActionCore.sol/IPActionCore.json → IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.json} +141 -912
  88. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +4 -0
  89. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.json +598 -0
  90. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +4 -0
  91. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.json +35 -0
  92. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +4 -0
  93. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.json +435 -0
  94. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +4 -0
  95. package/build/artifacts/contracts/interfaces/{IPActionYT.sol/IPActionYT.json → IPActionSwapYT.sol/IPActionSwapYT.json} +23 -11
  96. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  97. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +323 -47
  98. package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.dbg.json +4 -0
  99. package/build/artifacts/contracts/{core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.json → interfaces/IPGauge.sol/IPGauge.json} +5 -5
  100. package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +1 -1
  101. package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +1 -1
  102. package/build/artifacts/contracts/interfaces/IPGovernanceManager.sol/IPGovernanceManager.dbg.json +1 -1
  103. package/build/artifacts/contracts/interfaces/IPInterestManagerYT.sol/IPInterestManagerYT.dbg.json +1 -1
  104. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  105. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.json +72 -29
  106. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.json +0 -11
  108. package/build/artifacts/contracts/interfaces/IPMarketSwapCallback.sol/IPMarketSwapCallback.dbg.json +1 -1
  109. package/build/artifacts/contracts/interfaces/IPPermissionsV2Upg.sol/IPermissionsV2Upg.dbg.json +1 -1
  110. package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
  111. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
  112. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.json +1 -1
  113. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  114. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.json +0 -37
  115. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +1 -1
  116. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
  117. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
  118. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.json +1 -1
  119. package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +1 -1
  120. package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
  121. package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
  122. package/build/artifacts/contracts/interfaces/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
  123. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +1 -1
  124. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.json +1 -1
  125. package/build/artifacts/contracts/interfaces/ISAvax.sol/ISAvax.dbg.json +1 -1
  126. package/build/artifacts/contracts/interfaces/ISJoe.sol/ISJoe.dbg.json +1 -1
  127. package/build/artifacts/contracts/interfaces/IStETH.sol/IStETH.dbg.json +1 -1
  128. package/build/artifacts/contracts/interfaces/IStargateLPStaking.sol/IStargateLPStaking.dbg.json +1 -1
  129. package/build/artifacts/contracts/interfaces/IStargatePool.sol/IStargatePool.dbg.json +1 -1
  130. package/build/artifacts/contracts/interfaces/IStargateRouter.sol/IStargateRouter.dbg.json +1 -1
  131. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +1 -1
  132. package/build/artifacts/contracts/interfaces/IWAvax.sol/IWAvax.dbg.json +1 -1
  133. package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
  134. package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.dbg.json +1 -1
  135. package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.dbg.json +1 -1
  136. package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
  137. package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.dbg.json +4 -0
  138. package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.json +74 -0
  139. package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +1 -1
  140. package/build/artifacts/contracts/libraries/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  141. package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +1 -1
  142. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  143. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  144. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
  145. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
  146. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
  147. package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.dbg.json +1 -1
  148. package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.json +2 -2
  149. package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.dbg.json +1 -1
  150. package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  151. package/build/artifacts/contracts/libraries/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +1 -1
  152. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
  153. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.dbg.json +1 -1
  154. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.json +2 -2
  155. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  156. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.json +2 -2
  157. package/build/artifacts/contracts/libraries/math/Math.sol/Math.dbg.json +1 -1
  158. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.dbg.json +1 -1
  159. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +1 -1
  160. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +4 -0
  161. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +93 -0
  162. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
  163. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +427 -39
  164. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.dbg.json +4 -0
  165. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.json +86 -0
  166. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.dbg.json +4 -0
  167. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.json +37 -0
  168. package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.dbg.json +1 -1
  169. package/build/artifacts/contracts/periphery/PermissionsV2Upg.sol/PermissionsV2Upg.dbg.json +1 -1
  170. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +8 -0
  171. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol +1 -1
  172. package/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol +11 -5
  173. package/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol +0 -1
  174. package/contracts/SuperComposableYield/SCY-implementations/{PendleYearnVaultScy.sol → PendleYearnVaultSCY.sol} +0 -0
  175. package/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol +1 -0
  176. package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +1 -1
  177. package/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol +7 -7
  178. package/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol +7 -6
  179. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +4 -5
  180. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol +6 -3
  181. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol +6 -3
  182. package/contracts/core/LiquidityMining/PendleGauge.sol +3 -2
  183. package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +22 -28
  184. package/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +71 -13
  185. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +7 -4
  186. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +6 -2
  187. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +4 -3
  188. package/contracts/core/Market/PendleMarket.sol +93 -57
  189. package/contracts/core/Market/PendleMarketFactory.sol +18 -33
  190. package/contracts/core/PendleRouter.sol +60 -52
  191. package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +12 -12
  192. package/contracts/core/YieldContracts/PendleYieldToken.sol +1 -1
  193. package/contracts/core/actions/ActionAddRemoveLiq.sol +366 -0
  194. package/contracts/core/actions/ActionCallback.sol +6 -6
  195. package/contracts/core/actions/ActionMintRedeem.sol +124 -0
  196. package/contracts/core/actions/ActionMisc.sol +24 -0
  197. package/contracts/core/actions/ActionSwapPT.sol +199 -0
  198. package/contracts/core/actions/{base/ActionSCYAndYTBase.sol → ActionSwapYT.sol} +109 -74
  199. package/contracts/core/actions/base/{ActionSCYAndPYBase.sol → ActionBaseMintRedeem.sol} +9 -8
  200. package/contracts/interfaces/IBenQiComptroller.sol +2 -0
  201. package/contracts/interfaces/IPActionAddRemoveLiq.sol +188 -0
  202. package/contracts/interfaces/IPActionMintRedeem.sol +115 -0
  203. package/contracts/interfaces/IPActionMisc.sol +9 -0
  204. package/contracts/interfaces/IPActionSwapPT.sol +69 -0
  205. package/contracts/interfaces/{IPActionYT.sol → IPActionSwapYT.sol} +12 -10
  206. package/contracts/interfaces/IPAllAction.sol +12 -3
  207. package/contracts/interfaces/IPGauge.sol +6 -0
  208. package/contracts/interfaces/IPGaugeController.sol +0 -2
  209. package/contracts/interfaces/IPMarket.sol +28 -10
  210. package/contracts/interfaces/IPMarketFactory.sol +1 -7
  211. package/contracts/interfaces/IPVeToken.sol +1 -1
  212. package/contracts/interfaces/IPVotingController.sol +0 -2
  213. package/contracts/interfaces/IRewardManager.sol +1 -1
  214. package/contracts/libraries/OracleLib.sol +214 -0
  215. package/contracts/libraries/RewardManagerAbstract.sol +1 -1
  216. package/contracts/libraries/math/MarketApproxLib.sol +227 -14
  217. package/contracts/libraries/math/MarketMathCore.sol +0 -33
  218. package/contracts/offchain-helpers/MarketMathStatic.sol +565 -0
  219. package/contracts/offchain-helpers/RouterStatic.sol +187 -251
  220. package/contracts/periphery/BoringOwnableUpgradeable.sol +62 -0
  221. package/deployments/43113-core.json +7 -8
  222. package/deployments/43113-markets/benqi-market-590025.json +8 -0
  223. package/deployments/43113-markets/benqi-market-c93916.json +8 -0
  224. package/deployments/80001-core.json +6 -7
  225. package/deployments/80001-markets/benqi-market-3b8BD1.json +8 -0
  226. package/deployments/80001-markets/benqi-market-b61e7f.json +8 -0
  227. package/package.json +11 -11
  228. package/typechain-types/ActionAddRemoveLiq.ts +1037 -0
  229. package/typechain-types/ActionBaseMintRedeem.ts +87 -0
  230. package/typechain-types/ActionCore.ts +21 -20
  231. package/typechain-types/ActionMintRedeem.ts +665 -0
  232. package/typechain-types/ActionMisc.ts +105 -0
  233. package/typechain-types/ActionSwapPT.ts +515 -0
  234. package/typechain-types/ActionSwapYT.ts +515 -0
  235. package/typechain-types/ActionYT.ts +5 -4
  236. package/typechain-types/BoringOwnable.ts +194 -0
  237. package/typechain-types/BoringOwnableData.ts +100 -0
  238. package/typechain-types/BoringOwnableUpgradeable.ts +194 -0
  239. package/typechain-types/BoringOwnableUpgradeableData.ts +100 -0
  240. package/typechain-types/CelerReceiverUpg.ts +124 -19
  241. package/typechain-types/CelerSenderUpg.ts +116 -11
  242. package/typechain-types/IBenQiComptroller.ts +39 -0
  243. package/typechain-types/IPActionAddRemoveLiq.ts +1018 -0
  244. package/typechain-types/IPActionCore.ts +21 -20
  245. package/typechain-types/IPActionMintRedeem.ts +646 -0
  246. package/typechain-types/IPActionMisc.ts +105 -0
  247. package/typechain-types/IPActionSwapPT.ts +496 -0
  248. package/typechain-types/IPActionSwapYT.ts +496 -0
  249. package/typechain-types/IPActionYT.ts +5 -4
  250. package/typechain-types/IPAllAction.ts +431 -193
  251. package/typechain-types/IPGauge.ts +87 -0
  252. package/typechain-types/IPMarket.ts +133 -50
  253. package/typechain-types/IPMarketFactory.ts +7 -17
  254. package/typechain-types/IPVeToken.ts +8 -8
  255. package/typechain-types/IPVotingController.ts +0 -20
  256. package/typechain-types/IPYieldToken.ts +3 -3
  257. package/typechain-types/IRewardManager.ts +3 -3
  258. package/typechain-types/MarketMathStatic.ts +198 -0
  259. package/typechain-types/OracleLib.ts +124 -0
  260. package/typechain-types/PendleGaugeControllerBaseUpg.ts +118 -15
  261. package/typechain-types/PendleGaugeControllerMainchainUpg.ts +136 -9
  262. package/typechain-types/PendleGaugeControllerSidechainUpg.ts +138 -11
  263. package/typechain-types/PendleMarket.ts +178 -59
  264. package/typechain-types/PendleMarketFactory.ts +135 -61
  265. package/typechain-types/PendleRouter.ts +201 -31
  266. package/typechain-types/PendleVotingControllerUpg.ts +325 -149
  267. package/typechain-types/PendleYieldContractFactory.ts +144 -21
  268. package/typechain-types/RouterStatic.ts +344 -64
  269. package/typechain-types/VotingControllerStorageUpg.ts +182 -113
  270. package/typechain-types/VotingEscrowPendleMainchain.ts +170 -63
  271. package/typechain-types/VotingEscrowPendleSidechain.ts +163 -17
  272. package/typechain-types/VotingEscrowTokenBase.ts +27 -8
  273. package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +1083 -0
  274. package/typechain-types/factories/ActionBaseMintRedeem__factory.ts +43 -0
  275. package/typechain-types/factories/ActionCallback__factory.ts +1 -1
  276. package/typechain-types/factories/ActionCore__factory.ts +6 -6
  277. package/typechain-types/factories/ActionMintRedeem__factory.ts +680 -0
  278. package/typechain-types/factories/ActionMisc__factory.ts +85 -0
  279. package/typechain-types/factories/ActionSwapPT__factory.ts +514 -0
  280. package/typechain-types/factories/ActionSwapYT__factory.ts +514 -0
  281. package/typechain-types/factories/ActionYT__factory.ts +2 -2
  282. package/typechain-types/factories/BoringOwnableData__factory.ts +90 -0
  283. package/typechain-types/factories/BoringOwnableUpgradeableData__factory.ts +96 -0
  284. package/typechain-types/factories/BoringOwnableUpgradeable__factory.ts +143 -0
  285. package/typechain-types/factories/BoringOwnable__factory.ts +141 -0
  286. package/typechain-types/factories/CelerReceiverUpg__factory.ts +67 -5
  287. package/typechain-types/factories/CelerSenderUpg__factory.ts +63 -1
  288. package/typechain-types/factories/IBenQiComptroller__factory.ts +24 -0
  289. package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +1020 -0
  290. package/typechain-types/factories/IPActionCore__factory.ts +5 -5
  291. package/typechain-types/factories/IPActionMintRedeem__factory.ts +613 -0
  292. package/typechain-types/factories/IPActionMisc__factory.ts +47 -0
  293. package/typechain-types/factories/IPActionSwapPT__factory.ts +450 -0
  294. package/typechain-types/factories/IPActionSwapYT__factory.ts +450 -0
  295. package/typechain-types/factories/IPActionYT__factory.ts +1 -1
  296. package/typechain-types/factories/IPAllAction__factory.ts +323 -47
  297. package/typechain-types/factories/IPGauge__factory.ts +36 -0
  298. package/typechain-types/factories/IPMarketFactory__factory.ts +0 -11
  299. package/typechain-types/factories/IPMarket__factory.ts +72 -29
  300. package/typechain-types/factories/IPVeToken__factory.ts +1 -1
  301. package/typechain-types/factories/IPVotingController__factory.ts +0 -37
  302. package/typechain-types/factories/IPYieldToken__factory.ts +1 -1
  303. package/typechain-types/factories/IRewardManager__factory.ts +1 -1
  304. package/typechain-types/factories/MarketMathStatic__factory.ts +146 -0
  305. package/typechain-types/factories/OracleLib__factory.ts +124 -0
  306. package/typechain-types/factories/PendleAaveV3SCY__factory.ts +1 -1
  307. package/typechain-types/factories/PendleERC4626SCY__factory.ts +1 -1
  308. package/typechain-types/factories/PendleEulerSCY__factory.ts +10 -1
  309. package/typechain-types/factories/PendleGaugeControllerBaseUpg__factory.ts +65 -3
  310. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +73 -13
  311. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +79 -23
  312. package/typechain-types/factories/PendleMarketFactory__factory.ts +84 -86
  313. package/typechain-types/factories/PendleMarket__factory.ts +131 -37
  314. package/typechain-types/factories/PendlePrincipalToken__factory.ts +1 -1
  315. package/typechain-types/factories/PendleQiSAvaxSCY__factory.ts +1 -1
  316. package/typechain-types/factories/PendleQiTokenSCY__factory.ts +1 -1
  317. package/typechain-types/factories/PendleRouter__factory.ts +141 -22
  318. package/typechain-types/factories/PendleSAvaxSCY__factory.ts +1 -1
  319. package/typechain-types/factories/PendleSJoeSCY__factory.ts +1 -1
  320. package/typechain-types/factories/PendleStargateSCY__factory.ts +1 -1
  321. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +203 -129
  322. package/typechain-types/factories/PendleWstEthSCY__factory.ts +1 -1
  323. package/typechain-types/factories/PendleYearnVaultSCY__factory.ts +1 -1
  324. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +97 -72
  325. package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
  326. package/typechain-types/factories/RouterStatic__factory.ts +233 -39
  327. package/typechain-types/factories/VotingControllerStorageUpg__factory.ts +126 -72
  328. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +93 -41
  329. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +90 -17
  330. package/typechain-types/factories/VotingEscrowTokenBase__factory.ts +14 -1
  331. package/typechain-types/hardhat.d.ts +162 -0
  332. package/typechain-types/index.ts +36 -0
  333. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +0 -4
  334. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.dbg.json +0 -4
  335. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.json +0 -1801
  336. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +0 -4
  337. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +0 -447
  338. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +0 -4
  339. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +0 -4
  340. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +0 -4
  341. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.json +0 -24
  342. package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +0 -4
  343. package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +0 -4
  344. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +0 -4
  345. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.json +0 -874
  346. package/contracts/core/actions/ActionCore.sol +0 -382
  347. package/contracts/core/actions/ActionYT.sol +0 -93
  348. package/contracts/core/actions/base/ActionSCYAndPTBase.sol +0 -303
  349. package/contracts/interfaces/IPActionCore.sol +0 -306
  350. package/contracts/interfaces/IPRouterStatic.sol +0 -152
  351. package/deployments/43113-markets/benqi-market-599408.json +0 -7
  352. package/deployments/43113-markets/benqi-market-93bbf0.json +0 -7
  353. package/deployments/43113-markets/benqi-market-95E744.json +0 -7
  354. package/deployments/43113-markets/benqi-market-D91a3F.json +0 -7
  355. package/deployments/80001-markets/benqi-market-007811.json +0 -7
  356. package/deployments/80001-markets/benqi-market-3fe528.json +0 -7
  357. package/typechain-types/FeeDistributorAbstract.ts +0 -164
  358. package/typechain-types/IPVotingControllerStorage.ts +0 -169
  359. package/typechain-types/factories/FeeDistributorAbstract__factory.ts +0 -90
  360. package/typechain-types/factories/IPVotingControllerStorage__factory.ts +0 -107
@@ -17,6 +17,7 @@ abstract contract VotingControllerStorageUpg {
17
17
  using VeBalanceLib for LockedPosition;
18
18
  using EnumerableSet for EnumerableSet.AddressSet;
19
19
  using Checkpoints for Checkpoints.History;
20
+ using WeekMath for uint128;
20
21
 
21
22
  struct PoolData {
22
23
  uint64 chainId;
@@ -57,16 +58,16 @@ abstract contract VotingControllerStorageUpg {
57
58
  EnumerableSet.AddressSet internal allRemovedPools;
58
59
 
59
60
  // [chainId] => [pool]
60
- mapping(uint64 => EnumerableSet.AddressSet) internal chainPools;
61
+ mapping(uint64 => EnumerableSet.AddressSet) internal activeChainPools;
61
62
 
62
63
  // [poolAddress] -> PoolData
63
- mapping(address => PoolData) public poolData;
64
+ mapping(address => PoolData) internal poolData;
64
65
 
65
66
  // [wTime] => WeekData
66
- mapping(uint128 => WeekData) public weekData;
67
+ mapping(uint128 => WeekData) internal weekData;
67
68
 
68
69
  // user voting data
69
- mapping(address => UserData) public userData;
70
+ mapping(address => UserData) internal userData;
70
71
 
71
72
  // [user][pool] => checkpoint
72
73
  mapping(address => mapping(address => Checkpoints.History)) internal userPoolHistory;
@@ -82,8 +83,64 @@ abstract contract VotingControllerStorageUpg {
82
83
  VIEW FUNCTIONS
83
84
  //////////////////////////////////////////////////////////////*/
84
85
 
86
+ function getPoolData(address pool, uint128[] calldata wTimes)
87
+ public
88
+ view
89
+ returns (
90
+ uint64 chainId,
91
+ uint128 lastSlopeChangeAppliedAt,
92
+ VeBalance memory totalVote,
93
+ uint128[] memory slopeChanges
94
+ )
95
+ {
96
+ PoolData storage data = poolData[pool];
97
+ (chainId, lastSlopeChangeAppliedAt, totalVote) = (
98
+ data.chainId,
99
+ data.lastSlopeChangeAppliedAt,
100
+ data.totalVote
101
+ );
102
+
103
+ slopeChanges = new uint128[](wTimes.length);
104
+ for (uint256 i = 0; i < wTimes.length; ++i) {
105
+ require(wTimes[i].isValidWTime(), "invalid wTimes");
106
+ slopeChanges[i] = data.slopeChanges[wTimes[i]];
107
+ }
108
+ }
109
+
110
+ function getUserData(address user, address[] calldata pools)
111
+ public
112
+ view
113
+ returns (uint64 totalVotedWeight, UserPoolData[] memory voteForPools)
114
+ {
115
+ UserData storage data = userData[user];
116
+
117
+ totalVotedWeight = data.totalVotedWeight;
118
+
119
+ voteForPools = new UserPoolData[](pools.length);
120
+ for (uint256 i = 0; i < pools.length; ++i) voteForPools[i] = data.voteForPools[pools[i]];
121
+ }
122
+
123
+ function getWeekData(uint128 wTime, address[] calldata pools)
124
+ public
125
+ view
126
+ returns (
127
+ bool isEpochFinalized,
128
+ uint128 totalVotes,
129
+ uint128[] memory poolVotes
130
+ )
131
+ {
132
+ require(wTime.isValidWTime(), "invalid wTimes");
133
+
134
+ WeekData storage data = weekData[wTime];
135
+
136
+ (isEpochFinalized, totalVotes) = (data.isEpochFinalized, data.totalVotes);
137
+
138
+ poolVotes = new uint128[](pools.length);
139
+ for (uint256 i = 0; i < pools.length; ++i) poolVotes[i] = data.poolVotes[pools[i]];
140
+ }
141
+
85
142
  /// @dev trivial view function
86
- function getAllAcitvePools() external view returns (address[] memory) {
143
+ function getAllActivePools() external view returns (address[] memory) {
87
144
  return allActivePools.values();
88
145
  }
89
146
 
@@ -93,14 +150,15 @@ abstract contract VotingControllerStorageUpg {
93
150
  view
94
151
  returns (uint256 lengthOfRemovedPools, address[] memory arr)
95
152
  {
96
- arr = new address[](end - start + 1);
97
- for (uint256 i = start; i <= end; i++) arr[i] = allRemovedPools.at(i);
98
153
  lengthOfRemovedPools = allRemovedPools.length();
154
+ require(end < lengthOfRemovedPools, "end is out of bounds");
155
+ arr = new address[](end - start + 1);
156
+ for (uint256 i = start; i <= end; ++i) arr[i - start] = allRemovedPools.at(i);
99
157
  }
100
158
 
101
159
  /// @dev trivial view function
102
- function getChainPools(uint64 chainId) external view returns (address[] memory) {
103
- return chainPools[chainId].values();
160
+ function getActiveChainPools(uint64 chainId) external view returns (address[] memory) {
161
+ return activeChainPools[chainId].values();
104
162
  }
105
163
 
106
164
  /// @dev trivial view function
@@ -130,11 +188,11 @@ abstract contract VotingControllerStorageUpg {
130
188
 
131
189
  /**
132
190
  * @dev expected behavior:
133
- - add to allActivePools, chainPools
191
+ - add to allActivePools, activeChainPools
134
192
  - set params in poolData
135
193
  */
136
194
  function _addPool(uint64 chainId, address pool) internal {
137
- require(chainPools[chainId].add(pool), "IE");
195
+ require(activeChainPools[chainId].add(pool), "IE");
138
196
  require(allActivePools.add(pool), "IE");
139
197
 
140
198
  poolData[pool].chainId = chainId;
@@ -143,13 +201,13 @@ abstract contract VotingControllerStorageUpg {
143
201
 
144
202
  /**
145
203
  * @dev expected behavior:
146
- - remove from allActivePool, chainPools
204
+ - remove from allActivePool, activeChainPools
147
205
  - add to allRemovedPools
148
206
  - clear all params in poolData
149
207
  */
150
208
  function _removePool(address pool) internal {
151
209
  uint64 chainId = poolData[pool].chainId;
152
- require(chainPools[chainId].remove(pool), "IE");
210
+ require(activeChainPools[chainId].remove(pool), "IE");
153
211
  require(allActivePools.remove(pool), "IE");
154
212
  require(allRemovedPools.add(pool), "IE");
155
213
 
@@ -34,12 +34,14 @@ contract VotingEscrowPendleMainchain is IPVotingEscrow, VotingEscrowTokenBase, C
34
34
  // to ask for their vePendle balance at any wTime
35
35
  mapping(address => Checkpoints.History) internal userHistory;
36
36
 
37
- constructor(IERC20 _pendle, address _governanceManager)
38
- CelerSenderUpg(_governanceManager) // only sets immutable variables
39
- {
37
+ constructor(IERC20 _pendle) {
40
38
  pendle = _pendle;
41
39
  }
42
40
 
41
+ function initialize() external initializer {
42
+ __BoringOwnable_init();
43
+ }
44
+
43
45
  /// @notice basically a proxy function to call increaseLockPosition & broadcastUserPosition at the same time
44
46
  function increaseLockPositionAndBroadcast(
45
47
  uint128 additionalAmountToLock,
@@ -71,6 +73,7 @@ contract VotingEscrowPendleMainchain is IPVotingEscrow, VotingEscrowTokenBase, C
71
73
  );
72
74
 
73
75
  require(newExpiry <= block.timestamp + MAX_LOCK_TIME, "max lock time exceeded");
76
+ require(newExpiry >= block.timestamp + MIN_LOCK_TIME, "insufficient lock time");
74
77
  require(positionData[user].expiry <= newExpiry, "new expiry must be after current expiry");
75
78
 
76
79
  uint128 newTotalAmountLocked = additionalAmountToLock + positionData[user].amount;
@@ -227,7 +230,7 @@ contract VotingEscrowPendleMainchain is IPVotingEscrow, VotingEscrowTokenBase, C
227
230
  }
228
231
 
229
232
  /// @notice broadcast position to all chains in chainIds
230
- function _broadcastPosition(address user, uint256[] calldata chainIds) public payable {
233
+ function _broadcastPosition(address user, uint256[] calldata chainIds) internal {
231
234
  require(chainIds.length != 0, "empty chainIds");
232
235
 
233
236
  (VeBalance memory supply, uint128 wTime) = _applySlopeChange();
@@ -17,7 +17,11 @@ contract VotingEscrowPendleSidechain is VotingEscrowTokenBase, CelerReceiverUpg
17
17
 
18
18
  event SetNewUserPosition(LockedPosition position);
19
19
 
20
- constructor(address _governanceManager) CelerReceiverUpg(_governanceManager) {}
20
+ constructor() {}
21
+
22
+ function initialize() external initializer {
23
+ __BoringOwnable_init();
24
+ }
21
25
 
22
26
  function totalSupplyCurrent() public view virtual override returns (uint128) {
23
27
  return totalSupplyStored();
@@ -27,7 +31,7 @@ contract VotingEscrowPendleSidechain is VotingEscrowTokenBase, CelerReceiverUpg
27
31
  * @dev The mechanism of delegating is for governance to support protocol to build on top
28
32
  * This way, it is more gas efficient and does not affect the crosschain messaging cost
29
33
  */
30
- function setDelegatorFor(address receiver, address delegator) external onlyGovernance {
34
+ function setDelegatorFor(address receiver, address delegator) external onlyOwner {
31
35
  delegatorOf[receiver] = delegator;
32
36
  emit SetNewDelegator(delegator, receiver);
33
37
  }
@@ -10,7 +10,7 @@ import "../../../libraries/helpers/MiniHelpers.sol";
10
10
  * @dev this contract is an abstract for its mainchain and sidechain variant
11
11
  * PRINCIPLE:
12
12
  * - All functions implemented in this contract should be either view or pure
13
- * to ensure that no writing logic is inheritted by sidechain version
13
+ * to ensure that no writing logic is inherited by sidechain version
14
14
  * - Mainchain version will handle the logic which are:
15
15
  * + Deposit, withdraw, increase lock, increase amount
16
16
  * + Mainchain logic will be ensured to have _totalSupply = linear sum of
@@ -25,6 +25,7 @@ abstract contract VotingEscrowTokenBase is IPVeToken {
25
25
 
26
26
  uint128 public constant WEEK = 1 weeks;
27
27
  uint128 public constant MAX_LOCK_TIME = 104 weeks;
28
+ uint128 public constant MIN_LOCK_TIME = 1 weeks;
28
29
 
29
30
  VeBalance internal _totalSupply;
30
31
  uint128 public lastSlopeChangeAppliedAt;
@@ -49,7 +50,7 @@ abstract contract VotingEscrowTokenBase is IPVeToken {
49
50
  return MiniHelpers.isCurrentlyExpired(positionData[user].expiry);
50
51
  }
51
52
 
52
- function totalSupplyAndBlanaceCurrent(address user) external returns (uint128, uint128) {
53
- return (balanceOf(user), totalSupplyCurrent());
53
+ function totalSupplyAndBalanceCurrent(address user) external returns (uint128, uint128) {
54
+ return (totalSupplyCurrent(), balanceOf(user));
54
55
  }
55
56
  }
@@ -8,6 +8,7 @@ import "../../interfaces/IPMarket.sol";
8
8
  import "../../interfaces/IPMarketFactory.sol";
9
9
  import "../../interfaces/IPMarketSwapCallback.sol";
10
10
 
11
+ import "../../libraries/OracleLib.sol";
11
12
  import "../../libraries/math/LogExpMath.sol";
12
13
  import "../../libraries/math/Math.sol";
13
14
  import "../../libraries/helpers/MiniHelpers.sol";
@@ -16,8 +17,8 @@ import "../LiquidityMining/PendleGauge.sol";
16
17
  import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
17
18
 
18
19
  /**
19
- Invariances to maintain:
20
- - Internal balances totalPt & totalScy not interferred by people transferring tokens in directly
20
+ Invariance to maintain:
21
+ - Internal balances totalPt & totalScy not interfered by people transferring tokens in directly
21
22
  - address(0) & address(this) should never have any rewards & activeBalance accounting done. This is
22
23
  guaranteed by address(0) & address(this) check in each updateForTwo function
23
24
  */
@@ -27,15 +28,17 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
27
28
  using MarketMathCore for MarketState;
28
29
  using SafeERC20 for IERC20;
29
30
  using PYIndexLib for IPYieldToken;
31
+ using OracleLib for OracleLib.Observation[65535];
30
32
 
31
33
  struct MarketStorage {
32
34
  int128 totalPt;
33
35
  int128 totalScy;
34
36
  // 1 SLOT = 256 bits
35
37
  uint96 lastLnImpliedRate;
36
- uint96 oracleRate;
37
- uint32 lastTradeTime;
38
- // 1 SLOT = 224 bits
38
+ uint16 observationIndex;
39
+ uint16 observationCardinality;
40
+ uint16 observationCardinalityNext;
41
+ // 1 SLOT = 144 bits
39
42
  }
40
43
 
41
44
  string private constant NAME = "Pendle Market";
@@ -52,6 +55,8 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
52
55
 
53
56
  MarketStorage public _storage;
54
57
 
58
+ OracleLib.Observation[65535] public observations;
59
+
55
60
  modifier notExpired() {
56
61
  require(!isExpired(), "market expired");
57
62
  _;
@@ -71,6 +76,9 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
71
76
  SCY = ISuperComposableYield(PT.SCY());
72
77
  YT = IPYieldToken(PT.YT());
73
78
 
79
+ (_storage.observationCardinality, _storage.observationCardinalityNext) = observations
80
+ .initialize(uint32(block.timestamp));
81
+
74
82
  require(_scalarRoot > 0, "scalarRoot must be positive");
75
83
  scalarRoot = _scalarRoot;
76
84
  initialAnchor = _initialAnchor;
@@ -82,13 +90,8 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
82
90
  * @notice PendleMarket allows users to provide in PT & SCY in exchange for LPs, which
83
91
  * will grant LP holders more exchange fee over time
84
92
  */
85
- function mint(address receiver)
86
- external
87
- nonReentrant
88
- notExpired
89
- returns (uint256 lpToAccount)
90
- {
91
- MarketState memory market = readState(true);
93
+ function mint(address receiver) external nonReentrant notExpired returns (uint256 netLpOut) {
94
+ MarketState memory market = readState();
92
95
  PYIndex index = YT.newIndex();
93
96
 
94
97
  uint256 scyDesired = IERC20(SCY).balanceOf(address(this)) - market.totalScy.Uint();
@@ -98,7 +101,7 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
98
101
  uint256 scyUsed;
99
102
  uint256 ptUsed;
100
103
 
101
- (lpToReserve, lpToAccount, scyUsed, ptUsed) = market.addLiquidity(
104
+ (lpToReserve, netLpOut, scyUsed, ptUsed) = market.addLiquidity(
102
105
  index,
103
106
  scyDesired,
104
107
  ptDesired,
@@ -111,11 +114,11 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
111
114
  _mint(address(1), lpToReserve);
112
115
  }
113
116
 
114
- _mint(receiver, lpToAccount);
117
+ _mint(receiver, netLpOut);
115
118
 
116
119
  _writeState(market);
117
120
 
118
- emit Mint(receiver, lpToAccount, scyUsed, ptUsed);
121
+ emit Mint(receiver, netLpOut, scyUsed, ptUsed);
119
122
  }
120
123
 
121
124
  /**
@@ -125,21 +128,21 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
125
128
  function burn(address receiverScy, address receiverPt)
126
129
  external
127
130
  nonReentrant
128
- returns (uint256 scyToAccount, uint256 ptToAccount)
131
+ returns (uint256 netScyOut, uint256 netPtOut)
129
132
  {
130
- MarketState memory market = readState(true);
133
+ MarketState memory market = readState();
131
134
 
132
135
  uint256 lpToRemove = balanceOf(address(this));
133
136
  _burn(address(this), lpToRemove);
134
137
 
135
- (scyToAccount, ptToAccount) = market.removeLiquidity(lpToRemove);
138
+ (netScyOut, netPtOut) = market.removeLiquidity(lpToRemove);
136
139
 
137
- IERC20(SCY).safeTransfer(receiverScy, scyToAccount);
138
- IERC20(PT).safeTransfer(receiverPt, ptToAccount);
140
+ if (receiverScy != address(this)) IERC20(SCY).safeTransfer(receiverScy, netScyOut);
141
+ if (receiverPt != address(this)) IERC20(PT).safeTransfer(receiverPt, netPtOut);
139
142
 
140
143
  _writeState(market);
141
144
 
142
- emit Burn(receiverScy, receiverPt, lpToRemove, scyToAccount, ptToAccount);
145
+ emit Burn(receiverScy, receiverPt, lpToRemove, netScyOut, netPtOut);
143
146
  }
144
147
 
145
148
  /**
@@ -157,7 +160,7 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
157
160
  uint256 exactPtIn,
158
161
  bytes calldata data
159
162
  ) external nonReentrant notExpired returns (uint256 netScyOut, uint256 netScyToReserve) {
160
- MarketState memory market = readState(true);
163
+ MarketState memory market = readState();
161
164
 
162
165
  (netScyOut, netScyToReserve) = market.swapExactPtForScy(
163
166
  YT.newIndex(),
@@ -165,7 +168,7 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
165
168
  block.timestamp
166
169
  );
167
170
 
168
- IERC20(SCY).safeTransfer(receiver, netScyOut);
171
+ if (receiver != address(this)) IERC20(SCY).safeTransfer(receiver, netScyOut);
169
172
  IERC20(SCY).safeTransfer(market.treasury, netScyToReserve);
170
173
 
171
174
  _writeState(market);
@@ -194,7 +197,7 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
194
197
  uint256 exactPtOut,
195
198
  bytes calldata data
196
199
  ) external nonReentrant notExpired returns (uint256 netScyIn, uint256 netScyToReserve) {
197
- MarketState memory market = readState(true);
200
+ MarketState memory market = readState();
198
201
 
199
202
  (netScyIn, netScyToReserve) = market.swapScyForExactPt(
200
203
  YT.newIndex(),
@@ -202,7 +205,7 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
202
205
  block.timestamp
203
206
  );
204
207
 
205
- IERC20(PT).safeTransfer(receiver, exactPtOut);
208
+ if (receiver != address(this)) IERC20(PT).safeTransfer(receiver, exactPtOut);
206
209
  IERC20(SCY).safeTransfer(market.treasury, netScyToReserve);
207
210
 
208
211
  _writeState(market);
@@ -222,7 +225,7 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
222
225
 
223
226
  /// @notice force balances to match reserves
224
227
  function skim() external nonReentrant {
225
- MarketState memory market = readState(true);
228
+ MarketState memory market = readState();
226
229
  uint256 excessPt = IERC20(PT).balanceOf(address(this)) - market.totalPt.Uint();
227
230
  uint256 excessScy = IERC20(SCY).balanceOf(address(this)) - market.totalScy.Uint();
228
231
  IERC20(PT).safeTransfer(market.treasury, excessPt);
@@ -237,64 +240,97 @@ contract PendleMarket is PendleERC20, PendleGauge, IPMarket {
237
240
  return _getRewardTokens();
238
241
  }
239
242
 
240
- function readTokens()
241
- external
243
+ /*///////////////////////////////////////////////////////////////
244
+ ORACLE
245
+ //////////////////////////////////////////////////////////////*/
246
+
247
+ function observe(uint32[] memory secondsAgos)
248
+ public
242
249
  view
243
- returns (
244
- ISuperComposableYield _SCY,
245
- IPPrincipalToken _PT,
246
- IPYieldToken _YT
247
- )
250
+ returns (uint216[] memory lnImpliedRateCumulative)
248
251
  {
249
- _SCY = SCY;
250
- _PT = PT;
251
- _YT = YT;
252
+ return
253
+ observations.observe(
254
+ uint32(block.timestamp),
255
+ secondsAgos,
256
+ _storage.lastLnImpliedRate,
257
+ _storage.observationIndex,
258
+ _storage.observationCardinality
259
+ );
252
260
  }
253
261
 
254
- function isExpired() public view returns (bool) {
255
- return MiniHelpers.isCurrentlyExpired(expiry);
262
+ function increaseObservationsCardinalityNext(uint16 cardinalityNext) external nonReentrant {
263
+ uint16 cardinalityNextOld = _storage.observationCardinalityNext;
264
+ uint16 cardinalityNextNew = observations.grow(cardinalityNextOld, cardinalityNext);
265
+ if (cardinalityNextOld != cardinalityNextNew) {
266
+ _storage.observationCardinalityNext = cardinalityNextNew;
267
+ emit IncreaseObservationCardinalityNext(cardinalityNextOld, cardinalityNextNew);
268
+ }
256
269
  }
257
270
 
271
+ /*///////////////////////////////////////////////////////////////
272
+ READ/WRITE STATES
273
+ //////////////////////////////////////////////////////////////*/
274
+
258
275
  /**
259
276
  * @notice read the state of the market from storage into memory for gas-efficient manipulation
260
- * @param updateRateOracle if set to true, the oracleRate will be updated, which will take ~6k of gas. If router wants
261
- to do external calculations, normally this can be set to false
262
277
  */
263
- function readState(bool updateRateOracle) public view returns (MarketState memory market) {
278
+ function readState() public view returns (MarketState memory market) {
264
279
  market.totalPt = _storage.totalPt;
265
280
  market.totalScy = _storage.totalScy;
266
281
  market.totalLp = totalSupply().Int();
267
- market.oracleRate = _storage.oracleRate;
268
282
 
269
- (
270
- market.treasury,
271
- market.lnFeeRateRoot,
272
- market.rateOracleTimeWindow,
273
- market.reserveFeePercent
274
- ) = IPMarketFactory(factory).marketConfig();
283
+ (market.treasury, market.lnFeeRateRoot, market.reserveFeePercent) = IPMarketFactory(
284
+ factory
285
+ ).marketConfig();
275
286
 
276
287
  market.scalarRoot = scalarRoot;
277
288
  market.expiry = expiry;
278
289
 
279
290
  market.lastLnImpliedRate = _storage.lastLnImpliedRate;
280
- market.lastTradeTime = _storage.lastTradeTime;
281
-
282
- if (updateRateOracle) {
283
- // must happen after lastLnImpliedRate & lastTradeTime is filled
284
- market.oracleRate = market.getNewRateOracle(block.timestamp);
285
- }
286
291
  }
287
292
 
288
293
  /// @notice write back the state of the market from memory to storage
289
294
  function _writeState(MarketState memory market) internal {
295
+ uint96 lastLnImpliedRate96 = market.lastLnImpliedRate.Uint96();
296
+
290
297
  _storage.totalPt = market.totalPt.Int128();
291
298
  _storage.totalScy = market.totalScy.Int128();
292
- _storage.lastLnImpliedRate = market.lastLnImpliedRate.Uint96();
293
- _storage.oracleRate = market.oracleRate.Uint96();
294
- _storage.lastTradeTime = market.lastTradeTime.Uint32();
299
+ _storage.lastLnImpliedRate = lastLnImpliedRate96;
300
+
301
+ (_storage.observationIndex, _storage.observationCardinality) = observations.write(
302
+ _storage.observationIndex,
303
+ uint32(block.timestamp),
304
+ lastLnImpliedRate96,
305
+ _storage.observationCardinality,
306
+ _storage.observationCardinalityNext
307
+ );
308
+
295
309
  emit UpdateImpliedRate(block.timestamp, market.lastLnImpliedRate);
296
310
  }
297
311
 
312
+ /*///////////////////////////////////////////////////////////////
313
+ TRIVIAL FUNCTIONS
314
+ //////////////////////////////////////////////////////////////*/
315
+
316
+ function readTokens()
317
+ external
318
+ view
319
+ returns (
320
+ ISuperComposableYield _SCY,
321
+ IPPrincipalToken _PT,
322
+ IPYieldToken _YT
323
+ )
324
+ {
325
+ _SCY = SCY;
326
+ _PT = PT;
327
+ _YT = YT;
328
+ }
329
+
330
+ function isExpired() public view returns (bool) {
331
+ return MiniHelpers.isCurrentlyExpired(expiry);
332
+ }
333
+
298
334
  /*///////////////////////////////////////////////////////////////
299
335
  PENDLE GAUGE - RELATED
300
336
  //////////////////////////////////////////////////////////////*/
@@ -1,28 +1,26 @@
1
1
  // SPDX-License-Identifier: GPL-3.0-or-later
2
2
  pragma solidity 0.8.15;
3
3
  import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
4
- import "@openzeppelin/contracts/proxy/utils/Initializable.sol";
5
4
 
6
5
  import "../../interfaces/IPMarket.sol";
7
6
  import "../../interfaces/IPYieldContractFactory.sol";
8
7
  import "../../interfaces/IPMarketFactory.sol";
9
8
 
10
9
  import "../../libraries/helpers/SSTORE2Deployer.sol";
11
- import "../../periphery/PermissionsV2Upg.sol";
10
+ import "../../periphery/BoringOwnableUpgradeable.sol";
12
11
 
13
12
  import "./PendleMarket.sol";
14
13
  import "../LiquidityMining/PendleGauge.sol";
15
14
 
16
- contract PendleMarketFactory is PermissionsV2Upg, Initializable, IPMarketFactory {
15
+ contract PendleMarketFactory is BoringOwnableUpgradeable, IPMarketFactory {
17
16
  using EnumerableSet for EnumerableSet.AddressSet;
18
17
 
19
18
  struct MarketConfig {
20
19
  address treasury;
21
20
  uint96 lnFeeRateRoot;
22
21
  // 1 SLOT = 256 bits
23
- uint32 rateOracleTimeWindow;
24
22
  uint8 reserveFeePercent;
25
- // 1 SLOT = 40 bits
23
+ // 1 SLOT = 8 bits
26
24
  }
27
25
 
28
26
  uint256 private constant MIN_RATE_ORACLE_TIME_WINDOW = 300 seconds;
@@ -41,28 +39,26 @@ contract PendleMarketFactory is PermissionsV2Upg, Initializable, IPMarketFactory
41
39
  MarketConfig public marketConfig;
42
40
 
43
41
  constructor(
44
- address _governanceManager,
45
- address _yieldContractFactory,
46
- address _treasury,
47
- uint96 _lnFeeRateRoot,
48
- uint32 _rateOracleTimeWindow,
49
- uint8 _reserveFeePercent
50
- ) PermissionsV2Upg(_governanceManager) {
42
+ address _yieldContractFactory
43
+ ) {
51
44
  require(_yieldContractFactory != address(0), "zero address");
52
45
  yieldContractFactory = _yieldContractFactory;
53
46
  maxLnFeeRateRoot = uint256(LogExpMath.ln(int256((105 * Math.IONE) / 100))); // ln(1.05)
54
-
55
- setTreasury(_treasury);
56
- setlnFeeRateRoot(_lnFeeRateRoot);
57
- setRateOracleTimeWindow(_rateOracleTimeWindow);
58
- setReserveFeePercent(_reserveFeePercent);
59
47
  }
60
48
 
61
49
  function initialize(
50
+ address _treasury,
51
+ uint96 _lnFeeRateRoot,
52
+ uint8 _reserveFeePercent,
62
53
  address newVePendle,
63
54
  address newGaugeController,
64
55
  bytes memory _marketCreationCode
65
- ) external onlyGovernance initializer {
56
+ ) external initializer {
57
+ __BoringOwnable_init();
58
+ setTreasury(_treasury);
59
+ setlnFeeRateRoot(_lnFeeRateRoot);
60
+ setReserveFeePercent(_reserveFeePercent);
61
+
66
62
  require(newVePendle != address(0) && newGaugeController != address(0), "zero address");
67
63
  vePendle = newVePendle;
68
64
  gaugeController = newGaugeController;
@@ -104,25 +100,19 @@ contract PendleMarketFactory is PermissionsV2Upg, Initializable, IPMarketFactory
104
100
  return marketConfig.treasury;
105
101
  }
106
102
 
107
- function setTreasury(address newTreasury) public onlyGovernance {
103
+ function setTreasury(address newTreasury) public onlyOwner {
108
104
  require(newTreasury != address(0), "zero address");
109
105
  marketConfig.treasury = newTreasury;
110
106
  _emitNewMarketConfigEvent();
111
107
  }
112
108
 
113
- function setlnFeeRateRoot(uint96 newlnFeeRateRoot) public onlyGovernance {
109
+ function setlnFeeRateRoot(uint96 newlnFeeRateRoot) public onlyOwner {
114
110
  require(newlnFeeRateRoot <= maxLnFeeRateRoot, "invalid fee rate root");
115
111
  marketConfig.lnFeeRateRoot = newlnFeeRateRoot;
116
112
  _emitNewMarketConfigEvent();
117
113
  }
118
114
 
119
- function setRateOracleTimeWindow(uint32 newRateOracleTimeWindow) public onlyGovernance {
120
- require(newRateOracleTimeWindow >= MIN_RATE_ORACLE_TIME_WINDOW, "invalid time window");
121
- marketConfig.rateOracleTimeWindow = newRateOracleTimeWindow;
122
- _emitNewMarketConfigEvent();
123
- }
124
-
125
- function setReserveFeePercent(uint8 newReserveFeePercent) public onlyGovernance {
115
+ function setReserveFeePercent(uint8 newReserveFeePercent) public onlyOwner {
126
116
  require(newReserveFeePercent <= 100, "invalid reserve fee percent");
127
117
  marketConfig.reserveFeePercent = newReserveFeePercent;
128
118
  _emitNewMarketConfigEvent();
@@ -130,11 +120,6 @@ contract PendleMarketFactory is PermissionsV2Upg, Initializable, IPMarketFactory
130
120
 
131
121
  function _emitNewMarketConfigEvent() internal {
132
122
  MarketConfig memory local = marketConfig;
133
- emit NewMarketConfig(
134
- local.treasury,
135
- local.lnFeeRateRoot,
136
- local.rateOracleTimeWindow,
137
- local.reserveFeePercent
138
- );
123
+ emit NewMarketConfig(local.treasury, local.lnFeeRateRoot, local.reserveFeePercent);
139
124
  }
140
125
  }