@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.
Files changed (162) hide show
  1. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.dbg.json +1 -1
  2. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.dbg.json +1 -1
  3. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.dbg.json +1 -1
  4. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol/PendleMsgSenderAppUpg.dbg.json +1 -1
  5. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  6. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  7. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  8. package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.dbg.json +1 -1
  9. package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributorV2.sol/PendleFeeDistributorV2.dbg.json +1 -1
  10. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  11. package/build/artifacts/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  12. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  13. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  14. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  15. package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  16. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.dbg.json +1 -1
  17. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  18. package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.dbg.json +1 -1
  19. package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.dbg.json +1 -1
  20. package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.dbg.json +1 -1
  21. package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  22. package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.dbg.json +1 -1
  23. package/build/artifacts/contracts/core/Market/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  24. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  25. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  26. package/build/artifacts/contracts/core/StandardizedYield/SYBase.sol/SYBase.dbg.json +1 -1
  27. package/build/artifacts/contracts/core/StandardizedYield/SYBaseWithRewards.sol/SYBaseWithRewards.dbg.json +1 -1
  28. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol/sAPE.dbg.json +1 -1
  29. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraBbAWethSwethSY.sol/PendleAuraBbAWethSwethSY.dbg.json +1 -1
  30. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethAnkrethSYV2.sol/PendleAuraWethAnkrethSYV2.dbg.json +1 -1
  31. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRocketEthSYV2.sol/PendleAuraWethRocketEthSYV2.dbg.json +1 -1
  32. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethStafiEthSY.sol/PendleAuraWethStafiEthSY.dbg.json +1 -1
  33. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSYV2.sol/PendleAuraWethWstethSYV2.dbg.json +1 -1
  34. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSYV2.sol/PendleAuraBalancerStableLPSYV2.dbg.json +1 -1
  35. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  36. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.dbg.json +1 -1
  37. package/build/artifacts/contracts/core/StandardizedYield/implementations/CamelotV1Volatile/PendleCamelotV1VolatileSY.sol/PendleCamelotV1VolatileSY.dbg.json +1 -1
  38. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.dbg.json +1 -1
  39. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.dbg.json +1 -1
  40. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol/PendleConvexLPSY.dbg.json +1 -1
  41. package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol/PendleGlpSY.dbg.json +1 -1
  42. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol/PendleGDaiSY.dbg.json +1 -1
  43. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.dbg.json +1 -1
  44. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleSfrxEthSY.sol/PendleSfrxEthSY.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleStargateLPSY.sol/PendleStargateLPSY.dbg.json +1 -1
  46. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/TradingBot/BotActionCallback.sol/BotActionCallback.dbg.json +1 -1
  48. package/build/artifacts/contracts/core/TradingBot/BotActionCallback.sol/BotActionCallback.json +25 -0
  49. package/build/artifacts/contracts/core/TradingBot/BotActionHelper.sol/BotActionHelper.dbg.json +1 -1
  50. package/build/artifacts/contracts/core/TradingBot/BotActionHelper.sol/BotActionHelper.json +25 -0
  51. package/build/artifacts/contracts/core/TradingBot/BotDecisionHelper.sol/BotDecisionHelper.dbg.json +4 -0
  52. package/build/artifacts/contracts/core/TradingBot/BotDecisionHelper.sol/BotDecisionHelper.json +1070 -0
  53. package/build/artifacts/contracts/core/TradingBot/BotSimulationLib.sol/BotSimulationLib.dbg.json +1 -1
  54. package/build/artifacts/contracts/core/TradingBot/BotSimulationLib.sol/BotSimulationLib.json +2 -2
  55. package/build/artifacts/contracts/core/TradingBot/LongYieldTradingBot.sol/LongYieldTradingBot.dbg.json +1 -1
  56. package/build/artifacts/contracts/core/TradingBot/LongYieldTradingBot.sol/LongYieldTradingBot.json +60 -180
  57. package/build/artifacts/contracts/core/TradingBot/MarketExtLib.sol/MarketExtLib.dbg.json +1 -1
  58. package/build/artifacts/contracts/core/TradingBot/MarketExtLib.sol/MarketExtLib.json +2 -2
  59. package/build/artifacts/contracts/core/TradingBot/TradingBotBase.sol/TradingBotBase.dbg.json +1 -1
  60. package/build/artifacts/contracts/core/TradingBot/TradingBotBase.sol/TradingBotBase.json +25 -0
  61. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  62. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  63. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  64. package/build/artifacts/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol/PendlePrincipalTokenV2.dbg.json +1 -1
  65. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.dbg.json +1 -1
  66. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.dbg.json +1 -1
  67. package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.dbg.json +1 -1
  68. package/build/artifacts/contracts/core/libraries/TokenAmountLib.sol/TokenAmountLib.dbg.json +1 -1
  69. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
  70. package/build/artifacts/contracts/interfaces/IPActionInfoStatic.sol/IPActionInfoStatic.dbg.json +1 -1
  71. package/build/artifacts/contracts/interfaces/IPActionMarketAuxStatic.sol/IPActionMarketAuxStatic.dbg.json +1 -1
  72. package/build/artifacts/contracts/interfaces/IPActionMarketCoreStatic.sol/IPActionMarketCoreStatic.dbg.json +1 -1
  73. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
  74. package/build/artifacts/contracts/interfaces/IPActionMintRedeemStatic.sol/IPActionMintRedeemStatic.dbg.json +1 -1
  75. package/build/artifacts/contracts/interfaces/IPActionStorageStatic.sol/IPActionStorageStatic.dbg.json +1 -1
  76. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
  77. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
  78. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  79. package/build/artifacts/contracts/interfaces/IPBulkSeller.sol/IPBulkSeller.dbg.json +1 -1
  80. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  81. package/build/artifacts/contracts/interfaces/IPRouterHelper.sol/IPRouterHelper.dbg.json +1 -1
  82. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
  83. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  84. package/build/artifacts/contracts/interfaces/IPVotingEscrowMainchain.sol/IPVotingEscrowMainchain.dbg.json +1 -1
  85. package/build/artifacts/contracts/interfaces/IStandardizedYield.sol/IStandardizedYield.dbg.json +1 -1
  86. package/build/artifacts/contracts/interfaces/TradingBot/IBotDecisionHelper.sol/IBotDecisionHelper.dbg.json +4 -0
  87. package/build/artifacts/contracts/interfaces/TradingBot/IBotDecisionHelper.sol/IBotDecisionHelper.json +917 -0
  88. package/build/artifacts/contracts/interfaces/TradingBot/ILongYieldTradingBot.sol/ILongYieldTradingBot.dbg.json +1 -1
  89. package/build/artifacts/contracts/interfaces/TradingBot/ILongYieldTradingBot.sol/ILongYieldTradingBot.json +425 -161
  90. package/build/artifacts/contracts/interfaces/TradingBot/ITradingBotBase.sol/ITradingBotBase.dbg.json +1 -1
  91. package/build/artifacts/contracts/interfaces/TradingBot/ITradingBotBase.sol/ITradingBotBase.json +50 -0
  92. package/build/artifacts/contracts/offchain-helpers/BoringLpSeller.sol/BoringLpSeller.dbg.json +1 -1
  93. package/build/artifacts/contracts/offchain-helpers/BoringPtSeller.sol/BoringPtSeller.dbg.json +1 -1
  94. package/build/artifacts/contracts/offchain-helpers/Broadcaster.sol/Broadcaster.dbg.json +1 -1
  95. package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.dbg.json +1 -1
  96. package/build/artifacts/contracts/offchain-helpers/MarketExchangeRateLib.sol/MarketExchangeRateLib.dbg.json +1 -1
  97. package/build/artifacts/contracts/offchain-helpers/router-static/PendleRouterStatic.sol/PendleRouterStatic.dbg.json +1 -1
  98. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionInfoStatic.sol/ActionInfoStatic.dbg.json +1 -1
  99. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.dbg.json +1 -1
  100. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketCoreStatic.sol/ActionMarketCoreStatic.dbg.json +1 -1
  101. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMintRedeemStatic.sol/ActionMintRedeemStatic.dbg.json +1 -1
  102. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionStorageStatic.sol/ActionStorageStatic.dbg.json +1 -1
  103. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionVePendleStatic.sol/ActionVePendleStatic.dbg.json +1 -1
  104. package/build/artifacts/contracts/offchain-helpers/router-static/base/StorageLayout.sol/StorageLayout.dbg.json +1 -1
  105. package/build/artifacts/contracts/oracles/PendleLpOracleLib.sol/PendleLpOracleLib.dbg.json +1 -1
  106. package/build/artifacts/contracts/oracles/PendlePtOracle.sol/PendlePtOracle.dbg.json +1 -1
  107. package/build/artifacts/contracts/oracles/PendlePtOracleLib.sol/PendlePtOracleLib.dbg.json +1 -1
  108. package/build/artifacts/contracts/oracles/samples/PendleLpGlpOracle.sol/PendleLpGlpOracle.dbg.json +1 -1
  109. package/build/artifacts/contracts/oracles/samples/PendlePtGlpOracle.sol/PendlePtGlpOracle.dbg.json +1 -1
  110. package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
  111. package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
  112. package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
  113. package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
  114. package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  115. package/build/artifacts/contracts/router/PendleRouterHelper.sol/PendleRouterHelper.dbg.json +1 -1
  116. package/build/artifacts/contracts/router/base/ActionBaseCallback.sol/ActionBaseCallback.dbg.json +1 -1
  117. package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
  118. package/build/artifacts/contracts/router/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
  119. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
  120. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
  121. package/contracts/core/TradingBot/BotActionCallback.sol +1 -1
  122. package/contracts/core/TradingBot/BotDecisionHelper.sol +306 -0
  123. package/contracts/core/TradingBot/BotSimulationLib.sol +8 -7
  124. package/contracts/core/TradingBot/LongYieldTradingBot.sol +20 -24
  125. package/contracts/core/TradingBot/MarketExtLib.sol +64 -31
  126. package/contracts/core/TradingBot/README.md +27 -25
  127. package/contracts/core/TradingBot/TradingBotBase.sol +36 -16
  128. package/contracts/interfaces/TradingBot/IBotDecisionHelper.sol +91 -0
  129. package/contracts/interfaces/TradingBot/ILongYieldTradingBot.sol +7 -32
  130. package/contracts/interfaces/TradingBot/ITradingBotBase.sol +6 -4
  131. package/package.json +1 -1
  132. package/typechain-types/BotActionCallback.ts +36 -0
  133. package/typechain-types/BotActionHelper.ts +36 -0
  134. package/typechain-types/BotDecisionHelper.ts +527 -0
  135. package/typechain-types/IBotDecisionHelper.ts +507 -0
  136. package/typechain-types/ILongYieldTradingBot.ts +481 -129
  137. package/typechain-types/ITradingBotBase.ts +76 -0
  138. package/typechain-types/IWBETH.ts +128 -0
  139. package/typechain-types/LongYieldTradingBot.ts +85 -141
  140. package/typechain-types/PendleBinanceEth.ts +1229 -0
  141. package/typechain-types/PtAndLpToAsset.ts +136 -0
  142. package/typechain-types/TradingBotBase.ts +36 -0
  143. package/typechain-types/factories/BotActionCallback__factory.ts +25 -0
  144. package/typechain-types/factories/BotActionHelper__factory.ts +25 -0
  145. package/typechain-types/factories/BotDecisionHelper__factory.ts +1123 -0
  146. package/typechain-types/factories/IBotDecisionHelper__factory.ts +932 -0
  147. package/typechain-types/factories/ILongYieldTradingBot__factory.ts +425 -161
  148. package/typechain-types/factories/ITradingBotBase__factory.ts +50 -0
  149. package/typechain-types/factories/IWBETH__factory.ts +51 -0
  150. package/typechain-types/factories/LongYieldTradingBot__factory.ts +63 -183
  151. package/typechain-types/factories/MarketExtLib__factory.ts +1 -1
  152. package/typechain-types/factories/PendleBinanceEth__factory.ts +1052 -0
  153. package/typechain-types/factories/PtAndLpToAsset__factory.ts +150 -0
  154. package/typechain-types/factories/TradingBotBase__factory.ts +25 -0
  155. package/typechain-types/hardhat.d.ts +49 -13
  156. package/typechain-types/index.ts +12 -4
  157. package/build/artifacts/contracts/core/TradingBot/BotDecisionLib.sol/BotDecisionLib.dbg.json +0 -4
  158. package/build/artifacts/contracts/core/TradingBot/BotDecisionLib.sol/BotDecisionLib.json +0 -589
  159. package/build/artifacts/contracts/core/TradingBot/TradingBotOffchain.sol/TradingBotOffchain.dbg.json +0 -4
  160. package/build/artifacts/contracts/core/TradingBot/TradingBotOffchain.sol/TradingBotOffchain.json +0 -1075
  161. package/contracts/core/TradingBot/BotDecisionLib.sol +0 -274
  162. 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
- }