@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
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
pragma solidity 0.8.15;
|
|
3
|
+
|
|
4
|
+
/// Adapted from UniswapV3's Oracle
|
|
5
|
+
|
|
6
|
+
library OracleLib {
|
|
7
|
+
struct Observation {
|
|
8
|
+
uint32 blockTimestamp;
|
|
9
|
+
uint216 lnImpliedRateCumulative;
|
|
10
|
+
bool initialized;
|
|
11
|
+
// 1 SLOT = 256 bits
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function transform(
|
|
15
|
+
Observation memory last,
|
|
16
|
+
uint32 blockTimestamp,
|
|
17
|
+
uint96 lnImpliedRate
|
|
18
|
+
) public pure returns (Observation memory) {
|
|
19
|
+
return
|
|
20
|
+
Observation({
|
|
21
|
+
blockTimestamp: blockTimestamp,
|
|
22
|
+
lnImpliedRateCumulative: last.lnImpliedRateCumulative +
|
|
23
|
+
uint216(lnImpliedRate) *
|
|
24
|
+
(blockTimestamp - last.blockTimestamp),
|
|
25
|
+
initialized: true
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function initialize(Observation[65535] storage self, uint32 time)
|
|
30
|
+
public
|
|
31
|
+
returns (uint16 cardinality, uint16 cardinalityNext)
|
|
32
|
+
{
|
|
33
|
+
self[0] = Observation({
|
|
34
|
+
blockTimestamp: time,
|
|
35
|
+
lnImpliedRateCumulative: 0,
|
|
36
|
+
initialized: true
|
|
37
|
+
});
|
|
38
|
+
return (1, 1);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function write(
|
|
42
|
+
Observation[65535] storage self,
|
|
43
|
+
uint16 index,
|
|
44
|
+
uint32 blockTimestamp,
|
|
45
|
+
uint96 lnImpliedRate,
|
|
46
|
+
uint16 cardinality,
|
|
47
|
+
uint16 cardinalityNext
|
|
48
|
+
) public returns (uint16 indexUpdated, uint16 cardinalityUpdated) {
|
|
49
|
+
Observation memory last = self[index];
|
|
50
|
+
|
|
51
|
+
// early return if we've already written an observation this block
|
|
52
|
+
if (last.blockTimestamp == blockTimestamp) return (index, cardinality);
|
|
53
|
+
|
|
54
|
+
// if the conditions are right, we can bump the cardinality
|
|
55
|
+
if (cardinalityNext > cardinality && index == (cardinality - 1)) {
|
|
56
|
+
cardinalityUpdated = cardinalityNext;
|
|
57
|
+
} else {
|
|
58
|
+
cardinalityUpdated = cardinality;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
indexUpdated = (index + 1) % cardinalityUpdated;
|
|
62
|
+
self[indexUpdated] = transform(last, blockTimestamp, lnImpliedRate);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function grow(
|
|
66
|
+
Observation[65535] storage self,
|
|
67
|
+
uint16 current,
|
|
68
|
+
uint16 next
|
|
69
|
+
) public returns (uint16) {
|
|
70
|
+
require(current != 0, "uninitialized");
|
|
71
|
+
// no-op if the passed next value isn't greater than the current next value
|
|
72
|
+
if (next <= current) return current;
|
|
73
|
+
// store in each slot to prevent fresh SSTOREs in swaps
|
|
74
|
+
// this data will not be used because the initialized boolean is still false
|
|
75
|
+
for (uint16 i = current; i != next; ) {
|
|
76
|
+
self[i].blockTimestamp = 1;
|
|
77
|
+
unchecked {
|
|
78
|
+
++i;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return next;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function binarySearch(
|
|
85
|
+
Observation[65535] storage self,
|
|
86
|
+
uint32 target,
|
|
87
|
+
uint16 index,
|
|
88
|
+
uint16 cardinality
|
|
89
|
+
) public view returns (Observation memory beforeOrAt, Observation memory atOrAfter) {
|
|
90
|
+
uint256 l = (index + 1) % cardinality; // oldest observation
|
|
91
|
+
uint256 r = l + cardinality - 1; // newest observation
|
|
92
|
+
uint256 i;
|
|
93
|
+
while (true) {
|
|
94
|
+
i = (l + r) / 2;
|
|
95
|
+
|
|
96
|
+
beforeOrAt = self[i % cardinality];
|
|
97
|
+
|
|
98
|
+
// we've landed on an uninitialized observation, keep searching higher (more recently)
|
|
99
|
+
if (!beforeOrAt.initialized) {
|
|
100
|
+
l = i + 1;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
atOrAfter = self[(i + 1) % cardinality];
|
|
105
|
+
|
|
106
|
+
bool targetAtOrAfter = beforeOrAt.blockTimestamp <= target;
|
|
107
|
+
|
|
108
|
+
// check if we've found the answer!
|
|
109
|
+
if (targetAtOrAfter && target <= atOrAfter.blockTimestamp) break;
|
|
110
|
+
|
|
111
|
+
if (!targetAtOrAfter) r = i - 1;
|
|
112
|
+
else l = i + 1;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function getSurroundingObservations(
|
|
117
|
+
Observation[65535] storage self,
|
|
118
|
+
uint32 target,
|
|
119
|
+
uint96 lnImpliedRate,
|
|
120
|
+
uint16 index,
|
|
121
|
+
uint16 cardinality
|
|
122
|
+
) public view returns (Observation memory beforeOrAt, Observation memory atOrAfter) {
|
|
123
|
+
// optimistically set before to the newest observation
|
|
124
|
+
beforeOrAt = self[index];
|
|
125
|
+
|
|
126
|
+
// if the target is chronologically at or after the newest observation, we can early return
|
|
127
|
+
if (beforeOrAt.blockTimestamp <= target) {
|
|
128
|
+
if (beforeOrAt.blockTimestamp == target) {
|
|
129
|
+
// if newest observation equals target, we're in the same block, so we can ignore atOrAfter
|
|
130
|
+
return (beforeOrAt, atOrAfter);
|
|
131
|
+
} else {
|
|
132
|
+
// otherwise, we need to transform
|
|
133
|
+
return (beforeOrAt, transform(beforeOrAt, target, lnImpliedRate));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// now, set beforeOrAt to the oldest observation
|
|
138
|
+
beforeOrAt = self[(index + 1) % cardinality];
|
|
139
|
+
if (!beforeOrAt.initialized) beforeOrAt = self[0];
|
|
140
|
+
|
|
141
|
+
// ensure that the target is chronologically at or after the oldest observation
|
|
142
|
+
require(beforeOrAt.blockTimestamp <= target, "target too old for observation");
|
|
143
|
+
|
|
144
|
+
// if we've reached this point, we have to binary search
|
|
145
|
+
return binarySearch(self, target, index, cardinality);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function observeSingle(
|
|
149
|
+
Observation[65535] storage self,
|
|
150
|
+
uint32 time,
|
|
151
|
+
uint32 secondsAgo,
|
|
152
|
+
uint96 lnImpliedRate,
|
|
153
|
+
uint16 index,
|
|
154
|
+
uint16 cardinality
|
|
155
|
+
) public view returns (uint216 lnImpliedRateCumulative) {
|
|
156
|
+
if (secondsAgo == 0) {
|
|
157
|
+
Observation memory last = self[index];
|
|
158
|
+
if (last.blockTimestamp != time) {
|
|
159
|
+
return transform(last, time, lnImpliedRate).lnImpliedRateCumulative;
|
|
160
|
+
}
|
|
161
|
+
return last.lnImpliedRateCumulative;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
uint32 target = time - secondsAgo;
|
|
165
|
+
|
|
166
|
+
(Observation memory beforeOrAt, Observation memory atOrAfter) = getSurroundingObservations(
|
|
167
|
+
self,
|
|
168
|
+
target,
|
|
169
|
+
lnImpliedRate,
|
|
170
|
+
index,
|
|
171
|
+
cardinality
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
if (target == beforeOrAt.blockTimestamp) {
|
|
175
|
+
// we're at the left boundary
|
|
176
|
+
return beforeOrAt.lnImpliedRateCumulative;
|
|
177
|
+
} else if (target == atOrAfter.blockTimestamp) {
|
|
178
|
+
// we're at the right boundary
|
|
179
|
+
return atOrAfter.lnImpliedRateCumulative;
|
|
180
|
+
} else {
|
|
181
|
+
// we're in the middle
|
|
182
|
+
return (beforeOrAt.lnImpliedRateCumulative +
|
|
183
|
+
uint216(
|
|
184
|
+
(uint256(
|
|
185
|
+
atOrAfter.lnImpliedRateCumulative - beforeOrAt.lnImpliedRateCumulative
|
|
186
|
+
) * (target - beforeOrAt.blockTimestamp)) /
|
|
187
|
+
(atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp)
|
|
188
|
+
));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function observe(
|
|
193
|
+
Observation[65535] storage self,
|
|
194
|
+
uint32 time,
|
|
195
|
+
uint32[] memory secondsAgos,
|
|
196
|
+
uint96 lnImpliedRate,
|
|
197
|
+
uint16 index,
|
|
198
|
+
uint16 cardinality
|
|
199
|
+
) public view returns (uint216[] memory lnImpliedRateCumulative) {
|
|
200
|
+
require(cardinality != 0, "cardinality must be positive");
|
|
201
|
+
|
|
202
|
+
lnImpliedRateCumulative = new uint216[](secondsAgos.length);
|
|
203
|
+
for (uint256 i = 0; i < lnImpliedRateCumulative.length; ++i) {
|
|
204
|
+
lnImpliedRateCumulative[i] = observeSingle(
|
|
205
|
+
self,
|
|
206
|
+
time,
|
|
207
|
+
secondsAgos[i],
|
|
208
|
+
lnImpliedRate,
|
|
209
|
+
index,
|
|
210
|
+
cardinality
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
@@ -18,7 +18,7 @@ abstract contract RewardManagerAbstract is IRewardManager, TokenHelper {
|
|
|
18
18
|
uint128 accrued;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
// [token] => [user] => (index,
|
|
21
|
+
// [token] => [user] => (index,accrued)
|
|
22
22
|
mapping(address => mapping(address => UserReward)) public userReward;
|
|
23
23
|
|
|
24
24
|
function _updateAndDistributeRewards(address user) internal virtual {
|
|
@@ -3,7 +3,6 @@ pragma solidity 0.8.15;
|
|
|
3
3
|
|
|
4
4
|
import "./Math.sol";
|
|
5
5
|
import "./MarketMathCore.sol";
|
|
6
|
-
import "./MarketMathCore.sol";
|
|
7
6
|
|
|
8
7
|
struct ApproxParams {
|
|
9
8
|
uint256 guessMin;
|
|
@@ -132,7 +131,7 @@ library MarketApproxLib {
|
|
|
132
131
|
}
|
|
133
132
|
|
|
134
133
|
struct VarsSwapExactScyForYt {
|
|
135
|
-
uint256
|
|
134
|
+
uint256 netPtInGuess;
|
|
136
135
|
int256 assetToAccount;
|
|
137
136
|
int256 assetToReserve;
|
|
138
137
|
uint256 netAssetOut;
|
|
@@ -184,34 +183,37 @@ library MarketApproxLib {
|
|
|
184
183
|
VarsSwapExactScyForYt memory vars;
|
|
185
184
|
MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
|
|
186
185
|
|
|
186
|
+
vars.maxAssetIn = index.scyToAsset(maxScyIn);
|
|
187
|
+
|
|
187
188
|
if (approx.guessMax == type(uint256).max) approx.guessMax = calcMaxPtIn(comp.totalAsset);
|
|
188
189
|
|
|
189
|
-
|
|
190
|
+
// at minimum we will flashswap maxAssetIn since we have enough SCY to payback the PT loan
|
|
191
|
+
if (approx.guessMin == 0) approx.guessMin = vars.maxAssetIn;
|
|
190
192
|
|
|
191
193
|
for (uint256 iter = 0; iter < approx.maxIteration; ) {
|
|
192
194
|
// ytOutGuess = ptInGuess
|
|
193
|
-
vars.
|
|
195
|
+
vars.netPtInGuess = getCurrentGuess(iter, approx);
|
|
194
196
|
|
|
195
197
|
(vars.isSlopeNonNeg, vars.largestGoodSlope) = updateSlope(
|
|
196
198
|
comp,
|
|
197
199
|
market.totalPt,
|
|
198
|
-
vars.
|
|
200
|
+
vars.netPtInGuess,
|
|
199
201
|
vars.largestGoodSlope
|
|
200
202
|
);
|
|
201
203
|
if (!vars.isSlopeNonNeg) {
|
|
202
|
-
approx.guessMax = vars.
|
|
204
|
+
approx.guessMax = vars.netPtInGuess - 1;
|
|
203
205
|
continue;
|
|
204
206
|
}
|
|
205
207
|
|
|
206
208
|
(vars.assetToAccount, vars.assetToReserve) = market.calcTrade(
|
|
207
209
|
comp,
|
|
208
|
-
vars.
|
|
210
|
+
vars.netPtInGuess.neg()
|
|
209
211
|
);
|
|
210
212
|
vars.netAssetOut = vars.assetToAccount.Uint();
|
|
211
|
-
vars.amountAssetNeedMore = vars.
|
|
213
|
+
vars.amountAssetNeedMore = vars.netPtInGuess - vars.netAssetOut;
|
|
212
214
|
|
|
213
215
|
if (vars.amountAssetNeedMore <= vars.maxAssetIn) {
|
|
214
|
-
approx.guessMin = vars.
|
|
216
|
+
approx.guessMin = vars.netPtInGuess;
|
|
215
217
|
bool isAnswerAccepted = Math.isASmallerApproxB(
|
|
216
218
|
vars.amountAssetNeedMore,
|
|
217
219
|
vars.maxAssetIn,
|
|
@@ -219,12 +221,12 @@ library MarketApproxLib {
|
|
|
219
221
|
);
|
|
220
222
|
if (isAnswerAccepted)
|
|
221
223
|
return (
|
|
222
|
-
vars.
|
|
224
|
+
vars.netPtInGuess,
|
|
223
225
|
index.assetToScy(vars.amountAssetNeedMore),
|
|
224
226
|
index.assetToScy(vars.assetToReserve.Uint())
|
|
225
227
|
);
|
|
226
228
|
} else {
|
|
227
|
-
approx.guessMax = vars.
|
|
229
|
+
approx.guessMax = vars.netPtInGuess - 1;
|
|
228
230
|
}
|
|
229
231
|
|
|
230
232
|
unchecked {
|
|
@@ -368,7 +370,7 @@ library MarketApproxLib {
|
|
|
368
370
|
approx.guessMax = calcMaxPtOut(market.totalPt, comp);
|
|
369
371
|
}
|
|
370
372
|
|
|
371
|
-
vars.minAssetOut = index.
|
|
373
|
+
vars.minAssetOut = index.scyToAssetUp(minScyOut);
|
|
372
374
|
|
|
373
375
|
for (uint256 iter = 0; iter < approx.maxIteration; ) {
|
|
374
376
|
// ytInGuess = ptOutGuess
|
|
@@ -405,16 +407,227 @@ library MarketApproxLib {
|
|
|
405
407
|
revert("approx fail");
|
|
406
408
|
}
|
|
407
409
|
|
|
410
|
+
struct VarsSwapPtToAddLiquidity {
|
|
411
|
+
uint256 netPtInGuess;
|
|
412
|
+
int256 assetToAccount;
|
|
413
|
+
int256 assetToReserve;
|
|
414
|
+
uint256 netAssetOut;
|
|
415
|
+
uint256 netPtRemaining;
|
|
416
|
+
uint256 newTotalPt;
|
|
417
|
+
uint256 newTotalAsset;
|
|
418
|
+
uint256 largestGoodSlope;
|
|
419
|
+
uint256 assetNumerator;
|
|
420
|
+
uint256 ptNumerator;
|
|
421
|
+
bool isSlopeNonNeg;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
function approxSwapPtToAddLiquidity(
|
|
425
|
+
MarketState memory market,
|
|
426
|
+
PYIndex index,
|
|
427
|
+
uint256 netPtAdded,
|
|
428
|
+
uint256 blockTime,
|
|
429
|
+
ApproxParams memory approx
|
|
430
|
+
)
|
|
431
|
+
internal
|
|
432
|
+
pure
|
|
433
|
+
returns (
|
|
434
|
+
uint256, /*netPtIn*/
|
|
435
|
+
uint256, /*netScyOut*/
|
|
436
|
+
uint256 /*netScyToReserve*/
|
|
437
|
+
)
|
|
438
|
+
{
|
|
439
|
+
/*
|
|
440
|
+
The algorithm is essentially to:
|
|
441
|
+
1. Binary search netPtIn (therefore netScyOut)
|
|
442
|
+
2. Swap netPtIn for netScyOut
|
|
443
|
+
3. Use (netPtAdded - netPtIn) and netScyOut to mint LP
|
|
444
|
+
4. If (netPtAdded - netPtIn) / netScyOut ratio is close enough to the market's PT/SCY ratio
|
|
445
|
+
=> answer found
|
|
446
|
+
|
|
447
|
+
Note that market maintains PT/SCY ratio, but here PT/asset is used instead
|
|
448
|
+
*/
|
|
449
|
+
|
|
450
|
+
require(market.totalLp != 0, "no existing lp");
|
|
451
|
+
|
|
452
|
+
VarsSwapPtToAddLiquidity memory vars;
|
|
453
|
+
MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
|
|
454
|
+
|
|
455
|
+
if (approx.guessMax == type(uint256).max) {
|
|
456
|
+
// ensures that netPtIn is always valid and not greater than netPtAdded
|
|
457
|
+
approx.guessMax = Math.min(calcMaxPtIn(comp.totalAsset), netPtAdded);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
require(isValidApproxParams(approx), "invalid approx");
|
|
461
|
+
|
|
462
|
+
for (uint256 iter = 0; iter < approx.maxIteration; ) {
|
|
463
|
+
vars.netPtInGuess = getCurrentGuess(iter, approx);
|
|
464
|
+
|
|
465
|
+
(vars.isSlopeNonNeg, vars.largestGoodSlope) = updateSlope(
|
|
466
|
+
comp,
|
|
467
|
+
market.totalPt,
|
|
468
|
+
vars.netPtInGuess,
|
|
469
|
+
vars.largestGoodSlope
|
|
470
|
+
);
|
|
471
|
+
if (!vars.isSlopeNonNeg) {
|
|
472
|
+
approx.guessMax = vars.netPtInGuess;
|
|
473
|
+
continue;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
(vars.assetToAccount, vars.assetToReserve) = market.calcTrade(
|
|
477
|
+
comp,
|
|
478
|
+
vars.netPtInGuess.neg()
|
|
479
|
+
);
|
|
480
|
+
|
|
481
|
+
vars.netAssetOut = vars.assetToAccount.Uint();
|
|
482
|
+
vars.netPtRemaining = netPtAdded - vars.netPtInGuess;
|
|
483
|
+
vars.newTotalPt = market.totalPt.Uint() + vars.netPtInGuess;
|
|
484
|
+
vars.newTotalAsset = (comp.totalAsset - vars.assetToAccount - vars.assetToReserve)
|
|
485
|
+
.Uint();
|
|
486
|
+
|
|
487
|
+
// it is desired that
|
|
488
|
+
// netAssetOut / newTotalAsset = netPtRemaining / newTotalPt
|
|
489
|
+
// which is equivalent to
|
|
490
|
+
// netAssetOut * newTotalPt = netPtRemaining * newTotalAsset
|
|
491
|
+
|
|
492
|
+
vars.assetNumerator = vars.netAssetOut * vars.newTotalPt;
|
|
493
|
+
vars.ptNumerator = vars.netPtRemaining * vars.newTotalAsset;
|
|
494
|
+
|
|
495
|
+
if (Math.isAApproxB(vars.assetNumerator, vars.ptNumerator, approx.eps)) {
|
|
496
|
+
return (
|
|
497
|
+
vars.netPtInGuess,
|
|
498
|
+
index.assetToScy(vars.netAssetOut),
|
|
499
|
+
index.assetToScy(vars.assetToReserve.Uint())
|
|
500
|
+
);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
if (vars.assetNumerator <= vars.ptNumerator) {
|
|
504
|
+
// needs more asset --> swap more PT
|
|
505
|
+
approx.guessMin = vars.netPtInGuess + 1;
|
|
506
|
+
} else {
|
|
507
|
+
// needs less asset --> swap less PT
|
|
508
|
+
approx.guessMax = vars.netPtInGuess - 1;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
unchecked {
|
|
512
|
+
++iter;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
revert("approx fail");
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
struct VarsSwapScyToAddLiquidity {
|
|
519
|
+
uint256 netAssetAdded;
|
|
520
|
+
uint256 ptOutGuess;
|
|
521
|
+
int256 assetToAccount;
|
|
522
|
+
int256 assetToReserve;
|
|
523
|
+
uint256 netAssetIn;
|
|
524
|
+
uint256 netAssetRemaining;
|
|
525
|
+
uint256 newTotalPt;
|
|
526
|
+
uint256 newTotalAsset;
|
|
527
|
+
uint256 ptNumerator;
|
|
528
|
+
uint256 assetNumerator;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
function approxSwapScyToAddLiquidity(
|
|
532
|
+
MarketState memory market,
|
|
533
|
+
PYIndex index,
|
|
534
|
+
uint256 netScyAdded,
|
|
535
|
+
uint256 blockTime,
|
|
536
|
+
ApproxParams memory approx
|
|
537
|
+
)
|
|
538
|
+
internal
|
|
539
|
+
pure
|
|
540
|
+
returns (
|
|
541
|
+
uint256, /*netPtOut*/
|
|
542
|
+
uint256, /*netScyIn*/
|
|
543
|
+
uint256 /*netScyToReserve*/
|
|
544
|
+
)
|
|
545
|
+
{
|
|
546
|
+
/*
|
|
547
|
+
The algorithm is essentially to:
|
|
548
|
+
1. Binary search netPtOut (therefore netScyIn)
|
|
549
|
+
2. Swap netScyIn for netPtOut
|
|
550
|
+
3. Use netPtOut and (netScyAdded - netScyIn) to mint LP
|
|
551
|
+
4. If netPtOut / (netScyAdded - netScyIn) ratio is close enough to the market's PT/SCY ratio
|
|
552
|
+
=> answer found
|
|
553
|
+
|
|
554
|
+
Note that market maintains PT/SCY ratio, but here PT/asset is used instead
|
|
555
|
+
*/
|
|
556
|
+
require(market.totalLp != 0, "no existing lp");
|
|
557
|
+
|
|
558
|
+
VarsSwapScyToAddLiquidity memory vars;
|
|
559
|
+
MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
|
|
560
|
+
if (approx.guessMax == type(uint256).max) {
|
|
561
|
+
approx.guessMax = calcMaxPtOut(market.totalPt, comp);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
require(isValidApproxParams(approx), "invalid approx");
|
|
565
|
+
|
|
566
|
+
vars.netAssetAdded = index.scyToAsset(netScyAdded);
|
|
567
|
+
|
|
568
|
+
for (uint256 iter = 0; iter < approx.maxIteration; ) {
|
|
569
|
+
vars.ptOutGuess = getCurrentGuess(iter, approx);
|
|
570
|
+
(vars.assetToAccount, vars.assetToReserve) = market.calcTrade(
|
|
571
|
+
comp,
|
|
572
|
+
vars.ptOutGuess.Int()
|
|
573
|
+
);
|
|
574
|
+
|
|
575
|
+
vars.netAssetIn = vars.assetToAccount.abs();
|
|
576
|
+
|
|
577
|
+
if (vars.netAssetIn > vars.netAssetAdded) {
|
|
578
|
+
approx.guessMax = vars.ptOutGuess - 1;
|
|
579
|
+
unchecked {
|
|
580
|
+
++iter;
|
|
581
|
+
}
|
|
582
|
+
continue;
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
vars.netAssetRemaining = vars.netAssetAdded - vars.netAssetIn;
|
|
586
|
+
vars.newTotalPt = market.totalPt.Uint() - vars.ptOutGuess;
|
|
587
|
+
vars.newTotalAsset = (comp.totalAsset - vars.assetToAccount - vars.assetToReserve)
|
|
588
|
+
.Uint();
|
|
589
|
+
|
|
590
|
+
// it is desired that
|
|
591
|
+
// ptOutGuess / newTotalPt = netAssetRemaining / newTotalAsset
|
|
592
|
+
// which is equivalent to
|
|
593
|
+
// ptOutGuess * newTotalAsset = netAssetRemaining * newTotalPt
|
|
594
|
+
|
|
595
|
+
vars.ptNumerator = vars.ptOutGuess * vars.newTotalAsset;
|
|
596
|
+
vars.assetNumerator = vars.netAssetRemaining * vars.newTotalPt;
|
|
597
|
+
|
|
598
|
+
if (Math.isAApproxB(vars.ptNumerator, vars.assetNumerator, approx.eps)) {
|
|
599
|
+
return (
|
|
600
|
+
vars.ptOutGuess,
|
|
601
|
+
index.assetToScy(vars.netAssetIn),
|
|
602
|
+
index.assetToScy(vars.assetToReserve.Uint())
|
|
603
|
+
);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
if (vars.ptNumerator <= vars.assetNumerator) {
|
|
607
|
+
// needs more PT
|
|
608
|
+
approx.guessMin = vars.ptOutGuess + 1;
|
|
609
|
+
} else {
|
|
610
|
+
// needs less PT
|
|
611
|
+
approx.guessMax = vars.ptOutGuess - 1;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
unchecked {
|
|
615
|
+
++iter;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
revert("approx fail");
|
|
619
|
+
}
|
|
620
|
+
|
|
408
621
|
function updateSlope(
|
|
409
622
|
MarketPreCompute memory comp,
|
|
410
623
|
int256 totalPt,
|
|
411
624
|
uint256 ptInGuess,
|
|
412
625
|
uint256 largestGoodSlope
|
|
413
|
-
) internal pure returns (bool isSlopeNonNeg, uint256
|
|
626
|
+
) internal pure returns (bool isSlopeNonNeg, uint256 newLargestGoodSlope) {
|
|
414
627
|
if (ptInGuess <= largestGoodSlope) {
|
|
415
628
|
return (true, largestGoodSlope);
|
|
416
629
|
}
|
|
417
|
-
// it's not guaranteed that the current
|
|
630
|
+
// it's not guaranteed that the current slope is good
|
|
418
631
|
// we therefore have to recalculate the slope
|
|
419
632
|
int256 slope = slopeFactor(totalPt, ptInGuess.neg(), comp);
|
|
420
633
|
if (slope >= 0) return (true, ptInGuess);
|
|
@@ -10,17 +10,14 @@ struct MarketState {
|
|
|
10
10
|
int256 totalPt;
|
|
11
11
|
int256 totalScy;
|
|
12
12
|
int256 totalLp;
|
|
13
|
-
uint256 oracleRate;
|
|
14
13
|
address treasury;
|
|
15
14
|
/// immutable variables ///
|
|
16
15
|
int256 scalarRoot;
|
|
17
16
|
uint256 lnFeeRateRoot;
|
|
18
|
-
uint256 rateOracleTimeWindow;
|
|
19
17
|
uint256 expiry;
|
|
20
18
|
uint256 reserveFeePercent; // base 100
|
|
21
19
|
/// last trade data ///
|
|
22
20
|
uint256 lastLnImpliedRate;
|
|
23
|
-
uint256 lastTradeTime;
|
|
24
21
|
}
|
|
25
22
|
|
|
26
23
|
// params that are expensive to compute, therefore we pre-compute them
|
|
@@ -317,8 +314,6 @@ library MarketMathCore {
|
|
|
317
314
|
) internal pure {
|
|
318
315
|
uint256 timeToExpiry = market.expiry - blockTime;
|
|
319
316
|
|
|
320
|
-
market.lastTradeTime = blockTime;
|
|
321
|
-
|
|
322
317
|
market.totalPt = market.totalPt.subNoNeg(netPtToAccount);
|
|
323
318
|
market.totalScy = market.totalScy.subNoNeg(netScyToAccount + netScyToReserve);
|
|
324
319
|
|
|
@@ -448,32 +443,4 @@ library MarketMathCore {
|
|
|
448
443
|
timeToExpiry
|
|
449
444
|
);
|
|
450
445
|
}
|
|
451
|
-
|
|
452
|
-
function getNewRateOracle(MarketState memory market, uint256 blockTime)
|
|
453
|
-
internal
|
|
454
|
-
pure
|
|
455
|
-
returns (uint256)
|
|
456
|
-
{
|
|
457
|
-
// This can occur when using a view function get to a market state in the past
|
|
458
|
-
if (market.lastTradeTime > blockTime) {
|
|
459
|
-
return market.lastLnImpliedRate;
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
uint256 timeDiff = blockTime - market.lastTradeTime;
|
|
463
|
-
if (timeDiff > market.rateOracleTimeWindow) {
|
|
464
|
-
// If past the time window just return the market.lastLnImpliedRate
|
|
465
|
-
return market.lastLnImpliedRate;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
// (currentTs - previousTs) / timeWindow
|
|
469
|
-
uint256 lastTradeWeight = timeDiff.divDown(market.rateOracleTimeWindow);
|
|
470
|
-
|
|
471
|
-
// 1 - (currentTs - previousTs) / timeWindow
|
|
472
|
-
uint256 oracleWeight = Math.ONE - lastTradeWeight;
|
|
473
|
-
|
|
474
|
-
uint256 newOracleRate = market.lastLnImpliedRate.mulDown(lastTradeWeight) +
|
|
475
|
-
market.oracleRate.mulDown(oracleWeight);
|
|
476
|
-
|
|
477
|
-
return newOracleRate;
|
|
478
|
-
}
|
|
479
446
|
}
|