@pendle/core-v2 0.9.3-beta → 0.10.1-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 +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} +154 -909
- 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 +349 -57
- 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 +447 -49
- 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/SuperComposableYield/base-implementations/SCYBaseWithRewards.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 +91 -55
- 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 +196 -262
- package/contracts/periphery/BoringOwnableUpgradeable.sol +62 -0
- package/deployments/43113-benqi.json +2 -2
- package/deployments/43113-core.json +7 -8
- package/deployments/43113-markets/benqi-market-6440d6.json +8 -0
- package/deployments/43113-markets/benqi-market-Dc7592.json +8 -0
- package/deployments/80001-core.json +6 -7
- package/deployments/80001-markets/benqi-market-1542e0.json +8 -0
- package/deployments/80001-markets/benqi-market-2b6D02.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 +116 -104
- 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 +116 -104
- 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 +499 -250
- 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 +404 -114
- 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 +39 -23
- 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 +38 -22
- 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 +349 -57
- 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 +253 -49
- 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 -1785
- 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 -377
- package/contracts/core/actions/ActionYT.sol +0 -93
- package/contracts/core/actions/base/ActionSCYAndPTBase.sol +0 -303
- package/contracts/interfaces/IPActionCore.sol +0 -305
- 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/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,42 +258,29 @@ 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
|
-
function
|
|
264
|
+
function addLiquidityDualTokenAndPtStatic(
|
|
164
265
|
address market,
|
|
165
|
-
|
|
266
|
+
address tokenIn,
|
|
267
|
+
uint256 tokenDesired,
|
|
166
268
|
uint256 ptDesired
|
|
167
269
|
)
|
|
168
270
|
external
|
|
169
271
|
returns (
|
|
170
272
|
uint256 netLpOut,
|
|
171
|
-
uint256
|
|
273
|
+
uint256 tokenUsed,
|
|
172
274
|
uint256 ptUsed
|
|
173
275
|
)
|
|
174
276
|
{
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
(, netLpOut, scyUsed, ptUsed) = state.addLiquidity(
|
|
183
|
-
pyIndex(market),
|
|
184
|
-
scyDesired,
|
|
185
|
-
ptDesired,
|
|
186
|
-
block.timestamp
|
|
187
|
-
);
|
|
188
|
-
|
|
189
|
-
ibTokenUsed = (ibTokenDesired * 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,24 +331,15 @@ 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
|
-
function
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
{
|
|
243
|
-
(
|
|
244
|
-
|
|
245
|
-
address ibToken = SCY.yieldToken();
|
|
246
|
-
|
|
247
|
-
uint256 netScyOut;
|
|
248
|
-
MarketState memory state = IPMarket(market).readState(false);
|
|
249
|
-
(netScyOut, netPtOut) = state.removeLiquidity(lpToRemove);
|
|
250
|
-
|
|
251
|
-
netIbTokenOut = SCY.previewRedeem(ibToken, netScyOut);
|
|
337
|
+
function removeLiquidityDualTokenAndPtStatic(
|
|
338
|
+
address market,
|
|
339
|
+
uint256 lpToRemove,
|
|
340
|
+
address tokenOut
|
|
341
|
+
) external view returns (uint256 netTokenOut, uint256 netPtOut) {
|
|
342
|
+
return MarketMathStatic.removeLiquidityDualTokenAndPtStatic(market, lpToRemove, tokenOut);
|
|
252
343
|
}
|
|
253
344
|
|
|
254
345
|
function removeLiquiditySinglePtStatic(address market, uint256 lpToRemove)
|
|
@@ -259,18 +350,18 @@ contract RouterStatic is IPRouterStatic {
|
|
|
259
350
|
uint256 priceImpact
|
|
260
351
|
)
|
|
261
352
|
{
|
|
262
|
-
|
|
353
|
+
return MarketMathStatic.removeLiquiditySinglePtStatic(market, lpToRemove, approxParams);
|
|
263
354
|
}
|
|
264
355
|
|
|
265
356
|
function removeLiquiditySingleScyStatic(address market, uint256 lpToRemove)
|
|
266
|
-
|
|
357
|
+
public
|
|
267
358
|
returns (
|
|
268
359
|
uint256 netScyOut,
|
|
269
360
|
uint256 netScyFee,
|
|
270
361
|
uint256 priceImpact
|
|
271
362
|
)
|
|
272
363
|
{
|
|
273
|
-
|
|
364
|
+
return MarketMathStatic.removeLiquiditySingleScyStatic(market, lpToRemove);
|
|
274
365
|
}
|
|
275
366
|
|
|
276
367
|
function removeLiquiditySingleBaseTokenStatic(
|
|
@@ -285,7 +376,8 @@ contract RouterStatic is IPRouterStatic {
|
|
|
285
376
|
uint256 priceImpact
|
|
286
377
|
)
|
|
287
378
|
{
|
|
288
|
-
|
|
379
|
+
return
|
|
380
|
+
MarketMathStatic.removeLiquiditySingleBaseTokenStatic(market, lpToRemove, baseToken);
|
|
289
381
|
}
|
|
290
382
|
|
|
291
383
|
function swapExactPtForScyStatic(address market, uint256 exactPtIn)
|
|
@@ -296,13 +388,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
296
388
|
uint256 priceImpact
|
|
297
389
|
)
|
|
298
390
|
{
|
|
299
|
-
|
|
300
|
-
(netScyOut, netScyFee) = state.swapExactPtForScy(
|
|
301
|
-
pyIndex(market),
|
|
302
|
-
exactPtIn,
|
|
303
|
-
block.timestamp
|
|
304
|
-
);
|
|
305
|
-
priceImpact = calcPriceImpact(market, exactPtIn.neg());
|
|
391
|
+
return MarketMathStatic.swapExactPtForScyStatic(market, exactPtIn);
|
|
306
392
|
}
|
|
307
393
|
|
|
308
394
|
function swapScyForExactPtStatic(address market, uint256 exactPtOut)
|
|
@@ -313,13 +399,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
313
399
|
uint256 priceImpact
|
|
314
400
|
)
|
|
315
401
|
{
|
|
316
|
-
|
|
317
|
-
(netScyIn, netScyFee) = state.swapScyForExactPt(
|
|
318
|
-
pyIndex(market),
|
|
319
|
-
exactPtOut,
|
|
320
|
-
block.timestamp
|
|
321
|
-
);
|
|
322
|
-
priceImpact = calcPriceImpact(market, exactPtOut.Int());
|
|
402
|
+
return MarketMathStatic.swapScyForExactPtStatic(market, exactPtOut);
|
|
323
403
|
}
|
|
324
404
|
|
|
325
405
|
function swapExactScyForPtStatic(address market, uint256 exactScyIn)
|
|
@@ -330,14 +410,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
330
410
|
uint256 priceImpact
|
|
331
411
|
)
|
|
332
412
|
{
|
|
333
|
-
|
|
334
|
-
(netPtOut, , netScyFee) = state.approxSwapExactScyForPt(
|
|
335
|
-
pyIndex(market),
|
|
336
|
-
exactScyIn,
|
|
337
|
-
block.timestamp,
|
|
338
|
-
approxParams
|
|
339
|
-
);
|
|
340
|
-
priceImpact = calcPriceImpact(market, netPtOut.Int());
|
|
413
|
+
return MarketMathStatic.swapExactScyForPtStatic(market, exactScyIn, approxParams);
|
|
341
414
|
}
|
|
342
415
|
|
|
343
416
|
function swapPtForExactScyStatic(address market, uint256 exactScyOut)
|
|
@@ -348,15 +421,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
348
421
|
uint256 priceImpact
|
|
349
422
|
)
|
|
350
423
|
{
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
(netPtIn, , netScyFee) = state.approxSwapPtForExactScy(
|
|
354
|
-
pyIndex(market),
|
|
355
|
-
exactScyOut,
|
|
356
|
-
block.timestamp,
|
|
357
|
-
approxParams
|
|
358
|
-
);
|
|
359
|
-
priceImpact = calcPriceImpact(market, netPtIn.neg());
|
|
424
|
+
return MarketMathStatic.swapPtForExactScyStatic(market, exactScyOut, approxParams);
|
|
360
425
|
}
|
|
361
426
|
|
|
362
427
|
function swapExactBaseTokenForPtStatic(
|
|
@@ -371,9 +436,13 @@ contract RouterStatic is IPRouterStatic {
|
|
|
371
436
|
uint256 priceImpact
|
|
372
437
|
)
|
|
373
438
|
{
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
439
|
+
return
|
|
440
|
+
MarketMathStatic.swapExactBaseTokenForPtStatic(
|
|
441
|
+
market,
|
|
442
|
+
baseToken,
|
|
443
|
+
amountBaseToken,
|
|
444
|
+
approxParams
|
|
445
|
+
);
|
|
377
446
|
}
|
|
378
447
|
|
|
379
448
|
function swapExactPtForBaseTokenStatic(
|
|
@@ -388,11 +457,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
388
457
|
uint256 priceImpact
|
|
389
458
|
)
|
|
390
459
|
{
|
|
391
|
-
|
|
392
|
-
(netScyOut, netScyFee, priceImpact) = swapExactPtForScyStatic(market, exactYtIn);
|
|
393
|
-
|
|
394
|
-
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
395
|
-
netBaseTokenOut = SCY.previewRedeem(baseToken, netScyOut);
|
|
460
|
+
return MarketMathStatic.swapExactPtForBaseTokenStatic(market, exactYtIn, baseToken);
|
|
396
461
|
}
|
|
397
462
|
|
|
398
463
|
function swapScyForExactYtStatic(address market, uint256 exactYtOut)
|
|
@@ -403,21 +468,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
403
468
|
uint256 priceImpact
|
|
404
469
|
)
|
|
405
470
|
{
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
PYIndex index = pyIndex(market);
|
|
409
|
-
|
|
410
|
-
uint256 scyReceived;
|
|
411
|
-
(scyReceived, netScyFee) = state.swapExactPtForScy(
|
|
412
|
-
pyIndex(market),
|
|
413
|
-
exactYtOut,
|
|
414
|
-
block.timestamp
|
|
415
|
-
);
|
|
416
|
-
|
|
417
|
-
uint256 totalScyNeed = index.assetToScyUp(exactYtOut);
|
|
418
|
-
netScyIn = totalScyNeed.subMax0(scyReceived);
|
|
419
|
-
|
|
420
|
-
priceImpact = calcPriceImpact(market, exactYtOut.neg());
|
|
471
|
+
return MarketMathStatic.swapScyForExactYtStatic(market, exactYtOut);
|
|
421
472
|
}
|
|
422
473
|
|
|
423
474
|
function swapExactScyForYtStatic(address market, uint256 exactScyIn)
|
|
@@ -428,17 +479,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
428
479
|
uint256 priceImpact
|
|
429
480
|
)
|
|
430
481
|
{
|
|
431
|
-
|
|
432
|
-
PYIndex index = pyIndex(market);
|
|
433
|
-
|
|
434
|
-
(netYtOut, , netScyFee) = state.approxSwapExactScyForYt(
|
|
435
|
-
index,
|
|
436
|
-
exactScyIn,
|
|
437
|
-
block.timestamp,
|
|
438
|
-
approxParams
|
|
439
|
-
);
|
|
440
|
-
|
|
441
|
-
priceImpact = calcPriceImpact(market, netYtOut.neg());
|
|
482
|
+
return MarketMathStatic.swapExactScyForYtStatic(market, exactScyIn, approxParams);
|
|
442
483
|
}
|
|
443
484
|
|
|
444
485
|
function swapExactYtForScyStatic(address market, uint256 exactYtIn)
|
|
@@ -449,18 +490,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
449
490
|
uint256 priceImpact
|
|
450
491
|
)
|
|
451
492
|
{
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
PYIndex index = pyIndex(market);
|
|
455
|
-
|
|
456
|
-
uint256 scyOwed;
|
|
457
|
-
(scyOwed, netScyFee) = state.swapScyForExactPt(index, exactYtIn, block.timestamp);
|
|
458
|
-
|
|
459
|
-
uint256 amountPYToRepayScyOwed = index.scyToAssetUp(scyOwed);
|
|
460
|
-
uint256 amountPYToRedeemScyOut = exactYtIn - amountPYToRepayScyOwed;
|
|
461
|
-
|
|
462
|
-
netScyOut = index.assetToScy(amountPYToRedeemScyOut);
|
|
463
|
-
priceImpact = calcPriceImpact(market, exactYtIn.Int());
|
|
493
|
+
return MarketMathStatic.swapExactYtForScyStatic(market, exactYtIn);
|
|
464
494
|
}
|
|
465
495
|
|
|
466
496
|
function swapYtForExactScyStatic(address market, uint256 exactScyOut)
|
|
@@ -471,17 +501,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
471
501
|
uint256 priceImpact
|
|
472
502
|
)
|
|
473
503
|
{
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
PYIndex index = pyIndex(market);
|
|
477
|
-
|
|
478
|
-
(netYtIn, , netScyFee) = state.approxSwapYtForExactScy(
|
|
479
|
-
index,
|
|
480
|
-
exactScyOut,
|
|
481
|
-
block.timestamp,
|
|
482
|
-
approxParams
|
|
483
|
-
);
|
|
484
|
-
priceImpact = calcPriceImpact(market, netYtIn.Int());
|
|
504
|
+
return MarketMathStatic.swapYtForExactScyStatic(market, exactScyOut, approxParams);
|
|
485
505
|
}
|
|
486
506
|
|
|
487
507
|
function swapExactYtForBaseTokenStatic(
|
|
@@ -496,11 +516,7 @@ contract RouterStatic is IPRouterStatic {
|
|
|
496
516
|
uint256 priceImpact
|
|
497
517
|
)
|
|
498
518
|
{
|
|
499
|
-
|
|
500
|
-
(netScyOut, netScyFee, priceImpact) = swapExactYtForScyStatic(market, exactYtIn);
|
|
501
|
-
|
|
502
|
-
(ISuperComposableYield SCY, , ) = IPMarket(market).readTokens();
|
|
503
|
-
netBaseTokenOut = SCY.previewRedeem(baseToken, netScyOut);
|
|
519
|
+
return MarketMathStatic.swapExactYtForBaseTokenStatic(market, exactYtIn, baseToken);
|
|
504
520
|
}
|
|
505
521
|
|
|
506
522
|
function swapExactBaseTokenForYtStatic(
|
|
@@ -515,9 +531,13 @@ contract RouterStatic is IPRouterStatic {
|
|
|
515
531
|
uint256 priceImpact
|
|
516
532
|
)
|
|
517
533
|
{
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
534
|
+
return
|
|
535
|
+
MarketMathStatic.swapExactBaseTokenForYtStatic(
|
|
536
|
+
market,
|
|
537
|
+
baseToken,
|
|
538
|
+
amountBaseToken,
|
|
539
|
+
approxParams
|
|
540
|
+
);
|
|
521
541
|
}
|
|
522
542
|
|
|
523
543
|
// ============= OTHER HELPERS =============
|
|
@@ -557,27 +577,12 @@ contract RouterStatic is IPRouterStatic {
|
|
|
557
577
|
return SCY.previewRedeem(baseToken, redeemPYToScyStatic(YT, amountPYToRedeem));
|
|
558
578
|
}
|
|
559
579
|
|
|
560
|
-
function
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
return YT.newIndex();
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
function getPY(address py) public view returns (address pt, address yt) {
|
|
567
|
-
if (yieldContractFactory.isYT(py)) {
|
|
568
|
-
pt = IPYieldToken(py).PT();
|
|
569
|
-
yt = py;
|
|
570
|
-
} else {
|
|
571
|
-
pt = py;
|
|
572
|
-
yt = IPPrincipalToken(py).YT();
|
|
573
|
-
}
|
|
580
|
+
function getPtImpliedYield(address market) public view returns (int256) {
|
|
581
|
+
return MarketMathStatic.getPtImpliedYield(market);
|
|
574
582
|
}
|
|
575
583
|
|
|
576
|
-
function
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
int256 lnImpliedRate = (state.lastLnImpliedRate).Int();
|
|
580
|
-
return lnImpliedRate.exp();
|
|
584
|
+
function pyIndex(address market) public returns (PYIndex index) {
|
|
585
|
+
return MarketMathStatic.pyIndex(market);
|
|
581
586
|
}
|
|
582
587
|
|
|
583
588
|
function getExchangeRate(address market) public returns (uint256) {
|
|
@@ -588,100 +593,29 @@ contract RouterStatic is IPRouterStatic {
|
|
|
588
593
|
public
|
|
589
594
|
returns (uint256)
|
|
590
595
|
{
|
|
591
|
-
|
|
592
|
-
MarketState memory state = IPMarket(market).readState(false);
|
|
593
|
-
MarketPreCompute memory comp = state.getMarketPreCompute(pyIndex(market), block.timestamp);
|
|
594
|
-
|
|
595
|
-
int256 preFeeExchangeRate = MarketMathCore._getExchangeRate(
|
|
596
|
-
state.totalPt,
|
|
597
|
-
comp.totalAsset,
|
|
598
|
-
comp.rateScalar,
|
|
599
|
-
comp.rateAnchor,
|
|
600
|
-
netPtToAccount
|
|
601
|
-
);
|
|
602
|
-
|
|
603
|
-
if (netPtToAccount > 0) {
|
|
604
|
-
int256 postFeeExchangeRate = preFeeExchangeRate.divDown(comp.feeRate);
|
|
605
|
-
require(postFeeExchangeRate >= Math.IONE, "exchange rate below 1");
|
|
606
|
-
return postFeeExchangeRate.Uint();
|
|
607
|
-
} else {
|
|
608
|
-
return preFeeExchangeRate.mulDown(comp.feeRate).Uint();
|
|
609
|
-
}
|
|
596
|
+
return MarketMathStatic.getTradeExchangeRateIncludeFee(market, netPtOut);
|
|
610
597
|
}
|
|
611
598
|
|
|
612
599
|
function calcPriceImpact(address market, int256 netPtOut)
|
|
613
600
|
public
|
|
614
601
|
returns (uint256 priceImpact)
|
|
615
602
|
{
|
|
616
|
-
|
|
617
|
-
uint256 tradedRate = getTradeExchangeRateIncludeFee(market, netPtOut);
|
|
618
|
-
|
|
619
|
-
priceImpact = (tradedRate.Int() - preTradeRate.Int()).abs().divDown(preTradeRate);
|
|
603
|
+
return MarketMathStatic.calcPriceImpact(market, netPtOut);
|
|
620
604
|
}
|
|
621
605
|
|
|
622
|
-
|
|
606
|
+
// either but not both pyToken or market must be != 0
|
|
607
|
+
function getTokensInOut(address pyToken, address market)
|
|
623
608
|
public
|
|
624
609
|
view
|
|
625
|
-
returns (
|
|
610
|
+
returns (address[] memory tokensIn, address[] memory tokensOut)
|
|
626
611
|
{
|
|
627
|
-
(
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
TokenAmount[] memory unclaimedRewards = new TokenAmount[](rewardTokens.length);
|
|
635
|
-
uint256 length = 0;
|
|
636
|
-
for (uint256 i = 0; i < rewardTokens.length; ++i) {
|
|
637
|
-
address rewardToken = rewardTokens[i];
|
|
638
|
-
(, uint256 amount) = YT.userReward(rewardToken, user);
|
|
639
|
-
if (amount > 0) {
|
|
640
|
-
unclaimedRewards[length].token = rewardToken;
|
|
641
|
-
unclaimedRewards[length].amount = amount;
|
|
642
|
-
++length;
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
userPYInfo.unclaimedRewards = new TokenAmount[](length);
|
|
646
|
-
for (uint256 i = 0; i < length; ++i) {
|
|
647
|
-
userPYInfo.unclaimedRewards[i] = unclaimedRewards[i];
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
function getUserMarketInfo(address market, address user)
|
|
652
|
-
public
|
|
653
|
-
view
|
|
654
|
-
returns (UserMarketInfo memory userMarketInfo)
|
|
655
|
-
{
|
|
656
|
-
IPMarket _market = IPMarket(market);
|
|
657
|
-
uint256 userLp = _market.balanceOf(user);
|
|
658
|
-
|
|
659
|
-
userMarketInfo.market = market;
|
|
660
|
-
userMarketInfo.lpBalance = userLp;
|
|
661
|
-
|
|
662
|
-
(ISuperComposableYield SCY, IPPrincipalToken PT, ) = _market.readTokens();
|
|
663
|
-
(userMarketInfo.assetBalance.assetType, userMarketInfo.assetBalance.assetAddress, ) = SCY
|
|
664
|
-
.assetInfo();
|
|
665
|
-
|
|
666
|
-
MarketState memory state = _market.readState(false);
|
|
667
|
-
uint256 totalLp = uint256(state.totalLp);
|
|
668
|
-
|
|
669
|
-
if (totalLp == 0) {
|
|
670
|
-
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());
|
|
671
619
|
}
|
|
672
|
-
|
|
673
|
-
uint256 userPt = (userLp * uint256(state.totalPt)) / totalLp;
|
|
674
|
-
uint256 userScy = (userLp * uint256(state.totalScy)) / totalLp;
|
|
675
|
-
|
|
676
|
-
userMarketInfo.ptBalance = TokenAmount(address(PT), userPt);
|
|
677
|
-
userMarketInfo.scyBalance = TokenAmount(address(SCY), userScy);
|
|
678
|
-
userMarketInfo.assetBalance.amount = (userScy * SCY.exchangeRate()) / Math.ONE;
|
|
679
|
-
}
|
|
680
|
-
|
|
681
|
-
function hasPYPosition(UserPYInfo calldata userPYInfo) public pure returns (bool hasPosition) {
|
|
682
|
-
hasPosition = (userPYInfo.ytBalance > 0 ||
|
|
683
|
-
userPYInfo.ptBalance > 0 ||
|
|
684
|
-
userPYInfo.unclaimedInterest.amount > 0 ||
|
|
685
|
-
userPYInfo.unclaimedRewards.length > 0);
|
|
686
620
|
}
|
|
687
621
|
}
|