@pendle/core-v2 0.6.8 → 0.7.0
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.
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.json +751 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +4 -0
- package/build/artifacts/contracts/{core/PendleSCYImpl → SuperComposableYield/SCY-implementations}/AaveV3/WadRayMath.sol/WadRayMath.json +3 -3
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.json +27 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.json +761 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol/PendleBtrflyScy.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol/PendleBtrflyScy.json +635 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.json +609 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol/PendleJoeLpSCY.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol/PendleJoeLpSCY.json +653 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.json +622 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.json +622 -0
- package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/{ISuperComposableYield.sol/ISuperComposableYield.json → base-implementations/SCYBase.sol/SCYBase.json} +221 -141
- package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/{implementations → base-implementations}/SCYBaseWithRewards.sol/SCYBaseWithRewards.json +247 -223
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiver.sol/CelerReceiver.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiver.sol/CelerReceiver.json +128 -0
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSender.sol/CelerSender.dbg.json +4 -0
- package/build/artifacts/contracts/{SuperComposableYield/implementations/IRewardManager.sol/IRewardManager.json → core/LiquidityMining/CelerAbstracts/CelerSender.sol/CelerSender.json} +29 -33
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeController.sol/PendleGaugeController.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeController.sol/PendleGaugeController.json +193 -0
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchain.sol/PendleGaugeControllerMainchain.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchain.sol/PendleGaugeControllerMainchain.json +255 -0
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechain.sol/PendleGaugeControllerSidechain.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechain.sol/PendleGaugeControllerSidechain.json +318 -0
- package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +4 -0
- package/build/artifacts/contracts/{interfaces/IPVotingEscrow.sol/IVotingEscrowPendle.json → core/LiquidityMining/PendleGauge.sol/PendleGauge.json} +57 -65
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingController.sol/PendleVotingController.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingController.sol/PendleVotingController.json +707 -0
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorage.sol/VotingControllerStorage.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorage.sol/VotingControllerStorage.json +342 -0
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +547 -0
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +353 -0
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowToken.sol/VotingEscrowToken.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowToken.sol/VotingEscrowToken.json +138 -0
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +4 -0
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +922 -0
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +4 -0
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +345 -0
- package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +4 -0
- package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.json +254 -0
- package/build/artifacts/contracts/core/PendleERC20Permit.sol/PendleERC20Permit.dbg.json +4 -0
- package/build/artifacts/contracts/core/PendleERC20Permit.sol/PendleERC20Permit.json +329 -0
- package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
- package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.json +2 -20
- package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +4 -0
- package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +445 -0
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +4 -0
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +344 -0
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +4 -0
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +750 -0
- package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.json +2 -2
- package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.json +123 -77
- package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +39 -42
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.json +163 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.json +0 -13
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.json +1 -14
- package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.json +10 -0
- package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.json +39 -0
- package/build/artifacts/contracts/interfaces/IAavePool.sol/IAavePool.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IAaveRewardsController.sol/IAaveRewardsController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.json +13 -0
- package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.json +74 -0
- package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/{IVePToken.sol/IVePToken.json → ICelerMessageBus.sol/ICelerMessageBus.json} +21 -11
- package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.json +45 -0
- package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +4 -0
- package/build/artifacts/contracts/{core/PendleBaseToken.sol/PendleBaseToken.json → interfaces/IERC4626.sol/IERC4626.json} +53 -68
- package/build/artifacts/contracts/interfaces/IJoePair.sol/IJoePair.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IJoeRouter01.sol/IJoeRouter01.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IJoeRouter02.sol/IJoeRouter02.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IJoeRouter02.sol/IJoeRouter02.json +962 -0
- package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.json +122 -58
- package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.json +36 -21
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +116 -81
- package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.json +109 -0
- package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.json +132 -0
- package/build/artifacts/contracts/interfaces/IPGovernanceManager.sol/IPGovernanceManager.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.json +35 -54
- package/build/artifacts/contracts/interfaces/IPMarketAddRemoveCallback.sol/IPMarketAddRemoveCallback.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.json +31 -0
- package/build/artifacts/contracts/interfaces/IPMarketSwapCallback.sol/IPMarketSwapCallback.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPPermissionsV2Upg.sol/IPermissionsV2Upg.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.json +5 -5
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.json +99 -0
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.json +167 -0
- package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.json +148 -0
- package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.json +85 -83
- package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/{IPBaseToken.sol/IPBaseToken.json → IQiAvax.sol/IQiAvax.json} +106 -15
- package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.json +117 -0
- package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.json +117 -0
- package/build/artifacts/contracts/interfaces/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +4 -0
- package/build/artifacts/contracts/{periphery/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.json → interfaces/IRewardManager.sol/IRewardManager.json} +12 -14
- package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +4 -0
- package/build/artifacts/contracts/{SuperComposableYield/implementations/SCYBase.sol/SCYBase.json → interfaces/ISuperComposableYield.sol/ISuperComposableYield.json} +183 -181
- package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.json +13 -0
- package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.json +13 -0
- package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.json +13 -0
- package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +4 -0
- package/build/artifacts/contracts/{SuperComposableYield/implementations → libraries}/RewardManager.sol/RewardManager.json +44 -33
- package/build/artifacts/contracts/libraries/RewardManagerMini.sol/RewardManagerMini.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/RewardManagerMini.sol/RewardManagerMini.json +101 -0
- package/build/artifacts/contracts/libraries/SCY/SCYIndex.sol/SCYIndexLib.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/{SCYIndex.sol → SCY/SCYIndex.sol}/SCYIndexLib.json +3 -3
- package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +4 -0
- package/build/artifacts/contracts/{SuperComposableYield → libraries/SCY}/SCYUtils.sol/SCYUtils.json +3 -3
- package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/{math/MarketMathAux.sol/MarketMathAux.json → VeBalanceLib.sol/VeBalanceLib.json} +4 -4
- package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.json +10 -0
- package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.json +2 -2
- package/build/artifacts/contracts/libraries/helpers/MiniDeployer.sol/MiniDeployer.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/helpers/MiniDeployer.sol/MiniDeployer.json +10 -0
- package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.json +10 -0
- package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +4 -0
- package/build/artifacts/contracts/{core/actions/base/ActionType.sol/ActionType.json → libraries/helpers/TokenHelper.sol/TokenHelper.json} +2 -2
- package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.json +2 -2
- package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.json +2 -2
- package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.json +2 -2
- package/build/artifacts/contracts/libraries/math/Math.sol/Math.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/Math.sol/Math.json +2 -2
- package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.json +10 -0
- package/build/artifacts/contracts/libraries/solmate/Bytes32AddressLib.sol/Bytes32AddressLib.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/solmate/Bytes32AddressLib.sol/Bytes32AddressLib.json +10 -0
- package/build/artifacts/contracts/libraries/solmate/LibRLP.sol/LibRLP.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/solmate/LibRLP.sol/LibRLP.json +10 -0
- package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.json +10 -0
- package/build/artifacts/contracts/libraries/traderjoe/JoeLibrary.sol/JoeLibrary.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/{JoeLibrary.sol → traderjoe/JoeLibrary.sol}/JoeLibrary.json +3 -3
- package/build/artifacts/contracts/libraries/traderjoe/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/traderjoe/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.json +24 -0
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +862 -0
- package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.dbg.json +1 -1
- package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.json +2 -2
- package/build/artifacts/contracts/periphery/PermissionsV2Upg.sol/PermissionsV2Upg.dbg.json +1 -1
- package/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol +147 -0
- package/contracts/{core/PendleSCYImpl → SuperComposableYield/SCY-implementations}/AaveV3/WadRayMath.sol +1 -1
- package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol +74 -0
- package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +187 -0
- package/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol +123 -0
- package/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol +99 -0
- package/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol +245 -0
- package/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol +107 -0
- package/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol +120 -0
- package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +197 -0
- package/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol +131 -0
- package/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiver.sol +47 -0
- package/contracts/core/LiquidityMining/CelerAbstracts/CelerSender.sol +52 -0
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeController.sol +141 -0
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchain.sol +30 -0
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechain.sol +22 -0
- package/contracts/core/LiquidityMining/PendleGauge.sol +118 -0
- package/contracts/core/LiquidityMining/README.md +63 -0
- package/contracts/core/LiquidityMining/VotingController/PendleVotingController.sol +323 -0
- package/contracts/core/LiquidityMining/VotingController/VotingControllerStorage.sol +224 -0
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +241 -0
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +73 -0
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowToken.sol +53 -0
- package/contracts/core/{PendleMarket.sol → Market/PendleMarket.sol} +139 -103
- package/contracts/core/{PendleMarketFactory.sol → Market/PendleMarketFactory.sol} +62 -19
- package/contracts/core/PendleERC20.sol +358 -0
- package/contracts/core/PendleERC20Permit.sol +84 -0
- package/contracts/core/PendleRouter.sol +6 -12
- package/contracts/core/YieldContracts/InterestManagerYT.sol +87 -0
- package/contracts/core/YieldContracts/PendlePrincipalToken.sol +52 -0
- package/contracts/core/{PendleYieldContractFactory.sol → YieldContracts/PendleYieldContractFactory.sol} +46 -25
- package/contracts/core/YieldContracts/PendleYieldToken.sol +340 -0
- package/contracts/core/actions/ActionCallback.sol +63 -43
- package/contracts/core/actions/ActionCore.sol +95 -78
- package/contracts/core/actions/ActionYT.sol +35 -86
- package/contracts/core/actions/base/ActionSCYAndPTBase.sol +133 -78
- package/contracts/core/actions/base/ActionSCYAndPYBase.sol +31 -46
- package/contracts/core/actions/base/ActionSCYAndYTBase.sol +127 -45
- package/contracts/core/actions/base/CallbackHelper.sol +81 -0
- package/contracts/interfaces/IAToken.sol +11 -1
- package/contracts/interfaces/IAavePool.sol +1 -1
- package/contracts/interfaces/IAaveRewardsController.sol +1 -1
- package/contracts/interfaces/IBenQiComptroller.sol +3 -1
- package/contracts/interfaces/IBenQiInterestRateModel.sol +16 -0
- package/contracts/interfaces/ICelerMessageBus.sol +28 -0
- package/contracts/interfaces/ICelerMessageReceiverApp.sol +25 -0
- package/contracts/interfaces/IERC4626.sol +39 -0
- package/contracts/interfaces/IJoeRouter01.sol +1 -1
- package/contracts/interfaces/IJoeRouter02.sol +52 -0
- package/contracts/interfaces/IPActionCore.sol +44 -27
- package/contracts/interfaces/IPActionYT.sol +12 -9
- package/contracts/interfaces/IPAllAction.sol +2 -3
- package/contracts/interfaces/IPGaugeController.sol +22 -0
- package/contracts/interfaces/IPGaugeControllerMainchain.sol +12 -0
- package/contracts/interfaces/IPGovernanceManager.sol +1 -1
- package/contracts/interfaces/IPInterestManagerYT.sol +9 -0
- package/contracts/interfaces/IPMarket.sol +13 -13
- package/contracts/interfaces/IPMarketAddRemoveCallback.sol +3 -3
- package/contracts/interfaces/IPMarketFactory.sol +8 -1
- package/contracts/interfaces/IPMarketSwapCallback.sol +1 -1
- package/contracts/interfaces/IPPermissionsV2Upg.sol +1 -1
- package/contracts/interfaces/IPPrincipalToken.sol +9 -5
- package/contracts/interfaces/IPRouterStatic.sol +1 -1
- package/contracts/interfaces/IPVeToken.sol +10 -5
- package/contracts/interfaces/IPVotingController.sol +21 -0
- package/contracts/interfaces/IPVotingEscrow.sol +14 -22
- package/contracts/interfaces/IPYieldContractFactory.sol +1 -1
- package/contracts/interfaces/IPYieldToken.sol +17 -17
- package/contracts/interfaces/IQiAvax.sol +31 -0
- package/contracts/interfaces/IQiErc20.sol +1 -1
- package/contracts/interfaces/IQiToken.sol +22 -1
- package/contracts/interfaces/IREDACTEDStaking.sol +1 -1
- package/contracts/interfaces/IRewardManager.sol +9 -0
- package/contracts/interfaces/ISuperComposableYield.sol +182 -0
- package/contracts/interfaces/IWETH.sol +1 -1
- package/contracts/interfaces/IWXBTRFLY.sol +3 -1
- package/contracts/interfaces/IWstETH.sol +3 -1
- package/contracts/interfaces/IYearnVault.sol +3 -1
- package/contracts/libraries/RewardManager.sol +78 -0
- package/contracts/libraries/RewardManagerAbstract.sol +81 -0
- package/contracts/libraries/{SCYIndex.sol → SCY/SCYIndex.sol} +8 -8
- package/contracts/libraries/SCY/SCYUtils.sol +18 -0
- package/contracts/libraries/VeBalanceLib.sol +114 -0
- package/contracts/libraries/helpers/ArrayLib.sol +65 -0
- package/contracts/libraries/helpers/ExpiryUtilsLib.sol +1 -1
- package/contracts/libraries/helpers/MiniDeployer.sol +23 -0
- package/contracts/libraries/helpers/MiniHelpers.sol +15 -0
- package/contracts/libraries/helpers/TokenHelper.sol +105 -0
- package/contracts/libraries/math/LogExpMath.sol +59 -1
- package/contracts/libraries/math/MarketApproxLib.sol +167 -164
- package/contracts/libraries/math/MarketMathCore.sol +106 -25
- package/contracts/libraries/math/Math.sol +28 -21
- package/contracts/libraries/math/WeekMath.sol +19 -0
- package/contracts/libraries/solmate/Bytes32AddressLib.sol +14 -0
- package/contracts/libraries/solmate/LibRLP.sol +30 -0
- package/contracts/libraries/solmate/SSTORE2.sol +99 -0
- package/contracts/libraries/{JoeLibrary.sol → traderjoe/JoeLibrary.sol} +3 -2
- package/contracts/{periphery → libraries/traderjoe}/PendleJoeSwapHelperUpg.sol +8 -10
- package/contracts/{core → offchain-helpers}/RouterStatic.sol +24 -19
- package/contracts/periphery/PendleGovernanceManager.sol +1 -1
- package/contracts/periphery/PermissionsV2Upg.sol +1 -1
- package/package.json +1 -1
- package/typechain-types/ActionCore.ts +169 -96
- package/typechain-types/ActionSCYAndPTBase.ts +210 -0
- package/typechain-types/ActionSCYAndPYBase.ts +0 -13
- package/typechain-types/ActionSCYAndYTBase.ts +8 -21
- package/typechain-types/ActionYT.ts +73 -64
- package/typechain-types/BeaconProxy.ts +97 -0
- package/typechain-types/CelerReceiver.ts +267 -0
- package/typechain-types/CelerSender.ts +197 -0
- package/typechain-types/ERC1967Upgrade.ts +97 -0
- package/typechain-types/ERC20Permit.ts +521 -0
- package/typechain-types/IAToken.ts +55 -0
- package/typechain-types/IBeacon.ts +87 -0
- package/typechain-types/IBenQiComptroller.ts +13 -0
- package/typechain-types/IBenQiInterestRateModel.ts +162 -0
- package/typechain-types/ICelerMessageBus.ts +134 -0
- package/typechain-types/ICelerMessageReceiverApp.ts +120 -0
- package/typechain-types/IERC1822Proxiable.ts +87 -0
- package/typechain-types/IERC20Permit.ts +175 -0
- package/typechain-types/IERC4626.ts +463 -0
- package/typechain-types/IJoeRouter02.ts +1420 -0
- package/typechain-types/IPActionCore.ts +169 -83
- package/typechain-types/IPActionYT.ts +65 -43
- package/typechain-types/IPAllAction.ts +190 -137
- package/typechain-types/IPGauge.ts +104 -0
- package/typechain-types/IPGaugeController.ts +191 -0
- package/typechain-types/IPGaugeControllerMainchain.ts +236 -0
- package/typechain-types/IPMarket.ts +73 -74
- package/typechain-types/IPMarketFactory.ts +27 -0
- package/typechain-types/IPPrincipalToken.ts +8 -20
- package/typechain-types/IPVeToken.ts +198 -0
- package/typechain-types/IPVotingController.ts +179 -0
- package/typechain-types/IPVotingEscrow.ts +217 -0
- package/typechain-types/IPVotingEscrowController.ts +154 -0
- package/typechain-types/IPYieldToken.ts +176 -213
- package/typechain-types/IQiAvax.ts +551 -0
- package/typechain-types/IQiErc20.ts +171 -0
- package/typechain-types/IQiToken.ts +171 -0
- package/typechain-types/IRewardManager.ts +16 -87
- package/typechain-types/ISuperComposableYield.ts +283 -269
- package/typechain-types/IWXBTRFLY.ts +13 -0
- package/typechain-types/IWstETH.ts +13 -0
- package/typechain-types/IYearnVault.ts +13 -0
- package/typechain-types/PendleAaveV3SCY.ts +382 -477
- package/typechain-types/PendleBtrflyScy.ts +287 -348
- package/typechain-types/PendleERC20.ts +339 -0
- package/typechain-types/PendleERC20Permit.ts +443 -0
- package/typechain-types/PendleERC4626SCY.ts +801 -0
- package/typechain-types/PendleGauge.ts +276 -0
- package/typechain-types/PendleGaugeController.ts +346 -0
- package/typechain-types/PendleGaugeControllerMainchain.ts +410 -0
- package/typechain-types/PendleGaugeControllerSidechain.ts +524 -0
- package/typechain-types/PendleJoeLpSCY.ts +837 -0
- package/typechain-types/PendleJoeSwapHelperUpg.ts +0 -13
- package/typechain-types/PendleMarket.ts +265 -151
- package/typechain-types/PendleMarketFactory.ts +111 -16
- package/typechain-types/PendleMarketRewards.ts +1317 -0
- package/typechain-types/PendlePrincipalToken.ts +103 -130
- package/typechain-types/PendleQiTokenHelper.ts +57 -0
- package/typechain-types/PendleQiTokenSCY.ts +991 -0
- package/typechain-types/PendleRouter.ts +0 -19
- package/typechain-types/PendleVotingController.ts +1042 -0
- package/typechain-types/PendleWstEthSCY.ts +813 -0
- package/typechain-types/PendleYearnVaultScy.ts +278 -339
- package/typechain-types/PendleYieldContractFactory.ts +43 -27
- package/typechain-types/PendleYieldToken.ts +297 -428
- package/typechain-types/RewardManager.ts +70 -69
- package/typechain-types/RewardManagerMini.ts +200 -0
- package/typechain-types/SCYBase.ts +276 -335
- package/typechain-types/SCYBaseWithRewards.ts +367 -424
- package/typechain-types/VotingControllerStorage.ts +507 -0
- package/typechain-types/VotingEscrowPendleMainchain.ts +854 -0
- package/typechain-types/VotingEscrowPendleSidechain.ts +546 -0
- package/typechain-types/VotingEscrowToken.ts +251 -0
- package/typechain-types/factories/ActionCallback__factory.ts +1 -1
- package/typechain-types/factories/ActionCore__factory.ts +122 -80
- package/typechain-types/factories/ActionRedeem__factory.ts +1 -1
- package/typechain-types/factories/ActionSCYAndPTBase__factory.ts +187 -0
- package/typechain-types/factories/ActionSCYAndPYBase__factory.ts +0 -13
- package/typechain-types/factories/ActionSCYAndYTBase__factory.ts +1 -14
- package/typechain-types/factories/ActionYT__factory.ts +39 -48
- package/typechain-types/factories/BeaconProxy__factory.ts +141 -0
- package/typechain-types/factories/CelerReceiver__factory.ts +140 -0
- package/typechain-types/factories/CelerSender__factory.ts +85 -0
- package/typechain-types/factories/ERC1967Upgrade__factory.ts +71 -0
- package/typechain-types/factories/ERC20Permit__factory.ts +368 -0
- package/typechain-types/factories/ERC20__factory.ts +1 -1
- package/typechain-types/factories/IAToken__factory.ts +39 -0
- package/typechain-types/factories/IBeacon__factory.ts +36 -0
- package/typechain-types/factories/IBenQiComptroller__factory.ts +13 -0
- package/typechain-types/factories/IBenQiInterestRateModel__factory.ts +93 -0
- package/typechain-types/factories/ICelerMessageBus__factory.ts +68 -0
- package/typechain-types/factories/ICelerMessageReceiverApp__factory.ts +64 -0
- package/typechain-types/factories/IERC1822Proxiable__factory.ts +39 -0
- package/typechain-types/factories/IERC20Permit__factory.ts +98 -0
- package/typechain-types/factories/IERC4626__factory.ts +330 -0
- package/typechain-types/factories/IJoeRouter02__factory.ts +974 -0
- package/typechain-types/factories/IPActionCore__factory.ts +122 -58
- package/typechain-types/factories/IPActionYT__factory.ts +36 -21
- package/typechain-types/factories/IPAllAction__factory.ts +116 -81
- package/typechain-types/factories/IPGaugeControllerMainchain__factory.ts +151 -0
- package/typechain-types/factories/IPGaugeController__factory.ts +124 -0
- package/typechain-types/factories/IPGauge__factory.ts +42 -0
- package/typechain-types/factories/IPMarketFactory__factory.ts +31 -0
- package/typechain-types/factories/IPMarket__factory.ts +35 -54
- package/typechain-types/factories/IPPrincipalToken__factory.ts +5 -5
- package/typechain-types/factories/IPVeToken__factory.ts +111 -0
- package/typechain-types/factories/IPVotingController__factory.ts +182 -0
- package/typechain-types/factories/IPVotingEscrowController__factory.ts +80 -0
- package/typechain-types/factories/IPVotingEscrow__factory.ts +163 -0
- package/typechain-types/factories/IPYieldToken__factory.ts +85 -83
- package/typechain-types/factories/IQiAvax__factory.ts +362 -0
- package/typechain-types/factories/IQiErc20__factory.ts +117 -0
- package/typechain-types/factories/IQiToken__factory.ts +117 -0
- package/typechain-types/factories/IRewardManager__factory.ts +5 -47
- package/typechain-types/factories/ISuperComposableYield__factory.ts +201 -138
- package/typechain-types/factories/IWXBTRFLY__factory.ts +13 -0
- package/typechain-types/factories/IWstETH__factory.ts +13 -0
- package/typechain-types/factories/IYearnVault__factory.ts +13 -0
- package/typechain-types/factories/PendleAaveV3SCY__factory.ts +246 -315
- package/typechain-types/factories/PendleBtrflyScy__factory.ts +200 -234
- package/typechain-types/factories/PendleERC20Permit__factory.ts +405 -0
- package/typechain-types/factories/PendleERC20__factory.ts +327 -0
- package/typechain-types/factories/PendleERC4626SCY__factory.ts +678 -0
- package/typechain-types/factories/PendleGaugeControllerMainchain__factory.ts +332 -0
- package/typechain-types/factories/PendleGaugeControllerSidechain__factory.ts +391 -0
- package/typechain-types/factories/PendleGaugeController__factory.ts +212 -0
- package/typechain-types/factories/PendleGauge__factory.ts +171 -0
- package/typechain-types/factories/PendleGovernanceManager__factory.ts +1 -1
- package/typechain-types/factories/PendleJoeLpSCY__factory.ts +726 -0
- package/typechain-types/factories/PendleJoeSwapHelperUpg__factory.ts +0 -13
- package/typechain-types/factories/PendleMarketFactory__factory.ts +90 -5
- package/typechain-types/factories/PendleMarketRewards__factory.ts +1140 -0
- package/typechain-types/factories/PendleMarket__factory.ts +182 -94
- package/typechain-types/factories/PendlePrincipalToken__factory.ts +74 -77
- package/typechain-types/factories/PendleQiTokenHelper__factory.ts +99 -0
- package/typechain-types/factories/PendleQiTokenSCY__factory.ts +845 -0
- package/typechain-types/factories/PendleRouter__factory.ts +1 -23
- package/typechain-types/factories/PendleVotingController__factory.ts +776 -0
- package/typechain-types/factories/PendleWstEthSCY__factory.ts +686 -0
- package/typechain-types/factories/PendleYearnVaultScy__factory.ts +218 -243
- package/typechain-types/factories/PendleYieldContractFactory__factory.ts +39 -29
- package/typechain-types/factories/PendleYieldToken__factory.ts +153 -211
- package/typechain-types/factories/RewardManagerMini__factory.ts +116 -0
- package/typechain-types/factories/RewardManager__factory.ts +43 -32
- package/typechain-types/factories/RouterStatic__factory.ts +1 -1
- package/typechain-types/factories/SCYBaseWithRewards__factory.ts +242 -218
- package/typechain-types/factories/SCYBase__factory.ts +195 -176
- package/typechain-types/factories/VotingControllerStorage__factory.ts +361 -0
- package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +616 -0
- package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +415 -0
- package/typechain-types/factories/VotingEscrowToken__factory.ts +153 -0
- package/typechain-types/hardhat.d.ts +338 -131
- package/typechain-types/index.ts +92 -38
- package/build/artifacts/contracts/SuperComposableYield/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +0 -4
- package/build/artifacts/contracts/SuperComposableYield/SCYUtils.sol/SCYUtils.dbg.json +0 -4
- package/build/artifacts/contracts/SuperComposableYield/implementations/IRewardManager.sol/IRewardManager.dbg.json +0 -4
- package/build/artifacts/contracts/SuperComposableYield/implementations/RewardManager.sol/RewardManager.dbg.json +0 -4
- package/build/artifacts/contracts/SuperComposableYield/implementations/SCYBase.sol/SCYBase.dbg.json +0 -4
- package/build/artifacts/contracts/SuperComposableYield/implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleBaseToken.sol/PendleBaseToken.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleMarket.sol/PendleMarket.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleMarket.sol/PendleMarket.json +0 -842
- package/build/artifacts/contracts/core/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleMarketFactory.sol/PendleMarketFactory.json +0 -265
- package/build/artifacts/contracts/core/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendlePrincipalToken.sol/PendlePrincipalToken.json +0 -452
- package/build/artifacts/contracts/core/PendleSCYImpl/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleSCYImpl/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.json +0 -783
- package/build/artifacts/contracts/core/PendleSCYImpl/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleSCYImpl/PendleBenQiErc20SCY.sol/PendleBenQiErc20SCY.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleSCYImpl/PendleBenQiErc20SCY.sol/PendleBenQiErc20SCY.json +0 -766
- package/build/artifacts/contracts/core/PendleSCYImpl/PendleBtrflySCY.sol/PendleBtrflyScy.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleSCYImpl/PendleBtrflySCY.sol/PendleBtrflyScy.json +0 -641
- package/build/artifacts/contracts/core/PendleSCYImpl/PendleStETHSCY.sol/PendleStEthSCY.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleSCYImpl/PendleStETHSCY.sol/PendleStEthSCY.json +0 -623
- package/build/artifacts/contracts/core/PendleSCYImpl/PendleYearnVaultSCY.sol/PendleYearnVaultScy.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleSCYImpl/PendleYearnVaultSCY.sol/PendleYearnVaultScy.json +0 -623
- package/build/artifacts/contracts/core/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +0 -339
- package/build/artifacts/contracts/core/PendleYieldToken.sol/PendleYieldToken.dbg.json +0 -4
- package/build/artifacts/contracts/core/PendleYieldToken.sol/PendleYieldToken.json +0 -808
- package/build/artifacts/contracts/core/RouterStatic.sol/RouterStatic.dbg.json +0 -4
- package/build/artifacts/contracts/core/RouterStatic.sol/RouterStatic.json +0 -862
- package/build/artifacts/contracts/core/actions/ActionRedeem.sol/ActionRedeem.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/ActionRedeem.sol/ActionRedeem.json +0 -55
- package/build/artifacts/contracts/core/actions/base/ActionType.sol/ActionType.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPActionRedeem.sol/IPActionRedeem.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPActionRedeem.sol/IPActionRedeem.json +0 -55
- package/build/artifacts/contracts/interfaces/IPBaseToken.sol/IPBaseToken.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPGauge.sol/IPendleGauge.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPGauge.sol/IPendleGauge.json +0 -113
- package/build/artifacts/contracts/interfaces/IPVeToken.sol/IVePToken.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPVeToken.sol/IVePToken.json +0 -43
- package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IVotingEscrowPendle.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPVotingEscrowController.sol/VotingEscrowController.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPVotingEscrowController.sol/VotingEscrowController.json +0 -61
- package/build/artifacts/contracts/interfaces/IPendleGauge.sol/IPendleGauge.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPendleGauge.sol/IPendleGauge.json +0 -113
- package/build/artifacts/contracts/interfaces/IVePToken.sol/IVePToken.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IVotingEscrowController.sol/VotingEscrowController.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IVotingEscrowController.sol/VotingEscrowController.json +0 -61
- package/build/artifacts/contracts/interfaces/IVotingEscrowPendle.sol/IVotingEscrowPendle.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IVotingEscrowPendle.sol/IVotingEscrowPendle.json +0 -167
- package/build/artifacts/contracts/libraries/JoeLibrary.sol/JoeLibrary.dbg.json +0 -4
- package/build/artifacts/contracts/libraries/SCYIndex.sol/SCYIndexLib.dbg.json +0 -4
- package/build/artifacts/contracts/libraries/math/MarketMathAux.sol/MarketMathAux.dbg.json +0 -4
- package/build/artifacts/contracts/periphery/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.dbg.json +0 -4
- package/contracts/SuperComposableYield/ISuperComposableYield.sol +0 -80
- package/contracts/SuperComposableYield/SCYUtils.sol +0 -14
- package/contracts/SuperComposableYield/implementations/IRewardManager.sol +0 -16
- package/contracts/SuperComposableYield/implementations/RewardManager.sol +0 -151
- package/contracts/SuperComposableYield/implementations/SCYBase.sol +0 -166
- package/contracts/SuperComposableYield/implementations/SCYBaseWithRewards.sol +0 -88
- package/contracts/core/PendleBaseToken.sol +0 -35
- package/contracts/core/PendlePrincipalToken.sol +0 -54
- package/contracts/core/PendleSCYImpl/AaveV3/PendleAaveV3SCY.sol +0 -140
- package/contracts/core/PendleSCYImpl/PendleBenQiErc20SCY.sol +0 -133
- package/contracts/core/PendleSCYImpl/PendleBtrflySCY.sol +0 -120
- package/contracts/core/PendleSCYImpl/PendleStETHSCY.sol +0 -107
- package/contracts/core/PendleSCYImpl/PendleYearnVaultSCY.sol +0 -109
- package/contracts/core/PendleYieldToken.sol +0 -340
- package/contracts/core/actions/ActionRedeem.sol +0 -36
- package/contracts/core/actions/base/ActionType.sol +0 -11
- package/contracts/interfaces/IPActionRedeem.sol +0 -17
- package/contracts/interfaces/IPBaseToken.sol +0 -9
- package/contracts/interfaces/IPGauge.sol +0 -32
- package/contracts/interfaces/IPVotingEscrowController.sol +0 -14
- package/contracts/interfaces/IPendleGauge.sol +0 -32
- package/contracts/interfaces/IVePToken.sol +0 -14
- package/contracts/interfaces/IVotingEscrowController.sol +0 -14
- package/contracts/interfaces/IVotingEscrowPendle.sol +0 -32
- package/contracts/libraries/math/MarketMathAux.sol +0 -101
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
import "../../../interfaces/IPVeToken.sol";
|
|
5
|
+
import "../../../libraries/VeBalanceLib.sol";
|
|
6
|
+
import "../../../libraries/math/WeekMath.sol";
|
|
7
|
+
import "../../../libraries/helpers/MiniHelpers.sol";
|
|
8
|
+
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
|
9
|
+
|
|
10
|
+
// no reentracy protection yet?
|
|
11
|
+
// Should VotingController and stuff become upgradeable?
|
|
12
|
+
abstract contract VotingControllerStorage {
|
|
13
|
+
using VeBalanceLib for VeBalance;
|
|
14
|
+
using EnumerableSet for EnumerableSet.AddressSet;
|
|
15
|
+
|
|
16
|
+
struct PoolInfo {
|
|
17
|
+
uint64 chainId;
|
|
18
|
+
uint128 lastUpdated;
|
|
19
|
+
VeBalance vote;
|
|
20
|
+
// wTime => slopeChange value
|
|
21
|
+
mapping(uint128 => uint128) slopeChanges;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
struct UserPoolInfo {
|
|
25
|
+
uint64 weight;
|
|
26
|
+
VeBalance vote;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
struct UserData {
|
|
30
|
+
uint64 totalVotedWeight;
|
|
31
|
+
mapping(address => UserPoolInfo) voteForPools;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
struct WeekData {
|
|
35
|
+
uint128 totalVotes;
|
|
36
|
+
mapping(address => uint128) poolVotes;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
uint128 internal constant MAX_LOCK_TIME = 104 weeks;
|
|
40
|
+
uint64 public constant USER_VOTE_MAX_WEIGHT = 10**18;
|
|
41
|
+
uint128 public constant WEEK = 1 weeks;
|
|
42
|
+
uint128 public constant GOVERNANCE_PENDLE_VOTE = 10**24;
|
|
43
|
+
|
|
44
|
+
IPVeToken public immutable vePendle;
|
|
45
|
+
|
|
46
|
+
uint128 public pendlePerSec;
|
|
47
|
+
|
|
48
|
+
uint128 public immutable deployedWTime; // divisible by WEEK
|
|
49
|
+
|
|
50
|
+
EnumerableSet.AddressSet internal allPools;
|
|
51
|
+
|
|
52
|
+
// [chainId] => [pool]
|
|
53
|
+
mapping(uint64 => EnumerableSet.AddressSet) internal chainPools;
|
|
54
|
+
|
|
55
|
+
// [poolAddress] -> PoolInfo
|
|
56
|
+
mapping(address => PoolInfo) public poolInfo;
|
|
57
|
+
|
|
58
|
+
// [wTime] => WeekData
|
|
59
|
+
mapping(uint128 => WeekData) public weekData;
|
|
60
|
+
|
|
61
|
+
// user voting info
|
|
62
|
+
mapping(address => UserData) public userData;
|
|
63
|
+
|
|
64
|
+
// wTime => bool
|
|
65
|
+
mapping(uint128 => bool) public isEpochFinalized;
|
|
66
|
+
|
|
67
|
+
// [user][pool] => checkpoint
|
|
68
|
+
mapping(address => mapping(address => Checkpoint[])) public userPoolCheckpoints;
|
|
69
|
+
|
|
70
|
+
constructor(address _vePendle) {
|
|
71
|
+
vePendle = IPVeToken(_vePendle);
|
|
72
|
+
deployedWTime = WeekMath.getCurrentWeekStart();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/*///////////////////////////////////////////////////////////////
|
|
76
|
+
VIEW FUNCTIONS
|
|
77
|
+
//////////////////////////////////////////////////////////////*/
|
|
78
|
+
|
|
79
|
+
/// @dev trivial view function
|
|
80
|
+
function getAllPools() external view returns (address[] memory) {
|
|
81
|
+
return allPools.values();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/// @dev trivial view function
|
|
85
|
+
function getChainPools(uint64 chainId) external view returns (address[] memory) {
|
|
86
|
+
return chainPools[chainId].values();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/// @dev trivial view function
|
|
90
|
+
function getUserPoolVote(address user, address pool)
|
|
91
|
+
external
|
|
92
|
+
view
|
|
93
|
+
returns (UserPoolInfo memory)
|
|
94
|
+
{
|
|
95
|
+
return userData[user].voteForPools[pool];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @dev binary search to get the vote of an user on a pool at a specific timestamp
|
|
100
|
+
* @param timestamp can be any time, not necessary divisible by week
|
|
101
|
+
*/
|
|
102
|
+
function getUserPoolVoteAt(
|
|
103
|
+
address user,
|
|
104
|
+
address pool,
|
|
105
|
+
uint128 timestamp
|
|
106
|
+
) external view returns (uint128) {
|
|
107
|
+
return VeBalanceLib.getCheckpointValueAt(userPoolCheckpoints[user][pool], timestamp);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/*///////////////////////////////////////////////////////////////
|
|
111
|
+
INTERNAL DATA MANIPULATION FUNCTIONS
|
|
112
|
+
//////////////////////////////////////////////////////////////*/
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @dev expected behavior:
|
|
116
|
+
- add to allPools, chainPools
|
|
117
|
+
- set params in poolInfo
|
|
118
|
+
*/
|
|
119
|
+
function _addPool(uint64 chainId, address pool) internal {
|
|
120
|
+
poolInfo[pool].chainId = chainId;
|
|
121
|
+
poolInfo[pool].lastUpdated = WeekMath.getCurrentWeekStart();
|
|
122
|
+
require(chainPools[chainId].add(pool), "IE: chainPools duplicated");
|
|
123
|
+
require(allPools.add(pool), "IE: allPools duplicated");
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @dev expected behavior:
|
|
128
|
+
- remove from allPools, chainPools
|
|
129
|
+
- clear all params in poolInfo
|
|
130
|
+
*/
|
|
131
|
+
function _removePool(address pool) internal {
|
|
132
|
+
uint64 chainId = poolInfo[pool].chainId;
|
|
133
|
+
require(chainPools[chainId].remove(pool), "IE: chainPools removal failed");
|
|
134
|
+
require(allPools.remove(pool), "IE: allPools removal failed");
|
|
135
|
+
delete poolInfo[pool];
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @notice set the final pool vote for weekData
|
|
140
|
+
* @dev assumption: weekData[wTime].poolVotes[pool] == 0
|
|
141
|
+
*/
|
|
142
|
+
function _setFinalPoolVoteForWeek(
|
|
143
|
+
address pool,
|
|
144
|
+
uint128 wTime,
|
|
145
|
+
uint128 vote
|
|
146
|
+
) internal {
|
|
147
|
+
weekData[wTime].totalVotes += vote;
|
|
148
|
+
weekData[wTime].poolVotes[pool] = vote;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function _setNewVotePoolInfo(
|
|
152
|
+
address pool,
|
|
153
|
+
VeBalance memory vote,
|
|
154
|
+
uint128 wTime
|
|
155
|
+
) internal {
|
|
156
|
+
poolInfo[pool].vote = vote;
|
|
157
|
+
poolInfo[pool].lastUpdated = wTime;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/// @dev only applicable for current pool, hence no changes for weekData
|
|
161
|
+
function _subtractVotePoolInfo(address pool, VeBalance memory vote) internal {
|
|
162
|
+
PoolInfo storage pInfo = poolInfo[pool];
|
|
163
|
+
pInfo.vote = poolInfo[pool].vote.sub(vote);
|
|
164
|
+
pInfo.slopeChanges[vote.getExpiry()] -= vote.slope;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/// @dev only applicable for current pool, hence no changes for weekData
|
|
168
|
+
function _addVotePoolInfo(address pool, VeBalance memory vote) internal {
|
|
169
|
+
PoolInfo storage pInfo = poolInfo[pool];
|
|
170
|
+
pInfo.vote = poolInfo[pool].vote.add(vote);
|
|
171
|
+
pInfo.slopeChanges[vote.getExpiry()] += vote.slope;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function _unsetVoteUserData(address user, address pool) internal {
|
|
175
|
+
UserData storage uData = userData[user];
|
|
176
|
+
uData.totalVotedWeight -= uData.voteForPools[pool].weight;
|
|
177
|
+
delete uData.voteForPools[pool];
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/// @dev assumption: uData.voteForPools[pool] hasn't been set before
|
|
181
|
+
/// @dev post-condition: totalVotedWeight <= USER_VOTE_MAX_WEIGHT
|
|
182
|
+
function _setVoteUserData(
|
|
183
|
+
address user,
|
|
184
|
+
address pool,
|
|
185
|
+
uint64 weight,
|
|
186
|
+
VeBalance memory vote
|
|
187
|
+
) internal {
|
|
188
|
+
UserData storage uData = userData[user];
|
|
189
|
+
uData.totalVotedWeight += weight;
|
|
190
|
+
require(uData.totalVotedWeight <= USER_VOTE_MAX_WEIGHT, "exceeded max weight");
|
|
191
|
+
|
|
192
|
+
uData.voteForPools[pool] = UserPoolInfo({ weight: weight, vote: vote });
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/// @dev post-condition: timestamp is in increasing order (for binary search)
|
|
196
|
+
function _addUserPoolCheckpoint(
|
|
197
|
+
address user,
|
|
198
|
+
address pool,
|
|
199
|
+
VeBalance memory vote
|
|
200
|
+
) internal {
|
|
201
|
+
userPoolCheckpoints[user][pool].push(
|
|
202
|
+
Checkpoint({ balance: vote, timestamp: uint128(block.timestamp) })
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function _setAllPastEpochsAsFinalized() internal {
|
|
207
|
+
uint128 wTime = WeekMath.getCurrentWeekStart();
|
|
208
|
+
while (wTime >= deployedWTime && isEpochFinalized[wTime] == false) {
|
|
209
|
+
isEpochFinalized[wTime] = true;
|
|
210
|
+
wTime -= WEEK;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/// @notice check if a pool is votable on by checking the lastUpdated time
|
|
215
|
+
function _isPoolVotable(address pool) internal view returns (bool) {
|
|
216
|
+
return poolInfo[pool].lastUpdated != 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/// @notice check if a vote still counts by checking if the vote is not (x,0) (in case the
|
|
220
|
+
/// weight of the vote is too small) & the expiry is after the current time
|
|
221
|
+
function _isVoteActive(VeBalance memory vote) internal view returns (bool) {
|
|
222
|
+
return vote.slope != 0 && !MiniHelpers.isCurrentlyExpired(vote.getExpiry());
|
|
223
|
+
}
|
|
224
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
import "../../../interfaces/IPVotingEscrow.sol";
|
|
4
|
+
import "../../../libraries/helpers/MiniHelpers.sol";
|
|
5
|
+
import "./VotingEscrowToken.sol";
|
|
6
|
+
import "../CelerAbstracts/CelerSender.sol";
|
|
7
|
+
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
8
|
+
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
|
9
|
+
|
|
10
|
+
contract VotingEscrowPendleMainchain is VotingEscrowToken, IPVotingEscrow, CelerSender {
|
|
11
|
+
using SafeERC20 for IERC20;
|
|
12
|
+
using VeBalanceLib for VeBalance;
|
|
13
|
+
using VeBalanceLib for LockedPosition;
|
|
14
|
+
using EnumerableMap for EnumerableMap.UintToAddressMap;
|
|
15
|
+
|
|
16
|
+
bytes private constant EMPTY_BYTES = abi.encode();
|
|
17
|
+
|
|
18
|
+
IERC20 public immutable pendle;
|
|
19
|
+
|
|
20
|
+
// [wTime] => slopeChanges
|
|
21
|
+
mapping(uint128 => uint128) public slopeChanges;
|
|
22
|
+
|
|
23
|
+
// Saving totalSupply checkpoint for each week, later can be used for reward accounting
|
|
24
|
+
// [wTime] => totalSupply
|
|
25
|
+
mapping(uint128 => uint128) public totalSupplyAt;
|
|
26
|
+
|
|
27
|
+
// Saving VeBalance checkpoint for users of each week, can later use binary search
|
|
28
|
+
// to ask for their vePendle balance at any wTime
|
|
29
|
+
mapping(address => Checkpoint[]) public userCheckpoints;
|
|
30
|
+
|
|
31
|
+
constructor(IERC20 _pendle, address _governanceManager) CelerSender(_governanceManager) {
|
|
32
|
+
pendle = _pendle;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/// @notice basically a proxy function to call increaseLockPosition & broadcastUserPosition at the same time
|
|
36
|
+
function increaseLockPositionAndBroadcast(
|
|
37
|
+
uint128 additionalAmountToLock,
|
|
38
|
+
uint128 newExpiry,
|
|
39
|
+
uint256[] calldata chainIds
|
|
40
|
+
) external payable returns (uint128 newVeBalance) {
|
|
41
|
+
newVeBalance = increaseLockPosition(additionalAmountToLock, newExpiry);
|
|
42
|
+
broadcastUserPosition(msg.sender, chainIds);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @notice increase the lock position of an user. Applicable even when user has no position or the
|
|
47
|
+
current position has expired
|
|
48
|
+
* @dev expected state changes:
|
|
49
|
+
- a new lock with amount = amountToPull + amountExpired, expiry = expiry is created for msg.sender in positionData
|
|
50
|
+
- pendle is taken in if necessary
|
|
51
|
+
- _totalSupply, lastSupplyUpdatedAt, slopeChanges, totalSupplyAt is updated
|
|
52
|
+
- a checkpoint is added
|
|
53
|
+
* @dev broadcast is not bundled since it can be done anytime after
|
|
54
|
+
*/
|
|
55
|
+
function increaseLockPosition(uint128 additionalAmountToLock, uint128 newExpiry)
|
|
56
|
+
public
|
|
57
|
+
returns (uint128 newVeBalance)
|
|
58
|
+
{
|
|
59
|
+
address user = msg.sender;
|
|
60
|
+
require(
|
|
61
|
+
WeekMath.isValidWTime(newExpiry) && !MiniHelpers.isTimeInThePast(newExpiry),
|
|
62
|
+
"invalid newExpiry"
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
require(newExpiry <= block.timestamp + MAX_LOCK_TIME, "max lock time exceeded");
|
|
66
|
+
|
|
67
|
+
uint128 newTotalAmountLocked = additionalAmountToLock + positionData[user].amount;
|
|
68
|
+
require(newTotalAmountLocked > 0, "zero total amount locked");
|
|
69
|
+
|
|
70
|
+
uint128 additionalDurationToLock = newExpiry - positionData[user].expiry;
|
|
71
|
+
|
|
72
|
+
if (additionalAmountToLock > 0) {
|
|
73
|
+
pendle.safeTransferFrom(user, address(this), additionalAmountToLock);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
newVeBalance = _increasePosition(user, additionalDurationToLock, additionalAmountToLock);
|
|
77
|
+
|
|
78
|
+
emit NewLockPosition(user, newTotalAmountLocked, newExpiry);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @notice withdraw an expired lock position, get back all locked PENDLE
|
|
83
|
+
* @dev expected state changes:
|
|
84
|
+
- positionData is cleared
|
|
85
|
+
- pendle is transferred out
|
|
86
|
+
- _totalSupply, lastSupplyUpdatedAt, slopeChanges, totalSupplyAt all doesn't need to be updated
|
|
87
|
+
since these data will automatically hold true when _updateTotalSupply() is called
|
|
88
|
+
- no checkpoint is added
|
|
89
|
+
* @dev broadcast is not bundled since it can be done anytime after
|
|
90
|
+
*/
|
|
91
|
+
function withdraw(address user) external returns (uint128 amount) {
|
|
92
|
+
require(isPositionExpired(user), "position not expired");
|
|
93
|
+
amount = positionData[user].amount;
|
|
94
|
+
|
|
95
|
+
require(amount > 0, "zero position");
|
|
96
|
+
|
|
97
|
+
delete positionData[user];
|
|
98
|
+
|
|
99
|
+
pendle.safeTransfer(user, amount);
|
|
100
|
+
|
|
101
|
+
emit Withdraw(user, amount);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @notice update & return the current totalSupply
|
|
106
|
+
* @dev state changes expected:
|
|
107
|
+
- _totalSupply & lastSupplyUpdatedAt is updated
|
|
108
|
+
*/
|
|
109
|
+
function totalSupplyCurrent() external virtual override returns (uint128) {
|
|
110
|
+
(VeBalance memory supply, ) = _updateTotalSupply();
|
|
111
|
+
return supply.getCurrentValue();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @notice broadcast the totalSupply to different chains
|
|
116
|
+
* @dev state changes expected:
|
|
117
|
+
- all chains in chainIds receive the new totalSupply
|
|
118
|
+
*/
|
|
119
|
+
function broadcastTotalSupply(uint256[] calldata chainIds) public payable {
|
|
120
|
+
_broadcastPosition(address(0), chainIds);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @notice broadcast the position of users to different chains
|
|
125
|
+
* @dev state changes expected:
|
|
126
|
+
- all chains in chainIds receive the new totalSupply & user's new position
|
|
127
|
+
*/
|
|
128
|
+
function broadcastUserPosition(address user, uint256[] calldata chainIds) public payable {
|
|
129
|
+
require(user != address(0), "zero address user");
|
|
130
|
+
_broadcastPosition(user, chainIds);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/// @notice binary search to find balance at a timestamp. This timestamp does not need to be divisible by week
|
|
134
|
+
function getUserVeBalanceAt(address user, uint128 timestamp) external view returns (uint128) {
|
|
135
|
+
return VeBalanceLib.getCheckpointValueAt(userCheckpoints[user], timestamp);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @notice increase the locking position of the user
|
|
140
|
+
* @dev it works by simply removing the old position from all relevant data (as if the user has never locked) and
|
|
141
|
+
then add in the new position
|
|
142
|
+
* @dev expected state changes:
|
|
143
|
+
- a new lock with the amount & expiry increase accordingly
|
|
144
|
+
- pendle is taken in if necessary
|
|
145
|
+
- _totalSupply, lastSupplyUpdatedAt, slopeChanges, totalSupplyAt is updated
|
|
146
|
+
- a checkpoint is added
|
|
147
|
+
*/
|
|
148
|
+
function _increasePosition(
|
|
149
|
+
address user,
|
|
150
|
+
uint128 durationToIncrease,
|
|
151
|
+
uint128 amountToIncrease
|
|
152
|
+
) internal returns (uint128) {
|
|
153
|
+
LockedPosition memory oldPosition = positionData[user];
|
|
154
|
+
|
|
155
|
+
(VeBalance memory newSupply, ) = _updateTotalSupply();
|
|
156
|
+
|
|
157
|
+
if (!MiniHelpers.isCurrentlyExpired(oldPosition.expiry)) {
|
|
158
|
+
// remove old position not yet expired
|
|
159
|
+
VeBalance memory oldBalance = oldPosition.convertToVeBalance();
|
|
160
|
+
newSupply = newSupply.sub(oldBalance);
|
|
161
|
+
slopeChanges[oldPosition.expiry] -= oldBalance.slope;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
LockedPosition memory newPosition = LockedPosition(
|
|
165
|
+
oldPosition.amount + amountToIncrease,
|
|
166
|
+
oldPosition.expiry + durationToIncrease
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
VeBalance memory newBalance = newPosition.convertToVeBalance();
|
|
170
|
+
// add new position
|
|
171
|
+
newSupply = newSupply.add(newBalance);
|
|
172
|
+
slopeChanges[newPosition.expiry] += newBalance.slope;
|
|
173
|
+
|
|
174
|
+
_totalSupply = newSupply;
|
|
175
|
+
positionData[user] = newPosition;
|
|
176
|
+
userCheckpoints[user].push(Checkpoint(newBalance, uint128(block.timestamp)));
|
|
177
|
+
return newBalance.getCurrentValue();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* @notice update the totalSupply, processing all slope changes of past weeks. At the same time, set the finalized
|
|
182
|
+
totalSupplyAt
|
|
183
|
+
* @dev state changes expected:
|
|
184
|
+
- _totalSupply, lastSupplyUpdatedAt, totalSupplyAt is updated
|
|
185
|
+
*/
|
|
186
|
+
function _updateTotalSupply() internal returns (VeBalance memory, uint128) {
|
|
187
|
+
VeBalance memory supply = _totalSupply;
|
|
188
|
+
uint128 wTime = lastSupplyUpdatedAt;
|
|
189
|
+
uint128 currentWeekStart = WeekMath.getCurrentWeekStart();
|
|
190
|
+
|
|
191
|
+
if (wTime >= currentWeekStart) {
|
|
192
|
+
return (supply, wTime);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
while (wTime < currentWeekStart) {
|
|
196
|
+
wTime += WEEK;
|
|
197
|
+
supply = supply.sub(slopeChanges[wTime], wTime);
|
|
198
|
+
totalSupplyAt[wTime] = supply.getValueAt(wTime);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
_totalSupply = supply;
|
|
202
|
+
lastSupplyUpdatedAt = wTime;
|
|
203
|
+
|
|
204
|
+
return (supply, lastSupplyUpdatedAt);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/// @notice broadcast position to all chains in chainIds
|
|
208
|
+
function _broadcastPosition(address user, uint256[] calldata chainIds) public payable {
|
|
209
|
+
require(chainIds.length != 0, "empty chainIds");
|
|
210
|
+
|
|
211
|
+
(VeBalance memory supply, uint256 wTime) = _updateTotalSupply();
|
|
212
|
+
|
|
213
|
+
bytes memory userData = (
|
|
214
|
+
user == address(0) ? EMPTY_BYTES : abi.encode(user, positionData[user])
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
for (uint256 i = 0; i < chainIds.length; ++i) {
|
|
218
|
+
require(sidechainContracts.contains(chainIds[i]), "not supported chain");
|
|
219
|
+
_broadcast(chainIds[i], wTime, supply, userData);
|
|
220
|
+
if (user != address(0)) {
|
|
221
|
+
emit BroadcastUserPosition(user, chainIds);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
emit BroadcastTotalSupply(supply, chainIds);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
function _afterAddSidechainContract(address, uint256 chainId) internal virtual override {
|
|
229
|
+
(VeBalance memory supply, uint256 wTime) = _updateTotalSupply();
|
|
230
|
+
_broadcast(chainId, wTime, supply, EMPTY_BYTES);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function _broadcast(
|
|
234
|
+
uint256 chainId,
|
|
235
|
+
uint256 wTime,
|
|
236
|
+
VeBalance memory supply,
|
|
237
|
+
bytes memory userData
|
|
238
|
+
) internal {
|
|
239
|
+
_sendMessage(chainId, abi.encode(wTime, supply, userData));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.13;
|
|
4
|
+
|
|
5
|
+
import "../../../libraries/VeBalanceLib.sol";
|
|
6
|
+
import "../../../libraries/math/WeekMath.sol";
|
|
7
|
+
import "./VotingEscrowToken.sol";
|
|
8
|
+
import "../CelerAbstracts/CelerReceiver.sol";
|
|
9
|
+
|
|
10
|
+
// solhint-disable no-empty-blocks
|
|
11
|
+
contract VotingEscrowPendleSidechain is VotingEscrowToken, CelerReceiver {
|
|
12
|
+
mapping(address => address) internal delegatorOf;
|
|
13
|
+
|
|
14
|
+
event SetNewDelegator(address delegator, address receiver);
|
|
15
|
+
|
|
16
|
+
event SetNewTotalSupply(VeBalance totalSupply);
|
|
17
|
+
|
|
18
|
+
event SetNewUserPosition(LockedPosition position);
|
|
19
|
+
|
|
20
|
+
constructor(address _governanceManager) CelerReceiver(_governanceManager) {}
|
|
21
|
+
|
|
22
|
+
function totalSupplyCurrent() external view virtual override returns (uint128) {
|
|
23
|
+
return totalSupplyStored();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @dev The mechanism of delegating is for governance to support protocol to build on top
|
|
28
|
+
* This way, it is more gas efficient and does not affect the crosschain messaging cost
|
|
29
|
+
*/
|
|
30
|
+
function setDelegatorFor(address receiver, address delegator) external onlyGovernance {
|
|
31
|
+
delegatorOf[receiver] = delegator;
|
|
32
|
+
emit SetNewDelegator(delegator, receiver);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @dev Both two types of message will contain VeBalance supply & wTime
|
|
37
|
+
* @dev If the message also contains some users' position, we should update it
|
|
38
|
+
*/
|
|
39
|
+
function _executeMessage(bytes memory message) internal virtual override {
|
|
40
|
+
(uint128 wTime, VeBalance memory supply, bytes memory userData) = abi.decode(
|
|
41
|
+
message,
|
|
42
|
+
(uint128, VeBalance, bytes)
|
|
43
|
+
);
|
|
44
|
+
_setNewTotalSupply(wTime, supply);
|
|
45
|
+
if (userData.length > 0) {
|
|
46
|
+
_setNewUserPosition(userData);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function _setNewUserPosition(bytes memory userData) internal {
|
|
51
|
+
(address userAddr, LockedPosition memory position) = abi.decode(
|
|
52
|
+
userData,
|
|
53
|
+
(address, LockedPosition)
|
|
54
|
+
);
|
|
55
|
+
positionData[userAddr] = position;
|
|
56
|
+
emit SetNewUserPosition(position);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function _setNewTotalSupply(uint128 wTime, VeBalance memory supply) internal {
|
|
60
|
+
assert(wTime == WeekMath.getWeekStartTimestamp(wTime));
|
|
61
|
+
lastSupplyUpdatedAt = wTime;
|
|
62
|
+
_totalSupply = supply;
|
|
63
|
+
emit SetNewTotalSupply(supply);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function balanceOf(address user) public view virtual override returns (uint128) {
|
|
67
|
+
address delegator = delegatorOf[user];
|
|
68
|
+
if (delegatorOf[user] == address(0)) {
|
|
69
|
+
return super.balanceOf(user);
|
|
70
|
+
}
|
|
71
|
+
return super.balanceOf(delegator);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
import "../../../interfaces/IPVeToken.sol";
|
|
5
|
+
import "../../../libraries/VeBalanceLib.sol";
|
|
6
|
+
import "../../../libraries/math/WeekMath.sol";
|
|
7
|
+
import "../../../libraries/helpers/MiniHelpers.sol";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @dev this contract is an abstract for its mainchain and sidechain variant
|
|
11
|
+
* PRINCIPLE:
|
|
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
|
|
14
|
+
* - Mainchain version will handle the logic which are:
|
|
15
|
+
* + Deposit, withdraw, increase lock, increase amount
|
|
16
|
+
* + Mainchain logic will be ensured to have _totalSupply = linear sum of
|
|
17
|
+
* all users' veBalance such that their locks are not yet expired
|
|
18
|
+
* + Mainchain contract reserves 100% the right to write on sidechain
|
|
19
|
+
* + No other transaction is allowed to write on sidechain storage
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
abstract contract VotingEscrowToken is IPVeToken {
|
|
23
|
+
// wrong name, should be VotingEscrowPendle
|
|
24
|
+
using VeBalanceLib for VeBalance;
|
|
25
|
+
using VeBalanceLib for LockedPosition;
|
|
26
|
+
|
|
27
|
+
uint128 public constant WEEK = 1 weeks;
|
|
28
|
+
uint128 public constant MAX_LOCK_TIME = 104 weeks;
|
|
29
|
+
|
|
30
|
+
VeBalance internal _totalSupply;
|
|
31
|
+
uint128 public lastSupplyUpdatedAt;
|
|
32
|
+
|
|
33
|
+
mapping(address => LockedPosition) public positionData;
|
|
34
|
+
|
|
35
|
+
constructor() {
|
|
36
|
+
lastSupplyUpdatedAt = WeekMath.getCurrentWeekStart();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function balanceOf(address user) public view virtual returns (uint128) {
|
|
40
|
+
if (isPositionExpired(user)) return 0;
|
|
41
|
+
return positionData[user].convertToVeBalance().getCurrentValue();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function totalSupplyStored() public view virtual returns (uint128) {
|
|
45
|
+
return _totalSupply.getCurrentValue();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function totalSupplyCurrent() external virtual returns (uint128);
|
|
49
|
+
|
|
50
|
+
function isPositionExpired(address user) public view returns (bool) {
|
|
51
|
+
return MiniHelpers.isCurrentlyExpired(positionData[user].expiry);
|
|
52
|
+
}
|
|
53
|
+
}
|