@pendle/core-v2 0.10.5-testnet → 0.11.1-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/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/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/PendleSAvaxSCY.sol/PendleSAvaxSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +1 -1
- package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultSCY.sol/PendleYearnVaultSCY.dbg.json +1 -1
- 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/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/FeeDistributorVePendle.sol/FeeDistributorVePendle.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/FeeDistributorVePendle.sol/FeeDistributorVePendle.json +188 -0
- package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorAbstract.sol/PendleFeeDistributorAbstract.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorAbstract.sol/PendleFeeDistributorAbstract.json +164 -0
- package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorVoting.sol/PendleFeeDistributorVoting.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorVoting.sol/PendleFeeDistributorVoting.json +206 -0
- package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorVotingFactory.sol/PendleFeeDistributorVotingFactory.dbg.json +4 -0
- package/build/artifacts/contracts/core/LiquidityMining/FeeDistributor/PendleFeeDistributorVotingFactory.sol/PendleFeeDistributorVotingFactory.json +149 -0
- package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
- 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 +2 -2
- 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 +2 -2
- 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 +62 -14
- 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 +192 -12
- 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 +51 -8
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +2 -2
- package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +33 -8
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +2 -2
- package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +1 -1
- package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
- 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/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +3 -3
- 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 +1 -1
- package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.json +2 -2
- package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.json +2 -2
- package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.json +2 -2
- package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.json +2 -2
- package/build/artifacts/contracts/core/actions/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
- package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IAavePool.sol/IAavePool.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IAaveRewardsController.sol/IAaveRewardsController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/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 +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPFeeDistributor.sol/IPFeeDistributor.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/IPFeeDistributor.sol/IPFeeDistributor.json +151 -0
- package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/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 +25 -0
- package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarketSwapCallback.sol/IPMarketSwapCallback.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.json +124 -0
- package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.json +86 -0
- package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/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/IRewardManager.sol/IRewardManager.dbg.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/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 +1 -1
- package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/SCY/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/VeHistoryLib.sol/Checkpoints.json +2 -2
- package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/helpers/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/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/MarketApproxPtInLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
- package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
- 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/math/WeekMath.sol/WeekMath.json +2 -2
- package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +2 -2
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +2 -2
- package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.dbg.json +1 -1
- package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.dbg.json +1 -1
- package/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol +0 -1
- package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +1 -1
- package/contracts/core/LiquidityMining/PendleGauge.sol +1 -1
- package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +1 -2
- package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +2 -2
- package/contracts/core/Market/PendleMarket.sol +32 -19
- package/contracts/core/Market/PendleMarketFactory.sol +11 -16
- package/contracts/core/PendleRouter.sol +1 -3
- package/contracts/core/YieldContracts/PendlePrincipalToken.sol +1 -1
- package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +5 -5
- package/contracts/core/actions/ActionAddRemoveLiq.sol +41 -21
- package/contracts/interfaces/IPGauge.sol +2 -0
- package/contracts/interfaces/IPGaugeController.sol +1 -1
- package/contracts/interfaces/IPMarket.sol +16 -4
- package/contracts/interfaces/IPMarketFactory.sol +1 -1
- package/contracts/interfaces/ISJoe.sol +3 -6
- package/contracts/libraries/kyberswap/AggregationRouterHelper.sol +308 -0
- package/contracts/libraries/kyberswap/IMultihopRouter.sol +139 -0
- package/contracts/libraries/kyberswap/KyberSwapHelper.sol +7 -1
- package/contracts/libraries/math/WeekMath.sol +1 -1
- package/contracts/offchain-helpers/RouterStatic.sol +5 -5
- package/contracts/offchain-helpers/SSTORE2DeployerContract.sol +21 -0
- package/contracts/periphery/BoringOwnableUpgradeable.sol +2 -2
- package/deployments/43113-core.json +8 -7
- package/deployments/43113-markets/benqi-market-QI-USDC-FEB-2ND.json +8 -0
- package/deployments/43113-markets/benqi-market-QI-USDC-SEP-22TH.json +8 -0
- package/deployments/43113-markets/benqi-market-QI-WETH-DEC-1ST.json +8 -0
- package/deployments/43113-testenv.json +1 -1
- package/deployments/80001-core.json +4 -4
- package/package.json +4 -5
- package/typechain-types/ActionAddRemoveLiq.ts +1 -1
- package/typechain-types/FeeDistributorAbstract.ts +240 -0
- package/typechain-types/FeeDistributorVePendle.ts +302 -0
- package/typechain-types/FeeDistributorVoting.ts +272 -0
- package/typechain-types/FeeDistributorVotingFactory.ts +293 -0
- package/typechain-types/IPFeeDistributor.ts +270 -0
- package/typechain-types/IPMarket.ts +32 -5
- package/typechain-types/IPVotingController.ts +205 -7
- package/typechain-types/IPVotingControllerStorage.ts +169 -0
- package/typechain-types/IPVotingEscrow.ts +117 -0
- package/typechain-types/PendleFeeDistributorAbstract.ts +289 -0
- package/typechain-types/PendleFeeDistributorVoting.ts +321 -0
- package/typechain-types/PendleFeeDistributorVotingFactory.ts +294 -0
- package/typechain-types/PendleMarket.ts +32 -5
- package/typechain-types/PendleVotingControllerUpg.ts +73 -24
- package/typechain-types/VotingControllerStorageUpg.ts +207 -27
- package/typechain-types/VotingEscrowPendleMainchain.ts +57 -13
- package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +2 -2
- package/typechain-types/factories/ActionCallback__factory.ts +1 -1
- package/typechain-types/factories/ActionMintRedeem__factory.ts +1 -1
- package/typechain-types/factories/ActionMisc__factory.ts +1 -1
- package/typechain-types/factories/ActionSwapPT__factory.ts +1 -1
- package/typechain-types/factories/ActionSwapYT__factory.ts +1 -1
- package/typechain-types/factories/FeeDistributorAbstract__factory.ts +127 -0
- package/typechain-types/factories/FeeDistributorVePendle__factory.ts +250 -0
- package/typechain-types/factories/FeeDistributorVotingFactory__factory.ts +211 -0
- package/typechain-types/factories/FeeDistributorVoting__factory.ts +219 -0
- package/typechain-types/factories/IPFeeDistributor__factory.ts +166 -0
- package/typechain-types/factories/IPMarket__factory.ts +25 -0
- package/typechain-types/factories/IPVotingControllerStorage__factory.ts +107 -0
- package/typechain-types/factories/IPVotingController__factory.ts +124 -0
- package/typechain-types/factories/IPVotingEscrow__factory.ts +86 -0
- package/typechain-types/factories/MarketMathStatic__factory.ts +1 -1
- package/typechain-types/factories/PendleFeeDistributorAbstract__factory.ts +183 -0
- package/typechain-types/factories/PendleFeeDistributorVotingFactory__factory.ts +213 -0
- package/typechain-types/factories/PendleFeeDistributorVoting__factory.ts +275 -0
- package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +1 -1
- package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
- package/typechain-types/factories/PendleMarket__factory.ts +26 -1
- package/typechain-types/factories/PendleSJoeSCY__factory.ts +1 -1
- package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +61 -13
- package/typechain-types/factories/RouterStatic__factory.ts +1 -1
- package/typechain-types/factories/VotingControllerStorageUpg__factory.ts +192 -12
- package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +50 -7
- package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +1 -1
- package/typechain-types/hardhat.d.ts +54 -0
- package/typechain-types/index.ts +12 -0
- package/contracts/periphery/PendleGovernanceManager.sol +0 -38
- package/contracts/periphery/PermissionsV2Upg.sol +0 -29
- package/deployments/43113-markets/benqi-market-35237d.json +0 -8
- package/deployments/43113-markets/benqi-market-438DAA.json +0 -8
- package/deployments/43113-markets/benqi-market-590025.json +0 -8
- package/deployments/43113-markets/benqi-market-a45e40.json +0 -8
- package/deployments/43113-markets/benqi-market-c93916.json +0 -8
- package/deployments/80001-markets/benqi-market-3b8BD1.json +0 -8
- package/deployments/80001-markets/benqi-market-b61e7f.json +0 -8
|
@@ -29,7 +29,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
29
29
|
external
|
|
30
30
|
returns (
|
|
31
31
|
uint256 netLpOut,
|
|
32
|
-
uint256
|
|
32
|
+
uint256 netScyUsed,
|
|
33
33
|
uint256 netPtUsed
|
|
34
34
|
)
|
|
35
35
|
{
|
|
@@ -37,7 +37,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
37
37
|
.readTokens();
|
|
38
38
|
|
|
39
39
|
MarketState memory state = IPMarket(market).readState();
|
|
40
|
-
(, netLpOut,
|
|
40
|
+
(, netLpOut, netScyUsed, netPtUsed) = state.addLiquidity(
|
|
41
41
|
YT.newIndex(),
|
|
42
42
|
netScyDesired,
|
|
43
43
|
netPtDesired,
|
|
@@ -47,14 +47,21 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
47
47
|
// early-check
|
|
48
48
|
require(netLpOut >= minLpOut, "insufficient lp out");
|
|
49
49
|
|
|
50
|
-
IERC20(SCY).safeTransferFrom(msg.sender, market,
|
|
50
|
+
IERC20(SCY).safeTransferFrom(msg.sender, market, netScyUsed);
|
|
51
51
|
IERC20(PT).safeTransferFrom(msg.sender, market, netPtUsed);
|
|
52
52
|
|
|
53
|
-
netLpOut = IPMarket(market).mint(receiver);
|
|
53
|
+
(netLpOut, , ) = IPMarket(market).mint(receiver, netScyUsed, netPtUsed);
|
|
54
54
|
|
|
55
55
|
// fail-safe
|
|
56
56
|
require(netLpOut >= minLpOut, "FS insufficient lp out");
|
|
57
|
-
emit AddLiquidityDualScyAndPt(
|
|
57
|
+
emit AddLiquidityDualScyAndPt(
|
|
58
|
+
msg.sender,
|
|
59
|
+
market,
|
|
60
|
+
receiver,
|
|
61
|
+
netScyUsed,
|
|
62
|
+
netPtUsed,
|
|
63
|
+
netLpOut
|
|
64
|
+
);
|
|
58
65
|
}
|
|
59
66
|
|
|
60
67
|
function addLiquidityDualTokenAndPt(
|
|
@@ -77,11 +84,11 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
77
84
|
.readTokens();
|
|
78
85
|
|
|
79
86
|
uint256 netScyDesired = SCY.previewDeposit(tokenIn, netTokenDesired);
|
|
80
|
-
uint256
|
|
87
|
+
uint256 netScyUsed;
|
|
81
88
|
|
|
82
89
|
{
|
|
83
90
|
MarketState memory state = IPMarket(market).readState();
|
|
84
|
-
(, netLpOut,
|
|
91
|
+
(, netLpOut, netScyUsed, netPtUsed) = state.addLiquidity(
|
|
85
92
|
YT.newIndex(),
|
|
86
93
|
netScyDesired,
|
|
87
94
|
netPtDesired,
|
|
@@ -95,19 +102,19 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
95
102
|
IERC20(PT).safeTransferFrom(msg.sender, market, netPtUsed);
|
|
96
103
|
|
|
97
104
|
// convert tokenIn to SCY to deposit
|
|
98
|
-
netTokenUsed = (netTokenDesired *
|
|
105
|
+
netTokenUsed = (netTokenDesired * netScyUsed).rawDivUp(netScyDesired);
|
|
99
106
|
|
|
100
107
|
if (tokenIn == NATIVE) {
|
|
101
108
|
_transferIn(tokenIn, msg.sender, netTokenDesired);
|
|
102
|
-
SCY.deposit{ value: netTokenUsed }(market, tokenIn, netTokenUsed,
|
|
109
|
+
SCY.deposit{ value: netTokenUsed }(market, tokenIn, netTokenUsed, netScyUsed);
|
|
103
110
|
_transferOut(tokenIn, msg.sender, netTokenDesired - netTokenUsed);
|
|
104
111
|
} else {
|
|
105
112
|
_transferIn(tokenIn, msg.sender, netTokenUsed);
|
|
106
113
|
_safeApproveInf(tokenIn, address(SCY));
|
|
107
|
-
SCY.deposit(market, tokenIn, netTokenUsed,
|
|
114
|
+
SCY.deposit(market, tokenIn, netTokenUsed, netScyUsed);
|
|
108
115
|
}
|
|
109
116
|
|
|
110
|
-
netLpOut = IPMarket(market).mint(receiver);
|
|
117
|
+
(netLpOut, , ) = IPMarket(market).mint(receiver, netScyUsed, netPtUsed);
|
|
111
118
|
// fail-safe
|
|
112
119
|
require(netLpOut >= minLpOut, "FS insufficient lp out");
|
|
113
120
|
|
|
@@ -142,8 +149,12 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
142
149
|
|
|
143
150
|
IERC20(PT).safeTransferFrom(msg.sender, market, netPtIn);
|
|
144
151
|
|
|
145
|
-
|
|
146
|
-
|
|
152
|
+
(uint256 netScyReceived, ) = IPMarket(market).swapExactPtForScy(
|
|
153
|
+
market,
|
|
154
|
+
netPtSwap,
|
|
155
|
+
EMPTY_BYTES
|
|
156
|
+
); // ignore return, receiver = market
|
|
157
|
+
(netLpOut, , ) = IPMarket(market).mint(receiver, netScyReceived, netPtIn - netPtSwap);
|
|
147
158
|
|
|
148
159
|
require(netLpOut >= minLpOut, "insufficient lp out");
|
|
149
160
|
|
|
@@ -212,7 +223,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
212
223
|
) external returns (uint256 netScyOut, uint256 netPtOut) {
|
|
213
224
|
IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
|
|
214
225
|
|
|
215
|
-
(netScyOut, netPtOut) = IPMarket(market).burn(receiver, receiver);
|
|
226
|
+
(netScyOut, netPtOut) = IPMarket(market).burn(receiver, receiver, netLpToRemove);
|
|
216
227
|
|
|
217
228
|
require(netScyOut >= minScyOut, "insufficient SCY out");
|
|
218
229
|
require(netPtOut >= minPtOut, "insufficient PT out");
|
|
@@ -239,7 +250,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
239
250
|
|
|
240
251
|
IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
|
|
241
252
|
|
|
242
|
-
(, netPtOut) = IPMarket(market).burn(address(SCY), receiver);
|
|
253
|
+
(, netPtOut) = IPMarket(market).burn(address(SCY), receiver, netLpToRemove);
|
|
243
254
|
|
|
244
255
|
netTokenOut = SCY.redeemAfterTransfer(receiver, tokenOut, minTokenOut);
|
|
245
256
|
|
|
@@ -279,7 +290,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
279
290
|
// early-check
|
|
280
291
|
require(ptFromBurn + ptFromSwap >= minPtOut, "insufficient lp out");
|
|
281
292
|
|
|
282
|
-
(, ptFromBurn) = IPMarket(market).burn(market, receiver);
|
|
293
|
+
(, ptFromBurn) = IPMarket(market).burn(market, receiver, netLpToRemove);
|
|
283
294
|
IPMarket(market).swapScyForExactPt(receiver, ptFromSwap, EMPTY_BYTES); // ignore return
|
|
284
295
|
|
|
285
296
|
// fail-safe
|
|
@@ -296,7 +307,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
296
307
|
uint256 minScyOut
|
|
297
308
|
) external returns (uint256 netScyOut) {
|
|
298
309
|
IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
|
|
299
|
-
netScyOut = _removeLiquiditySingleScy(receiver, market, minScyOut);
|
|
310
|
+
netScyOut = _removeLiquiditySingleScy(receiver, market, netLpToRemove, minScyOut);
|
|
300
311
|
emit RemoveLiquiditySingleScy(msg.sender, market, receiver, netLpToRemove, netScyOut);
|
|
301
312
|
}
|
|
302
313
|
|
|
@@ -311,7 +322,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
311
322
|
IERC20(market).safeTransferFrom(msg.sender, market, netLpToRemove);
|
|
312
323
|
|
|
313
324
|
// all output SCY is directly transferred to the SCY contract
|
|
314
|
-
uint256 netScyReceived = _removeLiquiditySingleScy(address(SCY), market, 1);
|
|
325
|
+
uint256 netScyReceived = _removeLiquiditySingleScy(address(SCY), market, netLpToRemove, 1);
|
|
315
326
|
|
|
316
327
|
// since all SCY is already at the SCY contract, doPull = false
|
|
317
328
|
netTokenOut = _redeemScyToToken(receiver, address(SCY), netScyReceived, output, false);
|
|
@@ -343,8 +354,12 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
343
354
|
guessPtReceivedFromScy
|
|
344
355
|
);
|
|
345
356
|
|
|
346
|
-
|
|
347
|
-
|
|
357
|
+
(uint256 netScySwapped, ) = IPMarket(market).swapScyForExactPt(
|
|
358
|
+
market,
|
|
359
|
+
netPtReceived,
|
|
360
|
+
EMPTY_BYTES
|
|
361
|
+
); // ignore return, receiver = market
|
|
362
|
+
(netLpOut, , ) = IPMarket(market).mint(receiver, netScyIn - netScySwapped, netPtReceived);
|
|
348
363
|
|
|
349
364
|
require(netLpOut >= minLpOut, "insufficient lp out");
|
|
350
365
|
}
|
|
@@ -352,9 +367,14 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
|
|
|
352
367
|
function _removeLiquiditySingleScy(
|
|
353
368
|
address receiver,
|
|
354
369
|
address market,
|
|
370
|
+
uint256 netLpToRemove,
|
|
355
371
|
uint256 minScyOut
|
|
356
372
|
) internal returns (uint256 netScyOut) {
|
|
357
|
-
(uint256 scyFromBurn, uint256 ptFromBurn) = IPMarket(market).burn(
|
|
373
|
+
(uint256 scyFromBurn, uint256 ptFromBurn) = IPMarket(market).burn(
|
|
374
|
+
receiver,
|
|
375
|
+
market,
|
|
376
|
+
netLpToRemove
|
|
377
|
+
);
|
|
358
378
|
(uint256 scyFromSwap, ) = IPMarket(market).swapExactPtForScy(
|
|
359
379
|
receiver,
|
|
360
380
|
ptFromBurn,
|
|
@@ -38,11 +38,23 @@ interface IPMarket is IERC20Metadata, IPGauge {
|
|
|
38
38
|
uint16 observationCardinalityNextNew
|
|
39
39
|
);
|
|
40
40
|
|
|
41
|
-
function mint(
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
function mint(
|
|
42
|
+
address receiver,
|
|
43
|
+
uint256 netScyDesired,
|
|
44
|
+
uint256 netPtDesired
|
|
45
|
+
)
|
|
44
46
|
external
|
|
45
|
-
returns (
|
|
47
|
+
returns (
|
|
48
|
+
uint256 netLpOut,
|
|
49
|
+
uint256 netScyUsed,
|
|
50
|
+
uint256 netPtUsed
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
function burn(
|
|
54
|
+
address receiverScy,
|
|
55
|
+
address receiverPt,
|
|
56
|
+
uint256 netLpToBurn
|
|
57
|
+
) external returns (uint256 netScyOut, uint256 netPtOut);
|
|
46
58
|
|
|
47
59
|
function swapExactPtForScy(
|
|
48
60
|
address receiver,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
2
|
pragma solidity 0.8.15;
|
|
3
3
|
|
|
4
|
-
import "@openzeppelin/contracts
|
|
4
|
+
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
5
5
|
|
|
6
6
|
interface ISJoe {
|
|
7
7
|
function joe() external view returns (address);
|
|
@@ -23,7 +23,7 @@ interface ISJoe {
|
|
|
23
23
|
* @return The amount of JOE user has deposited
|
|
24
24
|
* @return The reward debt for the chosen token
|
|
25
25
|
*/
|
|
26
|
-
function getUserInfo(address _user,
|
|
26
|
+
function getUserInfo(address _user, IERC20 _rewardToken)
|
|
27
27
|
external
|
|
28
28
|
view
|
|
29
29
|
returns (uint256, uint256);
|
|
@@ -42,10 +42,7 @@ interface ISJoe {
|
|
|
42
42
|
* @param _token The address of the token
|
|
43
43
|
* @return `_user`'s pending reward token
|
|
44
44
|
*/
|
|
45
|
-
function pendingReward(address _user,
|
|
46
|
-
external
|
|
47
|
-
view
|
|
48
|
-
returns (uint256);
|
|
45
|
+
function pendingReward(address _user, IERC20 _token) external view returns (uint256);
|
|
49
46
|
|
|
50
47
|
/**
|
|
51
48
|
* @notice Withdraw JOE and harvest the rewards
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.15;
|
|
4
|
+
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
5
|
+
import "./IMultihopRouter.sol";
|
|
6
|
+
|
|
7
|
+
library AggregationRouterHelper {
|
|
8
|
+
uint256 private constant _PARTIAL_FILL = 0x01;
|
|
9
|
+
uint256 private constant _REQUIRES_EXTRA_ETH = 0x02;
|
|
10
|
+
uint256 private constant _SHOULD_CLAIM = 0x04;
|
|
11
|
+
uint256 private constant _BURN_FROM_MSG_SENDER = 0x08;
|
|
12
|
+
uint256 private constant _BURN_FROM_TX_ORIGIN = 0x10;
|
|
13
|
+
uint256 private constant _SIMPLE_SWAP = 0x20;
|
|
14
|
+
|
|
15
|
+
uint256 private constant SLIPPAGE_RANGE = 10; // over 100
|
|
16
|
+
|
|
17
|
+
enum DexType {
|
|
18
|
+
UNI,
|
|
19
|
+
STABLESWAP,
|
|
20
|
+
CURVE,
|
|
21
|
+
KYBERDMM,
|
|
22
|
+
SADDLE,
|
|
23
|
+
UNIV3PROMM,
|
|
24
|
+
BALANCERV2,
|
|
25
|
+
KYBERRFQ,
|
|
26
|
+
DODO,
|
|
27
|
+
VELODROME,
|
|
28
|
+
PLATYPUS
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
struct SwapDescription {
|
|
32
|
+
IERC20 srcToken;
|
|
33
|
+
IERC20 dstToken;
|
|
34
|
+
address[] srcReceivers;
|
|
35
|
+
uint256[] srcAmounts;
|
|
36
|
+
address dstReceiver;
|
|
37
|
+
uint256 amount;
|
|
38
|
+
uint256 minReturnAmount;
|
|
39
|
+
uint256 flags;
|
|
40
|
+
bytes permit;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
struct SimpleSwapData {
|
|
44
|
+
address[] firstPools;
|
|
45
|
+
uint256[] firstSwapAmounts;
|
|
46
|
+
bytes[] swapDatas;
|
|
47
|
+
uint256 deadline;
|
|
48
|
+
bytes destTokenFeeData;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
struct SwapExecutorDescription {
|
|
52
|
+
IMultihopRouter.Swap[][] swapSequences;
|
|
53
|
+
address tokenIn;
|
|
54
|
+
address tokenOut;
|
|
55
|
+
uint256 minTotalAmountOut;
|
|
56
|
+
address to;
|
|
57
|
+
uint256 deadline;
|
|
58
|
+
bytes destTokenFeeData;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function getScaledInputData(bytes calldata kybercall, uint256 newAmount)
|
|
62
|
+
external
|
|
63
|
+
pure
|
|
64
|
+
returns (bytes memory)
|
|
65
|
+
{
|
|
66
|
+
bytes4 selector = bytes4(kybercall[:4]);
|
|
67
|
+
(
|
|
68
|
+
address caller,
|
|
69
|
+
SwapDescription memory desc,
|
|
70
|
+
bytes memory executorData,
|
|
71
|
+
bytes memory clientData
|
|
72
|
+
) = abi.decode(kybercall[4:], (address, SwapDescription, bytes, bytes));
|
|
73
|
+
|
|
74
|
+
(desc, executorData) = _getScaledInputData(desc, executorData, newAmount);
|
|
75
|
+
return abi.encodeWithSelector(selector, caller, desc, executorData, clientData);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function _getScaledInputData(
|
|
79
|
+
SwapDescription memory desc,
|
|
80
|
+
bytes memory executorData,
|
|
81
|
+
uint256 newAmount
|
|
82
|
+
) internal pure returns (SwapDescription memory, bytes memory) {
|
|
83
|
+
uint256 flags = desc.flags;
|
|
84
|
+
uint256 oldAmount = desc.amount;
|
|
85
|
+
if (oldAmount == newAmount) {
|
|
86
|
+
return (desc, executorData);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//if the difference of newAmount and oldAmount > 5%, revert
|
|
90
|
+
require(
|
|
91
|
+
(oldAmount * (100 - SLIPPAGE_RANGE)) / 100 <= newAmount &&
|
|
92
|
+
newAmount <= (oldAmount * (100 + SLIPPAGE_RANGE)) / 100,
|
|
93
|
+
"kyber: difference too large"
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
// simple mode swap
|
|
97
|
+
if (flags & _SIMPLE_SWAP != 0) {
|
|
98
|
+
require(desc.srcReceivers.length == 0, "kyber: can't scale if take fee");
|
|
99
|
+
return (
|
|
100
|
+
_getNewDescription(desc, oldAmount, newAmount),
|
|
101
|
+
_getNewSimpleSwapData(executorData, oldAmount, newAmount)
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
//normal mode swap
|
|
106
|
+
bytes memory newExecutorData = _getNewExecutorData(executorData, oldAmount, newAmount);
|
|
107
|
+
return (_getNewDescription(desc, oldAmount, newAmount), newExecutorData);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function _getNewDescription(
|
|
111
|
+
SwapDescription memory desc,
|
|
112
|
+
uint256 oldAmount,
|
|
113
|
+
uint256 newAmount
|
|
114
|
+
) internal pure returns (SwapDescription memory) {
|
|
115
|
+
uint256 oldMinReturnAmount = desc.minReturnAmount;
|
|
116
|
+
desc.minReturnAmount = (desc.minReturnAmount * newAmount) / oldAmount;
|
|
117
|
+
//newMinReturnAmount should no be 0 if oldMinReturnAmount > 0
|
|
118
|
+
if (oldMinReturnAmount > 0 && desc.minReturnAmount == 0) desc.minReturnAmount = 1;
|
|
119
|
+
desc.amount = newAmount;
|
|
120
|
+
if (desc.srcReceivers.length == 0) {
|
|
121
|
+
return desc;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
uint256 newTotal;
|
|
125
|
+
for (uint256 i = 0; i < desc.srcReceivers.length; i++) {
|
|
126
|
+
if (i == desc.srcReceivers.length - 1) {
|
|
127
|
+
desc.srcAmounts[i] = newAmount - newTotal;
|
|
128
|
+
} else {
|
|
129
|
+
desc.srcAmounts[i] = (desc.srcAmounts[i] * newAmount) / oldAmount;
|
|
130
|
+
}
|
|
131
|
+
newTotal += desc.srcAmounts[i];
|
|
132
|
+
}
|
|
133
|
+
return desc;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function _getNewSimpleSwapData(
|
|
137
|
+
bytes memory data,
|
|
138
|
+
uint256 oldAmount,
|
|
139
|
+
uint256 newAmount
|
|
140
|
+
) internal pure returns (bytes memory) {
|
|
141
|
+
SimpleSwapData memory swapData = abi.decode(data, (SimpleSwapData));
|
|
142
|
+
uint256 numberSeq = swapData.firstPools.length;
|
|
143
|
+
uint256 newTotalSwapAmount;
|
|
144
|
+
for (uint256 i = 0; i < numberSeq; i++) {
|
|
145
|
+
if (i == numberSeq - 1) {
|
|
146
|
+
swapData.firstSwapAmounts[i] = newAmount - newTotalSwapAmount;
|
|
147
|
+
} else {
|
|
148
|
+
swapData.firstSwapAmounts[i] =
|
|
149
|
+
(swapData.firstSwapAmounts[i] * newAmount) /
|
|
150
|
+
oldAmount;
|
|
151
|
+
}
|
|
152
|
+
newTotalSwapAmount += swapData.firstSwapAmounts[i];
|
|
153
|
+
}
|
|
154
|
+
return abi.encode(swapData);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function _getNewExecutorData(
|
|
158
|
+
bytes memory data,
|
|
159
|
+
uint256 oldAmount,
|
|
160
|
+
uint256 newAmount
|
|
161
|
+
) internal pure returns (bytes memory) {
|
|
162
|
+
SwapExecutorDescription memory swapExecutorDescription = abi.decode(
|
|
163
|
+
data,
|
|
164
|
+
(SwapExecutorDescription)
|
|
165
|
+
);
|
|
166
|
+
swapExecutorDescription.minTotalAmountOut =
|
|
167
|
+
(swapExecutorDescription.minTotalAmountOut * newAmount) /
|
|
168
|
+
oldAmount;
|
|
169
|
+
|
|
170
|
+
uint256 newTotalSwapAmount;
|
|
171
|
+
for (uint256 i = 0; i < swapExecutorDescription.swapSequences.length; i++) {
|
|
172
|
+
IMultihopRouter.Swap memory swap = swapExecutorDescription.swapSequences[i][0];
|
|
173
|
+
uint8 dexType = uint8(swap.dexOption >> 8);
|
|
174
|
+
uint256 value;
|
|
175
|
+
if (i == swapExecutorDescription.swapSequences.length - 1)
|
|
176
|
+
value = newAmount - newTotalSwapAmount;
|
|
177
|
+
|
|
178
|
+
if (dexType == uint8(DexType.UNI)) {
|
|
179
|
+
(swap.data, value) = _newUniSwap(swap.data, value, oldAmount, newAmount);
|
|
180
|
+
} else if (dexType == uint8(DexType.STABLESWAP) || dexType == uint8(DexType.SADDLE)) {
|
|
181
|
+
(swap.data, value) = _newStableSwap(swap.data, value, oldAmount, newAmount);
|
|
182
|
+
} else if (dexType == uint8(DexType.CURVE)) {
|
|
183
|
+
(swap.data, value) = _newCurveSwap(swap.data, value, oldAmount, newAmount);
|
|
184
|
+
} else if (dexType == uint8(DexType.KYBERDMM)) {
|
|
185
|
+
(swap.data, value) = _newKyberDMMSwap(swap.data, value, oldAmount, newAmount);
|
|
186
|
+
} else if (dexType == uint8(DexType.UNIV3PROMM)) {
|
|
187
|
+
(swap.data, value) = _newUniV3ProMMSwap(swap.data, value, oldAmount, newAmount);
|
|
188
|
+
} else if (dexType == uint8(DexType.BALANCERV2)) {
|
|
189
|
+
(swap.data, value) = _newBalancerV2Swap(swap.data, value, oldAmount, newAmount);
|
|
190
|
+
} else if (dexType == uint8(DexType.KYBERRFQ)) {
|
|
191
|
+
revert("kyber: can't scale kyberrfq");
|
|
192
|
+
} else if (dexType == uint8(DexType.DODO)) {
|
|
193
|
+
(swap.data, value) = _newDODOSwap(swap.data, value, oldAmount, newAmount);
|
|
194
|
+
} else if (dexType == uint8(DexType.VELODROME)) {
|
|
195
|
+
(swap.data, value) = _newVelodromeSwap(swap.data, value, oldAmount, newAmount);
|
|
196
|
+
} else {
|
|
197
|
+
revert("AggregationExecutor: Dex type not supported");
|
|
198
|
+
}
|
|
199
|
+
newTotalSwapAmount += value;
|
|
200
|
+
}
|
|
201
|
+
return abi.encode(swapExecutorDescription);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function _newUniSwap(
|
|
205
|
+
bytes memory data,
|
|
206
|
+
uint256 value,
|
|
207
|
+
uint256 oldAmount,
|
|
208
|
+
uint256 newAmount
|
|
209
|
+
) internal pure returns (bytes memory, uint256) {
|
|
210
|
+
IMultihopRouter.UniSwap memory uniSwap = abi.decode(data, (IMultihopRouter.UniSwap));
|
|
211
|
+
if (value > 0) uniSwap.collectAmount = value;
|
|
212
|
+
else uniSwap.collectAmount = (uniSwap.collectAmount * newAmount) / oldAmount;
|
|
213
|
+
return (abi.encode(uniSwap), uniSwap.collectAmount);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function _newStableSwap(
|
|
217
|
+
bytes memory data,
|
|
218
|
+
uint256 value,
|
|
219
|
+
uint256 oldAmount,
|
|
220
|
+
uint256 newAmount
|
|
221
|
+
) internal pure returns (bytes memory, uint256) {
|
|
222
|
+
IMultihopRouter.StableSwap memory stableSwap = abi.decode(
|
|
223
|
+
data,
|
|
224
|
+
(IMultihopRouter.StableSwap)
|
|
225
|
+
);
|
|
226
|
+
if (value > 0) stableSwap.dx = value;
|
|
227
|
+
else stableSwap.dx = (stableSwap.dx * newAmount) / oldAmount;
|
|
228
|
+
return (abi.encode(stableSwap), stableSwap.dx);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
function _newCurveSwap(
|
|
232
|
+
bytes memory data,
|
|
233
|
+
uint256 value,
|
|
234
|
+
uint256 oldAmount,
|
|
235
|
+
uint256 newAmount
|
|
236
|
+
) internal pure returns (bytes memory, uint256) {
|
|
237
|
+
IMultihopRouter.CurveSwap memory curveSwap = abi.decode(data, (IMultihopRouter.CurveSwap));
|
|
238
|
+
if (value > 0) curveSwap.dx = value;
|
|
239
|
+
else curveSwap.dx = (curveSwap.dx * newAmount) / oldAmount;
|
|
240
|
+
return (abi.encode(curveSwap), curveSwap.dx);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
function _newKyberDMMSwap(
|
|
244
|
+
bytes memory data,
|
|
245
|
+
uint256 value,
|
|
246
|
+
uint256 oldAmount,
|
|
247
|
+
uint256 newAmount
|
|
248
|
+
) internal pure returns (bytes memory, uint256) {
|
|
249
|
+
IMultihopRouter.UniSwap memory kyberDMMSwap = abi.decode(data, (IMultihopRouter.UniSwap));
|
|
250
|
+
if (value > 0) kyberDMMSwap.collectAmount = value;
|
|
251
|
+
else kyberDMMSwap.collectAmount = (kyberDMMSwap.collectAmount * newAmount) / oldAmount;
|
|
252
|
+
return (abi.encode(kyberDMMSwap), kyberDMMSwap.collectAmount);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
function _newUniV3ProMMSwap(
|
|
256
|
+
bytes memory data,
|
|
257
|
+
uint256 value,
|
|
258
|
+
uint256 oldAmount,
|
|
259
|
+
uint256 newAmount
|
|
260
|
+
) internal pure returns (bytes memory, uint256) {
|
|
261
|
+
IMultihopRouter.UniSwapV3ProMM memory uniSwapV3ProMM = abi.decode(
|
|
262
|
+
data,
|
|
263
|
+
(IMultihopRouter.UniSwapV3ProMM)
|
|
264
|
+
);
|
|
265
|
+
if (value > 0) uniSwapV3ProMM.swapAmount = value;
|
|
266
|
+
else uniSwapV3ProMM.swapAmount = (uniSwapV3ProMM.swapAmount * newAmount) / oldAmount;
|
|
267
|
+
return (abi.encode(uniSwapV3ProMM), uniSwapV3ProMM.swapAmount);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function _newBalancerV2Swap(
|
|
271
|
+
bytes memory data,
|
|
272
|
+
uint256 value,
|
|
273
|
+
uint256 oldAmount,
|
|
274
|
+
uint256 newAmount
|
|
275
|
+
) internal pure returns (bytes memory, uint256) {
|
|
276
|
+
IMultihopRouter.BalancerV2 memory balancerV2 = abi.decode(
|
|
277
|
+
data,
|
|
278
|
+
(IMultihopRouter.BalancerV2)
|
|
279
|
+
);
|
|
280
|
+
if (value > 0) balancerV2.amount = value;
|
|
281
|
+
else balancerV2.amount = (balancerV2.amount * newAmount) / oldAmount;
|
|
282
|
+
return (abi.encode(balancerV2, balancerV2.amount), balancerV2.amount);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function _newDODOSwap(
|
|
286
|
+
bytes memory data,
|
|
287
|
+
uint256 value,
|
|
288
|
+
uint256 oldAmount,
|
|
289
|
+
uint256 newAmount
|
|
290
|
+
) internal pure returns (bytes memory, uint256) {
|
|
291
|
+
IMultihopRouter.DODO memory dodo = abi.decode(data, (IMultihopRouter.DODO));
|
|
292
|
+
if (value > 0) dodo.amount = value;
|
|
293
|
+
else dodo.amount = (dodo.amount * newAmount) / oldAmount;
|
|
294
|
+
return (abi.encode(dodo), dodo.amount);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function _newVelodromeSwap(
|
|
298
|
+
bytes memory data,
|
|
299
|
+
uint256 value,
|
|
300
|
+
uint256 oldAmount,
|
|
301
|
+
uint256 newAmount
|
|
302
|
+
) internal pure returns (bytes memory, uint256) {
|
|
303
|
+
IMultihopRouter.UniSwap memory velodrome = abi.decode(data, (IMultihopRouter.UniSwap));
|
|
304
|
+
if (value > 0) velodrome.collectAmount = value;
|
|
305
|
+
else velodrome.collectAmount = (velodrome.collectAmount * newAmount) / oldAmount;
|
|
306
|
+
return (abi.encode(velodrome), velodrome.collectAmount);
|
|
307
|
+
}
|
|
308
|
+
}
|