@pendle/core-v2 0.9.4-beta → 0.10.2-testnet
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.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/PendleQiTokenSCY.sol/PendleQiTokenSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.json +7 -2
- 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 +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.json +2 -2
- 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 +2 -2
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultSCY.sol/PendleYearnVaultSCY.dbg.json +4 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/{PendleYearnVaultScy.sol → PendleYearnVaultSCY.sol}/PendleYearnVaultSCY.json +3 -3
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.json +2 -2
- package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.json +67 -5
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.json +63 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.json +65 -3
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +74 -10
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +79 -15
- package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +1 -1
- 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 +204 -123
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.json +127 -73
- 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 +93 -34
- 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 +90 -14
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.json +14 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +139 -37
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +84 -56
- package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +1 -1
- package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
- package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.json +122 -11
- 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 +2 -2
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +96 -40
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
- package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +1025 -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/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.json +622 -0
- package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.json +35 -0
- package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.json +459 -0
- package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.json +459 -0
- package/build/artifacts/contracts/core/actions/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +4 -0
- package/build/artifacts/contracts/core/actions/base/{ActionSCYAndPTBase.sol/ActionSCYAndPTBase.json → ActionBaseMintRedeem.sol/ActionBaseMintRedeem.json} +2 -2
- 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/IBenQiComptroller.sol/IBenQiComptroller.json +24 -0
- 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/IEulerEToken.sol/IEulerEToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IEulerMarkets.sol/IEulerMarkets.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/{IPActionCore.sol/IPActionCore.json → IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.json} +141 -912
- package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.json +598 -0
- package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.json +35 -0
- package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.json +435 -0
- package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/{IPActionYT.sol/IPActionYT.json → IPActionSwapYT.sol/IPActionSwapYT.json} +23 -11
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +323 -47
- package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.dbg.json +4 -0
- package/build/artifacts/contracts/{core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.json → interfaces/IPGauge.sol/IPGauge.json} +5 -5
- 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 +72 -29
- package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.json +0 -11
- 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/IPVeToken.sol/IPVeToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.json +0 -37
- 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/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.json +1 -1
- 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/IRewardManager.sol/IRewardManager.json +1 -1
- package/build/artifacts/contracts/interfaces/ISAvax.sol/ISAvax.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ISJoe.sol/ISJoe.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IStETH.sol/IStETH.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IStargateLPStaking.sol/IStargateLPStaking.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IStargatePool.sol/IStargatePool.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IStargateRouter.sol/IStargateRouter.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IWAvax.sol/IWAvax.dbg.json +1 -1
- 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/OracleLib.sol/OracleLib.dbg.json +4 -0
- package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.json +74 -0
- 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/SCYUtils.sol/SCYUtils.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.json +2 -2
- package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
- 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/WeekMath.sol/WeekMath.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +4 -0
- package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +93 -0
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +427 -39
- package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.dbg.json +4 -0
- package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.json +86 -0
- package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.dbg.json +4 -0
- package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.json +37 -0
- package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.dbg.json +1 -1
- package/build/artifacts/contracts/periphery/PermissionsV2Upg.sol/PermissionsV2Upg.dbg.json +1 -1
- package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +8 -0
- package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol +1 -1
- package/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol +11 -5
- package/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol +0 -1
- package/contracts/SuperComposableYield/SCY-implementations/{PendleYearnVaultScy.sol → PendleYearnVaultSCY.sol} +0 -0
- package/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol +1 -0
- package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +1 -1
- package/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol +7 -7
- package/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol +7 -6
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +4 -5
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol +6 -3
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol +6 -3
- package/contracts/core/LiquidityMining/PendleGauge.sol +3 -2
- package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +22 -28
- package/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +71 -13
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +7 -4
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +6 -2
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +4 -3
- package/contracts/core/Market/PendleMarket.sol +93 -57
- package/contracts/core/Market/PendleMarketFactory.sol +18 -33
- package/contracts/core/PendleRouter.sol +60 -52
- package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +12 -12
- package/contracts/core/YieldContracts/PendleYieldToken.sol +1 -1
- package/contracts/core/actions/ActionAddRemoveLiq.sol +366 -0
- package/contracts/core/actions/ActionCallback.sol +6 -6
- package/contracts/core/actions/ActionMintRedeem.sol +124 -0
- package/contracts/core/actions/ActionMisc.sol +24 -0
- package/contracts/core/actions/ActionSwapPT.sol +199 -0
- package/contracts/core/actions/{base/ActionSCYAndYTBase.sol → ActionSwapYT.sol} +109 -74
- package/contracts/core/actions/base/{ActionSCYAndPYBase.sol → ActionBaseMintRedeem.sol} +9 -8
- package/contracts/interfaces/IBenQiComptroller.sol +2 -0
- package/contracts/interfaces/IPActionAddRemoveLiq.sol +188 -0
- package/contracts/interfaces/IPActionMintRedeem.sol +115 -0
- package/contracts/interfaces/IPActionMisc.sol +9 -0
- package/contracts/interfaces/IPActionSwapPT.sol +69 -0
- package/contracts/interfaces/{IPActionYT.sol → IPActionSwapYT.sol} +12 -10
- package/contracts/interfaces/IPAllAction.sol +12 -3
- package/contracts/interfaces/IPGauge.sol +6 -0
- package/contracts/interfaces/IPGaugeController.sol +0 -2
- package/contracts/interfaces/IPMarket.sol +28 -10
- package/contracts/interfaces/IPMarketFactory.sol +1 -7
- package/contracts/interfaces/IPVeToken.sol +1 -1
- package/contracts/interfaces/IPVotingController.sol +0 -2
- package/contracts/interfaces/IRewardManager.sol +1 -1
- package/contracts/libraries/OracleLib.sol +214 -0
- package/contracts/libraries/RewardManagerAbstract.sol +1 -1
- package/contracts/libraries/math/MarketApproxLib.sol +227 -14
- package/contracts/libraries/math/MarketMathCore.sol +0 -33
- package/contracts/offchain-helpers/MarketMathStatic.sol +565 -0
- package/contracts/offchain-helpers/RouterStatic.sol +187 -251
- package/contracts/periphery/BoringOwnableUpgradeable.sol +62 -0
- package/deployments/43113-core.json +7 -8
- package/deployments/43113-markets/benqi-market-590025.json +8 -0
- package/deployments/43113-markets/benqi-market-c93916.json +8 -0
- package/deployments/80001-core.json +6 -7
- package/deployments/80001-markets/benqi-market-3b8BD1.json +8 -0
- package/deployments/80001-markets/benqi-market-b61e7f.json +8 -0
- package/package.json +11 -11
- package/typechain-types/ActionAddRemoveLiq.ts +1037 -0
- package/typechain-types/ActionBaseMintRedeem.ts +87 -0
- package/typechain-types/ActionCore.ts +21 -20
- package/typechain-types/ActionMintRedeem.ts +665 -0
- package/typechain-types/ActionMisc.ts +105 -0
- package/typechain-types/ActionSwapPT.ts +515 -0
- package/typechain-types/ActionSwapYT.ts +515 -0
- package/typechain-types/ActionYT.ts +5 -4
- package/typechain-types/BoringOwnable.ts +194 -0
- package/typechain-types/BoringOwnableData.ts +100 -0
- package/typechain-types/BoringOwnableUpgradeable.ts +194 -0
- package/typechain-types/BoringOwnableUpgradeableData.ts +100 -0
- package/typechain-types/CelerReceiverUpg.ts +124 -19
- package/typechain-types/CelerSenderUpg.ts +116 -11
- package/typechain-types/IBenQiComptroller.ts +39 -0
- package/typechain-types/IPActionAddRemoveLiq.ts +1018 -0
- package/typechain-types/IPActionCore.ts +21 -20
- package/typechain-types/IPActionMintRedeem.ts +646 -0
- package/typechain-types/IPActionMisc.ts +105 -0
- package/typechain-types/IPActionSwapPT.ts +496 -0
- package/typechain-types/IPActionSwapYT.ts +496 -0
- package/typechain-types/IPActionYT.ts +5 -4
- package/typechain-types/IPAllAction.ts +431 -193
- package/typechain-types/IPGauge.ts +87 -0
- package/typechain-types/IPMarket.ts +133 -50
- package/typechain-types/IPMarketFactory.ts +7 -17
- package/typechain-types/IPVeToken.ts +8 -8
- package/typechain-types/IPVotingController.ts +0 -20
- package/typechain-types/IPYieldToken.ts +3 -3
- package/typechain-types/IRewardManager.ts +3 -3
- package/typechain-types/MarketMathStatic.ts +198 -0
- package/typechain-types/OracleLib.ts +124 -0
- package/typechain-types/PendleGaugeControllerBaseUpg.ts +118 -15
- package/typechain-types/PendleGaugeControllerMainchainUpg.ts +136 -9
- package/typechain-types/PendleGaugeControllerSidechainUpg.ts +138 -11
- package/typechain-types/PendleMarket.ts +178 -59
- package/typechain-types/PendleMarketFactory.ts +135 -61
- package/typechain-types/PendleRouter.ts +201 -31
- package/typechain-types/PendleVotingControllerUpg.ts +325 -149
- package/typechain-types/PendleYieldContractFactory.ts +144 -21
- package/typechain-types/RouterStatic.ts +344 -64
- package/typechain-types/VotingControllerStorageUpg.ts +182 -113
- package/typechain-types/VotingEscrowPendleMainchain.ts +170 -63
- package/typechain-types/VotingEscrowPendleSidechain.ts +163 -17
- package/typechain-types/VotingEscrowTokenBase.ts +27 -8
- package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +1083 -0
- package/typechain-types/factories/ActionBaseMintRedeem__factory.ts +43 -0
- package/typechain-types/factories/ActionCallback__factory.ts +1 -1
- package/typechain-types/factories/ActionCore__factory.ts +6 -6
- package/typechain-types/factories/ActionMintRedeem__factory.ts +680 -0
- package/typechain-types/factories/ActionMisc__factory.ts +85 -0
- package/typechain-types/factories/ActionSwapPT__factory.ts +514 -0
- package/typechain-types/factories/ActionSwapYT__factory.ts +514 -0
- package/typechain-types/factories/ActionYT__factory.ts +2 -2
- package/typechain-types/factories/BoringOwnableData__factory.ts +90 -0
- package/typechain-types/factories/BoringOwnableUpgradeableData__factory.ts +96 -0
- package/typechain-types/factories/BoringOwnableUpgradeable__factory.ts +143 -0
- package/typechain-types/factories/BoringOwnable__factory.ts +141 -0
- package/typechain-types/factories/CelerReceiverUpg__factory.ts +67 -5
- package/typechain-types/factories/CelerSenderUpg__factory.ts +63 -1
- package/typechain-types/factories/IBenQiComptroller__factory.ts +24 -0
- package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +1020 -0
- package/typechain-types/factories/IPActionCore__factory.ts +5 -5
- package/typechain-types/factories/IPActionMintRedeem__factory.ts +613 -0
- package/typechain-types/factories/IPActionMisc__factory.ts +47 -0
- package/typechain-types/factories/IPActionSwapPT__factory.ts +450 -0
- package/typechain-types/factories/IPActionSwapYT__factory.ts +450 -0
- package/typechain-types/factories/IPActionYT__factory.ts +1 -1
- package/typechain-types/factories/IPAllAction__factory.ts +323 -47
- package/typechain-types/factories/IPGauge__factory.ts +36 -0
- package/typechain-types/factories/IPMarketFactory__factory.ts +0 -11
- package/typechain-types/factories/IPMarket__factory.ts +72 -29
- package/typechain-types/factories/IPVeToken__factory.ts +1 -1
- package/typechain-types/factories/IPVotingController__factory.ts +0 -37
- package/typechain-types/factories/IPYieldToken__factory.ts +1 -1
- package/typechain-types/factories/IRewardManager__factory.ts +1 -1
- package/typechain-types/factories/MarketMathStatic__factory.ts +146 -0
- package/typechain-types/factories/OracleLib__factory.ts +124 -0
- package/typechain-types/factories/PendleAaveV3SCY__factory.ts +1 -1
- package/typechain-types/factories/PendleERC4626SCY__factory.ts +1 -1
- package/typechain-types/factories/PendleEulerSCY__factory.ts +10 -1
- package/typechain-types/factories/PendleGaugeControllerBaseUpg__factory.ts +65 -3
- package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +73 -13
- package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +79 -23
- package/typechain-types/factories/PendleMarketFactory__factory.ts +84 -86
- package/typechain-types/factories/PendleMarket__factory.ts +131 -37
- package/typechain-types/factories/PendlePrincipalToken__factory.ts +1 -1
- package/typechain-types/factories/PendleQiSAvaxSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleQiTokenSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleRouter__factory.ts +141 -22
- package/typechain-types/factories/PendleSAvaxSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleSJoeSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleStargateSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +203 -129
- package/typechain-types/factories/PendleWstEthSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleYearnVaultSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleYieldContractFactory__factory.ts +97 -72
- package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
- package/typechain-types/factories/RouterStatic__factory.ts +233 -39
- package/typechain-types/factories/VotingControllerStorageUpg__factory.ts +126 -72
- package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +93 -41
- package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +90 -17
- package/typechain-types/factories/VotingEscrowTokenBase__factory.ts +14 -1
- package/typechain-types/hardhat.d.ts +162 -0
- package/typechain-types/index.ts +36 -0
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.json +0 -1801
- package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +0 -447
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +0 -4
- package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.json +0 -24
- package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +0 -4
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.json +0 -874
- package/contracts/core/actions/ActionCore.sol +0 -382
- package/contracts/core/actions/ActionYT.sol +0 -93
- package/contracts/core/actions/base/ActionSCYAndPTBase.sol +0 -303
- package/contracts/interfaces/IPActionCore.sol +0 -306
- package/contracts/interfaces/IPRouterStatic.sol +0 -152
- package/deployments/43113-markets/benqi-market-599408.json +0 -7
- package/deployments/43113-markets/benqi-market-93bbf0.json +0 -7
- package/deployments/43113-markets/benqi-market-95E744.json +0 -7
- package/deployments/43113-markets/benqi-market-D91a3F.json +0 -7
- package/deployments/80001-markets/benqi-market-007811.json +0 -7
- package/deployments/80001-markets/benqi-market-3fe528.json +0 -7
- package/typechain-types/FeeDistributorAbstract.ts +0 -164
- package/typechain-types/IPVotingControllerStorage.ts +0 -169
- package/typechain-types/factories/FeeDistributorAbstract__factory.ts +0 -90
- package/typechain-types/factories/IPVotingControllerStorage__factory.ts +0 -107
|
@@ -1,26 +1,49 @@
|
|
|
1
1
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
2
|
pragma solidity 0.8.15;
|
|
3
3
|
|
|
4
|
-
import "../interfaces/ISuperComposableYield.sol";
|
|
5
|
-
import "../interfaces/IRewardManager.sol";
|
|
6
|
-
import "../interfaces/IPRouterStatic.sol";
|
|
7
|
-
import "../interfaces/IPMarket.sol";
|
|
8
4
|
import "../interfaces/IPYieldContractFactory.sol";
|
|
9
5
|
import "../interfaces/IPMarketFactory.sol";
|
|
10
|
-
import "
|
|
6
|
+
import "./MarketMathStatic.sol";
|
|
11
7
|
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
|
12
8
|
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
|
|
13
9
|
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
|
|
14
10
|
|
|
15
11
|
/// EXCLUDED FROM ALL AUDITS, TO BE CALLED ONLY BY PENDLE's SDK
|
|
16
|
-
contract RouterStatic is
|
|
17
|
-
using MarketMathCore for MarketState;
|
|
18
|
-
using MarketApproxLib for MarketState;
|
|
12
|
+
contract RouterStatic is OwnableUpgradeable, UUPSUpgradeable {
|
|
19
13
|
using Math for uint256;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
|
|
15
|
+
struct TokenAmount {
|
|
16
|
+
address token;
|
|
17
|
+
uint256 amount;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
struct AssetAmount {
|
|
21
|
+
ISuperComposableYield.AssetType assetType;
|
|
22
|
+
address assetAddress;
|
|
23
|
+
uint256 amount;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
struct RewardIndex {
|
|
27
|
+
address rewardToken;
|
|
28
|
+
uint256 index;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
struct UserPYInfo {
|
|
32
|
+
address yt;
|
|
33
|
+
address pt;
|
|
34
|
+
uint256 ytBalance;
|
|
35
|
+
uint256 ptBalance;
|
|
36
|
+
TokenAmount unclaimedInterest;
|
|
37
|
+
TokenAmount[] unclaimedRewards;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
struct UserMarketInfo {
|
|
41
|
+
address market;
|
|
42
|
+
uint256 lpBalance;
|
|
43
|
+
TokenAmount ptBalance;
|
|
44
|
+
TokenAmount scyBalance;
|
|
45
|
+
AssetAmount assetBalance;
|
|
46
|
+
}
|
|
24
47
|
|
|
25
48
|
IPYieldContractFactory internal immutable yieldContractFactory;
|
|
26
49
|
IPMarketFactory internal immutable marketFactory;
|
|
@@ -33,11 +56,19 @@ contract RouterStatic is IPRouterStatic {
|
|
|
33
56
|
eps: 1e15
|
|
34
57
|
});
|
|
35
58
|
|
|
36
|
-
constructor(IPYieldContractFactory _yieldContractFactory, IPMarketFactory _marketFactory)
|
|
59
|
+
constructor(IPYieldContractFactory _yieldContractFactory, IPMarketFactory _marketFactory)
|
|
60
|
+
initializer
|
|
61
|
+
{
|
|
37
62
|
yieldContractFactory = _yieldContractFactory;
|
|
38
63
|
marketFactory = _marketFactory;
|
|
39
64
|
}
|
|
40
65
|
|
|
66
|
+
function initialize() external initializer {
|
|
67
|
+
__Ownable_init();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function _authorizeUpgrade(address newImplementation) internal override onlyOwner {}
|
|
71
|
+
|
|
41
72
|
// ============= SYSTEM INFO =============
|
|
42
73
|
|
|
43
74
|
function getPYInfo(address py)
|
|
@@ -77,6 +108,16 @@ contract RouterStatic is IPRouterStatic {
|
|
|
77
108
|
else if (marketFactory.isValidMarket(token)) isMarket = true;
|
|
78
109
|
}
|
|
79
110
|
|
|
111
|
+
function getPY(address py) public view returns (address pt, address yt) {
|
|
112
|
+
if (yieldContractFactory.isYT(py)) {
|
|
113
|
+
pt = IPYieldToken(py).PT();
|
|
114
|
+
yt = py;
|
|
115
|
+
} else {
|
|
116
|
+
pt = py;
|
|
117
|
+
yt = IPPrincipalToken(py).YT();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
80
121
|
function getMarketInfo(address market)
|
|
81
122
|
external
|
|
82
123
|
returns (
|
|
@@ -92,9 +133,9 @@ contract RouterStatic is IPRouterStatic {
|
|
|
92
133
|
|
|
93
134
|
pt = address(PT);
|
|
94
135
|
scy = address(SCY);
|
|
95
|
-
state = _market.readState(
|
|
136
|
+
state = _market.readState();
|
|
96
137
|
impliedYield = getPtImpliedYield(market);
|
|
97
|
-
exchangeRate = getExchangeRate(market);
|
|
138
|
+
exchangeRate = MarketMathStatic.getExchangeRate(market);
|
|
98
139
|
}
|
|
99
140
|
|
|
100
141
|
// ============= USER INFO =============
|
|
@@ -137,6 +178,72 @@ contract RouterStatic is IPRouterStatic {
|
|
|
137
178
|
}
|
|
138
179
|
}
|
|
139
180
|
|
|
181
|
+
function getUserPYInfo(address py, address user)
|
|
182
|
+
public
|
|
183
|
+
view
|
|
184
|
+
returns (UserPYInfo memory userPYInfo)
|
|
185
|
+
{
|
|
186
|
+
(userPYInfo.pt, userPYInfo.yt) = getPY(py);
|
|
187
|
+
IPYieldToken YT = IPYieldToken(userPYInfo.yt);
|
|
188
|
+
userPYInfo.ytBalance = YT.balanceOf(user);
|
|
189
|
+
userPYInfo.ptBalance = IPPrincipalToken(userPYInfo.pt).balanceOf(user);
|
|
190
|
+
userPYInfo.unclaimedInterest.token = YT.SCY();
|
|
191
|
+
(, userPYInfo.unclaimedInterest.amount) = YT.userInterest(user);
|
|
192
|
+
address[] memory rewardTokens = YT.getRewardTokens();
|
|
193
|
+
TokenAmount[] memory unclaimedRewards = new TokenAmount[](rewardTokens.length);
|
|
194
|
+
uint256 length = 0;
|
|
195
|
+
for (uint256 i = 0; i < rewardTokens.length; ++i) {
|
|
196
|
+
address rewardToken = rewardTokens[i];
|
|
197
|
+
(, uint256 amount) = YT.userReward(rewardToken, user);
|
|
198
|
+
if (amount > 0) {
|
|
199
|
+
unclaimedRewards[length].token = rewardToken;
|
|
200
|
+
unclaimedRewards[length].amount = amount;
|
|
201
|
+
++length;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
userPYInfo.unclaimedRewards = new TokenAmount[](length);
|
|
205
|
+
for (uint256 i = 0; i < length; ++i) {
|
|
206
|
+
userPYInfo.unclaimedRewards[i] = unclaimedRewards[i];
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function getUserMarketInfo(address market, address user)
|
|
211
|
+
public
|
|
212
|
+
view
|
|
213
|
+
returns (UserMarketInfo memory userMarketInfo)
|
|
214
|
+
{
|
|
215
|
+
IPMarket _market = IPMarket(market);
|
|
216
|
+
uint256 userLp = _market.balanceOf(user);
|
|
217
|
+
|
|
218
|
+
userMarketInfo.market = market;
|
|
219
|
+
userMarketInfo.lpBalance = userLp;
|
|
220
|
+
|
|
221
|
+
(ISuperComposableYield SCY, IPPrincipalToken PT, ) = _market.readTokens();
|
|
222
|
+
(userMarketInfo.assetBalance.assetType, userMarketInfo.assetBalance.assetAddress, ) = SCY
|
|
223
|
+
.assetInfo();
|
|
224
|
+
|
|
225
|
+
MarketState memory state = _market.readState();
|
|
226
|
+
uint256 totalLp = uint256(state.totalLp);
|
|
227
|
+
|
|
228
|
+
if (totalLp == 0) {
|
|
229
|
+
return userMarketInfo;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
uint256 userPt = (userLp * uint256(state.totalPt)) / totalLp;
|
|
233
|
+
uint256 userScy = (userLp * uint256(state.totalScy)) / totalLp;
|
|
234
|
+
|
|
235
|
+
userMarketInfo.ptBalance = TokenAmount(address(PT), userPt);
|
|
236
|
+
userMarketInfo.scyBalance = TokenAmount(address(SCY), userScy);
|
|
237
|
+
userMarketInfo.assetBalance.amount = (userScy * SCY.exchangeRate()) / Math.ONE;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
function hasPYPosition(UserPYInfo calldata userPYInfo) public pure returns (bool hasPosition) {
|
|
241
|
+
hasPosition = (userPYInfo.ytBalance > 0 ||
|
|
242
|
+
userPYInfo.ptBalance > 0 ||
|
|
243
|
+
userPYInfo.unclaimedInterest.amount > 0 ||
|
|
244
|
+
userPYInfo.unclaimedRewards.length > 0);
|
|
245
|
+
}
|
|
246
|
+
|
|
140
247
|
// ============= MARKET ACTIONS =============
|
|
141
248
|
|
|
142
249
|
function addLiquidityDualScyAndPtStatic(
|
|
@@ -151,13 +258,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
151
258
|
uint256 ptUsed
|
|
152
259
|
)
|
|
153
260
|
{
|
|
154
|
-
|
|
155
|
-
(, netLpOut, scyUsed, ptUsed) = state.addLiquidity(
|
|
156
|
-
pyIndex(market),
|
|
157
|
-
scyDesired,
|
|
158
|
-
ptDesired,
|
|
159
|
-
block.timestamp
|
|
160
|
-
);
|
|
261
|
+
return MarketMathStatic.addLiquidityDualScyAndPtStatic(market, scyDesired, ptDesired);
|
|
161
262
|
}
|
|
162
263
|
|
|
163
264
|
function addLiquidityDualTokenAndPtStatic(
|
|
@@ -173,20 +274,13 @@ contract RouterStatic is IPRouterStatic {
|
|
|
173
274
|
uint256 ptUsed
|
|
174
275
|
)
|
|
175
276
|
{
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
pyIndex(market),
|
|
184
|
-
scyDesired,
|
|
185
|
-
ptDesired,
|
|
186
|
-
block.timestamp
|
|
187
|
-
);
|
|
188
|
-
|
|
189
|
-
tokenUsed = (tokenDesired * scyUsed).rawDivUp(scyDesired);
|
|
277
|
+
return
|
|
278
|
+
MarketMathStatic.addLiquidityDualTokenAndPtStatic(
|
|
279
|
+
market,
|
|
280
|
+
tokenIn,
|
|
281
|
+
tokenDesired,
|
|
282
|
+
ptDesired
|
|
283
|
+
);
|
|
190
284
|
}
|
|
191
285
|
|
|
192
286
|
function addLiquiditySinglePtStatic(address market, uint256 netPtIn)
|
|
@@ -197,18 +291,18 @@ contract RouterStatic is IPRouterStatic {
|
|
|
197
291
|
uint256 priceImpact
|
|
198
292
|
)
|
|
199
293
|
{
|
|
200
|
-
|
|
294
|
+
return MarketMathStatic.addLiquiditySinglePtStatic(market, netPtIn, approxParams);
|
|
201
295
|
}
|
|
202
296
|
|
|
203
297
|
function addLiquiditySingleScyStatic(address market, uint256 netScyIn)
|
|
204
|
-
|
|
298
|
+
public
|
|
205
299
|
returns (
|
|
206
300
|
uint256 netLpOut,
|
|
207
301
|
uint256 netScyFee,
|
|
208
302
|
uint256 priceImpact
|
|
209
303
|
)
|
|
210
304
|
{
|
|
211
|
-
|
|
305
|
+
return MarketMathStatic.addLiquiditySingleScyStatic(market, netScyIn, approxParams);
|
|
212
306
|
}
|
|
213
307
|
|
|
214
308
|
function addLiquiditySingleBaseTokenStatic(
|
|
@@ -223,7 +317,13 @@ contract RouterStatic is IPRouterStatic {
|
|
|
223
317
|
uint256 priceImpact
|
|
224
318
|
)
|
|
225
319
|
{
|
|
226
|
-
|
|
320
|
+
return
|
|
321
|
+
MarketMathStatic.addLiquiditySingleBaseTokenStatic(
|
|
322
|
+
market,
|
|
323
|
+
baseToken,
|
|
324
|
+
netBaseTokenIn,
|
|
325
|
+
approxParams
|
|
326
|
+
);
|
|
227
327
|
}
|
|
228
328
|
|
|
229
329
|
function removeLiquidityDualScyAndPtStatic(address market, uint256 lpToRemove)
|
|
@@ -231,8 +331,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
231
331
|
view
|
|
232
332
|
returns (uint256 netScyOut, uint256 netPtOut)
|
|
233
333
|
{
|
|
234
|
-
|
|
235
|
-
(netScyOut, netPtOut) = state.removeLiquidity(lpToRemove);
|
|
334
|
+
return MarketMathStatic.removeLiquidityDualScyAndPtStatic(market, lpToRemove);
|
|
236
335
|
}
|
|
237
336
|
|
|
238
337
|
function removeLiquidityDualTokenAndPtStatic(
|
|
@@ -240,13 +339,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
240
339
|
uint256 lpToRemove,
|
|
241
340
|
address tokenOut
|
|
242
341
|
) external view returns (uint256 netTokenOut, uint256 netPtOut) {
|
|
243
|
-
(
|
|
244
|
-
|
|
245
|
-
uint256 netScyOut;
|
|
246
|
-
MarketState memory state = IPMarket(market).readState(false);
|
|
247
|
-
(netScyOut, netPtOut) = state.removeLiquidity(lpToRemove);
|
|
248
|
-
|
|
249
|
-
netTokenOut = SCY.previewRedeem(tokenOut, netScyOut);
|
|
342
|
+
return MarketMathStatic.removeLiquidityDualTokenAndPtStatic(market, lpToRemove, tokenOut);
|
|
250
343
|
}
|
|
251
344
|
|
|
252
345
|
function removeLiquiditySinglePtStatic(address market, uint256 lpToRemove)
|
|
@@ -257,18 +350,18 @@ contract RouterStatic is IPRouterStatic {
|
|
|
257
350
|
uint256 priceImpact
|
|
258
351
|
)
|
|
259
352
|
{
|
|
260
|
-
|
|
353
|
+
return MarketMathStatic.removeLiquiditySinglePtStatic(market, lpToRemove, approxParams);
|
|
261
354
|
}
|
|
262
355
|
|
|
263
356
|
function removeLiquiditySingleScyStatic(address market, uint256 lpToRemove)
|
|
264
|
-
|
|
357
|
+
public
|
|
265
358
|
returns (
|
|
266
359
|
uint256 netScyOut,
|
|
267
360
|
uint256 netScyFee,
|
|
268
361
|
uint256 priceImpact
|
|
269
362
|
)
|
|
270
363
|
{
|
|
271
|
-
|
|
364
|
+
return MarketMathStatic.removeLiquiditySingleScyStatic(market, lpToRemove);
|
|
272
365
|
}
|
|
273
366
|
|
|
274
367
|
function removeLiquiditySingleBaseTokenStatic(
|
|
@@ -283,7 +376,8 @@ contract RouterStatic is IPRouterStatic {
|
|
|
283
376
|
uint256 priceImpact
|
|
284
377
|
)
|
|
285
378
|
{
|
|
286
|
-
|
|
379
|
+
return
|
|
380
|
+
MarketMathStatic.removeLiquiditySingleBaseTokenStatic(market, lpToRemove, baseToken);
|
|
287
381
|
}
|
|
288
382
|
|
|
289
383
|
function swapExactPtForScyStatic(address market, uint256 exactPtIn)
|
|
@@ -294,13 +388,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
294
388
|
uint256 priceImpact
|
|
295
389
|
)
|
|
296
390
|
{
|
|
297
|
-
|
|
298
|
-
(netScyOut, netScyFee) = state.swapExactPtForScy(
|
|
299
|
-
pyIndex(market),
|
|
300
|
-
exactPtIn,
|
|
301
|
-
block.timestamp
|
|
302
|
-
);
|
|
303
|
-
priceImpact = calcPriceImpact(market, exactPtIn.neg());
|
|
391
|
+
return MarketMathStatic.swapExactPtForScyStatic(market, exactPtIn);
|
|
304
392
|
}
|
|
305
393
|
|
|
306
394
|
function swapScyForExactPtStatic(address market, uint256 exactPtOut)
|
|
@@ -311,13 +399,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
311
399
|
uint256 priceImpact
|
|
312
400
|
)
|
|
313
401
|
{
|
|
314
|
-
|
|
315
|
-
(netScyIn, netScyFee) = state.swapScyForExactPt(
|
|
316
|
-
pyIndex(market),
|
|
317
|
-
exactPtOut,
|
|
318
|
-
block.timestamp
|
|
319
|
-
);
|
|
320
|
-
priceImpact = calcPriceImpact(market, exactPtOut.Int());
|
|
402
|
+
return MarketMathStatic.swapScyForExactPtStatic(market, exactPtOut);
|
|
321
403
|
}
|
|
322
404
|
|
|
323
405
|
function swapExactScyForPtStatic(address market, uint256 exactScyIn)
|
|
@@ -328,14 +410,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
328
410
|
uint256 priceImpact
|
|
329
411
|
)
|
|
330
412
|
{
|
|
331
|
-
|
|
332
|
-
(netPtOut, , netScyFee) = state.approxSwapExactScyForPt(
|
|
333
|
-
pyIndex(market),
|
|
334
|
-
exactScyIn,
|
|
335
|
-
block.timestamp,
|
|
336
|
-
approxParams
|
|
337
|
-
);
|
|
338
|
-
priceImpact = calcPriceImpact(market, netPtOut.Int());
|
|
413
|
+
return MarketMathStatic.swapExactScyForPtStatic(market, exactScyIn, approxParams);
|
|
339
414
|
}
|
|
340
415
|
|
|
341
416
|
function swapPtForExactScyStatic(address market, uint256 exactScyOut)
|
|
@@ -346,15 +421,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
346
421
|
uint256 priceImpact
|
|
347
422
|
)
|
|
348
423
|
{
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
(netPtIn, , netScyFee) = state.approxSwapPtForExactScy(
|
|
352
|
-
pyIndex(market),
|
|
353
|
-
exactScyOut,
|
|
354
|
-
block.timestamp,
|
|
355
|
-
approxParams
|
|
356
|
-
);
|
|
357
|
-
priceImpact = calcPriceImpact(market, netPtIn.neg());
|
|
424
|
+
return MarketMathStatic.swapPtForExactScyStatic(market, exactScyOut, approxParams);
|
|
358
425
|
}
|
|
359
426
|
|
|
360
427
|
function swapExactBaseTokenForPtStatic(
|
|
@@ -369,9 +436,13 @@ contract RouterStatic is IPRouterStatic {
|
|
|
369
436
|
uint256 priceImpact
|
|
370
437
|
)
|
|
371
438
|
{
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
439
|
+
return
|
|
440
|
+
MarketMathStatic.swapExactBaseTokenForPtStatic(
|
|
441
|
+
market,
|
|
442
|
+
baseToken,
|
|
443
|
+
amountBaseToken,
|
|
444
|
+
approxParams
|
|
445
|
+
);
|
|
375
446
|
}
|
|
376
447
|
|
|
377
448
|
function swapExactPtForBaseTokenStatic(
|
|
@@ -386,11 +457,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
386
457
|
uint256 priceImpact
|
|
387
458
|
)
|
|
388
459
|
{
|
|
389
|
-
|
|
390
|
-
(netScyOut, netScyFee, priceImpact) = swapExactPtForScyStatic(market, exactYtIn);
|
|
391
|
-
|
|
392
|
-
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
393
|
-
netBaseTokenOut = SCY.previewRedeem(baseToken, netScyOut);
|
|
460
|
+
return MarketMathStatic.swapExactPtForBaseTokenStatic(market, exactYtIn, baseToken);
|
|
394
461
|
}
|
|
395
462
|
|
|
396
463
|
function swapScyForExactYtStatic(address market, uint256 exactYtOut)
|
|
@@ -401,21 +468,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
401
468
|
uint256 priceImpact
|
|
402
469
|
)
|
|
403
470
|
{
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
PYIndex index = pyIndex(market);
|
|
407
|
-
|
|
408
|
-
uint256 scyReceived;
|
|
409
|
-
(scyReceived, netScyFee) = state.swapExactPtForScy(
|
|
410
|
-
pyIndex(market),
|
|
411
|
-
exactYtOut,
|
|
412
|
-
block.timestamp
|
|
413
|
-
);
|
|
414
|
-
|
|
415
|
-
uint256 totalScyNeed = index.assetToScyUp(exactYtOut);
|
|
416
|
-
netScyIn = totalScyNeed.subMax0(scyReceived);
|
|
417
|
-
|
|
418
|
-
priceImpact = calcPriceImpact(market, exactYtOut.neg());
|
|
471
|
+
return MarketMathStatic.swapScyForExactYtStatic(market, exactYtOut);
|
|
419
472
|
}
|
|
420
473
|
|
|
421
474
|
function swapExactScyForYtStatic(address market, uint256 exactScyIn)
|
|
@@ -426,17 +479,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
426
479
|
uint256 priceImpact
|
|
427
480
|
)
|
|
428
481
|
{
|
|
429
|
-
|
|
430
|
-
PYIndex index = pyIndex(market);
|
|
431
|
-
|
|
432
|
-
(netYtOut, , netScyFee) = state.approxSwapExactScyForYt(
|
|
433
|
-
index,
|
|
434
|
-
exactScyIn,
|
|
435
|
-
block.timestamp,
|
|
436
|
-
approxParams
|
|
437
|
-
);
|
|
438
|
-
|
|
439
|
-
priceImpact = calcPriceImpact(market, netYtOut.neg());
|
|
482
|
+
return MarketMathStatic.swapExactScyForYtStatic(market, exactScyIn, approxParams);
|
|
440
483
|
}
|
|
441
484
|
|
|
442
485
|
function swapExactYtForScyStatic(address market, uint256 exactYtIn)
|
|
@@ -447,18 +490,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
447
490
|
uint256 priceImpact
|
|
448
491
|
)
|
|
449
492
|
{
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
PYIndex index = pyIndex(market);
|
|
453
|
-
|
|
454
|
-
uint256 scyOwed;
|
|
455
|
-
(scyOwed, netScyFee) = state.swapScyForExactPt(index, exactYtIn, block.timestamp);
|
|
456
|
-
|
|
457
|
-
uint256 amountPYToRepayScyOwed = index.scyToAssetUp(scyOwed);
|
|
458
|
-
uint256 amountPYToRedeemScyOut = exactYtIn - amountPYToRepayScyOwed;
|
|
459
|
-
|
|
460
|
-
netScyOut = index.assetToScy(amountPYToRedeemScyOut);
|
|
461
|
-
priceImpact = calcPriceImpact(market, exactYtIn.Int());
|
|
493
|
+
return MarketMathStatic.swapExactYtForScyStatic(market, exactYtIn);
|
|
462
494
|
}
|
|
463
495
|
|
|
464
496
|
function swapYtForExactScyStatic(address market, uint256 exactScyOut)
|
|
@@ -469,17 +501,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
469
501
|
uint256 priceImpact
|
|
470
502
|
)
|
|
471
503
|
{
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
PYIndex index = pyIndex(market);
|
|
475
|
-
|
|
476
|
-
(netYtIn, , netScyFee) = state.approxSwapYtForExactScy(
|
|
477
|
-
index,
|
|
478
|
-
exactScyOut,
|
|
479
|
-
block.timestamp,
|
|
480
|
-
approxParams
|
|
481
|
-
);
|
|
482
|
-
priceImpact = calcPriceImpact(market, netYtIn.Int());
|
|
504
|
+
return MarketMathStatic.swapYtForExactScyStatic(market, exactScyOut, approxParams);
|
|
483
505
|
}
|
|
484
506
|
|
|
485
507
|
function swapExactYtForBaseTokenStatic(
|
|
@@ -494,11 +516,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
494
516
|
uint256 priceImpact
|
|
495
517
|
)
|
|
496
518
|
{
|
|
497
|
-
|
|
498
|
-
(netScyOut, netScyFee, priceImpact) = swapExactYtForScyStatic(market, exactYtIn);
|
|
499
|
-
|
|
500
|
-
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
501
|
-
netBaseTokenOut = SCY.previewRedeem(baseToken, netScyOut);
|
|
519
|
+
return MarketMathStatic.swapExactYtForBaseTokenStatic(market, exactYtIn, baseToken);
|
|
502
520
|
}
|
|
503
521
|
|
|
504
522
|
function swapExactBaseTokenForYtStatic(
|
|
@@ -513,9 +531,13 @@ contract RouterStatic is IPRouterStatic {
|
|
|
513
531
|
uint256 priceImpact
|
|
514
532
|
)
|
|
515
533
|
{
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
534
|
+
return
|
|
535
|
+
MarketMathStatic.swapExactBaseTokenForYtStatic(
|
|
536
|
+
market,
|
|
537
|
+
baseToken,
|
|
538
|
+
amountBaseToken,
|
|
539
|
+
approxParams
|
|
540
|
+
);
|
|
519
541
|
}
|
|
520
542
|
|
|
521
543
|
// ============= OTHER HELPERS =============
|
|
@@ -555,27 +577,12 @@ contract RouterStatic is IPRouterStatic {
|
|
|
555
577
|
return SCY.previewRedeem(baseToken, redeemPYToScyStatic(YT, amountPYToRedeem));
|
|
556
578
|
}
|
|
557
579
|
|
|
558
|
-
function
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
return YT.newIndex();
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
function getPY(address py) public view returns (address pt, address yt) {
|
|
565
|
-
if (yieldContractFactory.isYT(py)) {
|
|
566
|
-
pt = IPYieldToken(py).PT();
|
|
567
|
-
yt = py;
|
|
568
|
-
} else {
|
|
569
|
-
pt = py;
|
|
570
|
-
yt = IPPrincipalToken(py).YT();
|
|
571
|
-
}
|
|
580
|
+
function getPtImpliedYield(address market) public view returns (int256) {
|
|
581
|
+
return MarketMathStatic.getPtImpliedYield(market);
|
|
572
582
|
}
|
|
573
583
|
|
|
574
|
-
function
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
int256 lnImpliedRate = (state.lastLnImpliedRate).Int();
|
|
578
|
-
return lnImpliedRate.exp();
|
|
584
|
+
function pyIndex(address market) public returns (PYIndex index) {
|
|
585
|
+
return MarketMathStatic.pyIndex(market);
|
|
579
586
|
}
|
|
580
587
|
|
|
581
588
|
function getExchangeRate(address market) public returns (uint256) {
|
|
@@ -586,100 +593,29 @@ contract RouterStatic is IPRouterStatic {
|
|
|
586
593
|
public
|
|
587
594
|
returns (uint256)
|
|
588
595
|
{
|
|
589
|
-
|
|
590
|
-
MarketState memory state = IPMarket(market).readState(false);
|
|
591
|
-
MarketPreCompute memory comp = state.getMarketPreCompute(pyIndex(market), block.timestamp);
|
|
592
|
-
|
|
593
|
-
int256 preFeeExchangeRate = MarketMathCore._getExchangeRate(
|
|
594
|
-
state.totalPt,
|
|
595
|
-
comp.totalAsset,
|
|
596
|
-
comp.rateScalar,
|
|
597
|
-
comp.rateAnchor,
|
|
598
|
-
netPtToAccount
|
|
599
|
-
);
|
|
600
|
-
|
|
601
|
-
if (netPtToAccount > 0) {
|
|
602
|
-
int256 postFeeExchangeRate = preFeeExchangeRate.divDown(comp.feeRate);
|
|
603
|
-
require(postFeeExchangeRate >= Math.IONE, "exchange rate below 1");
|
|
604
|
-
return postFeeExchangeRate.Uint();
|
|
605
|
-
} else {
|
|
606
|
-
return preFeeExchangeRate.mulDown(comp.feeRate).Uint();
|
|
607
|
-
}
|
|
596
|
+
return MarketMathStatic.getTradeExchangeRateIncludeFee(market, netPtOut);
|
|
608
597
|
}
|
|
609
598
|
|
|
610
599
|
function calcPriceImpact(address market, int256 netPtOut)
|
|
611
600
|
public
|
|
612
601
|
returns (uint256 priceImpact)
|
|
613
602
|
{
|
|
614
|
-
|
|
615
|
-
uint256 tradedRate = getTradeExchangeRateIncludeFee(market, netPtOut);
|
|
616
|
-
|
|
617
|
-
priceImpact = (tradedRate.Int() - preTradeRate.Int()).abs().divDown(preTradeRate);
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
function getUserPYInfo(address py, address user)
|
|
621
|
-
public
|
|
622
|
-
view
|
|
623
|
-
returns (UserPYInfo memory userPYInfo)
|
|
624
|
-
{
|
|
625
|
-
(userPYInfo.pt, userPYInfo.yt) = getPY(py);
|
|
626
|
-
IPYieldToken YT = IPYieldToken(userPYInfo.yt);
|
|
627
|
-
userPYInfo.ytBalance = YT.balanceOf(user);
|
|
628
|
-
userPYInfo.ptBalance = IPPrincipalToken(userPYInfo.pt).balanceOf(user);
|
|
629
|
-
userPYInfo.unclaimedInterest.token = YT.SCY();
|
|
630
|
-
(, userPYInfo.unclaimedInterest.amount) = YT.userInterest(user);
|
|
631
|
-
address[] memory rewardTokens = YT.getRewardTokens();
|
|
632
|
-
TokenAmount[] memory unclaimedRewards = new TokenAmount[](rewardTokens.length);
|
|
633
|
-
uint256 length = 0;
|
|
634
|
-
for (uint256 i = 0; i < rewardTokens.length; ++i) {
|
|
635
|
-
address rewardToken = rewardTokens[i];
|
|
636
|
-
(, uint256 amount) = YT.userReward(rewardToken, user);
|
|
637
|
-
if (amount > 0) {
|
|
638
|
-
unclaimedRewards[length].token = rewardToken;
|
|
639
|
-
unclaimedRewards[length].amount = amount;
|
|
640
|
-
++length;
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
userPYInfo.unclaimedRewards = new TokenAmount[](length);
|
|
644
|
-
for (uint256 i = 0; i < length; ++i) {
|
|
645
|
-
userPYInfo.unclaimedRewards[i] = unclaimedRewards[i];
|
|
646
|
-
}
|
|
603
|
+
return MarketMathStatic.calcPriceImpact(market, netPtOut);
|
|
647
604
|
}
|
|
648
605
|
|
|
649
|
-
|
|
606
|
+
// either but not both pyToken or market must be != 0
|
|
607
|
+
function getTokensInOut(address pyToken, address market)
|
|
650
608
|
public
|
|
651
609
|
view
|
|
652
|
-
returns (
|
|
610
|
+
returns (address[] memory tokensIn, address[] memory tokensOut)
|
|
653
611
|
{
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
(userMarketInfo.assetBalance.assetType, userMarketInfo.assetBalance.assetAddress, ) = SCY
|
|
662
|
-
.assetInfo();
|
|
663
|
-
|
|
664
|
-
MarketState memory state = _market.readState(false);
|
|
665
|
-
uint256 totalLp = uint256(state.totalLp);
|
|
666
|
-
|
|
667
|
-
if (totalLp == 0) {
|
|
668
|
-
return userMarketInfo;
|
|
612
|
+
if (pyToken != address(0)) {
|
|
613
|
+
// SCY interface is shared between pt & yt
|
|
614
|
+
ISuperComposableYield SCY = ISuperComposableYield(IPPrincipalToken(pyToken).SCY());
|
|
615
|
+
return (SCY.getTokensIn(), SCY.getTokensOut());
|
|
616
|
+
} else {
|
|
617
|
+
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
618
|
+
return (SCY.getTokensIn(), SCY.getTokensOut());
|
|
669
619
|
}
|
|
670
|
-
|
|
671
|
-
uint256 userPt = (userLp * uint256(state.totalPt)) / totalLp;
|
|
672
|
-
uint256 userScy = (userLp * uint256(state.totalScy)) / totalLp;
|
|
673
|
-
|
|
674
|
-
userMarketInfo.ptBalance = TokenAmount(address(PT), userPt);
|
|
675
|
-
userMarketInfo.scyBalance = TokenAmount(address(SCY), userScy);
|
|
676
|
-
userMarketInfo.assetBalance.amount = (userScy * SCY.exchangeRate()) / Math.ONE;
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
function hasPYPosition(UserPYInfo calldata userPYInfo) public pure returns (bool hasPosition) {
|
|
680
|
-
hasPosition = (userPYInfo.ytBalance > 0 ||
|
|
681
|
-
userPYInfo.ptBalance > 0 ||
|
|
682
|
-
userPYInfo.unclaimedInterest.amount > 0 ||
|
|
683
|
-
userPYInfo.unclaimedRewards.length > 0);
|
|
684
620
|
}
|
|
685
621
|
}
|