@pendle/core-v2 0.7.1-beta → 0.8.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.json +33 -17
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.json +33 -17
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.json +33 -17
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.json +33 -17
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.json +33 -17
- package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.json +31 -15
- package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.json +31 -15
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchain.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchain.sol/PendleGaugeControllerMainchainUpg.json +2 -2
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechain.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechain.sol/PendleGaugeControllerSidechainUpg.json +2 -2
- package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.json +0 -26
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +2 -2
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +2 -2
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +2 -2
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +125 -111
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +2 -2
- package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +1 -1
- package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.json +2 -2
- package/build/artifacts/contracts/core/PendleERC20Permit.sol/PendleERC20Permit.dbg.json +1 -1
- package/build/artifacts/contracts/core/PendleERC20Permit.sol/PendleERC20Permit.json +2 -2
- package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
- package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.json +2 -2
- package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +77 -2
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +51 -20
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +72 -93
- 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 +3 -3
- package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +2 -2
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
- 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/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
- 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 +1 -1
- package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +1 -1
- package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPGovernanceManager.sol/IPGovernanceManager.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPInterestManagerYT.sol/IPInterestManagerYT.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 +48 -83
- package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
- 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/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.json +20 -15
- package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.json +30 -4
- package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.json +8 -92
- package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.json +31 -2
- 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/IWstETH.sol/IWstETH.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/SCY/SCYIndex.sol/SCYIndexLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/SCY/SCYIndex.sol/SCYIndexLib.json +2 -2
- package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.json +2 -2
- package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.json +2 -2
- package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.json +2 -2
- package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.json +2 -2
- 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/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.json +2 -2
- package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.json +2 -2
- package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +1 -1
- 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 +1 -1
- package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.json +2 -2
- package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.json +2 -2
- package/build/artifacts/contracts/libraries/traderjoe/JoeLibrary.sol/JoeLibrary.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/traderjoe/JoeLibrary.sol/JoeLibrary.json +2 -2
- package/build/artifacts/contracts/libraries/traderjoe/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +166 -13
- 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 +16 -12
- package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol +3 -3
- package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +20 -0
- package/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol +20 -0
- package/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol +20 -0
- package/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol +29 -2
- package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +63 -41
- package/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol +0 -7
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +1 -1
- package/contracts/core/LiquidityMining/PendleGauge.sol +24 -8
- package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +47 -96
- package/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +86 -73
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +17 -16
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +1 -1
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +3 -4
- package/contracts/core/Market/PendleMarket.sol +32 -62
- package/contracts/core/PendleRouter.sol +1 -1
- package/contracts/core/YieldContracts/InterestManagerYT.sol +11 -8
- package/contracts/core/YieldContracts/PendlePrincipalToken.sol +3 -3
- package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +18 -12
- package/contracts/core/YieldContracts/PendleYieldToken.sol +167 -140
- package/contracts/core/actions/ActionCallback.sol +11 -10
- package/contracts/core/actions/ActionCore.sol +84 -22
- package/contracts/core/actions/ActionYT.sol +33 -15
- package/contracts/core/actions/base/ActionSCYAndPTBase.sol +4 -15
- package/contracts/core/actions/base/ActionSCYAndPYBase.sol +20 -50
- package/contracts/core/actions/base/ActionSCYAndYTBase.sol +2 -12
- package/contracts/interfaces/IPActionCore.sol +72 -1
- package/contracts/interfaces/IPActionYT.sol +15 -0
- package/contracts/interfaces/IPMarket.sol +7 -26
- package/contracts/interfaces/IPRouterStatic.sol +67 -47
- package/contracts/interfaces/IPVeToken.sol +0 -2
- package/contracts/interfaces/IPVotingEscrow.sol +1 -1
- package/contracts/interfaces/IPYieldContractFactory.sol +6 -2
- package/contracts/interfaces/IPYieldToken.sol +21 -11
- package/contracts/interfaces/ISuperComposableYield.sol +22 -28
- package/contracts/interfaces/IYearnVault.sol +8 -0
- package/contracts/libraries/RewardManager.sol +9 -6
- package/contracts/libraries/RewardManagerAbstract.sol +6 -8
- package/contracts/libraries/SCY/SCYIndex.sol +10 -0
- package/contracts/libraries/VeBalanceLib.sol +0 -1
- package/contracts/libraries/helpers/ArrayLib.sol +11 -0
- package/contracts/libraries/helpers/TokenHelper.sol +6 -5
- package/contracts/libraries/math/MarketApproxLib.sol +91 -36
- package/contracts/libraries/math/Math.sol +2 -4
- package/contracts/offchain-helpers/RouterStatic.sol +144 -115
- package/deployments/43113-core.json +11 -9
- package/deployments/43113-markets/benqi-market-0xF3150c14F776c50C9D397054d38979c7B77FC41D.json +7 -0
- package/deployments/80001-core.json +10 -8
- package/deployments/80001-markets/benqi-market-0x150b6eb90Bf636eC0c4328d13d1e1d4adDBAF904.json +7 -0
- package/package.json +2 -2
- package/typechain-types/ActionCore.ts +8 -8
- package/typechain-types/CelerReceiver.ts +267 -0
- package/typechain-types/CelerSender.ts +164 -0
- package/typechain-types/IPActionCore.ts +8 -8
- package/typechain-types/IPAllAction.ts +8 -8
- package/typechain-types/IPMarket.ts +66 -109
- package/typechain-types/IPRouterStatic.ts +64 -41
- package/typechain-types/IPVotingEscrowController.ts +154 -0
- package/typechain-types/IPYieldContractFactory.ts +34 -0
- package/typechain-types/IPYieldToken.ts +12 -112
- package/typechain-types/ISuperComposableYield.ts +54 -10
- package/typechain-types/PendleAaveV3SCY.ts +54 -29
- package/typechain-types/PendleBtrflyScy.ts +56 -58
- package/typechain-types/PendleERC4626SCY.ts +54 -29
- package/typechain-types/PendleGauge.ts +0 -32
- package/typechain-types/PendleGaugeController.ts +282 -0
- package/typechain-types/PendleGaugeControllerMainchain.ts +346 -0
- package/typechain-types/PendleGaugeControllerSidechain.ts +460 -0
- package/typechain-types/PendleJoeLpSCY.ts +56 -58
- package/typechain-types/PendleMarket.ts +169 -140
- package/typechain-types/PendlePrincipalToken.ts +104 -0
- package/typechain-types/PendleQiTokenSCY.ts +54 -29
- package/typechain-types/PendleVotingController.ts +865 -0
- package/typechain-types/PendleWstEthSCY.ts +54 -29
- package/typechain-types/PendleYearnVaultSCY.ts +54 -29
- package/typechain-types/PendleYieldContractFactory.ts +66 -19
- package/typechain-types/PendleYieldToken.ts +122 -158
- package/typechain-types/RouterStatic.ts +297 -24
- package/typechain-types/SCYBase.ts +54 -29
- package/typechain-types/SCYBaseWithRewards.ts +54 -29
- package/typechain-types/VotingControllerStorage.ts +410 -0
- package/typechain-types/VotingEscrowController.ts +154 -0
- package/typechain-types/VotingEscrowToken.ts +335 -0
- package/typechain-types/factories/ActionCallback__factory.ts +1 -1
- package/typechain-types/factories/ActionCore__factory.ts +2 -2
- package/typechain-types/factories/ActionYT__factory.ts +1 -1
- package/typechain-types/factories/CelerReceiver__factory.ts +140 -0
- package/typechain-types/factories/CelerSender__factory.ts +67 -0
- package/typechain-types/factories/ERC20__factory.ts +1 -1
- package/typechain-types/factories/IPActionCore__factory.ts +1 -1
- package/typechain-types/factories/IPAllAction__factory.ts +1 -1
- package/typechain-types/factories/IPMarket__factory.ts +48 -83
- package/typechain-types/factories/IPRouterStatic__factory.ts +20 -15
- package/typechain-types/factories/IPVotingEscrowController__factory.ts +80 -0
- package/typechain-types/factories/IPYieldContractFactory__factory.ts +30 -4
- package/typechain-types/factories/IPYieldToken__factory.ts +6 -90
- package/typechain-types/factories/ISuperComposableYield__factory.ts +31 -2
- package/typechain-types/factories/PendleAaveV3SCY__factory.ts +32 -16
- package/typechain-types/factories/PendleBtrflyScy__factory.ts +52 -28
- package/typechain-types/factories/PendleERC20Permit__factory.ts +1 -1
- package/typechain-types/factories/PendleERC20__factory.ts +1 -1
- package/typechain-types/factories/PendleERC4626SCY__factory.ts +32 -16
- package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleGaugeControllerMainchain__factory.ts +269 -0
- package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleGaugeControllerSidechain__factory.ts +328 -0
- package/typechain-types/factories/PendleGaugeController__factory.ts +149 -0
- package/typechain-types/factories/PendleGauge__factory.ts +0 -26
- package/typechain-types/factories/PendleGovernanceManager__factory.ts +1 -1
- package/typechain-types/factories/PendleJoeLpSCY__factory.ts +34 -28
- package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
- package/typechain-types/factories/PendleMarket__factory.ts +124 -110
- package/typechain-types/factories/PendlePrincipalToken__factory.ts +76 -1
- package/typechain-types/factories/PendleQiTokenHelper__factory.ts +1 -1
- package/typechain-types/factories/PendleQiTokenSCY__factory.ts +32 -16
- package/typechain-types/factories/PendleRouter__factory.ts +1 -1
- package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleVotingController__factory.ts +584 -0
- package/typechain-types/factories/PendleWstEthSCY__factory.ts +32 -16
- package/typechain-types/factories/PendleYearnVaultSCY__factory.ts +32 -16
- package/typechain-types/factories/PendleYieldContractFactory__factory.ts +54 -19
- package/typechain-types/factories/PendleYieldToken__factory.ts +70 -91
- package/typechain-types/factories/RouterStatic__factory.ts +165 -12
- package/typechain-types/factories/SCYBaseWithRewards__factory.ts +31 -15
- package/typechain-types/factories/SCYBase__factory.ts +31 -15
- package/typechain-types/factories/VotingControllerStorage__factory.ts +298 -0
- package/typechain-types/factories/VotingEscrowController__factory.ts +80 -0
- package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +1 -1
- package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +1 -1
- package/typechain-types/factories/VotingEscrowToken__factory.ts +225 -0
- package/typechain-types/hardhat.d.ts +0 -27
- package/typechain-types/index.ts +0 -6
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol/PendleBtrflyScy.dbg.json +0 -4
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol/PendleBtrflyScy.json +0 -635
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol/PendleJoeLpSCY.dbg.json +0 -4
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol/PendleJoeLpSCY.json +0 -653
- package/build/artifacts/contracts/interfaces/IPMarketAddRemoveCallback.sol/IPMarketAddRemoveCallback.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPMarketAddRemoveCallback.sol/IPMarketAddRemoveCallback.json +0 -67
- package/build/artifacts/contracts/libraries/solmate/Bytes32AddressLib.sol/Bytes32AddressLib.dbg.json +0 -4
- package/build/artifacts/contracts/libraries/solmate/Bytes32AddressLib.sol/Bytes32AddressLib.json +0 -10
- package/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol +0 -123
- package/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol +0 -245
- package/contracts/interfaces/IPMarketAddRemoveCallback.sol +0 -18
- package/contracts/libraries/solmate/Bytes32AddressLib.sol +0 -14
- package/deployments/43113-markets/benqi-market.json +0 -7
- package/deployments/80001-markets/benqi-market.json +0 -7
|
@@ -13,20 +13,17 @@ import "../../interfaces/IPYieldContractFactory.sol";
|
|
|
13
13
|
import "../../libraries/SCY/SCYUtils.sol";
|
|
14
14
|
import "../../libraries/helpers/MiniHelpers.sol";
|
|
15
15
|
import "../../libraries/RewardManagerAbstract.sol";
|
|
16
|
-
import "../
|
|
16
|
+
import "../PendleERC20Permit.sol";
|
|
17
17
|
import "./InterestManagerYT.sol";
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
It has been proven and tested that totalScyRedeemable will not change over time, unless users redeem their interest or redeemPY.
|
|
24
|
-
|
|
25
|
-
Due to this, it is required to update users' accruedReward STRICTLY BEFORE redeeming their interest.
|
|
19
|
+
/**
|
|
20
|
+
Invariances to maintain:
|
|
21
|
+
- address(0) & address(this) should never have any rewards & activeBalance accounting done. This is
|
|
22
|
+
guaranteed by address(0) & address(this) check in each updateForTwo function
|
|
26
23
|
*/
|
|
27
24
|
contract PendleYieldToken is
|
|
28
25
|
IPYieldToken,
|
|
29
|
-
|
|
26
|
+
PendleERC20Permit,
|
|
30
27
|
RewardManagerAbstract,
|
|
31
28
|
InterestManagerYT
|
|
32
29
|
{
|
|
@@ -34,10 +31,11 @@ contract PendleYieldToken is
|
|
|
34
31
|
using SafeERC20 for IERC20;
|
|
35
32
|
using ArrayLib for uint256[];
|
|
36
33
|
|
|
37
|
-
struct
|
|
38
|
-
bool isFinalized;
|
|
34
|
+
struct PostExpiryData {
|
|
39
35
|
uint128 firstScyIndex;
|
|
40
|
-
|
|
36
|
+
uint128 totalScyInterestForTreasury;
|
|
37
|
+
mapping(address => uint256) firstRewardIndex;
|
|
38
|
+
mapping(address => uint256) userRewardOwed;
|
|
41
39
|
}
|
|
42
40
|
|
|
43
41
|
address public immutable SCY;
|
|
@@ -48,9 +46,10 @@ contract PendleYieldToken is
|
|
|
48
46
|
uint128 public scyReserve;
|
|
49
47
|
uint128 internal _scyIndexStored;
|
|
50
48
|
|
|
51
|
-
|
|
49
|
+
PostExpiryData public postExpiry;
|
|
52
50
|
|
|
53
|
-
modifier
|
|
51
|
+
modifier updateData() {
|
|
52
|
+
if (isExpired()) _setPostExpiryData();
|
|
54
53
|
_;
|
|
55
54
|
_updateScyReserve();
|
|
56
55
|
}
|
|
@@ -62,7 +61,7 @@ contract PendleYieldToken is
|
|
|
62
61
|
string memory _symbol,
|
|
63
62
|
uint8 __decimals,
|
|
64
63
|
uint256 _expiry
|
|
65
|
-
)
|
|
64
|
+
) PendleERC20Permit(_name, _symbol, __decimals) {
|
|
66
65
|
SCY = _SCY;
|
|
67
66
|
PT = _PT;
|
|
68
67
|
expiry = _expiry;
|
|
@@ -73,7 +72,7 @@ contract PendleYieldToken is
|
|
|
73
72
|
function mintPY(address receiverPT, address receiverYT)
|
|
74
73
|
external
|
|
75
74
|
nonReentrant
|
|
76
|
-
|
|
75
|
+
updateData
|
|
77
76
|
returns (uint256 amountPYOut)
|
|
78
77
|
{
|
|
79
78
|
require(!isExpired(), "yield contract expired");
|
|
@@ -85,114 +84,109 @@ contract PendleYieldToken is
|
|
|
85
84
|
_mint(receiverYT, amountPYOut);
|
|
86
85
|
|
|
87
86
|
IPPrincipalToken(PT).mintByYT(receiverPT, amountPYOut);
|
|
88
|
-
|
|
89
|
-
emit Mint(msg.sender, receiverPT, receiverYT, amountPYOut);
|
|
90
87
|
}
|
|
91
88
|
|
|
92
89
|
/// @dev this function converts PY tokens into scy, but interests & rewards are not redeemed at the same time
|
|
93
90
|
function redeemPY(address receiver)
|
|
94
91
|
external
|
|
95
92
|
nonReentrant
|
|
96
|
-
|
|
93
|
+
updateData
|
|
97
94
|
returns (uint256 amountScyOut)
|
|
98
95
|
{
|
|
99
96
|
address[] memory receivers = new address[](1);
|
|
100
97
|
uint256[] memory amounts = new uint256[](1);
|
|
101
|
-
(receivers[0], amounts[0]) = (receiver,
|
|
98
|
+
(receivers[0], amounts[0]) = (receiver, _getAmountPYToRedeem());
|
|
102
99
|
|
|
103
|
-
|
|
100
|
+
uint256[] memory amountScyOuts;
|
|
101
|
+
amountScyOuts = _redeemPY(receivers, amounts);
|
|
104
102
|
|
|
105
|
-
|
|
103
|
+
amountScyOut = amountScyOuts[0];
|
|
106
104
|
}
|
|
107
105
|
|
|
108
106
|
/// @dev this function limit how much each receiver will receive. For example, if the totalOut is 100,
|
|
109
107
|
/// and the max are 50 30 INF, the first receiver will receive 50, the second will receive 30, and the third will receive 20.
|
|
110
108
|
/// @dev intended to mostly be used by Pendle router
|
|
111
|
-
function
|
|
109
|
+
function redeemPYMulti(address[] calldata receivers, uint256[] calldata amountPYToRedeems)
|
|
112
110
|
external
|
|
113
111
|
nonReentrant
|
|
114
|
-
|
|
115
|
-
returns (uint256
|
|
112
|
+
updateData
|
|
113
|
+
returns (uint256[] memory amountScyOuts)
|
|
116
114
|
{
|
|
117
|
-
(
|
|
115
|
+
require(receivers.length == amountPYToRedeems.length, "not same length");
|
|
116
|
+
require(receivers.length != 0, "empty array");
|
|
117
|
+
amountScyOuts = _redeemPY(receivers, amountPYToRedeems);
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
/**
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
121
|
+
* @dev With YT yielding interest in the form of SCY, which is redeemable by users, the reward
|
|
122
|
+
distribution should be based on the amount of SCYs that their YT currently represent, plus their
|
|
123
|
+
dueInterest. It has been proven and tested that _rewardSharesUser will not change over time,
|
|
124
|
+
unless users redeem their dueInterest or redeemPY. Due to this, it is required to update users'
|
|
125
|
+
accruedReward STRICTLY BEFORE transferring out their interest.
|
|
126
|
+
*/
|
|
127
|
+
function redeemDueInterestAndRewards(
|
|
128
|
+
address user,
|
|
129
|
+
bool redeemInterest,
|
|
130
|
+
bool redeemRewards
|
|
131
|
+
) external nonReentrant updateData returns (uint256 interestOut, uint256[] memory rewardsOut) {
|
|
132
|
+
require(redeemInterest || redeemRewards, "nothing to redeem");
|
|
133
|
+
|
|
134
|
+
// if redeemRewards == true, this line must be here for obvious reason
|
|
135
|
+
// if redeemInterest == true, this line must be here because of the reason above
|
|
129
136
|
_updateAndDistributeRewards(user);
|
|
130
|
-
_distributeInterest(user);
|
|
131
|
-
rewardsOut = _doTransferOutRewards(user, user);
|
|
132
|
-
interestOut = _doTransferOutInterest(user, SCY, factory);
|
|
133
137
|
|
|
134
|
-
|
|
135
|
-
|
|
138
|
+
if (redeemRewards) {
|
|
139
|
+
rewardsOut = _doTransferOutRewards(user, user);
|
|
140
|
+
emit RedeemRewards(user, rewardsOut);
|
|
141
|
+
} else {
|
|
142
|
+
address[] memory tokens = getRewardTokens();
|
|
143
|
+
rewardsOut = new uint256[](tokens.length);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (redeemInterest) {
|
|
147
|
+
_distributeInterest(user);
|
|
148
|
+
interestOut = _doTransferOutInterest(user, SCY, factory);
|
|
149
|
+
emit RedeemInterest(user, interestOut);
|
|
150
|
+
} else {
|
|
151
|
+
interestOut = 0;
|
|
152
|
+
}
|
|
136
153
|
}
|
|
137
154
|
|
|
138
|
-
|
|
139
|
-
* @dev as mentioned in doc, _updateAndDistributeRewards should be placed strictly before every _distributeInterest
|
|
140
|
-
*/
|
|
141
|
-
function redeemDueInterest(address user)
|
|
155
|
+
function redeemInterestAndRewardsPostExpiryForTreasury()
|
|
142
156
|
external
|
|
143
157
|
nonReentrant
|
|
144
|
-
|
|
145
|
-
returns (uint256 interestOut)
|
|
158
|
+
updateData
|
|
159
|
+
returns (uint256 interestOut, uint256[] memory rewardsOut)
|
|
146
160
|
{
|
|
147
|
-
|
|
148
|
-
_distributeInterest(user);
|
|
161
|
+
require(isExpired(), "not expired");
|
|
149
162
|
|
|
150
|
-
|
|
163
|
+
address treasury = IPYieldContractFactory(factory).treasury();
|
|
151
164
|
|
|
152
|
-
|
|
153
|
-
|
|
165
|
+
address[] memory tokens = getRewardTokens();
|
|
166
|
+
rewardsOut = new uint256[](tokens.length);
|
|
154
167
|
|
|
155
|
-
|
|
156
|
-
function redeemDueRewards(address user)
|
|
157
|
-
external
|
|
158
|
-
nonReentrant
|
|
159
|
-
returns (uint256[] memory rewardsOut)
|
|
160
|
-
{
|
|
161
|
-
_updateAndDistributeRewards(user);
|
|
162
|
-
rewardsOut = _doTransferOutRewards(user, user);
|
|
163
|
-
emit RedeemRewards(user, rewardsOut);
|
|
164
|
-
}
|
|
168
|
+
_redeemExternalReward();
|
|
165
169
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
function redeemRewardsAfterExpiryForTreasury()
|
|
170
|
-
external
|
|
171
|
-
nonReentrant
|
|
172
|
-
returns (uint256[] memory rewardsOut)
|
|
173
|
-
{
|
|
174
|
-
require(isExpired(), "not expired");
|
|
175
|
-
address[] memory rewardTokens = _getRewardTokens();
|
|
176
|
-
uint256[] memory preBalances = _selfBalances(rewardTokens);
|
|
170
|
+
for (uint256 i = 0; i < tokens.length; i++) {
|
|
171
|
+
rewardsOut[i] = _selfBalance(tokens[i]) - postExpiry.userRewardOwed[tokens[i]];
|
|
172
|
+
}
|
|
177
173
|
|
|
178
|
-
|
|
174
|
+
_transferOut(tokens, treasury, rewardsOut);
|
|
179
175
|
|
|
180
|
-
|
|
181
|
-
|
|
176
|
+
interestOut = postExpiry.totalScyInterestForTreasury;
|
|
177
|
+
postExpiry.totalScyInterestForTreasury = 0;
|
|
178
|
+
_transferOut(SCY, treasury, interestOut);
|
|
182
179
|
}
|
|
183
180
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
if (!isExpired() || afterExpiry.isFinalized) return;
|
|
187
|
-
afterExpiry.isFinalized = true;
|
|
188
|
-
afterExpiry.firstScyIndex = scyIndexCurrent().Uint128();
|
|
189
|
-
(, afterExpiry.firstRewardIndexes) = _updateRewardIndex();
|
|
181
|
+
function rewardIndexesCurrent() external override returns (uint256[] memory) {
|
|
182
|
+
return ISuperComposableYield(SCY).rewardIndexesCurrent();
|
|
190
183
|
}
|
|
191
184
|
|
|
192
185
|
/// @dev maximize the current rate with the previous rate to guarantee non-decreasing rate
|
|
193
186
|
function scyIndexCurrent() public returns (uint256 currentIndex) {
|
|
194
187
|
currentIndex = Math.max(ISuperComposableYield(SCY).exchangeRate(), _scyIndexStored);
|
|
195
188
|
_scyIndexStored = currentIndex.Uint128();
|
|
189
|
+
emit NewInterestIndex(currentIndex);
|
|
196
190
|
}
|
|
197
191
|
|
|
198
192
|
function scyIndexStored() public view returns (uint256) {
|
|
@@ -203,22 +197,30 @@ contract PendleYieldToken is
|
|
|
203
197
|
return MiniHelpers.isCurrentlyExpired(expiry);
|
|
204
198
|
}
|
|
205
199
|
|
|
206
|
-
function _redeemPY(address[] memory receivers, uint256[] memory
|
|
200
|
+
function _redeemPY(address[] memory receivers, uint256[] memory amountPYToRedeems)
|
|
207
201
|
internal
|
|
208
|
-
returns (uint256
|
|
202
|
+
returns (uint256[] memory amountScyOuts)
|
|
209
203
|
{
|
|
210
|
-
uint256
|
|
211
|
-
IPPrincipalToken(PT).burnByYT(address(this),
|
|
212
|
-
if (!isExpired()) _burn(address(this),
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
204
|
+
uint256 totalAmountPYToRedeem = amountPYToRedeems.sum();
|
|
205
|
+
IPPrincipalToken(PT).burnByYT(address(this), totalAmountPYToRedeem);
|
|
206
|
+
if (!isExpired()) _burn(address(this), totalAmountPYToRedeem);
|
|
207
|
+
|
|
208
|
+
uint256 index = scyIndexCurrent();
|
|
209
|
+
uint256 totalScyInterestPostExpiry;
|
|
210
|
+
amountScyOuts = new uint256[](receivers.length);
|
|
211
|
+
|
|
212
|
+
for (uint256 i = 0; i < receivers.length; i++) {
|
|
213
|
+
uint256 scyInterestPostExpiry;
|
|
214
|
+
(amountScyOuts[i], scyInterestPostExpiry) = _calcScyRedeemableFromPY(
|
|
215
|
+
amountPYToRedeems[i],
|
|
216
|
+
index
|
|
217
|
+
);
|
|
218
|
+
_transferOut(SCY, receivers[i], amountScyOuts[i]);
|
|
219
|
+
totalScyInterestPostExpiry += scyInterestPostExpiry;
|
|
220
|
+
}
|
|
221
|
+
if (totalScyInterestPostExpiry != 0) {
|
|
222
|
+
postExpiry.totalScyInterestForTreasury += totalScyInterestPostExpiry.Uint128();
|
|
219
223
|
}
|
|
220
|
-
|
|
221
|
-
_transferOutMaxMulti(SCY, totalScyToReceivers, receivers, maxAmountScyOuts);
|
|
222
224
|
}
|
|
223
225
|
|
|
224
226
|
function _calcPYToMint(uint256 amountScy) internal returns (uint256 amountPY) {
|
|
@@ -228,44 +230,59 @@ contract PendleYieldToken is
|
|
|
228
230
|
|
|
229
231
|
function _calcScyRedeemableFromPY(uint256 amountPY)
|
|
230
232
|
internal
|
|
231
|
-
returns (uint256 scyToUser, uint256
|
|
233
|
+
returns (uint256 scyToUser, uint256 scyInterestPostExpiry)
|
|
232
234
|
{
|
|
235
|
+
return _calcScyRedeemableFromPY(amountPY, scyIndexCurrent());
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function _calcScyRedeemableFromPY(uint256 amountPY, uint256 indexCurrent)
|
|
239
|
+
internal
|
|
240
|
+
view
|
|
241
|
+
returns (uint256 scyToUser, uint256 scyInterestPostExpiry)
|
|
242
|
+
{
|
|
243
|
+
scyToUser = SCYUtils.assetToScy(indexCurrent, amountPY);
|
|
233
244
|
if (isExpired()) {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
scyToUser = SCYUtils.assetToScy(scyIndexCurrent(), amountPY);
|
|
237
|
-
scyInterestAfterExpiry = totalScyRedeemable - scyToUser;
|
|
238
|
-
} else {
|
|
239
|
-
scyToUser = SCYUtils.assetToScy(scyIndexCurrent(), amountPY);
|
|
245
|
+
uint256 totalScyRedeemable = SCYUtils.assetToScy(postExpiry.firstScyIndex, amountPY);
|
|
246
|
+
scyInterestPostExpiry = totalScyRedeemable - scyToUser;
|
|
240
247
|
}
|
|
241
248
|
}
|
|
242
249
|
|
|
243
250
|
function _getAmountPYToRedeem() internal view returns (uint256) {
|
|
244
|
-
if (!isExpired())
|
|
245
|
-
|
|
246
|
-
else return IERC20(PT).balanceOf(address(this));
|
|
251
|
+
if (!isExpired()) return Math.min(_selfBalance(PT), balanceOf(address(this)));
|
|
252
|
+
else return _selfBalance(PT);
|
|
247
253
|
}
|
|
248
254
|
|
|
249
255
|
function _updateScyReserve() internal virtual {
|
|
250
|
-
scyReserve =
|
|
256
|
+
scyReserve = _selfBalance(SCY).Uint128();
|
|
251
257
|
}
|
|
252
258
|
|
|
253
259
|
function _getFloatingScyAmount() internal view returns (uint256 amount) {
|
|
254
|
-
amount =
|
|
260
|
+
amount = _selfBalance(SCY) - scyReserve;
|
|
255
261
|
require(amount > 0, "RECEIVE_ZERO");
|
|
256
262
|
}
|
|
257
263
|
|
|
264
|
+
function _setPostExpiryData() internal {
|
|
265
|
+
PostExpiryData storage local = postExpiry;
|
|
266
|
+
if (local.firstScyIndex != 0) return; // already set
|
|
267
|
+
|
|
268
|
+
_redeemExternalReward(); // do a final redeem. All the future reward income will belong to the treasury
|
|
269
|
+
|
|
270
|
+
local.firstScyIndex = scyIndexCurrent().Uint128();
|
|
271
|
+
address[] memory rewardTokens = ISuperComposableYield(SCY).getRewardTokens();
|
|
272
|
+
uint256[] memory rewardIndexes = ISuperComposableYield(SCY).rewardIndexesCurrent();
|
|
273
|
+
for (uint256 i = 0; i < rewardTokens.length; i++) {
|
|
274
|
+
local.firstRewardIndex[rewardTokens[i]] = rewardIndexes[i];
|
|
275
|
+
local.userRewardOwed[rewardTokens[i]] = _selfBalance(rewardTokens[i]);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
258
279
|
/*///////////////////////////////////////////////////////////////
|
|
259
280
|
INTEREST-RELATED
|
|
260
281
|
//////////////////////////////////////////////////////////////*/
|
|
261
282
|
|
|
262
283
|
function _getInterestIndex() internal virtual override returns (uint256 index) {
|
|
263
|
-
if (isExpired())
|
|
264
|
-
|
|
265
|
-
index = afterExpiry.firstScyIndex;
|
|
266
|
-
} else {
|
|
267
|
-
index = scyIndexCurrent();
|
|
268
|
-
}
|
|
284
|
+
if (isExpired()) index = postExpiry.firstScyIndex;
|
|
285
|
+
else index = scyIndexCurrent();
|
|
269
286
|
}
|
|
270
287
|
|
|
271
288
|
function _YTbalance(address user) internal view override returns (uint256) {
|
|
@@ -276,27 +293,49 @@ contract PendleYieldToken is
|
|
|
276
293
|
REWARDS-RELATED
|
|
277
294
|
//////////////////////////////////////////////////////////////*/
|
|
278
295
|
|
|
296
|
+
function getRewardTokens() public view returns (address[] memory) {
|
|
297
|
+
return ISuperComposableYield(SCY).getRewardTokens();
|
|
298
|
+
}
|
|
299
|
+
|
|
279
300
|
function _doTransferOutRewards(address user, address receiver)
|
|
280
301
|
internal
|
|
281
302
|
virtual
|
|
282
303
|
override
|
|
283
304
|
returns (uint256[] memory rewardAmounts)
|
|
284
305
|
{
|
|
285
|
-
|
|
306
|
+
address[] memory tokens = getRewardTokens();
|
|
286
307
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
308
|
+
if (isExpired()) {
|
|
309
|
+
// post-expiry, all incoming rewards will go to the treasury
|
|
310
|
+
// hence, we can save users one _redeemExternal here
|
|
311
|
+
for (uint256 i = 0; i < tokens.length; i++)
|
|
312
|
+
postExpiry.userRewardOwed[tokens[i]] -= userReward[tokens[i]][user].accrued;
|
|
313
|
+
rewardAmounts = __doTransferOutRewardsLocal(tokens, user, receiver);
|
|
314
|
+
} else {
|
|
315
|
+
_redeemExternalReward();
|
|
316
|
+
rewardAmounts = __doTransferOutRewardsLocal(tokens, user, receiver);
|
|
295
317
|
}
|
|
296
318
|
}
|
|
297
319
|
|
|
298
|
-
function
|
|
299
|
-
|
|
320
|
+
function __doTransferOutRewardsLocal(
|
|
321
|
+
address[] memory tokens,
|
|
322
|
+
address user,
|
|
323
|
+
address receiver
|
|
324
|
+
) internal returns (uint256[] memory rewardAmounts) {
|
|
325
|
+
address treasury = IPYieldContractFactory(factory).treasury();
|
|
326
|
+
uint256 feeRate = IPYieldContractFactory(factory).rewardFeeRate();
|
|
327
|
+
|
|
328
|
+
rewardAmounts = new uint256[](tokens.length);
|
|
329
|
+
for (uint256 i = 0; i < tokens.length; i++) {
|
|
330
|
+
uint256 rewardPreFee = userReward[tokens[i]][user].accrued;
|
|
331
|
+
userReward[tokens[i]][user].accrued = 0;
|
|
332
|
+
|
|
333
|
+
uint256 feeAmount = rewardPreFee.mulDown(feeRate);
|
|
334
|
+
rewardAmounts[i] = rewardPreFee - feeAmount;
|
|
335
|
+
|
|
336
|
+
_transferOut(tokens[i], treasury, feeAmount);
|
|
337
|
+
_transferOut(tokens[i], receiver, rewardAmounts[i]);
|
|
338
|
+
}
|
|
300
339
|
}
|
|
301
340
|
|
|
302
341
|
function _redeemExternalReward() internal virtual override {
|
|
@@ -310,40 +349,28 @@ contract PendleYieldToken is
|
|
|
310
349
|
return SCYUtils.assetToScy(index, balanceOf(user)) + userInterest[user].accrued;
|
|
311
350
|
}
|
|
312
351
|
|
|
313
|
-
function _rewardSharesTotal() internal view virtual override returns (uint256) {
|
|
314
|
-
return scyReserve;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
function _getRewardTokens() internal view override returns (address[] memory) {
|
|
318
|
-
return ISuperComposableYield(SCY).getRewardTokens();
|
|
319
|
-
}
|
|
320
|
-
|
|
321
352
|
function _updateRewardIndex()
|
|
322
353
|
internal
|
|
323
354
|
override
|
|
324
355
|
returns (address[] memory tokens, uint256[] memory indexes)
|
|
325
356
|
{
|
|
326
|
-
tokens =
|
|
357
|
+
tokens = getRewardTokens();
|
|
327
358
|
if (isExpired()) {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
359
|
+
indexes = new uint256[](tokens.length);
|
|
360
|
+
for (uint256 i = 0; i < tokens.length; i++)
|
|
361
|
+
indexes[i] = postExpiry.firstRewardIndex[tokens[i]];
|
|
331
362
|
} else {
|
|
332
|
-
indexes = rewardIndexesCurrent();
|
|
363
|
+
indexes = ISuperComposableYield(SCY).rewardIndexesCurrent();
|
|
333
364
|
}
|
|
334
365
|
}
|
|
335
366
|
|
|
336
|
-
function rewardIndexesCurrent() public override returns (uint256[] memory) {
|
|
337
|
-
return ISuperComposableYield(SCY).rewardIndexesCurrent();
|
|
338
|
-
}
|
|
339
|
-
|
|
340
367
|
//solhint-disable-next-line ordering
|
|
341
368
|
function _beforeTokenTransfer(
|
|
342
369
|
address from,
|
|
343
370
|
address to,
|
|
344
371
|
uint256
|
|
345
372
|
) internal override {
|
|
346
|
-
_distributeInterestForTwo(from, to);
|
|
347
373
|
_updateAndDistributeRewardsForTwo(from, to);
|
|
374
|
+
_distributeInterestForTwo(from, to);
|
|
348
375
|
}
|
|
349
376
|
}
|
|
@@ -3,7 +3,6 @@ pragma solidity 0.8.15;
|
|
|
3
3
|
|
|
4
4
|
import "../../interfaces/IPMarketFactory.sol";
|
|
5
5
|
import "../../interfaces/IPMarket.sol";
|
|
6
|
-
import "../../interfaces/IPMarketAddRemoveCallback.sol";
|
|
7
6
|
import "../../interfaces/IPMarketSwapCallback.sol";
|
|
8
7
|
import "../../libraries/SCY/SCYUtils.sol";
|
|
9
8
|
import "../../libraries/math/MarketApproxLib.sol";
|
|
@@ -116,24 +115,26 @@ contract ActionCallback is IPMarketSwapCallback, CallbackHelper {
|
|
|
116
115
|
/// @dev refer to _swapExactYtForScy or _swapYtForExactScy
|
|
117
116
|
function _callbackSwapYtForScy(
|
|
118
117
|
address market,
|
|
119
|
-
int256
|
|
118
|
+
int256 ptToAccount,
|
|
120
119
|
int256 scyToAccount,
|
|
121
120
|
bytes calldata data
|
|
122
121
|
) internal {
|
|
123
122
|
(address receiver, uint256 minScyOut) = _decodeSwapYtForScy(data);
|
|
124
|
-
(, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
123
|
+
(ISuperComposableYield SCY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
124
|
+
SCYIndex scyIndex = SCY.newIndex();
|
|
125
125
|
|
|
126
126
|
uint256 scyOwed = scyToAccount.neg().Uint();
|
|
127
127
|
|
|
128
128
|
address[] memory receivers = new address[](2);
|
|
129
|
-
uint256[] memory
|
|
130
|
-
|
|
131
|
-
(receivers[0], amounts[0]) = (market, scyOwed);
|
|
132
|
-
(receivers[1], amounts[1]) = (receiver, type(uint256).max);
|
|
129
|
+
uint256[] memory amountPYToRedeems = new uint256[](2);
|
|
133
130
|
|
|
134
|
-
|
|
135
|
-
|
|
131
|
+
(receivers[0], amountPYToRedeems[0]) = (market, scyIndex.scyToAssetUp(scyOwed));
|
|
132
|
+
(receivers[1], amountPYToRedeems[1]) = (
|
|
133
|
+
receiver,
|
|
134
|
+
ptToAccount.Uint() - amountPYToRedeems[0]
|
|
135
|
+
);
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
uint256[] memory amountScyOuts = YT.redeemPYMulti(receivers, amountPYToRedeems);
|
|
138
|
+
require(amountScyOuts[1] >= minScyOut, "insufficient SCY out");
|
|
138
139
|
}
|
|
139
140
|
}
|