@pendle/core-v2 0.11.11-testnet → 0.12.1-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 (403) hide show
  1. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  2. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.json +2 -2
  3. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.dbg.json +1 -1
  4. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.json +199 -30
  5. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Convex/ConvexCurveLP/Pendle3CrvAndTokenSCY.sol/Pendle3CrvAndTokenSCY.dbg.json +4 -0
  6. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Convex/ConvexCurveLP/Pendle3CrvAndTokenSCY.sol/Pendle3CrvAndTokenSCY.json +1030 -0
  7. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Convex/ConvexCurveLP/PendleConvexCurveLP2PoolSCY.sol/PendleConvexCurveLP2PoolSCY.dbg.json +4 -0
  8. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Convex/ConvexCurveLP/PendleConvexCurveLP2PoolSCY.sol/PendleConvexCurveLP2PoolSCY.json +1025 -0
  9. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Convex/ConvexCurveLP/PendleConvexCurveLPSCY.sol/PendleConvexCurveLPSCY.dbg.json +4 -0
  10. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Convex/ConvexCurveLP/PendleConvexCurveLPSCY.sol/PendleConvexCurveLPSCY.json +948 -0
  11. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Convex/Pendle3CrvHelper.sol/Pendle3CrvHelper.dbg.json +4 -0
  12. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Convex/Pendle3CrvHelper.sol/Pendle3CrvHelper.json +76 -0
  13. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +1 -1
  14. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.json +140 -25
  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 +138 -23
  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 +138 -23
  19. package/build/artifacts/contracts/core/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.dbg.json +4 -0
  20. package/build/artifacts/contracts/core/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.json +310 -0
  21. package/build/artifacts/contracts/core/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.dbg.json +4 -0
  22. package/build/artifacts/contracts/core/LiquidityMining/{CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.json → CrossChainMsg/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.json} +18 -85
  23. package/build/artifacts/contracts/core/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.dbg.json +4 -0
  24. package/build/artifacts/contracts/core/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.json +336 -0
  25. package/build/artifacts/contracts/core/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol/PendleMsgSenderAppUpg.dbg.json +4 -0
  26. package/build/artifacts/contracts/core/LiquidityMining/{CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.json → CrossChainMsg/PendleMsgSenderAppUpg.sol/PendleMsgSenderAppUpg.json} +8 -21
  27. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/EpochResultManager.sol/EpochResultManager.dbg.json +4 -0
  28. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/EpochResultManager.sol/EpochResultManager.json +131 -0
  29. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.dbg.json +4 -0
  30. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.json +297 -0
  31. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorFactory.sol/PendleFeeDistributorFactory.dbg.json +4 -0
  32. package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorFactory.sol/PendleFeeDistributorFactory.json +376 -0
  33. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  34. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.json +11 -0
  35. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  36. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +29 -2
  37. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  38. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +40 -86
  39. package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  40. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  41. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +228 -40
  42. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  43. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.json +232 -12
  44. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +164 -47
  46. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +25 -93
  48. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  49. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  50. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +222 -9
  51. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  52. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +106 -5
  53. package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +1 -1
  54. package/build/artifacts/contracts/core/PendleERC20Permit.sol/PendleERC20Permit.dbg.json +4 -0
  55. package/build/artifacts/contracts/core/PendleERC20Permit.sol/PendleERC20Permit.json +329 -0
  56. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  57. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.json +13 -2
  58. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  59. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  60. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +87 -2
  61. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  62. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +80 -16
  63. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  64. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +164 -2
  65. package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
  66. package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +172 -4
  67. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.dbg.json +1 -1
  68. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.json +109 -2
  69. package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
  70. package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.json +57 -4
  71. package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.dbg.json +1 -1
  72. package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.json +7 -2
  73. package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
  74. package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.json +199 -4
  75. package/build/artifacts/contracts/core/actions/ActionSwapPTYT.sol/ActionSwapPTYT.dbg.json +1 -1
  76. package/build/artifacts/contracts/core/actions/ActionSwapPTYT.sol/ActionSwapPTYT.json +108 -2
  77. package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
  78. package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.json +146 -4
  79. package/build/artifacts/contracts/core/actions/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
  80. package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
  81. package/build/artifacts/contracts/interfaces/ConvexCurve/IBooster.sol/IBooster.dbg.json +4 -0
  82. package/build/artifacts/contracts/interfaces/ConvexCurve/IBooster.sol/IBooster.json +177 -0
  83. package/build/artifacts/contracts/interfaces/ConvexCurve/ICrvDepositor.sol/ICrvDepositor.dbg.json +4 -0
  84. package/build/artifacts/contracts/interfaces/ConvexCurve/ICrvDepositor.sol/ICrvDepositor.json +78 -0
  85. package/build/artifacts/contracts/interfaces/ConvexCurve/ICvxCrv.sol/ICvxCrv.dbg.json +4 -0
  86. package/build/artifacts/contracts/interfaces/ConvexCurve/ICvxCrv.sol/ICvxCrv.json +24 -0
  87. package/build/artifacts/contracts/interfaces/ConvexCurve/IRewards.sol/IRewards.dbg.json +4 -0
  88. package/build/artifacts/contracts/interfaces/ConvexCurve/IRewards.sol/IRewards.json +264 -0
  89. package/build/artifacts/contracts/interfaces/Curve/ICrvPool.sol/ICrvPool.dbg.json +4 -0
  90. package/build/artifacts/contracts/interfaces/Curve/ICrvPool.sol/ICrvPool.json +305 -0
  91. package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
  92. package/build/artifacts/contracts/interfaces/IAavePool.sol/IAavePool.dbg.json +1 -1
  93. package/build/artifacts/contracts/interfaces/IAaveRewardsController.sol/IAaveRewardsController.dbg.json +1 -1
  94. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.dbg.json +1 -1
  95. package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +1 -1
  96. package/build/artifacts/contracts/interfaces/IBoringOwnableUpgradeable.sol/IBoringOwnableUpgradeable.dbg.json +4 -0
  97. package/build/artifacts/contracts/interfaces/IBoringOwnableUpgradeable.sol/IBoringOwnableUpgradeable.json +34 -0
  98. package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +1 -1
  99. package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +1 -1
  100. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
  101. package/build/artifacts/contracts/interfaces/IEulerEToken.sol/IEulerEToken.dbg.json +1 -1
  102. package/build/artifacts/contracts/interfaces/IEulerMarkets.sol/IEulerMarkets.dbg.json +1 -1
  103. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
  104. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.json +31 -1
  105. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
  106. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
  108. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.json +30 -0
  109. package/build/artifacts/contracts/interfaces/IPActionSwapPTYT.sol/IPActionSwapPTYT.dbg.json +1 -1
  110. package/build/artifacts/contracts/interfaces/IPActionSwapPTYT.sol/IPActionSwapPTYT.json +10 -0
  111. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
  112. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.json +30 -0
  113. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  114. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +101 -1
  115. package/build/artifacts/contracts/interfaces/IPFeeDistributor.sol/IPFeeDistributor.dbg.json +4 -0
  116. package/build/artifacts/contracts/interfaces/IPFeeDistributor.sol/IPFeeDistributor.json +112 -0
  117. package/build/artifacts/contracts/interfaces/IPFeeDistributorFactory.sol/IPFeeDistributorFactory.dbg.json +4 -0
  118. package/build/artifacts/contracts/interfaces/IPFeeDistributorFactory.sol/IPFeeDistributorFactory.json +76 -0
  119. package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.dbg.json +1 -1
  120. package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +1 -1
  121. package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +1 -1
  122. package/build/artifacts/contracts/interfaces/IPGovernanceManager.sol/IPGovernanceManager.dbg.json +1 -1
  123. package/build/artifacts/contracts/interfaces/IPInterestManagerYT.sol/IPInterestManagerYT.dbg.json +1 -1
  124. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  125. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.json +13 -0
  126. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
  127. package/build/artifacts/contracts/interfaces/IPMarketSwapCallback.sol/IPMarketSwapCallback.dbg.json +1 -1
  128. package/build/artifacts/contracts/interfaces/IPMsgReceiverApp.sol/IPMsgReceiverApp.dbg.json +4 -0
  129. package/build/artifacts/contracts/interfaces/IPMsgReceiverApp.sol/IPMsgReceiverApp.json +24 -0
  130. package/build/artifacts/contracts/interfaces/IPMsgSendEndpoint.sol/IPMsgSendEndpoint.dbg.json +4 -0
  131. package/build/artifacts/contracts/interfaces/IPMsgSendEndpoint.sol/IPMsgSendEndpoint.json +63 -0
  132. package/build/artifacts/contracts/interfaces/IPPermissionsV2Upg.sol/IPermissionsV2Upg.dbg.json +1 -1
  133. package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
  134. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
  135. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  136. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.json +148 -0
  137. package/build/artifacts/contracts/interfaces/IPVotingEscrowMainchain.sol/IPVotingEscrowMainchain.dbg.json +4 -0
  138. package/build/artifacts/contracts/interfaces/{IPVotingEscrow.sol/IPVotingEscrow.json → IPVotingEscrowMainchain.sol/IPVotingEscrowMainchain.json} +88 -2
  139. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
  140. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
  141. package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +1 -1
  142. package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
  143. package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
  144. package/build/artifacts/contracts/interfaces/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
  145. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +1 -1
  146. package/build/artifacts/contracts/interfaces/ISAvax.sol/ISAvax.dbg.json +1 -1
  147. package/build/artifacts/contracts/interfaces/ISJoe.sol/ISJoe.dbg.json +1 -1
  148. package/build/artifacts/contracts/interfaces/IStETH.sol/IStETH.dbg.json +1 -1
  149. package/build/artifacts/contracts/interfaces/IStargateLPStaking.sol/IStargateLPStaking.dbg.json +1 -1
  150. package/build/artifacts/contracts/interfaces/IStargatePool.sol/IStargatePool.dbg.json +1 -1
  151. package/build/artifacts/contracts/interfaces/IStargateRouter.sol/IStargateRouter.dbg.json +1 -1
  152. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +1 -1
  153. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.json +4 -28
  154. package/build/artifacts/contracts/interfaces/IWAvax.sol/IWAvax.dbg.json +1 -1
  155. package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
  156. package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.dbg.json +1 -1
  157. package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.dbg.json +1 -1
  158. package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
  159. package/build/artifacts/contracts/libraries/Errors.sol/Errors.dbg.json +4 -0
  160. package/build/artifacts/contracts/libraries/Errors.sol/Errors.json +886 -0
  161. package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.dbg.json +1 -1
  162. package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.json +28 -2
  163. package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +1 -1
  164. package/build/artifacts/contracts/libraries/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  165. package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +1 -1
  166. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  167. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.json +2 -2
  168. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/CheckpointHelper.dbg.json +4 -0
  169. package/build/artifacts/contracts/libraries/{solmate/SSTORE2.sol/SSTORE2.json → VeHistoryLib.sol/CheckpointHelper.json} +4 -4
  170. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  171. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.json +2 -2
  172. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
  173. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.json +2 -2
  174. package/build/artifacts/contracts/libraries/helpers/BaseSplitCodeFactory.sol/BaseSplitCodeFactory.dbg.json +4 -0
  175. package/build/artifacts/contracts/libraries/helpers/BaseSplitCodeFactory.sol/BaseSplitCodeFactory.json +45 -0
  176. package/build/artifacts/contracts/libraries/helpers/BaseSplitCodeFactory.sol/CodeDeployer.dbg.json +4 -0
  177. package/build/artifacts/contracts/libraries/helpers/{SSTORE2Deployer.sol/SSTORE2Deployer.json → BaseSplitCodeFactory.sol/CodeDeployer.json} +4 -4
  178. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
  179. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
  180. package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.dbg.json +1 -1
  181. package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.json +2 -2
  182. package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  183. package/build/artifacts/contracts/libraries/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.dbg.json +1 -1
  184. package/build/artifacts/contracts/libraries/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.json +2 -2
  185. package/build/artifacts/contracts/libraries/kyberswap/IMultihopRouter.sol/IMultihopRouter.dbg.json +1 -1
  186. package/build/artifacts/contracts/libraries/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +1 -1
  187. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
  188. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
  189. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxPtInLib.json +2 -2
  190. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
  191. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxPtOutLib.json +2 -2
  192. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  193. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.json +2 -2
  194. package/build/artifacts/contracts/libraries/math/Math.sol/Math.dbg.json +1 -1
  195. package/build/artifacts/contracts/libraries/math/Math.sol/Math.json +2 -2
  196. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.dbg.json +1 -1
  197. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.json +2 -2
  198. package/build/artifacts/contracts/offchain-helpers/BaseSplitCodeFactoryContract.sol/BaseSplitCodeFactoryContract.dbg.json +4 -0
  199. package/build/artifacts/contracts/offchain-helpers/BaseSplitCodeFactoryContract.sol/BaseSplitCodeFactoryContract.json +167 -0
  200. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +1 -1
  201. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +182 -4
  202. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
  203. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +142 -66
  204. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.dbg.json +1 -1
  205. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.dbg.json +1 -1
  206. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol +3 -1
  207. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +19 -16
  208. package/contracts/SuperComposableYield/SCY-implementations/Convex/ConvexCurveLP/Pendle3CrvAndTokenSCY.sol +135 -0
  209. package/contracts/SuperComposableYield/SCY-implementations/Convex/ConvexCurveLP/PendleConvexCurveLP2PoolSCY.sol +96 -0
  210. package/contracts/SuperComposableYield/SCY-implementations/Convex/ConvexCurveLP/PendleConvexCurveLPSCY.sol +215 -0
  211. package/contracts/SuperComposableYield/SCY-implementations/Convex/Pendle3CrvHelper.sol +83 -0
  212. package/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol +10 -15
  213. package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +30 -43
  214. package/contracts/core/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol +74 -0
  215. package/contracts/core/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol +38 -0
  216. package/contracts/core/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol +83 -0
  217. package/contracts/core/LiquidityMining/{CelerAbstracts/CelerSenderUpg.sol → CrossChainMsg/PendleMsgSenderAppUpg.sol} +12 -13
  218. package/contracts/core/LiquidityMining/FeeDistributor/EpochResultManager.sol +159 -0
  219. package/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributor.sol +96 -0
  220. package/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorFactory.sol +68 -0
  221. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +4 -3
  222. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol +6 -2
  223. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol +12 -4
  224. package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +29 -19
  225. package/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +27 -19
  226. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +63 -27
  227. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +6 -5
  228. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +2 -2
  229. package/contracts/core/Market/PendleMarket.sol +26 -24
  230. package/contracts/core/Market/PendleMarketFactory.sol +41 -20
  231. package/contracts/core/PendleERC20Permit.sol +84 -0
  232. package/contracts/core/PendleRouter.sol +2 -1
  233. package/contracts/core/YieldContracts/PendlePrincipalToken.sol +8 -7
  234. package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +37 -22
  235. package/contracts/core/YieldContracts/PendleYieldToken.sol +106 -35
  236. package/contracts/core/actions/ActionAddRemoveLiq.sol +58 -41
  237. package/contracts/core/actions/ActionCallback.sol +24 -14
  238. package/contracts/core/actions/ActionMintRedeem.sol +11 -5
  239. package/contracts/core/actions/ActionMisc.sol +2 -1
  240. package/contracts/core/actions/ActionSwapPT.sol +38 -19
  241. package/contracts/core/actions/ActionSwapPTYT.sol +7 -6
  242. package/contracts/core/actions/ActionSwapYT.sol +36 -19
  243. package/contracts/core/actions/base/ActionBaseMintRedeem.sol +15 -8
  244. package/contracts/interfaces/ConvexCurve/IBooster.sol +32 -0
  245. package/contracts/interfaces/ConvexCurve/ICrvDepositor.sol +20 -0
  246. package/contracts/interfaces/ConvexCurve/ICvxCrv.sol +6 -0
  247. package/contracts/interfaces/ConvexCurve/IRewards.sol +38 -0
  248. package/contracts/interfaces/Curve/ICrvPool.sol +69 -0
  249. package/contracts/interfaces/IBoringOwnableUpgradeable.sol +10 -0
  250. package/contracts/interfaces/IPActionAddRemoveLiq.sol +7 -7
  251. package/contracts/interfaces/IPActionSwapPT.sol +6 -6
  252. package/contracts/interfaces/IPActionSwapPTYT.sol +2 -2
  253. package/contracts/interfaces/IPActionSwapYT.sol +13 -13
  254. package/contracts/interfaces/IPFeeDistributor.sol +19 -0
  255. package/contracts/interfaces/IPFeeDistributorFactory.sol +14 -0
  256. package/contracts/interfaces/IPMarket.sol +2 -0
  257. package/contracts/interfaces/IPMsgReceiverApp.sol +7 -0
  258. package/contracts/interfaces/IPMsgSendEndpoint.sol +17 -0
  259. package/contracts/interfaces/IPVotingController.sol +22 -0
  260. package/contracts/interfaces/{IPVotingEscrow.sol → IPVotingEscrowMainchain.sol} +11 -1
  261. package/contracts/interfaces/ISuperComposableYield.sol +2 -7
  262. package/contracts/libraries/Errors.sol +121 -0
  263. package/contracts/libraries/OracleLib.sol +6 -3
  264. package/contracts/libraries/VeBalanceLib.sol +5 -1
  265. package/contracts/libraries/VeHistoryLib.sol +20 -31
  266. package/contracts/libraries/helpers/ArrayLib.sol +0 -17
  267. package/contracts/libraries/helpers/BaseSplitCodeFactory.sol +288 -0
  268. package/contracts/libraries/helpers/TokenHelper.sol +4 -0
  269. package/contracts/libraries/kyberswap/AggregationRouterHelper.sol +0 -7
  270. package/contracts/libraries/math/MarketMathCore.sol +29 -25
  271. package/contracts/libraries/math/Math.sol +6 -2
  272. package/contracts/libraries/math/WeekMath.sol +2 -2
  273. package/contracts/offchain-helpers/BaseSplitCodeFactoryContract.sol +43 -0
  274. package/contracts/offchain-helpers/MarketMathStatic.sol +36 -36
  275. package/contracts/offchain-helpers/RouterStatic.sol +53 -37
  276. package/deployments/43113-core.json +11 -10
  277. package/deployments/43113-markets/benqi-market-QI-USDC-FEB-2ND.json +8 -0
  278. package/deployments/43113-markets/benqi-market-QI-WETH-DEC-1ST.json +8 -0
  279. package/deployments/43113-testenv.json +9 -9
  280. package/deployments/80001-core.json +10 -9
  281. package/deployments/80001-markets/benqi-market-QI-USDC-FEB-2ND.json +8 -0
  282. package/deployments/80001-markets/benqi-market-QI-WETH-DEC-1ST.json +8 -0
  283. package/deployments/80001-testenv.json +16 -16
  284. package/package.json +1 -1
  285. package/typechain-types/ActionAddRemoveLiq.ts +18 -6
  286. package/typechain-types/ActionSwapPT.ts +18 -6
  287. package/typechain-types/ActionSwapPTYT.ts +6 -2
  288. package/typechain-types/ActionSwapYT.ts +18 -6
  289. package/typechain-types/IPActionAddRemoveLiq.ts +19 -7
  290. package/typechain-types/IPActionSwapPT.ts +18 -6
  291. package/typechain-types/IPActionSwapPTYT.ts +6 -2
  292. package/typechain-types/IPActionSwapYT.ts +18 -6
  293. package/typechain-types/IPAllAction.ts +61 -21
  294. package/typechain-types/IPBatchSeller.ts +19 -37
  295. package/typechain-types/IPMarket.ts +13 -0
  296. package/typechain-types/IPVotingController.ts +244 -7
  297. package/typechain-types/ISuperComposableYield.ts +7 -46
  298. package/typechain-types/MarketMathStatic.ts +139 -10
  299. package/typechain-types/PendleBatchSeller.ts +72 -50
  300. package/typechain-types/PendleGaugeControllerSidechainUpg.ts +28 -149
  301. package/typechain-types/PendleMarket.ts +104 -0
  302. package/typechain-types/PendleMarketFactory.ts +76 -13
  303. package/typechain-types/PendlePrincipalToken.ts +104 -0
  304. package/typechain-types/PendleQiTokenSCY.ts +111 -46
  305. package/typechain-types/PendleVotingControllerUpg.ts +133 -77
  306. package/typechain-types/PendleWstEthSCY.ts +111 -46
  307. package/typechain-types/PendleYieldContractFactory.ts +84 -21
  308. package/typechain-types/PendleYieldToken.ts +175 -0
  309. package/typechain-types/RouterStatic.ts +136 -67
  310. package/typechain-types/SCYBase.ts +111 -46
  311. package/typechain-types/SCYBaseWithRewards.ts +111 -46
  312. package/typechain-types/VotingControllerStorageUpg.ts +246 -27
  313. package/typechain-types/VotingEscrowPendleMainchain.ts +81 -93
  314. package/typechain-types/VotingEscrowPendleSidechain.ts +26 -171
  315. package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +169 -1
  316. package/typechain-types/factories/ActionCallback__factory.ts +108 -1
  317. package/typechain-types/factories/ActionMintRedeem__factory.ts +54 -1
  318. package/typechain-types/factories/ActionMisc__factory.ts +6 -1
  319. package/typechain-types/factories/ActionSwapPTYT__factory.ts +107 -1
  320. package/typechain-types/factories/ActionSwapPT__factory.ts +196 -1
  321. package/typechain-types/factories/ActionSwapYT__factory.ts +143 -1
  322. package/typechain-types/factories/AggregationRouterHelper__factory.ts +1 -1
  323. package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +31 -1
  324. package/typechain-types/factories/IPActionSwapPTYT__factory.ts +10 -0
  325. package/typechain-types/factories/IPActionSwapPT__factory.ts +30 -0
  326. package/typechain-types/factories/IPActionSwapYT__factory.ts +30 -0
  327. package/typechain-types/factories/IPAllAction__factory.ts +101 -1
  328. package/typechain-types/factories/IPBatchSeller__factory.ts +4 -10
  329. package/typechain-types/factories/IPMarket__factory.ts +13 -0
  330. package/typechain-types/factories/IPVotingController__factory.ts +148 -0
  331. package/typechain-types/factories/ISuperComposableYield__factory.ts +4 -28
  332. package/typechain-types/factories/MarketMathStatic__factory.ts +181 -3
  333. package/typechain-types/factories/OracleLib__factory.ts +27 -1
  334. package/typechain-types/factories/Pendle3CrvAndTokenSCY__factory.ts +1 -1
  335. package/typechain-types/factories/Pendle3CrvHelper__factory.ts +1 -1
  336. package/typechain-types/factories/PendleBatchSeller__factory.ts +40 -118
  337. package/typechain-types/factories/PendleConvexCurveLP2PoolSCY__factory.ts +1 -1
  338. package/typechain-types/factories/PendleERC20Permit__factory.ts +1 -1
  339. package/typechain-types/factories/PendleFeeDistributorFactory__factory.ts +1 -1
  340. package/typechain-types/factories/PendleFeeDistributor__factory.ts +1 -1
  341. package/typechain-types/factories/PendleGaugeControllerBaseUpg__factory.ts +11 -0
  342. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +28 -1
  343. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +48 -86
  344. package/typechain-types/factories/PendleMarketFactory__factory.ts +129 -9
  345. package/typechain-types/factories/PendleMarket__factory.ts +214 -1
  346. package/typechain-types/factories/PendlePrincipalToken__factory.ts +86 -1
  347. package/typechain-types/factories/PendleQiTokenHelper__factory.ts +1 -1
  348. package/typechain-types/factories/PendleQiTokenSCY__factory.ts +198 -29
  349. package/typechain-types/factories/PendleRouter__factory.ts +12 -1
  350. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +235 -40
  351. package/typechain-types/factories/PendleWstEthSCY__factory.ts +137 -22
  352. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +103 -20
  353. package/typechain-types/factories/PendleYieldToken__factory.ts +163 -1
  354. package/typechain-types/factories/PtAMMArb__factory.ts +1 -1
  355. package/typechain-types/factories/RouterStatic__factory.ts +95 -19
  356. package/typechain-types/factories/SCYBaseWithRewards__factory.ts +136 -21
  357. package/typechain-types/factories/SCYBase__factory.ts +136 -21
  358. package/typechain-types/factories/VotingControllerStorageUpg__factory.ts +232 -12
  359. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +171 -47
  360. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +31 -93
  361. package/typechain-types/hardhat.d.ts +393 -114
  362. package/typechain-types/index.ts +36 -66
  363. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +0 -4
  364. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.json +0 -810
  365. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +0 -4
  366. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.json +0 -10
  367. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.dbg.json +0 -4
  368. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.json +0 -833
  369. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.dbg.json +0 -4
  370. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.json +0 -723
  371. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.dbg.json +0 -4
  372. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.json +0 -728
  373. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +0 -4
  374. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.json +0 -705
  375. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.dbg.json +0 -4
  376. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.json +0 -864
  377. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultSCY.sol/PendleYearnVaultSCY.dbg.json +0 -4
  378. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultSCY.sol/PendleYearnVaultSCY.json +0 -718
  379. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.dbg.json +0 -4
  380. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.json +0 -784
  381. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.dbg.json +0 -4
  382. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +0 -4
  383. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +0 -4
  384. package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.dbg.json +0 -4
  385. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +0 -4
  386. package/build/artifacts/contracts/offchain-helpers/SSTORE2DeployerContract.sol/SSTORE2DeployerContract.dbg.json +0 -4
  387. package/build/artifacts/contracts/offchain-helpers/SSTORE2DeployerContract.sol/SSTORE2DeployerContract.json +0 -134
  388. package/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol +0 -161
  389. package/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol +0 -126
  390. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol +0 -242
  391. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol +0 -146
  392. package/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol +0 -176
  393. package/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol +0 -129
  394. package/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol +0 -193
  395. package/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultSCY.sol +0 -155
  396. package/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol +0 -182
  397. package/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol +0 -53
  398. package/contracts/libraries/helpers/SSTORE2Deployer.sol +0 -30
  399. package/contracts/libraries/solmate/SSTORE2.sol +0 -99
  400. package/contracts/offchain-helpers/SSTORE2DeployerContract.sol +0 -21
  401. package/deployments/43113-markets/benqi-market-10D931.json +0 -8
  402. package/deployments/43113-markets/benqi-market-9fbD64.json +0 -8
  403. package/deployments/43113-markets/benqi-market-A12361.json +0 -8
@@ -47,12 +47,8 @@ contract PendleWstEthSCY is SCYBase {
47
47
  if (tokenIn == stETH) {
48
48
  amountStETH = amountDeposited;
49
49
  } else {
50
- uint256 stETHBalanceBefore = _selfBalance(stETH);
51
- if (tokenIn == wETH) {
52
- IWETH(wETH).withdraw(amountDeposited);
53
- }
54
- IStETH(stETH).submit{ value: amountDeposited }(address(0));
55
- amountStETH = _selfBalance(stETH) - stETHBalanceBefore;
50
+ if (tokenIn == wETH) IWETH(wETH).withdraw(amountDeposited);
51
+ amountStETH = IStETH(stETH).submit{ value: amountDeposited }(address(0));
56
52
  }
57
53
  amountSharesOut = IWstETH(wstETH).wrap(amountStETH);
58
54
  }
@@ -64,17 +60,17 @@ contract PendleWstEthSCY is SCYBase {
64
60
  * The shares are redeemed into the same amount of wstETH. If `tokenOut` is stETH, the function also
65
61
  * unwraps said amount of wstETH into stETH for redemption.
66
62
  */
67
- function _redeem(address tokenOut, uint256 amountSharesToRedeem)
68
- internal
69
- virtual
70
- override
71
- returns (uint256 amountTokenOut)
72
- {
63
+ function _redeem(
64
+ address receiver,
65
+ address tokenOut,
66
+ uint256 amountSharesToRedeem
67
+ ) internal virtual override returns (uint256 amountTokenOut) {
73
68
  if (tokenOut == wstETH) {
74
69
  amountTokenOut = amountSharesToRedeem;
75
70
  } else {
76
71
  amountTokenOut = IWstETH(wstETH).unwrap(amountSharesToRedeem);
77
72
  }
73
+ _transferOut(tokenOut, receiver, amountTokenOut);
78
74
  }
79
75
 
80
76
  /*///////////////////////////////////////////////////////////////
@@ -103,7 +99,7 @@ contract PendleWstEthSCY is SCYBase {
103
99
  else {
104
100
  uint256 amountStETH;
105
101
  if (tokenIn == stETH) {
106
- amountStETH = amountTokenToDeposit;
102
+ amountStETH = amountTokenToDeposit;
107
103
  } else {
108
104
  amountStETH = IStETH(stETH).getSharesByPooledEth(amountTokenToDeposit);
109
105
  }
@@ -124,10 +120,9 @@ contract PendleWstEthSCY is SCYBase {
124
120
  function getTokensIn() public view virtual override returns (address[] memory res) {
125
121
  res = new address[](4);
126
122
  res[0] = NATIVE;
127
- res[1] = wETH;
123
+ res[1] = wETH;
128
124
  res[2] = stETH;
129
125
  res[3] = wstETH;
130
-
131
126
  }
132
127
 
133
128
  function getTokensOut() public view virtual override returns (address[] memory res) {
@@ -7,9 +7,10 @@ import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
7
7
  import "../../libraries/math/Math.sol";
8
8
  import "../../libraries/SCY/SCYUtils.sol";
9
9
  import "../../libraries/helpers/TokenHelper.sol";
10
- import "../../../contracts/core/PendleERC20.sol";
10
+ import "../../libraries/Errors.sol";
11
+ import "../../../contracts/core/PendleERC20Permit.sol";
11
12
 
12
- abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
13
+ abstract contract SCYBase is ISuperComposableYield, PendleERC20Permit, TokenHelper {
13
14
  using Math for uint256;
14
15
 
15
16
  address public immutable yieldToken;
@@ -18,7 +19,7 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
18
19
  string memory _name,
19
20
  string memory _symbol,
20
21
  address _yieldToken
21
- ) PendleERC20(_name, _symbol, IERC20Metadata(_yieldToken).decimals()) {
22
+ ) PendleERC20Permit(_name, _symbol, IERC20Metadata(_yieldToken).decimals()) {
22
23
  yieldToken = _yieldToken;
23
24
  }
24
25
 
@@ -38,14 +39,14 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
38
39
  uint256 amountTokenToDeposit,
39
40
  uint256 minSharesOut
40
41
  ) external payable nonReentrant returns (uint256 amountSharesOut) {
41
- require(isValidTokenIn(tokenIn), "SCY: Invalid tokenIn");
42
- require(amountTokenToDeposit != 0, "SCY: amountTokenToDeposit cannot be 0");
42
+ if (!isValidTokenIn(tokenIn)) revert Errors.SCYInvalidTokenIn(tokenIn);
43
+ if (amountTokenToDeposit == 0) revert Errors.SCYZeroDeposit();
43
44
 
44
- if (tokenIn == NATIVE) require(msg.value == amountTokenToDeposit, "SCY: eth mismatch");
45
- else _transferIn(tokenIn, msg.sender, amountTokenToDeposit);
45
+ _transferIn(tokenIn, msg.sender, amountTokenToDeposit);
46
46
 
47
47
  amountSharesOut = _deposit(tokenIn, amountTokenToDeposit);
48
- require(amountSharesOut >= minSharesOut, "SCY: insufficient out");
48
+ if (amountSharesOut < minSharesOut)
49
+ revert Errors.SCYInsufficientSharesOut(amountSharesOut, minSharesOut);
49
50
 
50
51
  _mint(receiver, amountSharesOut);
51
52
  emit Deposit(msg.sender, receiver, tokenIn, amountTokenToDeposit, amountSharesOut);
@@ -58,36 +59,21 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
58
59
  address receiver,
59
60
  uint256 amountSharesToRedeem,
60
61
  address tokenOut,
61
- uint256 minTokenOut
62
+ uint256 minTokenOut,
63
+ bool burnFromInternalBalance
62
64
  ) external nonReentrant returns (uint256 amountTokenOut) {
63
- _burn(msg.sender, amountSharesToRedeem);
64
- amountTokenOut = _redeem(receiver, amountSharesToRedeem, tokenOut, minTokenOut);
65
- }
66
-
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
-
77
- function _redeem(
78
- address receiver,
79
- uint256 amountSharesToRedeem,
80
- address tokenOut,
81
- uint256 minTokenOut
82
- ) internal returns (uint256 amountTokenOut) {
83
- require(isValidTokenOut(tokenOut), "SCY: invalid tokenOut");
84
- require(amountSharesToRedeem != 0, "SCY: amountSharesToRedeem cannot be 0");
85
-
86
- amountTokenOut = _redeem(tokenOut, amountSharesToRedeem);
87
- require(amountTokenOut >= minTokenOut, "SCY: insufficient out");
88
-
89
- _transferOut(tokenOut, receiver, amountTokenOut);
90
-
65
+ if (!isValidTokenOut(tokenOut)) revert Errors.SCYInvalidTokenOut(tokenOut);
66
+ if (amountSharesToRedeem == 0) revert Errors.SCYZeroRedeem();
67
+
68
+ if (burnFromInternalBalance) {
69
+ _burn(address(this), amountSharesToRedeem);
70
+ } else {
71
+ _burn(msg.sender, amountSharesToRedeem);
72
+ }
73
+
74
+ amountTokenOut = _redeem(receiver, tokenOut, amountSharesToRedeem);
75
+ if (amountTokenOut < minTokenOut)
76
+ revert Errors.SCYInsufficientTokenOut(amountTokenOut, minTokenOut);
91
77
  emit Redeem(msg.sender, receiver, tokenOut, amountSharesToRedeem, amountTokenOut);
92
78
  }
93
79
 
@@ -108,10 +94,11 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
108
94
  * @param amountSharesToRedeem amount of shares to be burned
109
95
  * @return amountTokenOut amount of base tokens redeemed
110
96
  */
111
- function _redeem(address tokenOut, uint256 amountSharesToRedeem)
112
- internal
113
- virtual
114
- returns (uint256 amountTokenOut);
97
+ function _redeem(
98
+ address receiver,
99
+ address tokenOut,
100
+ uint256 amountSharesToRedeem
101
+ ) internal virtual returns (uint256 amountTokenOut);
115
102
 
116
103
  /*///////////////////////////////////////////////////////////////
117
104
  EXCHANGE-RATE
@@ -181,7 +168,7 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
181
168
  virtual
182
169
  returns (uint256 amountSharesOut)
183
170
  {
184
- require(isValidTokenIn(tokenIn), "SCY: Invalid tokenIn");
171
+ if (!isValidTokenIn(tokenIn)) revert Errors.SCYInvalidTokenIn(tokenIn);
185
172
  return _previewDeposit(tokenIn, amountTokenToDeposit);
186
173
  }
187
174
 
@@ -191,7 +178,7 @@ abstract contract SCYBase is ISuperComposableYield, PendleERC20, TokenHelper {
191
178
  virtual
192
179
  returns (uint256 amountTokenOut)
193
180
  {
194
- require(isValidTokenOut(tokenOut), "SCY: Invalid tokenOut");
181
+ if (!isValidTokenOut(tokenOut)) revert Errors.SCYInvalidTokenOut(tokenOut);
195
182
  return _previewRedeem(tokenOut, amountSharesToRedeem);
196
183
  }
197
184
 
@@ -0,0 +1,74 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.15;
3
+
4
+ import "../../../interfaces/ICelerMessageReceiverApp.sol";
5
+ import "../../../interfaces/IPMsgReceiverApp.sol";
6
+ import "../../../interfaces/ICelerMessageBus.sol";
7
+ import "../../../periphery/BoringOwnableUpgradeable.sol";
8
+ import "../../../libraries/Errors.sol";
9
+ import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
10
+
11
+ contract PendleMsgReceiveEndpointUpg is
12
+ ICelerMessageReceiverApp,
13
+ Initializable,
14
+ UUPSUpgradeable,
15
+ BoringOwnableUpgradeable
16
+ {
17
+ ICelerMessageBus public immutable celerMessageBus;
18
+ address public immutable sendEndpointAddr;
19
+ uint64 public immutable sendEndpointChainId;
20
+
21
+ modifier onlyCelerMessageBus() {
22
+ if (msg.sender != address(celerMessageBus)) revert Errors.OnlyCelerBus();
23
+ _;
24
+ }
25
+
26
+ modifier mustOriginateFromSendEndpoint(address srcAddress, uint64 srcChainId) {
27
+ if (srcAddress != sendEndpointAddr || srcChainId != sendEndpointChainId)
28
+ revert Errors.MsgNotFromSendEndpoint(msg.sender);
29
+ _;
30
+ }
31
+
32
+ constructor(
33
+ ICelerMessageBus _celerMessageBus,
34
+ address _sendEndpointAddr,
35
+ uint64 _sendEndpointChainId
36
+ ) initializer {
37
+ celerMessageBus = _celerMessageBus;
38
+ sendEndpointAddr = _sendEndpointAddr;
39
+ sendEndpointChainId = _sendEndpointChainId;
40
+ }
41
+
42
+ function initialize() external initializer {
43
+ __BoringOwnable_init();
44
+ }
45
+
46
+ // @notice for Celer
47
+ function executeMessage(
48
+ address srcAddress,
49
+ uint64 srcChainId,
50
+ bytes calldata message,
51
+ address /*_executor*/
52
+ )
53
+ external
54
+ payable
55
+ onlyCelerMessageBus
56
+ mustOriginateFromSendEndpoint(srcAddress, srcChainId)
57
+ returns (ExecutionStatus)
58
+ {
59
+ (address receiver, bytes memory actualMessage) = abi.decode(message, (address, bytes));
60
+ IPMsgReceiverApp(receiver).executeMessage(actualMessage);
61
+ return ExecutionStatus.Success;
62
+ }
63
+
64
+ function govExecuteMessage(address receiver, bytes calldata message)
65
+ external
66
+ payable
67
+ onlyOwner
68
+ {
69
+ IPMsgReceiverApp(receiver).executeMessage(message);
70
+ }
71
+
72
+ //solhint-disable-next-line
73
+ function _authorizeUpgrade(address newImplementation) internal override onlyOwner {}
74
+ }
@@ -0,0 +1,38 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.15;
3
+
4
+ import "../../../interfaces/IPMsgReceiverApp.sol";
5
+ import "../../../periphery/BoringOwnableUpgradeable.sol";
6
+ import "../../../libraries/Errors.sol";
7
+
8
+ // solhint-disable no-empty-blocks
9
+ /// This contract is upgradable because
10
+ /// - its constructor only sets immutable variables
11
+ /// - it has storage gaps for safe addition of future variables
12
+ /// - it inherits only upgradable contract
13
+ abstract contract PendleMsgReceiverAppUpg is IPMsgReceiverApp, BoringOwnableUpgradeable {
14
+ address public immutable pendleMsgReceiveEndpoint;
15
+
16
+ uint256[100] private __gap;
17
+
18
+ modifier onlyFromPendleMsgReceiveEndpoint() {
19
+ if (msg.sender != pendleMsgReceiveEndpoint)
20
+ revert Errors.MsgNotFromReceiveEndpoint(msg.sender);
21
+ _;
22
+ }
23
+
24
+ constructor(address _pendleMsgReceiveEndpoint) {
25
+ pendleMsgReceiveEndpoint = _pendleMsgReceiveEndpoint;
26
+ }
27
+
28
+ function executeMessage(bytes calldata message)
29
+ external
30
+ payable
31
+ virtual
32
+ onlyFromPendleMsgReceiveEndpoint
33
+ {
34
+ _executeMessage(message);
35
+ }
36
+
37
+ function _executeMessage(bytes memory message) internal virtual;
38
+ }
@@ -0,0 +1,83 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.15;
3
+
4
+ import "../../../interfaces/IPMsgSendEndpoint.sol";
5
+ import "../../../interfaces/ICelerMessageBus.sol";
6
+ import "../../../periphery/BoringOwnableUpgradeable.sol";
7
+ import "../../../libraries/Errors.sol";
8
+ import "@openzeppelin/contracts/utils/structs/EnumerableMap.sol";
9
+ import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
10
+
11
+ contract PendleMsgSendEndpointUpg is
12
+ IPMsgSendEndpoint,
13
+ Initializable,
14
+ UUPSUpgradeable,
15
+ BoringOwnableUpgradeable
16
+ {
17
+ using EnumerableMap for EnumerableMap.UintToAddressMap;
18
+
19
+ ICelerMessageBus public immutable celerMessageBus;
20
+ EnumerableMap.UintToAddressMap internal receiveEndpoints;
21
+ mapping(address => bool) public isWhitelisted;
22
+
23
+ modifier onlyWhitelisted() {
24
+ if (!isWhitelisted[msg.sender]) revert Errors.OnlyWhitelisted();
25
+ _;
26
+ }
27
+
28
+ constructor(ICelerMessageBus _celerMessageBus) initializer {
29
+ celerMessageBus = _celerMessageBus;
30
+ }
31
+
32
+ function initialize() external initializer {
33
+ __BoringOwnable_init();
34
+ }
35
+
36
+ function calcFee(
37
+ address dstAddress,
38
+ uint256, /*dstChainId*/
39
+ bytes memory message
40
+ ) external view returns (uint256) {
41
+ return celerMessageBus.calcFee(abi.encode(dstAddress, message));
42
+ }
43
+
44
+ function sendMessage(
45
+ address dstAddress,
46
+ uint256 dstChainId,
47
+ bytes calldata message
48
+ ) external payable onlyWhitelisted {
49
+ celerMessageBus.sendMessage{ value: msg.value }(
50
+ receiveEndpoints.get(dstChainId),
51
+ dstChainId,
52
+ abi.encode(dstAddress, message)
53
+ );
54
+ }
55
+
56
+ function addReceiveEndpoints(address endpointAddr, uint256 endpointChainId)
57
+ external
58
+ payable
59
+ onlyOwner
60
+ {
61
+ receiveEndpoints.set(endpointChainId, endpointAddr);
62
+ }
63
+
64
+ function setWhitelisted(address addr, bool status) external onlyOwner {
65
+ isWhitelisted[addr] = status;
66
+ }
67
+
68
+ function getAllReceiveEndpoints()
69
+ external
70
+ view
71
+ returns (uint256[] memory chainIds, address[] memory addrs)
72
+ {
73
+ uint256 length = receiveEndpoints.length();
74
+ chainIds = new uint256[](length);
75
+ addrs = new address[](length);
76
+
77
+ for (uint256 i = 0; i < length; ++i) {
78
+ (chainIds[i], addrs[i]) = receiveEndpoints.at(i);
79
+ }
80
+ }
81
+
82
+ function _authorizeUpgrade(address newImplementation) internal override onlyOwner {}
83
+ }
@@ -1,9 +1,9 @@
1
1
  // SPDX-License-Identifier: GPL-3.0-or-later
2
2
  pragma solidity 0.8.15;
3
3
 
4
- import "../../../interfaces/ICelerMessageBus.sol";
4
+ import "../../../interfaces/IPMsgSendEndpoint.sol";
5
5
  import "../../../periphery/BoringOwnableUpgradeable.sol";
6
- import "@openzeppelin/contracts/utils/Address.sol";
6
+ import "../../../libraries/Errors.sol";
7
7
  import "@openzeppelin/contracts/utils/structs/EnumerableMap.sol";
8
8
 
9
9
  // solhint-disable no-empty-blocks
@@ -11,10 +11,10 @@ import "@openzeppelin/contracts/utils/structs/EnumerableMap.sol";
11
11
  /// - its constructor only sets immutable variables
12
12
  /// - it has storage gaps for safe addition of future variables
13
13
  /// - it inherits only upgradable contract
14
- abstract contract CelerSenderUpg is BoringOwnableUpgradeable {
14
+ abstract contract PendleMsgSenderAppUpg is BoringOwnableUpgradeable {
15
15
  using EnumerableMap for EnumerableMap.UintToAddressMap;
16
16
 
17
- ICelerMessageBus public celerMessageBus;
17
+ IPMsgSendEndpoint public immutable pendleMsgSendEndpoint;
18
18
 
19
19
  // destinationContracts mapping contains one address for each chainId only
20
20
  EnumerableMap.UintToAddressMap internal destinationContracts;
@@ -28,23 +28,20 @@ abstract contract CelerSenderUpg is BoringOwnableUpgradeable {
28
28
  }
29
29
  }
30
30
 
31
- constructor() {}
32
-
33
- function setCelerMessageBus(address _celerMessageBus) external onlyOwner {
34
- celerMessageBus = ICelerMessageBus(_celerMessageBus);
31
+ constructor(address _pendleMsgSendEndpoint) {
32
+ pendleMsgSendEndpoint = IPMsgSendEndpoint(_pendleMsgSendEndpoint);
35
33
  }
36
34
 
37
35
  function _sendMessage(uint256 chainId, bytes memory message) internal {
38
36
  assert(destinationContracts.contains(chainId));
39
37
  address toAddr = destinationContracts.get(chainId);
40
- uint256 fee = celerMessageBus.calcFee(message);
38
+ uint256 fee = pendleMsgSendEndpoint.calcFee(toAddr, chainId, message);
41
39
  // LM contracts won't hold ETH on its own so this is fine
42
- require(address(this).balance >= fee, "Insufficient celer fee");
43
- celerMessageBus.sendMessage{ value: fee }(toAddr, chainId, message);
40
+ if (address(this).balance < fee)
41
+ revert Errors.InsufficientFeeToSendMsg(address(this).balance, fee);
42
+ pendleMsgSendEndpoint.sendMessage{ value: fee }(toAddr, chainId, message);
44
43
  }
45
44
 
46
- function _afterAddDestinationContract(address addr, uint256 chainId) internal virtual {}
47
-
48
45
  function addDestinationContract(address _address, uint256 _chainId)
49
46
  external
50
47
  payable
@@ -67,4 +64,6 @@ abstract contract CelerSenderUpg is BoringOwnableUpgradeable {
67
64
  (chainIds[i], addrs[i]) = destinationContracts.at(i);
68
65
  }
69
66
  }
67
+
68
+ function _afterAddDestinationContract(address addr, uint256 chainId) internal virtual {}
70
69
  }
@@ -0,0 +1,159 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.15;
3
+
4
+ import "./PendleFeeDistributor.sol";
5
+ import "../../../interfaces/IPVotingEscrowMainchain.sol";
6
+ import "../../../interfaces/IPVotingController.sol";
7
+ import "../../../interfaces/IPFeeDistributorFactory.sol";
8
+ import "../../../periphery/BoringOwnableUpgradeable.sol";
9
+ import "../../../libraries/VeHistoryLib.sol";
10
+ import "../../../libraries/math/WeekMath.sol";
11
+
12
+ abstract contract EpochResultManager is IPFeeDistributorFactory {
13
+ using Math for uint256;
14
+ using ArrayLib for address[];
15
+ using VeBalanceLib for VeBalance;
16
+ using CheckpointHelper for Checkpoint;
17
+
18
+ struct UserInfo {
19
+ uint128 timestamp;
20
+ uint128 iter;
21
+ }
22
+
23
+ address public immutable votingController;
24
+ address public immutable vePendle;
25
+
26
+ // [user, pool] => UserInfo
27
+ mapping(address => mapping(address => UserInfo)) public userInfo;
28
+
29
+ // [user, pool, epoch] => share
30
+ mapping(address => mapping(address => mapping(uint256 => uint256))) internal userShareAtEpoch;
31
+
32
+ constructor(address _votingController, address _vePendle) {
33
+ votingController = _votingController;
34
+ vePendle = _vePendle;
35
+ }
36
+
37
+ function updateUserShare(address user, address pool) external {
38
+ _updateExternalGlobalShares(pool);
39
+ _updateUserShare(user, pool);
40
+ }
41
+
42
+ function getUserAndTotalSharesAt(
43
+ address user,
44
+ address pool,
45
+ uint256 epoch
46
+ ) external view returns (uint256 userShare, uint256 totalShare) {
47
+ userShare = userShareAtEpoch[user][pool][epoch];
48
+ totalShare = _getExternalTotalShares(pool, epoch.Uint128());
49
+ }
50
+
51
+ function _updateUserShare(address user, address pool) internal {
52
+ uint128 currentEpoch = WeekMath.getCurrentWeekStart();
53
+ uint128 userEpoch = userInfo[user][pool].timestamp;
54
+
55
+ if (userEpoch == currentEpoch) return;
56
+ if (userEpoch == 0) userEpoch = _getPoolStartTime(pool);
57
+
58
+ uint256 length = _getExternalUserHistoryLength(user, pool);
59
+ if (length == 0) {
60
+ userInfo[user][pool].timestamp = currentEpoch;
61
+ return;
62
+ }
63
+
64
+ uint128 iter = userInfo[user][pool].iter;
65
+ Checkpoint memory lowerCheckpoint = _getExternalUserCheckpointAt(user, pool, iter);
66
+ Checkpoint memory upperCheckpoint;
67
+
68
+ if (iter + 1 < length) {
69
+ upperCheckpoint = _getExternalUserCheckpointAt(user, pool, iter + 1);
70
+ }
71
+
72
+ while (userEpoch < currentEpoch) {
73
+ userEpoch += WeekMath.WEEK;
74
+
75
+ iter = _moveIterToNextEpoch(
76
+ user,
77
+ pool,
78
+ length,
79
+ iter,
80
+ lowerCheckpoint,
81
+ upperCheckpoint,
82
+ userEpoch
83
+ );
84
+
85
+ if (userEpoch >= lowerCheckpoint.timestamp) {
86
+ userShareAtEpoch[user][pool][userEpoch] = lowerCheckpoint.value.getValueAt(
87
+ userEpoch
88
+ );
89
+ }
90
+ }
91
+
92
+ userInfo[user][pool] = UserInfo({ timestamp: currentEpoch, iter: iter });
93
+ }
94
+
95
+ function _moveIterToNextEpoch(
96
+ address user,
97
+ address pool,
98
+ uint256 userHistoryLength,
99
+ uint128 iter,
100
+ Checkpoint memory lowerCheckpoint,
101
+ Checkpoint memory upperCheckpoint,
102
+ uint128 nextEpoch
103
+ ) internal view returns (uint128) {
104
+ while (iter + 1 < userHistoryLength && nextEpoch > upperCheckpoint.timestamp) {
105
+ lowerCheckpoint.assignWith(upperCheckpoint);
106
+ if (iter + 2 < userHistoryLength) {
107
+ upperCheckpoint.assignWith(_getExternalUserCheckpointAt(user, pool, iter + 2));
108
+ }
109
+ ++iter;
110
+ }
111
+ return iter;
112
+ }
113
+
114
+ function _updateExternalGlobalShares(address pool) internal {
115
+ if (pool == vePendle) {
116
+ IPVeToken(vePendle).totalSupplyCurrent();
117
+ } else {
118
+ IPVotingController(votingController).applyPoolSlopeChanges(pool);
119
+ }
120
+ }
121
+
122
+ function _getExternalTotalShares(address pool, uint128 timestamp)
123
+ internal
124
+ view
125
+ returns (uint256)
126
+ {
127
+ if (pool == vePendle) {
128
+ return IPVotingEscrowMainchain(vePendle).totalSupplyAt(timestamp);
129
+ } else {
130
+ return IPVotingController(votingController).getPoolTotalVoteAt(pool, timestamp);
131
+ }
132
+ }
133
+
134
+ function _getExternalUserCheckpointAt(
135
+ address user,
136
+ address pool,
137
+ uint256 index
138
+ ) internal view returns (Checkpoint memory) {
139
+ if (pool == vePendle) {
140
+ return IPVotingEscrowMainchain(vePendle).getUserHistoryAt(user, index);
141
+ } else {
142
+ return IPVotingController(votingController).getUserPoolHistoryAt(user, pool, index);
143
+ }
144
+ }
145
+
146
+ function _getExternalUserHistoryLength(address user, address pool)
147
+ internal
148
+ view
149
+ returns (uint256)
150
+ {
151
+ if (pool == vePendle) {
152
+ return IPVotingEscrowMainchain(vePendle).getUserHistoryLength(user);
153
+ } else {
154
+ return IPVotingController(votingController).getUserPoolHistoryLength(user, pool);
155
+ }
156
+ }
157
+
158
+ function _getPoolStartTime(address pool) internal view virtual returns (uint64);
159
+ }