@pendle/core-v2 2.17.5-tradingbot → 2.17.7-tradingbot
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/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol/PendleMsgSenderAppUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributorV2.sol/PendleFeeDistributorV2.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.dbg.json +1 -1
- package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
- package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.dbg.json +1 -1
- package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleGauge.sol/PendleGauge.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
- package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/SYBase.sol/SYBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/SYBaseWithRewards.sol/SYBaseWithRewards.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol/sAPE.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraBbAWethSwethSY.sol/PendleAuraBbAWethSwethSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethAnkrethSYV2.sol/PendleAuraWethAnkrethSYV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRocketEthSYV2.sol/PendleAuraWethRocketEthSYV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethStafiEthSY.sol/PendleAuraWethStafiEthSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSYV2.sol/PendleAuraWethWstethSYV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSYV2.sol/PendleAuraBalancerStableLPSYV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/PendleCamelotV1VolatileSY.sol/PendleCamelotV1VolatileSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol/PendleConvexLPSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol/PendleGlpSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol/PendleGDaiSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleSfrxEthSY.sol/PendleSfrxEthSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleStargateLPSY.sol/PendleStargateLPSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.dbg.json +1 -1
- package/build/artifacts/contracts/core/TradingBot/BotActionCallback.sol/BotActionCallback.dbg.json +1 -1
- package/build/artifacts/contracts/core/TradingBot/BotActionCallback.sol/BotActionCallback.json +25 -0
- package/build/artifacts/contracts/core/TradingBot/BotActionHelper.sol/BotActionHelper.dbg.json +1 -1
- package/build/artifacts/contracts/core/TradingBot/BotActionHelper.sol/BotActionHelper.json +25 -0
- package/build/artifacts/contracts/core/TradingBot/BotDecisionHelper.sol/BotDecisionHelper.dbg.json +4 -0
- package/build/artifacts/contracts/core/TradingBot/BotDecisionHelper.sol/BotDecisionHelper.json +1070 -0
- package/build/artifacts/contracts/core/TradingBot/BotSimulationLib.sol/BotSimulationLib.dbg.json +1 -1
- package/build/artifacts/contracts/core/TradingBot/BotSimulationLib.sol/BotSimulationLib.json +2 -2
- package/build/artifacts/contracts/core/TradingBot/LongYieldTradingBot.sol/LongYieldTradingBot.dbg.json +1 -1
- package/build/artifacts/contracts/core/TradingBot/LongYieldTradingBot.sol/LongYieldTradingBot.json +60 -180
- package/build/artifacts/contracts/core/TradingBot/MarketExtLib.sol/MarketExtLib.dbg.json +1 -1
- package/build/artifacts/contracts/core/TradingBot/MarketExtLib.sol/MarketExtLib.json +2 -2
- package/build/artifacts/contracts/core/TradingBot/TradingBotBase.sol/TradingBotBase.dbg.json +1 -1
- package/build/artifacts/contracts/core/TradingBot/TradingBotBase.sol/TradingBotBase.json +25 -0
- 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/YieldContractsV2/PendlePrincipalTokenV2.sol/PendlePrincipalTokenV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.dbg.json +1 -1
- package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.dbg.json +1 -1
- package/build/artifacts/contracts/core/libraries/TokenAmountLib.sol/TokenAmountLib.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionInfoStatic.sol/IPActionInfoStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMarketAuxStatic.sol/IPActionMarketAuxStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMarketCoreStatic.sol/IPActionMarketCoreStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionMintRedeemStatic.sol/IPActionMintRedeemStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.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/IPBulkSeller.sol/IPBulkSeller.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPRouterHelper.sol/IPRouterHelper.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IPVotingEscrowMainchain.sol/IPVotingEscrowMainchain.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/IStandardizedYield.sol/IStandardizedYield.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/TradingBot/IBotDecisionHelper.sol/IBotDecisionHelper.dbg.json +4 -0
- package/build/artifacts/contracts/interfaces/TradingBot/IBotDecisionHelper.sol/IBotDecisionHelper.json +917 -0
- package/build/artifacts/contracts/interfaces/TradingBot/ILongYieldTradingBot.sol/ILongYieldTradingBot.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/TradingBot/ILongYieldTradingBot.sol/ILongYieldTradingBot.json +425 -161
- package/build/artifacts/contracts/interfaces/TradingBot/ITradingBotBase.sol/ITradingBotBase.dbg.json +1 -1
- package/build/artifacts/contracts/interfaces/TradingBot/ITradingBotBase.sol/ITradingBotBase.json +50 -0
- package/build/artifacts/contracts/offchain-helpers/BoringLpSeller.sol/BoringLpSeller.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/BoringPtSeller.sol/BoringPtSeller.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/Broadcaster.sol/Broadcaster.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/MarketExchangeRateLib.sol/MarketExchangeRateLib.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.dbg.json +1 -1
- package/build/artifacts/contracts/offchain-helpers/router-static/base/StorageLayout.sol/StorageLayout.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/PendleLpOracleLib.sol/PendleLpOracleLib.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/PendlePtOracle.sol/PendlePtOracle.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/PendlePtOracleLib.sol/PendlePtOracleLib.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/samples/PendleLpGlpOracle.sol/PendleLpGlpOracle.dbg.json +1 -1
- package/build/artifacts/contracts/oracles/samples/PendlePtGlpOracle.sol/PendlePtGlpOracle.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
- package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
- package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.dbg.json +1 -1
- package/build/artifacts/contracts/router/PendleRouterHelper.sol/PendleRouterHelper.dbg.json +1 -1
- package/build/artifacts/contracts/router/base/ActionBaseCallback.sol/ActionBaseCallback.dbg.json +1 -1
- package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
- package/build/artifacts/contracts/router/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
- package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
- package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
- package/contracts/core/TradingBot/BotActionCallback.sol +1 -1
- package/contracts/core/TradingBot/BotDecisionHelper.sol +306 -0
- package/contracts/core/TradingBot/BotSimulationLib.sol +8 -7
- package/contracts/core/TradingBot/LongYieldTradingBot.sol +20 -24
- package/contracts/core/TradingBot/MarketExtLib.sol +64 -31
- package/contracts/core/TradingBot/README.md +27 -25
- package/contracts/core/TradingBot/TradingBotBase.sol +36 -16
- package/contracts/interfaces/TradingBot/IBotDecisionHelper.sol +91 -0
- package/contracts/interfaces/TradingBot/ILongYieldTradingBot.sol +7 -32
- package/contracts/interfaces/TradingBot/ITradingBotBase.sol +6 -4
- package/package.json +1 -1
- package/typechain-types/BotActionCallback.ts +36 -0
- package/typechain-types/BotActionHelper.ts +36 -0
- package/typechain-types/BotDecisionHelper.ts +527 -0
- package/typechain-types/IBotDecisionHelper.ts +507 -0
- package/typechain-types/ILongYieldTradingBot.ts +481 -129
- package/typechain-types/ITradingBotBase.ts +76 -0
- package/typechain-types/IWBETH.ts +128 -0
- package/typechain-types/LongYieldTradingBot.ts +85 -141
- package/typechain-types/PendleBinanceEth.ts +1229 -0
- package/typechain-types/PtAndLpToAsset.ts +136 -0
- package/typechain-types/TradingBotBase.ts +36 -0
- package/typechain-types/factories/BotActionCallback__factory.ts +25 -0
- package/typechain-types/factories/BotActionHelper__factory.ts +25 -0
- package/typechain-types/factories/BotDecisionHelper__factory.ts +1123 -0
- package/typechain-types/factories/IBotDecisionHelper__factory.ts +932 -0
- package/typechain-types/factories/ILongYieldTradingBot__factory.ts +425 -161
- package/typechain-types/factories/ITradingBotBase__factory.ts +50 -0
- package/typechain-types/factories/IWBETH__factory.ts +51 -0
- package/typechain-types/factories/LongYieldTradingBot__factory.ts +63 -183
- package/typechain-types/factories/MarketExtLib__factory.ts +1 -1
- package/typechain-types/factories/PendleBinanceEth__factory.ts +1052 -0
- package/typechain-types/factories/PtAndLpToAsset__factory.ts +150 -0
- package/typechain-types/factories/TradingBotBase__factory.ts +25 -0
- package/typechain-types/hardhat.d.ts +49 -13
- package/typechain-types/index.ts +12 -4
- package/build/artifacts/contracts/core/TradingBot/BotDecisionLib.sol/BotDecisionLib.dbg.json +0 -4
- package/build/artifacts/contracts/core/TradingBot/BotDecisionLib.sol/BotDecisionLib.json +0 -589
- package/build/artifacts/contracts/core/TradingBot/TradingBotOffchain.sol/TradingBotOffchain.dbg.json +0 -4
- package/build/artifacts/contracts/core/TradingBot/TradingBotOffchain.sol/TradingBotOffchain.json +0 -1075
- package/contracts/core/TradingBot/BotDecisionLib.sol +0 -274
- package/contracts/core/TradingBot/TradingBotOffchain.sol +0 -141
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
pragma solidity ^0.8.0;
|
|
3
|
-
|
|
4
|
-
import "./BotSimulationLib.sol";
|
|
5
|
-
import "../libraries/Errors.sol";
|
|
6
|
-
|
|
7
|
-
struct LongTradingSpecs {
|
|
8
|
-
uint256 lowerIyLimit; // apeYtApy
|
|
9
|
-
uint256 upperIyLimit; // sellYtApy
|
|
10
|
-
uint256 floatingSyRatioLimit; // r
|
|
11
|
-
uint256 ytPtRatioLimit; // ytPtRatio (x)
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
enum ActionType {
|
|
15
|
-
SwapSyToYt, // Buy YT with SY
|
|
16
|
-
AddLiqKeepYt, // ZPI Zap
|
|
17
|
-
AddLiqFromSy, // Single sided LP
|
|
18
|
-
AddLiqFromYt, // Sell YT for LP
|
|
19
|
-
RemoveLiqToYt, // Zap out to YT,
|
|
20
|
-
NONE
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
enum StrategyFlag {
|
|
24
|
-
GOOD,
|
|
25
|
-
TOO_LOW,
|
|
26
|
-
TOO_HIGH
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
struct StrategyState {
|
|
30
|
-
StrategyFlag iyFlag;
|
|
31
|
-
StrategyFlag syRatioFlag;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
contract BotDecisionLib {
|
|
35
|
-
using MarketExtLib for MarketExtState;
|
|
36
|
-
using MarketExtLib for ApproxParams;
|
|
37
|
-
using BotSimulationLib for BotState;
|
|
38
|
-
using Math for uint256;
|
|
39
|
-
|
|
40
|
-
enum RebalanceResult {
|
|
41
|
-
FAIL,
|
|
42
|
-
OLD_STATE,
|
|
43
|
-
NEW_STATE
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
struct RebalanceDetails {
|
|
47
|
-
BotState bot;
|
|
48
|
-
MarketExtState marketExt;
|
|
49
|
-
LongTradingSpecs specs;
|
|
50
|
-
ActionType action;
|
|
51
|
-
StrategyState oldState;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Finds the smallest paramater such that the bot reaches a new state, otherwise finds the
|
|
56
|
-
* largest parameter possible that doesn't fail.
|
|
57
|
-
*
|
|
58
|
-
* @param botParams ApproxParams for this binary search function
|
|
59
|
-
* @param oldState The initial StrategyState, to be moved away from
|
|
60
|
-
* @param intParams ApproxParams for public action's approximation (e.g. for router's swap)
|
|
61
|
-
* @dev For `botParams`, eps = the precision such that slightly lower
|
|
62
|
-
* ((return value) * (1 - eps)) does not reach a new state
|
|
63
|
-
*
|
|
64
|
-
* - Returns `botParams.guessOffchain` if verifies that it reaches a new state,
|
|
65
|
-
* and slightly lower does not reach a new state.
|
|
66
|
-
* - Reverts if `botParams.guessMin` is invalid, or returns `botParams.guessMin` if reaches a
|
|
67
|
-
* new state
|
|
68
|
-
* - Returns `botParams.guessMax` if it is valid & does not reach a new state
|
|
69
|
-
* - Otherwise, binary search for `guess` such that it reaches a new state, and slightly lower
|
|
70
|
-
* does not reach a new state
|
|
71
|
-
*
|
|
72
|
-
*/
|
|
73
|
-
function binarySearchUntilSwitchState(
|
|
74
|
-
BotState memory bot,
|
|
75
|
-
MarketExtState memory marketExt,
|
|
76
|
-
LongTradingSpecs memory specs,
|
|
77
|
-
ActionType action,
|
|
78
|
-
StrategyState memory oldState,
|
|
79
|
-
ApproxParams memory botParams,
|
|
80
|
-
ApproxParams memory intParams
|
|
81
|
-
) public pure returns (uint256) {
|
|
82
|
-
RebalanceDetails memory rebalance = RebalanceDetails(
|
|
83
|
-
bot,
|
|
84
|
-
marketExt,
|
|
85
|
-
specs,
|
|
86
|
-
action,
|
|
87
|
-
oldState
|
|
88
|
-
);
|
|
89
|
-
|
|
90
|
-
if (botParams.guessOffchain != 0) {
|
|
91
|
-
uint256 guessOffchainMinusDelta = botParams.guessOffchain.mulDown(
|
|
92
|
-
Math.ONE - botParams.eps
|
|
93
|
-
);
|
|
94
|
-
if (
|
|
95
|
-
_rebalanceResult(rebalance, botParams.guessOffchain, intParams) ==
|
|
96
|
-
RebalanceResult.NEW_STATE &&
|
|
97
|
-
_rebalanceResult(rebalance, guessOffchainMinusDelta, intParams) ==
|
|
98
|
-
RebalanceResult.OLD_STATE
|
|
99
|
-
) return botParams.guessOffchain;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
{
|
|
103
|
-
uint256 guessUpperBound = _weakUpperBound(bot, marketExt, action);
|
|
104
|
-
if (botParams.guessMax > guessUpperBound) botParams.guessMax = guessUpperBound;
|
|
105
|
-
if (botParams.guessMin > botParams.guessMax)
|
|
106
|
-
revert Errors.BotBinarySearchInvalidRange(
|
|
107
|
-
uint256(action),
|
|
108
|
-
botParams.guessMin,
|
|
109
|
-
botParams.guessMax
|
|
110
|
-
);
|
|
111
|
-
|
|
112
|
-
if (
|
|
113
|
-
_rebalanceResult(rebalance, botParams.guessMax, intParams) ==
|
|
114
|
-
RebalanceResult.OLD_STATE
|
|
115
|
-
) return botParams.guessMax;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
{
|
|
119
|
-
RebalanceResult guessMinResult = _rebalanceResult(
|
|
120
|
-
rebalance,
|
|
121
|
-
botParams.guessMin,
|
|
122
|
-
intParams
|
|
123
|
-
);
|
|
124
|
-
if (guessMinResult == RebalanceResult.FAIL)
|
|
125
|
-
revert Errors.BotBinarySearchGuessMinInvalid(uint256(action), botParams.guessMin);
|
|
126
|
-
if (guessMinResult == RebalanceResult.NEW_STATE) return botParams.guessMin;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
for (uint256 iter = 0; iter < botParams.maxIteration; ++iter) {
|
|
130
|
-
uint256 guess = botParams.guessMin + (botParams.guessMax - botParams.guessMin) / 2;
|
|
131
|
-
|
|
132
|
-
if (_rebalanceResult(rebalance, guess, intParams) == RebalanceResult.OLD_STATE) {
|
|
133
|
-
botParams.guessMin = guess;
|
|
134
|
-
} else {
|
|
135
|
-
botParams.guessMax = guess;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (Math.isASmallerApproxB(botParams.guessMin, botParams.guessMax, botParams.eps)) {
|
|
139
|
-
if (
|
|
140
|
-
_rebalanceResult(rebalance, botParams.guessMax, intParams) ==
|
|
141
|
-
RebalanceResult.FAIL
|
|
142
|
-
) return botParams.guessMin;
|
|
143
|
-
|
|
144
|
-
return botParams.guessMax;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
revert Errors.BotBinarySearchFail();
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function _rebalanceResult(
|
|
152
|
-
RebalanceDetails memory rebalance,
|
|
153
|
-
uint256 botParam,
|
|
154
|
-
ApproxParams memory intParams
|
|
155
|
-
) private pure returns (RebalanceResult) {
|
|
156
|
-
(bool success, StrategyState memory newState) = _stateAfterRebalance(
|
|
157
|
-
rebalance,
|
|
158
|
-
botParam,
|
|
159
|
-
intParams
|
|
160
|
-
);
|
|
161
|
-
|
|
162
|
-
if (!success) return RebalanceResult.FAIL;
|
|
163
|
-
if (_sameStrategyState(rebalance.oldState, newState)) return RebalanceResult.OLD_STATE;
|
|
164
|
-
return RebalanceResult.NEW_STATE;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
function _sameStrategyState(
|
|
168
|
-
StrategyState memory initialState,
|
|
169
|
-
StrategyState memory otherState
|
|
170
|
-
) private pure returns (bool) {
|
|
171
|
-
return
|
|
172
|
-
(initialState.iyFlag == otherState.iyFlag) &&
|
|
173
|
-
(initialState.syRatioFlag == otherState.syRatioFlag);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
function _stateAfterRebalance(
|
|
177
|
-
RebalanceDetails memory rebalance,
|
|
178
|
-
uint256 botParam,
|
|
179
|
-
ApproxParams memory intParams
|
|
180
|
-
) private pure returns (bool success, StrategyState memory currentState) {
|
|
181
|
-
BotState memory botClone = rebalance.bot.clone();
|
|
182
|
-
MarketExtState memory marketExtClone = rebalance.marketExt.clone();
|
|
183
|
-
|
|
184
|
-
if (rebalance.action == ActionType.SwapSyToYt) {
|
|
185
|
-
success = botClone.swapSyToYt(marketExtClone, botParam);
|
|
186
|
-
} else if (rebalance.action == ActionType.AddLiqKeepYt) {
|
|
187
|
-
success = botClone.addLiqKeepYt(marketExtClone, botParam);
|
|
188
|
-
} else if (rebalance.action == ActionType.AddLiqFromSy) {
|
|
189
|
-
success = botClone.addLiqFromSy(marketExtClone, botParam);
|
|
190
|
-
} else if (rebalance.action == ActionType.AddLiqFromYt) {
|
|
191
|
-
success = botClone.addLiqFromYt(marketExtClone, botParam);
|
|
192
|
-
} else if (rebalance.action == ActionType.RemoveLiqToYt) {
|
|
193
|
-
success = botClone.removeLiqToYt(marketExtClone, botParam, intParams.clone());
|
|
194
|
-
} else {
|
|
195
|
-
success = false;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
if (success) {
|
|
199
|
-
currentState = strategyState(botClone, marketExtClone, rebalance.specs);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/// @dev Gives a weak upper bound so that MarketExtLib's simulation doesn't revert
|
|
204
|
-
function _weakUpperBound(
|
|
205
|
-
BotState memory bot,
|
|
206
|
-
MarketExtState memory marketExt,
|
|
207
|
-
ActionType action
|
|
208
|
-
) private pure returns (uint256) {
|
|
209
|
-
if (action == ActionType.SwapSyToYt) {
|
|
210
|
-
return marketExt.calcMaxPtIn();
|
|
211
|
-
} else if (action == ActionType.AddLiqKeepYt) {
|
|
212
|
-
return bot.syBalance;
|
|
213
|
-
} else if (action == ActionType.AddLiqFromSy) {
|
|
214
|
-
return marketExt.calcMaxPtOut();
|
|
215
|
-
} else if (action == ActionType.AddLiqFromYt) {
|
|
216
|
-
return marketExt.calcMaxPtOut();
|
|
217
|
-
} else if (action == ActionType.RemoveLiqToYt) {
|
|
218
|
-
return bot.lpBalance;
|
|
219
|
-
} else {
|
|
220
|
-
return 0;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
function strategyState(
|
|
225
|
-
BotState memory bot,
|
|
226
|
-
MarketExtState memory marketExt,
|
|
227
|
-
LongTradingSpecs memory specs
|
|
228
|
-
) public pure returns (StrategyState memory currentState) {
|
|
229
|
-
uint256 iy = marketExt.impliedYield();
|
|
230
|
-
(, uint256 ptInLp) = marketExt.previewAssetsFromLp(bot.lpBalance);
|
|
231
|
-
uint256 currentYtPtRatio = (
|
|
232
|
-
ptInLp == 0 ? type(uint256).max : bot.ytBalance.divDown(ptInLp)
|
|
233
|
-
);
|
|
234
|
-
|
|
235
|
-
if (iy < specs.lowerIyLimit) {
|
|
236
|
-
currentState.iyFlag = StrategyFlag.TOO_LOW;
|
|
237
|
-
} else if (specs.upperIyLimit < iy && currentYtPtRatio > specs.ytPtRatioLimit) {
|
|
238
|
-
currentState.iyFlag = StrategyFlag.TOO_HIGH;
|
|
239
|
-
} else {
|
|
240
|
-
currentState.iyFlag = StrategyFlag.GOOD;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
uint256 currentSyRatio = bot.syBalance.divDown(bot.tvlInSy(marketExt));
|
|
244
|
-
if (currentSyRatio > specs.floatingSyRatioLimit) {
|
|
245
|
-
currentState.syRatioFlag = StrategyFlag.TOO_HIGH;
|
|
246
|
-
} else {
|
|
247
|
-
currentState.syRatioFlag = StrategyFlag.GOOD;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
function actionToTake(BotState memory botState, StrategyState memory currentState) public pure returns (ActionType) {
|
|
252
|
-
if (currentState.iyFlag == StrategyFlag.TOO_LOW) {
|
|
253
|
-
if (currentState.syRatioFlag == StrategyFlag.TOO_HIGH) {
|
|
254
|
-
return ActionType.SwapSyToYt;
|
|
255
|
-
} else {
|
|
256
|
-
if (botState.lpBalance == 0) return ActionType.NONE;
|
|
257
|
-
return ActionType.RemoveLiqToYt;
|
|
258
|
-
}
|
|
259
|
-
} else if (currentState.iyFlag == StrategyFlag.GOOD) {
|
|
260
|
-
if (currentState.syRatioFlag == StrategyFlag.TOO_HIGH) {
|
|
261
|
-
return ActionType.AddLiqKeepYt;
|
|
262
|
-
} else {
|
|
263
|
-
return ActionType.NONE;
|
|
264
|
-
}
|
|
265
|
-
} else {
|
|
266
|
-
if (currentState.syRatioFlag == StrategyFlag.TOO_HIGH) {
|
|
267
|
-
return ActionType.AddLiqFromSy;
|
|
268
|
-
} else {
|
|
269
|
-
if (botState.ytBalance == 0) return ActionType.NONE;
|
|
270
|
-
return ActionType.AddLiqFromYt;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
pragma solidity 0.8.17;
|
|
3
|
-
|
|
4
|
-
import "./BotDecisionLib.sol";
|
|
5
|
-
import "../libraries/TokenAmountLib.sol";
|
|
6
|
-
import "../../interfaces/TradingBot/ITradingBotBase.sol";
|
|
7
|
-
|
|
8
|
-
contract TradingBotOffchain {
|
|
9
|
-
using TokenAmountLib for TokenAmount[];
|
|
10
|
-
using BotSimulationLib for BotState;
|
|
11
|
-
using MarketMathCore for MarketState;
|
|
12
|
-
using MarketApproxPtInLib for MarketState;
|
|
13
|
-
using PYIndexLib for PYIndex;
|
|
14
|
-
|
|
15
|
-
address public immutable decisionLib;
|
|
16
|
-
|
|
17
|
-
constructor(address _decisionLib) {
|
|
18
|
-
decisionLib = _decisionLib;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/// SY interest from YT is excluded
|
|
22
|
-
function claimForBot(
|
|
23
|
-
address bot,
|
|
24
|
-
address market
|
|
25
|
-
) external returns (TokenAmount[] memory rewards) {
|
|
26
|
-
(IStandardizedYield SY, , IPYieldToken YT) = IPMarket(market).readTokens();
|
|
27
|
-
|
|
28
|
-
address[] memory ytRewardTokens = YT.getRewardTokens();
|
|
29
|
-
(, uint256[] memory ytRewardAmounts) = YT.redeemDueInterestAndRewards(bot, true, true);
|
|
30
|
-
rewards = rewards.add(ytRewardTokens, ytRewardAmounts);
|
|
31
|
-
|
|
32
|
-
address[] memory syRewardTokens = SY.getRewardTokens();
|
|
33
|
-
uint256[] memory syRewardAmounts = SY.claimRewards(bot);
|
|
34
|
-
rewards = rewards.add(syRewardTokens, syRewardAmounts);
|
|
35
|
-
|
|
36
|
-
address[] memory lpRewardTokens = IPMarket(market).getRewardTokens();
|
|
37
|
-
uint256[] memory lpRewardAmounts = IPMarket(market).redeemRewards(bot);
|
|
38
|
-
rewards = rewards.add(lpRewardTokens, lpRewardAmounts);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function simulateAction(
|
|
42
|
-
BotState calldata botCalldata,
|
|
43
|
-
MarketExtState calldata marketExtCalldata,
|
|
44
|
-
ActionType action,
|
|
45
|
-
uint256 botParam,
|
|
46
|
-
ApproxParams memory swapApproxParams
|
|
47
|
-
) external view returns (bool success, BotState memory bot, MarketExtState memory marketExt) {
|
|
48
|
-
bot = botCalldata;
|
|
49
|
-
marketExt = marketExtCalldata;
|
|
50
|
-
|
|
51
|
-
if (action == ActionType.SwapSyToYt) {
|
|
52
|
-
success = bot.swapSyToYt(marketExt, botParam);
|
|
53
|
-
} else if (action == ActionType.AddLiqKeepYt) {
|
|
54
|
-
success = bot.addLiqKeepYt(marketExt, botParam);
|
|
55
|
-
} else if (action == ActionType.AddLiqFromSy) {
|
|
56
|
-
success = bot.addLiqFromSy(marketExt, botParam);
|
|
57
|
-
} else if (action == ActionType.AddLiqFromYt) {
|
|
58
|
-
success = bot.addLiqFromYt(marketExt, botParam);
|
|
59
|
-
} else if (action == ActionType.RemoveLiqToYt) {
|
|
60
|
-
success = bot.removeLiqToYt(marketExt, botParam, swapApproxParams);
|
|
61
|
-
} else {
|
|
62
|
-
success = false;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function searchForBotParam(
|
|
67
|
-
BotState calldata bot,
|
|
68
|
-
MarketExtState calldata marketExt,
|
|
69
|
-
LongTradingSpecs calldata specs,
|
|
70
|
-
ActionType action,
|
|
71
|
-
StrategyState calldata initialState,
|
|
72
|
-
ApproxParams calldata botParams,
|
|
73
|
-
ApproxParams calldata intParams
|
|
74
|
-
) external view returns (uint256) {
|
|
75
|
-
return
|
|
76
|
-
BotDecisionLib(decisionLib).binarySearchUntilSwitchState(
|
|
77
|
-
bot,
|
|
78
|
-
marketExt,
|
|
79
|
-
specs,
|
|
80
|
-
action,
|
|
81
|
-
initialState,
|
|
82
|
-
botParams,
|
|
83
|
-
intParams
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function searchForIntParam(
|
|
88
|
-
MarketExtState calldata marketExt,
|
|
89
|
-
ActionType action,
|
|
90
|
-
uint256 botParam,
|
|
91
|
-
ApproxParams calldata intParams
|
|
92
|
-
) external view returns (uint256) {
|
|
93
|
-
if (action == ActionType.RemoveLiqToYt) {
|
|
94
|
-
return _searchForIntParamRemoveLiqToYt(marketExt, botParam, intParams);
|
|
95
|
-
} else {
|
|
96
|
-
return 0;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function strategyState(
|
|
101
|
-
BotState calldata bot,
|
|
102
|
-
MarketExtState calldata marketExt,
|
|
103
|
-
LongTradingSpecs calldata specs
|
|
104
|
-
) external view returns (StrategyState memory) {
|
|
105
|
-
return BotDecisionLib(decisionLib).strategyState(bot, marketExt, specs);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function actionToTake(
|
|
109
|
-
BotState memory botState,
|
|
110
|
-
StrategyState memory currentState
|
|
111
|
-
) external view returns (ActionType) {
|
|
112
|
-
return BotDecisionLib(decisionLib).actionToTake(botState, currentState);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
function tvlInSy(
|
|
116
|
-
BotState calldata bot,
|
|
117
|
-
MarketExtState calldata marketExt
|
|
118
|
-
) external view returns (uint256) {
|
|
119
|
-
return BotSimulationLib.tvlInSy(bot, marketExt);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function _searchForIntParamRemoveLiqToYt(
|
|
123
|
-
MarketExtState memory marketExt,
|
|
124
|
-
uint256 netLpToRemove,
|
|
125
|
-
ApproxParams memory intParams
|
|
126
|
-
) private view returns (uint256 totalPtToSwap) {
|
|
127
|
-
(uint256 netSyRemoved, uint256 netPtRemoved) = marketExt.state.removeLiquidity(
|
|
128
|
-
netLpToRemove
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
uint256 netYtFromSy = marketExt.index.syToAsset(netSyRemoved);
|
|
132
|
-
uint256 netPtToSwap = netPtRemoved + netYtFromSy;
|
|
133
|
-
|
|
134
|
-
(, totalPtToSwap, ) = marketExt.state.approxSwapExactPtForYt(
|
|
135
|
-
marketExt.index,
|
|
136
|
-
netPtToSwap,
|
|
137
|
-
marketExt.blockTime,
|
|
138
|
-
intParams
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
}
|