@defisaver/automation-sdk 3.2.5 → 3.3.1

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 (244) hide show
  1. package/.babelrc +3 -3
  2. package/.editorconfig +9 -9
  3. package/.env.dev +4 -4
  4. package/.eslintignore +6 -6
  5. package/.eslintrc.js +39 -39
  6. package/.mocharc.json +4 -4
  7. package/.nvmrc +1 -1
  8. package/README.md +46 -46
  9. package/cjs/abis/Erc20.json +223 -223
  10. package/cjs/abis/SubStorage.json +21 -21
  11. package/cjs/abis/UniMulticall.json +17 -17
  12. package/cjs/abis/index.d.ts +9 -9
  13. package/cjs/abis/index.js +30 -30
  14. package/cjs/abis/legacy_AaveV2Subscriptions.json +8 -8
  15. package/cjs/abis/legacy_AuthCheck.json +8 -8
  16. package/cjs/abis/legacy_CompoundV2Subscriptions.json +9 -9
  17. package/cjs/abis/legacy_MakerSubscriptions.json +9 -9
  18. package/cjs/automation/private/Automation.d.ts +12 -12
  19. package/cjs/automation/private/Automation.js +42 -42
  20. package/cjs/automation/private/LegacyAutomation.d.ts +25 -25
  21. package/cjs/automation/private/LegacyAutomation.js +118 -118
  22. package/cjs/automation/private/LegacyProtocol.d.ts +22 -22
  23. package/cjs/automation/private/LegacyProtocol.js +41 -41
  24. package/cjs/automation/private/LegacyProtocol.test.d.ts +1 -1
  25. package/cjs/automation/private/LegacyProtocol.test.js +25 -25
  26. package/cjs/automation/private/Protocol.d.ts +22 -22
  27. package/cjs/automation/private/Protocol.js +41 -41
  28. package/cjs/automation/private/Protocol.test.d.ts +1 -1
  29. package/cjs/automation/private/Protocol.test.js +25 -25
  30. package/cjs/automation/private/StrategiesAutomation.d.ts +33 -33
  31. package/cjs/automation/private/StrategiesAutomation.js +189 -189
  32. package/cjs/automation/private/StrategiesAutomation.test.d.ts +1 -1
  33. package/cjs/automation/private/StrategiesAutomation.test.js +671 -671
  34. package/cjs/automation/public/ArbitrumStrategies.d.ts +5 -5
  35. package/cjs/automation/public/ArbitrumStrategies.js +13 -13
  36. package/cjs/automation/public/BaseStrategies.d.ts +5 -5
  37. package/cjs/automation/public/BaseStrategies.js +13 -13
  38. package/cjs/automation/public/EthereumStrategies.d.ts +5 -5
  39. package/cjs/automation/public/EthereumStrategies.js +13 -13
  40. package/cjs/automation/public/OptimismStrategies.d.ts +5 -5
  41. package/cjs/automation/public/OptimismStrategies.js +13 -13
  42. package/cjs/automation/public/Strategies.test.d.ts +1 -1
  43. package/cjs/automation/public/Strategies.test.js +61 -61
  44. package/cjs/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -6
  45. package/cjs/automation/public/legacy/LegacyAaveAutomation.js +20 -20
  46. package/cjs/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -6
  47. package/cjs/automation/public/legacy/LegacyCompoundAutomation.js +20 -20
  48. package/cjs/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -6
  49. package/cjs/automation/public/legacy/LegacyMakerAutomation.js +20 -20
  50. package/cjs/configuration.d.ts +1 -1
  51. package/cjs/configuration.js +12 -12
  52. package/cjs/constants/index.d.ts +28 -28
  53. package/cjs/constants/index.js +674 -564
  54. package/cjs/index.d.ts +23 -23
  55. package/cjs/index.js +65 -65
  56. package/cjs/services/contractService.d.ts +12 -12
  57. package/cjs/services/contractService.js +54 -54
  58. package/cjs/services/ethereumService.d.ts +7 -7
  59. package/cjs/services/ethereumService.js +49 -49
  60. package/cjs/services/ethereumService.test.d.ts +1 -1
  61. package/cjs/services/ethereumService.test.js +242 -242
  62. package/cjs/services/strategiesService.d.ts +2 -2
  63. package/cjs/services/strategiesService.js +944 -898
  64. package/cjs/services/strategiesService.test.d.ts +1 -1
  65. package/cjs/services/strategiesService.test.js +110 -110
  66. package/cjs/services/strategySubService.d.ts +113 -111
  67. package/cjs/services/strategySubService.js +328 -314
  68. package/cjs/services/strategySubService.test.d.ts +1 -1
  69. package/cjs/services/strategySubService.test.js +1058 -936
  70. package/cjs/services/subDataService.d.ts +282 -261
  71. package/cjs/services/subDataService.js +740 -683
  72. package/cjs/services/subDataService.test.d.ts +1 -1
  73. package/cjs/services/subDataService.test.js +1458 -1282
  74. package/cjs/services/triggerService.d.ts +268 -249
  75. package/cjs/services/triggerService.js +509 -473
  76. package/cjs/services/triggerService.test.d.ts +1 -1
  77. package/cjs/services/triggerService.test.js +1139 -1045
  78. package/cjs/services/utils.d.ts +30 -30
  79. package/cjs/services/utils.js +182 -182
  80. package/cjs/services/utils.test.d.ts +1 -1
  81. package/cjs/services/utils.test.js +376 -376
  82. package/cjs/types/contracts/generated/Erc20.d.ts +53 -53
  83. package/cjs/types/contracts/generated/Erc20.js +5 -5
  84. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -129
  85. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.js +5 -5
  86. package/cjs/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -20
  87. package/cjs/types/contracts/generated/Legacy_AuthCheck.js +5 -5
  88. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -128
  89. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +5 -5
  90. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -246
  91. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.js +5 -5
  92. package/cjs/types/contracts/generated/SubStorage.d.ts +114 -114
  93. package/cjs/types/contracts/generated/SubStorage.js +5 -5
  94. package/cjs/types/contracts/generated/UniMulticall.d.ts +55 -55
  95. package/cjs/types/contracts/generated/UniMulticall.js +5 -5
  96. package/cjs/types/contracts/generated/index.d.ts +7 -7
  97. package/cjs/types/contracts/generated/index.js +2 -2
  98. package/cjs/types/contracts/generated/types.d.ts +54 -54
  99. package/cjs/types/contracts/generated/types.js +2 -2
  100. package/cjs/types/enums.d.ts +253 -226
  101. package/cjs/types/enums.js +279 -252
  102. package/cjs/types/index.d.ts +264 -248
  103. package/cjs/types/index.js +2 -2
  104. package/esm/abis/Erc20.json +223 -223
  105. package/esm/abis/SubStorage.json +21 -21
  106. package/esm/abis/UniMulticall.json +17 -17
  107. package/esm/abis/index.d.ts +9 -9
  108. package/esm/abis/index.js +18 -18
  109. package/esm/abis/legacy_AaveV2Subscriptions.json +8 -8
  110. package/esm/abis/legacy_AuthCheck.json +8 -8
  111. package/esm/abis/legacy_CompoundV2Subscriptions.json +9 -9
  112. package/esm/abis/legacy_MakerSubscriptions.json +9 -9
  113. package/esm/automation/private/Automation.d.ts +12 -12
  114. package/esm/automation/private/Automation.js +39 -39
  115. package/esm/automation/private/LegacyAutomation.d.ts +25 -25
  116. package/esm/automation/private/LegacyAutomation.js +112 -112
  117. package/esm/automation/private/LegacyProtocol.d.ts +22 -22
  118. package/esm/automation/private/LegacyProtocol.js +38 -38
  119. package/esm/automation/private/LegacyProtocol.test.d.ts +1 -1
  120. package/esm/automation/private/LegacyProtocol.test.js +20 -20
  121. package/esm/automation/private/Protocol.d.ts +22 -22
  122. package/esm/automation/private/Protocol.js +38 -38
  123. package/esm/automation/private/Protocol.test.d.ts +1 -1
  124. package/esm/automation/private/Protocol.test.js +20 -20
  125. package/esm/automation/private/StrategiesAutomation.d.ts +33 -33
  126. package/esm/automation/private/StrategiesAutomation.js +183 -183
  127. package/esm/automation/private/StrategiesAutomation.test.d.ts +1 -1
  128. package/esm/automation/private/StrategiesAutomation.test.js +666 -666
  129. package/esm/automation/public/ArbitrumStrategies.d.ts +5 -5
  130. package/esm/automation/public/ArbitrumStrategies.js +7 -7
  131. package/esm/automation/public/BaseStrategies.d.ts +5 -5
  132. package/esm/automation/public/BaseStrategies.js +7 -7
  133. package/esm/automation/public/EthereumStrategies.d.ts +5 -5
  134. package/esm/automation/public/EthereumStrategies.js +7 -7
  135. package/esm/automation/public/OptimismStrategies.d.ts +5 -5
  136. package/esm/automation/public/OptimismStrategies.js +7 -7
  137. package/esm/automation/public/Strategies.test.d.ts +1 -1
  138. package/esm/automation/public/Strategies.test.js +56 -56
  139. package/esm/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -6
  140. package/esm/automation/public/legacy/LegacyAaveAutomation.js +14 -14
  141. package/esm/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -6
  142. package/esm/automation/public/legacy/LegacyCompoundAutomation.js +14 -14
  143. package/esm/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -6
  144. package/esm/automation/public/legacy/LegacyMakerAutomation.js +14 -14
  145. package/esm/configuration.d.ts +1 -1
  146. package/esm/configuration.js +7 -7
  147. package/esm/constants/index.d.ts +28 -28
  148. package/esm/constants/index.js +668 -558
  149. package/esm/index.d.ts +23 -23
  150. package/esm/index.js +23 -23
  151. package/esm/services/contractService.d.ts +12 -12
  152. package/esm/services/contractService.js +45 -45
  153. package/esm/services/ethereumService.d.ts +7 -7
  154. package/esm/services/ethereumService.js +41 -41
  155. package/esm/services/ethereumService.test.d.ts +1 -1
  156. package/esm/services/ethereumService.test.js +237 -237
  157. package/esm/services/strategiesService.d.ts +2 -2
  158. package/esm/services/strategiesService.js +914 -868
  159. package/esm/services/strategiesService.test.d.ts +1 -1
  160. package/esm/services/strategiesService.test.js +108 -108
  161. package/esm/services/strategySubService.d.ts +113 -111
  162. package/esm/services/strategySubService.js +299 -285
  163. package/esm/services/strategySubService.test.d.ts +1 -1
  164. package/esm/services/strategySubService.test.js +1030 -908
  165. package/esm/services/subDataService.d.ts +282 -261
  166. package/esm/services/subDataService.js +734 -677
  167. package/esm/services/subDataService.test.d.ts +1 -1
  168. package/esm/services/subDataService.test.js +1430 -1254
  169. package/esm/services/triggerService.d.ts +268 -249
  170. package/esm/services/triggerService.js +480 -444
  171. package/esm/services/triggerService.test.d.ts +1 -1
  172. package/esm/services/triggerService.test.js +1114 -1020
  173. package/esm/services/utils.d.ts +30 -30
  174. package/esm/services/utils.js +131 -131
  175. package/esm/services/utils.test.d.ts +1 -1
  176. package/esm/services/utils.test.js +348 -348
  177. package/esm/types/contracts/generated/Erc20.d.ts +53 -53
  178. package/esm/types/contracts/generated/Erc20.js +4 -4
  179. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -129
  180. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.js +4 -4
  181. package/esm/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -20
  182. package/esm/types/contracts/generated/Legacy_AuthCheck.js +4 -4
  183. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -128
  184. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +4 -4
  185. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -246
  186. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.js +4 -4
  187. package/esm/types/contracts/generated/SubStorage.d.ts +114 -114
  188. package/esm/types/contracts/generated/SubStorage.js +4 -4
  189. package/esm/types/contracts/generated/UniMulticall.d.ts +55 -55
  190. package/esm/types/contracts/generated/UniMulticall.js +4 -4
  191. package/esm/types/contracts/generated/index.d.ts +7 -7
  192. package/esm/types/contracts/generated/index.js +1 -1
  193. package/esm/types/contracts/generated/types.d.ts +54 -54
  194. package/esm/types/contracts/generated/types.js +1 -1
  195. package/esm/types/enums.d.ts +253 -226
  196. package/esm/types/enums.js +276 -249
  197. package/esm/types/index.d.ts +264 -248
  198. package/esm/types/index.js +1 -1
  199. package/package.json +60 -60
  200. package/scripts/generateContractTypes.js +39 -39
  201. package/src/abis/Erc20.json +222 -222
  202. package/src/abis/SubStorage.json +21 -21
  203. package/src/abis/UniMulticall.json +17 -17
  204. package/src/abis/index.ts +28 -28
  205. package/src/abis/legacy_AaveV2Subscriptions.json +7 -7
  206. package/src/abis/legacy_AuthCheck.json +7 -7
  207. package/src/abis/legacy_CompoundV2Subscriptions.json +8 -8
  208. package/src/abis/legacy_MakerSubscriptions.json +8 -8
  209. package/src/automation/private/Automation.ts +44 -44
  210. package/src/automation/private/LegacyAutomation.ts +135 -135
  211. package/src/automation/private/LegacyProtocol.test.ts +23 -23
  212. package/src/automation/private/LegacyProtocol.ts +51 -51
  213. package/src/automation/private/Protocol.test.ts +23 -23
  214. package/src/automation/private/Protocol.ts +51 -51
  215. package/src/automation/private/StrategiesAutomation.test.ts +663 -663
  216. package/src/automation/private/StrategiesAutomation.ts +254 -254
  217. package/src/automation/public/ArbitrumStrategies.ts +10 -10
  218. package/src/automation/public/BaseStrategies.ts +10 -10
  219. package/src/automation/public/EthereumStrategies.ts +10 -10
  220. package/src/automation/public/OptimismStrategies.ts +10 -10
  221. package/src/automation/public/Strategies.test.ts +49 -49
  222. package/src/automation/public/legacy/LegacyAaveAutomation.ts +20 -20
  223. package/src/automation/public/legacy/LegacyCompoundAutomation.ts +20 -20
  224. package/src/automation/public/legacy/LegacyMakerAutomation.ts +20 -20
  225. package/src/configuration.ts +8 -8
  226. package/src/constants/index.ts +702 -593
  227. package/src/index.ts +39 -39
  228. package/src/services/contractService.ts +77 -77
  229. package/src/services/ethereumService.test.ts +257 -257
  230. package/src/services/ethereumService.ts +69 -69
  231. package/src/services/strategiesService.test.ts +105 -105
  232. package/src/services/strategiesService.ts +1216 -1158
  233. package/src/services/strategySubService.test.ts +1250 -1122
  234. package/src/services/strategySubService.ts +685 -648
  235. package/src/services/subDataService.test.ts +1546 -1387
  236. package/src/services/subDataService.ts +1024 -934
  237. package/src/services/triggerService.test.ts +1234 -1130
  238. package/src/services/triggerService.ts +659 -602
  239. package/src/services/utils.test.ts +430 -430
  240. package/src/services/utils.ts +162 -162
  241. package/src/types/enums.ts +273 -246
  242. package/src/types/index.ts +333 -312
  243. package/tsconfig.esm.json +8 -8
  244. package/tsconfig.json +22 -22
@@ -1,648 +1,685 @@
1
- import Dec from 'decimal.js';
2
- import { getAssetInfo } from '@defisaver/tokens';
3
-
4
- import type { OrderType } from '../types/enums';
5
- import {
6
- CloseStrategyType, CloseToAssetType,
7
- Bundles, ChainId, RatioState, Strategies,
8
- } from '../types/enums';
9
- import type { EthereumAddress, StrategyOrBundleIds } from '../types';
10
-
11
- import { STRATEGY_IDS } from '../constants';
12
-
13
- import * as subDataService from './subDataService';
14
- import * as triggerService from './triggerService';
15
- import {
16
- compareAddresses, getCloseStrategyType, requireAddress, requireAddresses,
17
- } from './utils';
18
-
19
- export const makerEncode = {
20
- repayFromSavings(
21
- bundleId: StrategyOrBundleIds,
22
- vaultId: number,
23
- triggerRepayRatio: number,
24
- targetRepayRatio: number,
25
- isBundle: boolean = true,
26
- chainId: ChainId = ChainId.Ethereum,
27
- daiAddr?: EthereumAddress,
28
- mcdCdpManagerAddr?: EthereumAddress,
29
- ) {
30
- const subData = subDataService.makerRepayFromSavingsSubData.encode(vaultId, targetRepayRatio, chainId, daiAddr, mcdCdpManagerAddr);
31
- const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRepayRatio, RatioState.UNDER);
32
-
33
- return [bundleId, isBundle, triggerData, subData];
34
- },
35
- closeOnPrice(
36
- vaultId: number,
37
- ratioState: RatioState,
38
- price: string,
39
- closeToAssetAddr: EthereumAddress,
40
- chainlinkCollAddress: EthereumAddress,
41
- chainId: ChainId = ChainId.Ethereum,
42
- daiAddr?: EthereumAddress,
43
- mcdCdpManagerAddr?: EthereumAddress,
44
- ) {
45
- requireAddresses([closeToAssetAddr, chainlinkCollAddress]);
46
-
47
- const subData = subDataService.makerCloseSubData.encode(vaultId, closeToAssetAddr, chainId, daiAddr, mcdCdpManagerAddr);
48
- const triggerData = triggerService.chainlinkPriceTrigger.encode(chainlinkCollAddress, price, ratioState);
49
-
50
- const strategyOrBundleId = compareAddresses(closeToAssetAddr, getAssetInfo('DAI', chainId).address)
51
- ? Strategies.MainnetIds.MAKER_CLOSE_ON_PRICE_TO_DAI
52
- : Strategies.MainnetIds.MAKER_CLOSE_ON_PRICE_TO_COLL;
53
-
54
- const isBundle = false;
55
-
56
- return [strategyOrBundleId, isBundle, triggerData, subData];
57
- },
58
- trailingStop(
59
- vaultId: number,
60
- triggerPercentage: number,
61
- closeToAssetAddr: EthereumAddress,
62
- chainlinkCollAddress: EthereumAddress,
63
- roundId: number,
64
- chainId: ChainId = ChainId.Ethereum,
65
- daiAddr?: EthereumAddress,
66
- mcdCdpManagerAddr?: EthereumAddress,
67
- ) {
68
- requireAddresses([closeToAssetAddr, chainlinkCollAddress]);
69
-
70
- const subData = subDataService.makerCloseSubData.encode(vaultId, closeToAssetAddr, chainId, daiAddr, mcdCdpManagerAddr);
71
- const triggerData = triggerService.trailingStopTrigger.encode(chainlinkCollAddress, triggerPercentage, roundId);
72
-
73
- const strategyOrBundleId = compareAddresses(closeToAssetAddr, getAssetInfo('DAI', chainId).address)
74
- ? Strategies.MainnetIds.MAKER_TRAILING_STOP_LOSS_TO_DAI
75
- : Strategies.MainnetIds.MAKER_TRAILING_STOP_LOSS_TO_COLL;
76
-
77
- const isBundle = false;
78
-
79
- return [strategyOrBundleId, isBundle, triggerData, subData];
80
- },
81
- leverageManagement(
82
- vaultId: number,
83
- triggerRepayRatio: string,
84
- triggerBoostRatio: string,
85
- targetBoostRatio: string,
86
- targetRepayRatio: string,
87
- boostEnabled: boolean,
88
- ) {
89
- return [
90
- vaultId,
91
- new Dec(triggerRepayRatio).mul(1e16).toString(),
92
- new Dec(triggerBoostRatio).mul(1e16).toString(),
93
- new Dec(targetBoostRatio).mul(1e16).toString(),
94
- new Dec(targetRepayRatio).mul(1e16).toString(),
95
- boostEnabled,
96
- ];
97
- },
98
- };
99
-
100
- export const liquityEncode = {
101
- closeOnPrice(
102
- priceOverOrUnder: RatioState,
103
- price: string,
104
- closeToAssetAddr: EthereumAddress,
105
- chainlinkCollAddress: EthereumAddress,
106
- chainId: ChainId = ChainId.Ethereum,
107
- collAddr?: EthereumAddress,
108
- debtAddr?: EthereumAddress,
109
- ) {
110
- requireAddresses([closeToAssetAddr, chainlinkCollAddress]);
111
-
112
- const subData = subDataService.liquityCloseSubData.encode(closeToAssetAddr, chainId, collAddr, debtAddr);
113
- const triggerData = triggerService.chainlinkPriceTrigger.encode(chainlinkCollAddress, price, priceOverOrUnder);
114
-
115
- const strategyOrBundleId = Strategies.MainnetIds.LIQUITY_CLOSE_ON_PRICE_TO_COLL;
116
-
117
- const isBundle = false;
118
-
119
- return [strategyOrBundleId, isBundle, triggerData, subData];
120
- },
121
- trailingStop(
122
- triggerPercentage: number,
123
- closeToAssetAddr: EthereumAddress,
124
- chainlinkCollAddress: EthereumAddress,
125
- roundId: number,
126
- chainId: ChainId = ChainId.Ethereum,
127
- collAddr?: EthereumAddress,
128
- debtAddr?: EthereumAddress,
129
- ) {
130
- requireAddresses([closeToAssetAddr, chainlinkCollAddress]);
131
-
132
- const subData = subDataService.liquityCloseSubData.encode(closeToAssetAddr, chainId, collAddr, debtAddr);
133
- const triggerData = triggerService.trailingStopTrigger.encode(chainlinkCollAddress, triggerPercentage, roundId);
134
-
135
- const strategyOrBundleId = Strategies.MainnetIds.LIQUITY_TRAILING_STOP_LOSS_TO_COLL;
136
-
137
- const isBundle = false;
138
-
139
- return [strategyOrBundleId, isBundle, triggerData, subData];
140
- },
141
- paybackFromChickenBondStrategySub(
142
- proxyAddress: EthereumAddress,
143
- ratio: number,
144
- sourceId: string,
145
- sourceType: number,
146
- ratioState: RatioState = RatioState.UNDER,
147
- ) {
148
- requireAddress(proxyAddress);
149
- const subData = subDataService.liquityPaybackUsingChickenBondSubData.encode(sourceId, sourceType);
150
- const triggerData = triggerService.liquityRatioTrigger.encode(proxyAddress, ratio, ratioState);
151
-
152
- const strategyId = Bundles.MainnetIds.LIQUITY_PAYBACK_USING_CHICKEN_BOND;
153
-
154
- const isBundle = true;
155
-
156
- return [strategyId, isBundle, triggerData, subData];
157
- },
158
- leverageManagement(
159
- triggerRepayRatio:string,
160
- triggerBoostRatio:string,
161
- targetBoostRatio:string,
162
- targetRepayRatio:string,
163
- boostEnabled:boolean,
164
- ) {
165
- return [
166
- new Dec(triggerRepayRatio).mul(1e16).toString(),
167
- new Dec(triggerBoostRatio).mul(1e16).toString(),
168
- new Dec(targetBoostRatio).mul(1e16).toString(),
169
- new Dec(targetRepayRatio).mul(1e16).toString(),
170
- boostEnabled,
171
- ];
172
- },
173
- dsrPayback(
174
- proxyAddress: EthereumAddress,
175
- triggerRatio: number,
176
- targetRatio: number,
177
- ) {
178
- requireAddress(proxyAddress);
179
- const subData = subDataService.liquityDsrPaybackSubData.encode(targetRatio);
180
- const triggerData = triggerService.liquityRatioTrigger.encode(proxyAddress, triggerRatio, RatioState.UNDER);
181
-
182
- const strategyOrBundleId = Strategies.MainnetIds.LIQUITY_DSR_PAYBACK;
183
-
184
- const isBundle = false;
185
-
186
- return [strategyOrBundleId, isBundle, triggerData, subData];
187
- },
188
- dsrSupply(
189
- proxyAddress: EthereumAddress,
190
- triggerRatio: number,
191
- targetRatio: number,
192
- ) {
193
- requireAddress(proxyAddress);
194
- const subData = subDataService.liquityDsrSupplySubData.encode(targetRatio);
195
- const triggerData = triggerService.liquityRatioTrigger.encode(proxyAddress, triggerRatio, RatioState.UNDER);
196
-
197
- const strategyOrBundleId = Strategies.MainnetIds.LIQUITY_DSR_SUPPLY;
198
-
199
- const isBundle = false;
200
-
201
- return [strategyOrBundleId, isBundle, triggerData, subData];
202
- },
203
- debtInFrontRepay(
204
- proxyAddress: EthereumAddress,
205
- debtInFrontMin: string,
206
- targetRatioIncrease: number,
207
- ) {
208
- requireAddress(proxyAddress);
209
- const subData = subDataService.liquityDebtInFrontRepaySubData.encode(targetRatioIncrease);
210
- const triggerData = triggerService.liquityDebtInFrontWithLimitTrigger.encode(proxyAddress, debtInFrontMin);
211
-
212
- const strategyOrBundleId = Strategies.MainnetIds.LIQUITY_DEBT_IN_FRONT_REPAY;
213
-
214
- const isBundle = false;
215
-
216
- return [strategyOrBundleId, isBundle, triggerData, subData];
217
- },
218
- };
219
-
220
- export const chickenBondsEncode = {
221
- rebond(bondId: number) {
222
- return subDataService.cBondsRebondSubData.encode(bondId);
223
- },
224
- };
225
-
226
- export const aaveV2Encode = {
227
- leverageManagement(
228
- triggerRepayRatio: number,
229
- triggerBoostRatio: number,
230
- targetBoostRatio: number,
231
- targetRepayRatio: number,
232
- boostEnabled: boolean,
233
- ) {
234
- return subDataService.aaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
235
- },
236
- };
237
-
238
- export const aaveV3Encode = {
239
- leverageManagement(
240
- triggerRepayRatio: number,
241
- triggerBoostRatio: number,
242
- targetBoostRatio: number,
243
- targetRepayRatio: number,
244
- boostEnabled: boolean,
245
- ) {
246
- let subInput = '0x';
247
-
248
- subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
249
- .padStart(32, '0'));
250
- subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
251
- .padStart(32, '0'));
252
- subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
253
- .padStart(32, '0'));
254
- subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
255
- .padStart(32, '0'));
256
- subInput = subInput.concat(boostEnabled ? '01' : '00');
257
-
258
- return subInput;
259
- },
260
- closeToAsset(
261
- strategyOrBundleId: number,
262
- isBundle: boolean = true,
263
- triggerData: {
264
- baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, ratioState: RatioState
265
- },
266
- subData: {
267
- collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number,
268
- },
269
- ) {
270
- const {
271
- collAsset, collAssetId, debtAsset, debtAssetId,
272
- } = subData;
273
- const subDataEncoded = subDataService.aaveV3QuotePriceSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId);
274
-
275
- const {
276
- baseTokenAddress, quoteTokenAddress, price, ratioState,
277
- } = triggerData;
278
- const triggerDataEncoded = triggerService.aaveV3QuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, ratioState);
279
-
280
- return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
281
- },
282
- closeToAssetWithMaximumGasPrice(
283
- strategyOrBundleId: number,
284
- isBundle: boolean = true,
285
- triggerData: {
286
- baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, ratioState: RatioState, maximumGasPrice: number
287
- },
288
- subData: {
289
- collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number,
290
- },
291
- ) {
292
- const {
293
- collAsset, collAssetId, debtAsset, debtAssetId,
294
- } = subData;
295
- const subDataEncoded = subDataService.aaveV3QuotePriceSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId);
296
-
297
- const {
298
- baseTokenAddress, quoteTokenAddress, price, maximumGasPrice, ratioState,
299
- } = triggerData;
300
- const triggerDataEncoded = triggerService.aaveV3QuotePriceWithMaximumGasPriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, ratioState, maximumGasPrice);
301
-
302
- return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
303
- },
304
- leverageManagementOnPrice(
305
- strategyOrBundleId: number,
306
- isBundle: boolean = true,
307
- triggerData: {
308
- baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, state: RatioState.UNDER
309
- },
310
- subData: {
311
- collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number,
312
- },
313
- ) {
314
- const {
315
- collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio,
316
- } = subData;
317
- const subDataEncoded = subDataService.aaveV3LeverageManagementOnPriceSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio);
318
-
319
- const {
320
- baseTokenAddress, quoteTokenAddress, price, state,
321
- } = triggerData;
322
- const triggerDataEncoded = triggerService.aaveV3QuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, state);
323
-
324
- return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
325
- },
326
- leverageManagementWithoutSubProxy(
327
- strategyOrBundleId: number,
328
- market: EthereumAddress,
329
- user: EthereumAddress,
330
- ratioState: RatioState,
331
- targetRatio: number,
332
- triggerRatio: number,
333
- ) {
334
- const isBundle = true;
335
- const subData = subDataService.aaveV3LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
336
- const triggerData = triggerService.aaveV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
337
-
338
- return [strategyOrBundleId, isBundle, triggerData, subData];
339
- },
340
- };
341
-
342
- export const compoundV2Encode = {
343
- leverageManagement(
344
- triggerRepayRatio: number,
345
- triggerBoostRatio: number,
346
- targetBoostRatio: number,
347
- targetRepayRatio: number,
348
- boostEnabled: boolean,
349
- ) {
350
- return subDataService.compoundV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
351
- },
352
- };
353
-
354
- export const compoundV3Encode = {
355
- leverageManagement(
356
- market: EthereumAddress,
357
- baseToken: EthereumAddress,
358
- triggerRepayRatio: number,
359
- triggerBoostRatio: number,
360
- targetBoostRatio: number,
361
- targetRepayRatio: number,
362
- boostEnabled: boolean,
363
- isEOA: boolean,
364
- ) {
365
- return subDataService.compoundV3LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
366
- },
367
- };
368
-
369
- export const compoundV3L2Encode = {
370
- leverageManagement(
371
- market: EthereumAddress,
372
- baseToken: EthereumAddress,
373
- triggerRepayRatio: number,
374
- triggerBoostRatio: number,
375
- targetBoostRatio: number,
376
- targetRepayRatio: number,
377
- boostEnabled: boolean,
378
- ) {
379
- return subDataService.compoundV3L2LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
380
- },
381
- };
382
-
383
- export const morphoAaveV2Encode = {
384
- leverageManagement(
385
- triggerRepayRatio: number,
386
- triggerBoostRatio: number,
387
- targetBoostRatio: number,
388
- targetRepayRatio: number,
389
- boostEnabled: boolean,
390
- ) {
391
- return subDataService.morphoAaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
392
- },
393
- };
394
-
395
- export const exchangeEncode = {
396
- dca(
397
- fromToken: EthereumAddress,
398
- toToken: EthereumAddress,
399
- amount: string,
400
- timestamp: number,
401
- interval: number,
402
- network: ChainId,
403
- ) {
404
- requireAddresses([fromToken, toToken]);
405
- const subData = subDataService.exchangeDcaSubData.encode(fromToken, toToken, amount, interval);
406
- const triggerData = triggerService.exchangeTimestampTrigger.encode(timestamp, interval);
407
-
408
- const strategyId = STRATEGY_IDS[network].EXCHANGE_DCA;
409
-
410
- return [strategyId, false, triggerData, subData];
411
- },
412
- limitOrder(
413
- fromToken: EthereumAddress,
414
- toToken: EthereumAddress,
415
- amount: string,
416
- targetPrice: string,
417
- goodUntil: string | number,
418
- orderType: OrderType,
419
- ) {
420
- return subDataService.exchangeLimitOrderSubData.encode(fromToken, toToken, amount, targetPrice, goodUntil, orderType);
421
- },
422
- };
423
-
424
- export const sparkEncode = {
425
- leverageManagement(
426
- triggerRepayRatio: number,
427
- triggerBoostRatio: number,
428
- targetBoostRatio: number,
429
- targetRepayRatio: number,
430
- boostEnabled: boolean,
431
- ) {
432
- let subInput = '0x';
433
-
434
- subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
435
- .padStart(32, '0'));
436
- subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
437
- .padStart(32, '0'));
438
- subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
439
- .padStart(32, '0'));
440
- subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
441
- .padStart(32, '0'));
442
- subInput = subInput.concat(boostEnabled ? '01' : '00');
443
-
444
- return subInput;
445
- },
446
- closeToAsset(
447
- strategyOrBundleId: number,
448
- isBundle: boolean = true,
449
- triggerData: {
450
- baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, ratioState: RatioState
451
- },
452
- subData: {
453
- collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number,
454
- },
455
- ) {
456
- const {
457
- collAsset, collAssetId, debtAsset, debtAssetId,
458
- } = subData;
459
- const subDataEncoded = subDataService.sparkQuotePriceSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId);
460
-
461
- const {
462
- baseTokenAddress, quoteTokenAddress, price, ratioState,
463
- } = triggerData;
464
- const triggerDataEncoded = triggerService.sparkQuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, ratioState);
465
-
466
- return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
467
- },
468
- };
469
-
470
- export const crvUSDEncode = {
471
- leverageManagement(
472
- owner: EthereumAddress,
473
- controllerAddr: EthereumAddress,
474
- ratioState: RatioState,
475
- targetRatio: number,
476
- triggerRatio: number,
477
- collTokenAddr: EthereumAddress,
478
- crvUSDAddr: EthereumAddress,
479
- ) {
480
- const subData = subDataService.crvUSDLeverageManagementSubData.encode(controllerAddr, ratioState, targetRatio, collTokenAddr, crvUSDAddr);
481
- const triggerData = triggerService.crvUSDRatioTrigger.encode(owner, controllerAddr, triggerRatio, ratioState);
482
-
483
- // over is boost, under is repay
484
- const strategyOrBundleId = ratioState === RatioState.OVER ? Bundles.MainnetIds.CRVUSD_BOOST : Bundles.MainnetIds.CRVUSD_REPAY;
485
- const isBundle = true;
486
-
487
- return [strategyOrBundleId, isBundle, triggerData, subData];
488
- },
489
- payback(
490
- proxyAddress: EthereumAddress,
491
- addressToPullTokensFrom: EthereumAddress,
492
- positionOwner: EthereumAddress,
493
- paybackAmount: string,
494
- crvUSDAddr: EthereumAddress,
495
- controllerAddr: EthereumAddress,
496
- minHealthRatio: number,
497
- ) {
498
- const subData = subDataService.crvUSDPaybackSubData.encode(controllerAddr, addressToPullTokensFrom, positionOwner, paybackAmount, crvUSDAddr);
499
- const triggerData = triggerService.crvUsdHealthRatioTrigger.encode(proxyAddress, controllerAddr, minHealthRatio);
500
-
501
- const strategyId = Strategies.MainnetIds.CURVEUSD_PAYBACK;
502
- const isBundle = false;
503
-
504
- return [strategyId, isBundle, triggerData, subData];
505
- },
506
- };
507
-
508
- export const morphoBlueEncode = {
509
- leverageManagement(
510
- marketId: string,
511
- loanToken: EthereumAddress,
512
- collToken: EthereumAddress,
513
- oracle: EthereumAddress,
514
- irm: EthereumAddress,
515
- lltv: string,
516
- ratioState: RatioState,
517
- targetRatio: number,
518
- triggerRatio: number,
519
- user: EthereumAddress,
520
- isEOA: boolean,
521
- network: ChainId,
522
- ) {
523
- const subData = subDataService.morphoBlueLeverageManagementSubData.encode(loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA);
524
-
525
- const triggerData = triggerService.morphoBlueRatioTrigger.encode(marketId, user, triggerRatio, ratioState);
526
-
527
- // over is boost, under is repay
528
- const isBoost = ratioState === RatioState.OVER;
529
- let strategyOrBundleId;
530
-
531
- if (network === ChainId.Base) {
532
- return [isBoost ? Bundles.BaseIds.MORPHO_BLUE_BOOST : Bundles.BaseIds.MORPHO_BLUE_REPAY, true, triggerData, subData];
533
- }
534
-
535
- if (isBoost) strategyOrBundleId = isEOA ? Bundles.MainnetIds.MORPHO_BLUE_EOA_BOOST : Bundles.MainnetIds.MORPHO_BLUE_BOOST;
536
- else strategyOrBundleId = isEOA ? Bundles.MainnetIds.MORPHO_BLUE_EOA_REPAY : Bundles.MainnetIds.MORPHO_BLUE_REPAY;
537
- const isBundle = true;
538
-
539
- return [strategyOrBundleId, isBundle, triggerData, subData];
540
- },
541
- leverageManagementOnPrice(
542
- strategyOrBundleId: number,
543
- isBundle: boolean = true,
544
- loanToken: EthereumAddress,
545
- collToken: EthereumAddress,
546
- oracle: EthereumAddress,
547
- irm: EthereumAddress,
548
- lltv: string,
549
- user: EthereumAddress,
550
- targetRatio: number,
551
- price: number,
552
- priceState: RatioState,
553
- ) {
554
- const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user);
555
- const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
556
- return [strategyOrBundleId, isBundle, triggerData, subData];
557
- },
558
- };
559
-
560
- export const liquityV2Encode = {
561
- leverageManagement(
562
- market: EthereumAddress,
563
- troveId: string,
564
- collToken: EthereumAddress,
565
- boldToken: EthereumAddress,
566
- ratioState: RatioState,
567
- targetRatio: number,
568
- triggerRatio: number,
569
- strategyOrBundleId: number,
570
- ) {
571
- const isBundle = true;
572
- const subData = subDataService.liquityV2LeverageManagementSubData.encode(market, troveId, collToken, boldToken, ratioState, targetRatio);
573
- const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
574
-
575
- return [strategyOrBundleId, isBundle, triggerData, subData];
576
- },
577
- closeOnPrice(
578
- strategyOrBundleId: number,
579
- market: EthereumAddress,
580
- troveId: string,
581
- collToken: EthereumAddress,
582
- boldToken: EthereumAddress,
583
- stopLossPrice: number = 0,
584
- stopLossType: CloseToAssetType = CloseToAssetType.DEBT,
585
- takeProfitPrice: number = 0,
586
- takeProfitType: CloseToAssetType = CloseToAssetType.COLLATERAL,
587
- ) {
588
- const isBundle = true;
589
- const closeType = getCloseStrategyType(stopLossPrice, stopLossType, takeProfitPrice, takeProfitType);
590
-
591
- const subData = subDataService.liquityV2CloseSubData.encode(market, troveId, collToken, boldToken, closeType);
592
- const triggerData = triggerService.closePriceTrigger.encode(collToken, stopLossPrice, takeProfitPrice);
593
-
594
- return [strategyOrBundleId, isBundle, triggerData, subData];
595
- },
596
- leverageManagementOnPrice(
597
- strategyOrBundleId: number,
598
- market: EthereumAddress,
599
- price: number,
600
- state: RatioState,
601
- troveId: string,
602
- collToken: EthereumAddress,
603
- boldToken: EthereumAddress,
604
- targetRatio: number,
605
- isRepayOnPrice: boolean,
606
- ) {
607
- const subDataEncoded = subDataService.liquityV2LeverageManagementOnPriceSubData.encode(
608
- market, troveId, collToken, boldToken, targetRatio, isRepayOnPrice,
609
- );
610
-
611
- const triggerDataEncoded = triggerService.liquityV2QuotePriceTrigger.encode(market, price, state);
612
- const isBundle = true;
613
- return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
614
- },
615
- payback(
616
- market: EthereumAddress,
617
- troveId: string,
618
- boldToken: EthereumAddress,
619
- targetRatio: number,
620
- ratioState: RatioState,
621
- triggerRatio: number,
622
- ) {
623
- const strategyId = Strategies.MainnetIds.LIQUITY_V2_PAYBACK;
624
- const isBundle = false;
625
-
626
- const subData = subDataService.liquityV2PaybackSubData.encode(market, troveId, boldToken, targetRatio, ratioState);
627
- const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
628
-
629
- return [strategyId, isBundle, triggerData, subData];
630
- },
631
- };
632
-
633
- export const fluidEncode = {
634
- leverageManagement(
635
- nftId: string,
636
- vault: EthereumAddress,
637
- ratioState: RatioState,
638
- targetRatio: number,
639
- triggerRatio: number,
640
- strategyOrBundleId: number,
641
- ) {
642
- const isBundle = true;
643
- const subData = subDataService.fluidLeverageManagementSubData.encode(nftId, vault, ratioState, targetRatio);
644
- const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
645
-
646
- return [strategyOrBundleId, isBundle, triggerData, subData];
647
- },
648
- };
1
+ import Dec from 'decimal.js';
2
+ import { getAssetInfo } from '@defisaver/tokens';
3
+
4
+ import type { OrderType } from '../types/enums';
5
+ import {
6
+ CloseStrategyType, CloseToAssetType,
7
+ Bundles, ChainId, RatioState, Strategies,
8
+ } from '../types/enums';
9
+ import type { EthereumAddress, StrategyOrBundleIds } from '../types';
10
+
11
+ import { STRATEGY_IDS } from '../constants';
12
+
13
+ import * as subDataService from './subDataService';
14
+ import * as triggerService from './triggerService';
15
+ import {
16
+ compareAddresses, getCloseStrategyType, requireAddress, requireAddresses,
17
+ } from './utils';
18
+
19
+ export const makerEncode = {
20
+ repayFromSavings(
21
+ bundleId: StrategyOrBundleIds,
22
+ vaultId: number,
23
+ triggerRepayRatio: number,
24
+ targetRepayRatio: number,
25
+ isBundle: boolean = true,
26
+ chainId: ChainId = ChainId.Ethereum,
27
+ daiAddr?: EthereumAddress,
28
+ mcdCdpManagerAddr?: EthereumAddress,
29
+ ) {
30
+ const subData = subDataService.makerRepayFromSavingsSubData.encode(vaultId, targetRepayRatio, chainId, daiAddr, mcdCdpManagerAddr);
31
+ const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRepayRatio, RatioState.UNDER);
32
+
33
+ return [bundleId, isBundle, triggerData, subData];
34
+ },
35
+ closeOnPrice(
36
+ vaultId: number,
37
+ ratioState: RatioState,
38
+ price: string,
39
+ closeToAssetAddr: EthereumAddress,
40
+ chainlinkCollAddress: EthereumAddress,
41
+ chainId: ChainId = ChainId.Ethereum,
42
+ daiAddr?: EthereumAddress,
43
+ mcdCdpManagerAddr?: EthereumAddress,
44
+ ) {
45
+ requireAddresses([closeToAssetAddr, chainlinkCollAddress]);
46
+
47
+ const subData = subDataService.makerCloseSubData.encode(vaultId, closeToAssetAddr, chainId, daiAddr, mcdCdpManagerAddr);
48
+ const triggerData = triggerService.chainlinkPriceTrigger.encode(chainlinkCollAddress, price, ratioState);
49
+
50
+ const strategyOrBundleId = compareAddresses(closeToAssetAddr, getAssetInfo('DAI', chainId).address)
51
+ ? Strategies.MainnetIds.MAKER_CLOSE_ON_PRICE_TO_DAI
52
+ : Strategies.MainnetIds.MAKER_CLOSE_ON_PRICE_TO_COLL;
53
+
54
+ const isBundle = false;
55
+
56
+ return [strategyOrBundleId, isBundle, triggerData, subData];
57
+ },
58
+ trailingStop(
59
+ vaultId: number,
60
+ triggerPercentage: number,
61
+ closeToAssetAddr: EthereumAddress,
62
+ chainlinkCollAddress: EthereumAddress,
63
+ roundId: number,
64
+ chainId: ChainId = ChainId.Ethereum,
65
+ daiAddr?: EthereumAddress,
66
+ mcdCdpManagerAddr?: EthereumAddress,
67
+ ) {
68
+ requireAddresses([closeToAssetAddr, chainlinkCollAddress]);
69
+
70
+ const subData = subDataService.makerCloseSubData.encode(vaultId, closeToAssetAddr, chainId, daiAddr, mcdCdpManagerAddr);
71
+ const triggerData = triggerService.trailingStopTrigger.encode(chainlinkCollAddress, triggerPercentage, roundId);
72
+
73
+ const strategyOrBundleId = compareAddresses(closeToAssetAddr, getAssetInfo('DAI', chainId).address)
74
+ ? Strategies.MainnetIds.MAKER_TRAILING_STOP_LOSS_TO_DAI
75
+ : Strategies.MainnetIds.MAKER_TRAILING_STOP_LOSS_TO_COLL;
76
+
77
+ const isBundle = false;
78
+
79
+ return [strategyOrBundleId, isBundle, triggerData, subData];
80
+ },
81
+ leverageManagement(
82
+ vaultId: number,
83
+ triggerRepayRatio: string,
84
+ triggerBoostRatio: string,
85
+ targetBoostRatio: string,
86
+ targetRepayRatio: string,
87
+ boostEnabled: boolean,
88
+ ) {
89
+ return [
90
+ vaultId,
91
+ new Dec(triggerRepayRatio).mul(1e16).toString(),
92
+ new Dec(triggerBoostRatio).mul(1e16).toString(),
93
+ new Dec(targetBoostRatio).mul(1e16).toString(),
94
+ new Dec(targetRepayRatio).mul(1e16).toString(),
95
+ boostEnabled,
96
+ ];
97
+ },
98
+ };
99
+
100
+ export const liquityEncode = {
101
+ closeOnPrice(
102
+ priceOverOrUnder: RatioState,
103
+ price: string,
104
+ closeToAssetAddr: EthereumAddress,
105
+ chainlinkCollAddress: EthereumAddress,
106
+ chainId: ChainId = ChainId.Ethereum,
107
+ collAddr?: EthereumAddress,
108
+ debtAddr?: EthereumAddress,
109
+ ) {
110
+ requireAddresses([closeToAssetAddr, chainlinkCollAddress]);
111
+
112
+ const subData = subDataService.liquityCloseSubData.encode(closeToAssetAddr, chainId, collAddr, debtAddr);
113
+ const triggerData = triggerService.chainlinkPriceTrigger.encode(chainlinkCollAddress, price, priceOverOrUnder);
114
+
115
+ const strategyOrBundleId = Strategies.MainnetIds.LIQUITY_CLOSE_ON_PRICE_TO_COLL;
116
+
117
+ const isBundle = false;
118
+
119
+ return [strategyOrBundleId, isBundle, triggerData, subData];
120
+ },
121
+ trailingStop(
122
+ triggerPercentage: number,
123
+ closeToAssetAddr: EthereumAddress,
124
+ chainlinkCollAddress: EthereumAddress,
125
+ roundId: number,
126
+ chainId: ChainId = ChainId.Ethereum,
127
+ collAddr?: EthereumAddress,
128
+ debtAddr?: EthereumAddress,
129
+ ) {
130
+ requireAddresses([closeToAssetAddr, chainlinkCollAddress]);
131
+
132
+ const subData = subDataService.liquityCloseSubData.encode(closeToAssetAddr, chainId, collAddr, debtAddr);
133
+ const triggerData = triggerService.trailingStopTrigger.encode(chainlinkCollAddress, triggerPercentage, roundId);
134
+
135
+ const strategyOrBundleId = Strategies.MainnetIds.LIQUITY_TRAILING_STOP_LOSS_TO_COLL;
136
+
137
+ const isBundle = false;
138
+
139
+ return [strategyOrBundleId, isBundle, triggerData, subData];
140
+ },
141
+ paybackFromChickenBondStrategySub(
142
+ proxyAddress: EthereumAddress,
143
+ ratio: number,
144
+ sourceId: string,
145
+ sourceType: number,
146
+ ratioState: RatioState = RatioState.UNDER,
147
+ ) {
148
+ requireAddress(proxyAddress);
149
+ const subData = subDataService.liquityPaybackUsingChickenBondSubData.encode(sourceId, sourceType);
150
+ const triggerData = triggerService.liquityRatioTrigger.encode(proxyAddress, ratio, ratioState);
151
+
152
+ const strategyId = Bundles.MainnetIds.LIQUITY_PAYBACK_USING_CHICKEN_BOND;
153
+
154
+ const isBundle = true;
155
+
156
+ return [strategyId, isBundle, triggerData, subData];
157
+ },
158
+ leverageManagement(
159
+ triggerRepayRatio:string,
160
+ triggerBoostRatio:string,
161
+ targetBoostRatio:string,
162
+ targetRepayRatio:string,
163
+ boostEnabled:boolean,
164
+ ) {
165
+ return [
166
+ new Dec(triggerRepayRatio).mul(1e16).toString(),
167
+ new Dec(triggerBoostRatio).mul(1e16).toString(),
168
+ new Dec(targetBoostRatio).mul(1e16).toString(),
169
+ new Dec(targetRepayRatio).mul(1e16).toString(),
170
+ boostEnabled,
171
+ ];
172
+ },
173
+ dsrPayback(
174
+ proxyAddress: EthereumAddress,
175
+ triggerRatio: number,
176
+ targetRatio: number,
177
+ ) {
178
+ requireAddress(proxyAddress);
179
+ const subData = subDataService.liquityDsrPaybackSubData.encode(targetRatio);
180
+ const triggerData = triggerService.liquityRatioTrigger.encode(proxyAddress, triggerRatio, RatioState.UNDER);
181
+
182
+ const strategyOrBundleId = Strategies.MainnetIds.LIQUITY_DSR_PAYBACK;
183
+
184
+ const isBundle = false;
185
+
186
+ return [strategyOrBundleId, isBundle, triggerData, subData];
187
+ },
188
+ dsrSupply(
189
+ proxyAddress: EthereumAddress,
190
+ triggerRatio: number,
191
+ targetRatio: number,
192
+ ) {
193
+ requireAddress(proxyAddress);
194
+ const subData = subDataService.liquityDsrSupplySubData.encode(targetRatio);
195
+ const triggerData = triggerService.liquityRatioTrigger.encode(proxyAddress, triggerRatio, RatioState.UNDER);
196
+
197
+ const strategyOrBundleId = Strategies.MainnetIds.LIQUITY_DSR_SUPPLY;
198
+
199
+ const isBundle = false;
200
+
201
+ return [strategyOrBundleId, isBundle, triggerData, subData];
202
+ },
203
+ debtInFrontRepay(
204
+ proxyAddress: EthereumAddress,
205
+ debtInFrontMin: string,
206
+ targetRatioIncrease: number,
207
+ ) {
208
+ requireAddress(proxyAddress);
209
+ const subData = subDataService.liquityDebtInFrontRepaySubData.encode(targetRatioIncrease);
210
+ const triggerData = triggerService.liquityDebtInFrontWithLimitTrigger.encode(proxyAddress, debtInFrontMin);
211
+
212
+ const strategyOrBundleId = Strategies.MainnetIds.LIQUITY_DEBT_IN_FRONT_REPAY;
213
+
214
+ const isBundle = false;
215
+
216
+ return [strategyOrBundleId, isBundle, triggerData, subData];
217
+ },
218
+ };
219
+
220
+ export const chickenBondsEncode = {
221
+ rebond(bondId: number) {
222
+ return subDataService.cBondsRebondSubData.encode(bondId);
223
+ },
224
+ };
225
+
226
+ export const aaveV2Encode = {
227
+ leverageManagement(
228
+ triggerRepayRatio: number,
229
+ triggerBoostRatio: number,
230
+ targetBoostRatio: number,
231
+ targetRepayRatio: number,
232
+ boostEnabled: boolean,
233
+ ) {
234
+ return subDataService.aaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
235
+ },
236
+ };
237
+
238
+ export const aaveV3Encode = {
239
+ leverageManagement(
240
+ triggerRepayRatio: number,
241
+ triggerBoostRatio: number,
242
+ targetBoostRatio: number,
243
+ targetRepayRatio: number,
244
+ boostEnabled: boolean,
245
+ ) {
246
+ let subInput = '0x';
247
+
248
+ subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
249
+ .padStart(32, '0'));
250
+ subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
251
+ .padStart(32, '0'));
252
+ subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
253
+ .padStart(32, '0'));
254
+ subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
255
+ .padStart(32, '0'));
256
+ subInput = subInput.concat(boostEnabled ? '01' : '00');
257
+
258
+ return subInput;
259
+ },
260
+ closeToAsset(
261
+ strategyOrBundleId: number,
262
+ isBundle: boolean = true,
263
+ triggerData: {
264
+ baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, ratioState: RatioState
265
+ },
266
+ subData: {
267
+ collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number,
268
+ },
269
+ ) {
270
+ const {
271
+ collAsset, collAssetId, debtAsset, debtAssetId,
272
+ } = subData;
273
+ const subDataEncoded = subDataService.aaveV3QuotePriceSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId);
274
+
275
+ const {
276
+ baseTokenAddress, quoteTokenAddress, price, ratioState,
277
+ } = triggerData;
278
+ const triggerDataEncoded = triggerService.aaveV3QuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, ratioState);
279
+
280
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
281
+ },
282
+ closeToAssetWithMaximumGasPrice(
283
+ strategyOrBundleId: number,
284
+ isBundle: boolean = true,
285
+ triggerData: {
286
+ baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, ratioState: RatioState, maximumGasPrice: number
287
+ },
288
+ subData: {
289
+ collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number,
290
+ },
291
+ ) {
292
+ const {
293
+ collAsset, collAssetId, debtAsset, debtAssetId,
294
+ } = subData;
295
+ const subDataEncoded = subDataService.aaveV3QuotePriceSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId);
296
+
297
+ const {
298
+ baseTokenAddress, quoteTokenAddress, price, maximumGasPrice, ratioState,
299
+ } = triggerData;
300
+ const triggerDataEncoded = triggerService.aaveV3QuotePriceWithMaximumGasPriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, ratioState, maximumGasPrice);
301
+
302
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
303
+ },
304
+ leverageManagementOnPrice(
305
+ strategyOrBundleId: number,
306
+ isBundle: boolean = true,
307
+ triggerData: {
308
+ baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, state: RatioState.UNDER
309
+ },
310
+ subData: {
311
+ collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number,
312
+ },
313
+ ) {
314
+ const {
315
+ collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio,
316
+ } = subData;
317
+ const subDataEncoded = subDataService.aaveV3LeverageManagementOnPriceSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio);
318
+
319
+ const {
320
+ baseTokenAddress, quoteTokenAddress, price, state,
321
+ } = triggerData;
322
+ const triggerDataEncoded = triggerService.aaveV3QuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, state);
323
+
324
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
325
+ },
326
+ leverageManagementWithoutSubProxy(
327
+ strategyOrBundleId: number,
328
+ market: EthereumAddress,
329
+ user: EthereumAddress,
330
+ ratioState: RatioState,
331
+ targetRatio: number,
332
+ triggerRatio: number,
333
+ ) {
334
+ const isBundle = true;
335
+ const subData = subDataService.aaveV3LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
336
+ const triggerData = triggerService.aaveV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
337
+
338
+ return [strategyOrBundleId, isBundle, triggerData, subData];
339
+ },
340
+ };
341
+
342
+ export const compoundV2Encode = {
343
+ leverageManagement(
344
+ triggerRepayRatio: number,
345
+ triggerBoostRatio: number,
346
+ targetBoostRatio: number,
347
+ targetRepayRatio: number,
348
+ boostEnabled: boolean,
349
+ ) {
350
+ return subDataService.compoundV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
351
+ },
352
+ };
353
+
354
+ export const compoundV3Encode = {
355
+ leverageManagement(
356
+ market: EthereumAddress,
357
+ baseToken: EthereumAddress,
358
+ triggerRepayRatio: number,
359
+ triggerBoostRatio: number,
360
+ targetBoostRatio: number,
361
+ targetRepayRatio: number,
362
+ boostEnabled: boolean,
363
+ isEOA: boolean,
364
+ ) {
365
+ return subDataService.compoundV3LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
366
+ },
367
+ leverageManagementOnPrice(
368
+ strategyOrBundleId: number,
369
+ market: EthereumAddress,
370
+ collToken: EthereumAddress,
371
+ baseToken: EthereumAddress,
372
+ targetRatio: number,
373
+ price: number,
374
+ priceState: RatioState,
375
+ ratioState: RatioState, // REPAY for repay on price, BOOST for boost on price
376
+ user: EthereumAddress,
377
+ ) {
378
+ const isBundle = true;
379
+ const subDataEncoded = subDataService.compoundV3LeverageManagementOnPriceSubData.encode(market, collToken, baseToken, targetRatio, ratioState, user);
380
+ const triggerDataEncoded = triggerService.compoundV3PriceTrigger.encode(market, collToken, user, price, priceState);
381
+
382
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
383
+ },
384
+ closeOnPrice(
385
+ strategyOrBundleId: number,
386
+ market: EthereumAddress,
387
+ collToken: EthereumAddress,
388
+ baseToken: EthereumAddress,
389
+ stopLossPrice: number = 0,
390
+ stopLossType: CloseToAssetType = CloseToAssetType.DEBT,
391
+ takeProfitPrice: number = 0,
392
+ takeProfitType: CloseToAssetType = CloseToAssetType.COLLATERAL,
393
+ user: EthereumAddress,
394
+ ) {
395
+ const isBundle = true;
396
+ const closeType = getCloseStrategyType(stopLossPrice, stopLossType, takeProfitPrice, takeProfitType);
397
+
398
+ const subDataEncoded = subDataService.compoundV3CloseSubData.encode(market, collToken, baseToken, closeType, user);
399
+ const triggerDataEncoded = triggerService.compoundV3PriceRangeTrigger.encode(market, collToken, stopLossPrice, takeProfitPrice);
400
+
401
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
402
+ },
403
+ };
404
+
405
+ export const compoundV3L2Encode = {
406
+ leverageManagement(
407
+ market: EthereumAddress,
408
+ baseToken: EthereumAddress,
409
+ triggerRepayRatio: number,
410
+ triggerBoostRatio: number,
411
+ targetBoostRatio: number,
412
+ targetRepayRatio: number,
413
+ boostEnabled: boolean,
414
+ isEOA: boolean = false,
415
+ ) {
416
+ return subDataService.compoundV3L2LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
417
+ },
418
+ };
419
+
420
+ export const morphoAaveV2Encode = {
421
+ leverageManagement(
422
+ triggerRepayRatio: number,
423
+ triggerBoostRatio: number,
424
+ targetBoostRatio: number,
425
+ targetRepayRatio: number,
426
+ boostEnabled: boolean,
427
+ ) {
428
+ return subDataService.morphoAaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
429
+ },
430
+ };
431
+
432
+ export const exchangeEncode = {
433
+ dca(
434
+ fromToken: EthereumAddress,
435
+ toToken: EthereumAddress,
436
+ amount: string,
437
+ timestamp: number,
438
+ interval: number,
439
+ network: ChainId,
440
+ ) {
441
+ requireAddresses([fromToken, toToken]);
442
+ const subData = subDataService.exchangeDcaSubData.encode(fromToken, toToken, amount, interval);
443
+ const triggerData = triggerService.exchangeTimestampTrigger.encode(timestamp, interval);
444
+
445
+ const strategyId = STRATEGY_IDS[network].EXCHANGE_DCA;
446
+
447
+ return [strategyId, false, triggerData, subData];
448
+ },
449
+ limitOrder(
450
+ fromToken: EthereumAddress,
451
+ toToken: EthereumAddress,
452
+ amount: string,
453
+ targetPrice: string,
454
+ goodUntil: string | number,
455
+ orderType: OrderType,
456
+ ) {
457
+ return subDataService.exchangeLimitOrderSubData.encode(fromToken, toToken, amount, targetPrice, goodUntil, orderType);
458
+ },
459
+ };
460
+
461
+ export const sparkEncode = {
462
+ leverageManagement(
463
+ triggerRepayRatio: number,
464
+ triggerBoostRatio: number,
465
+ targetBoostRatio: number,
466
+ targetRepayRatio: number,
467
+ boostEnabled: boolean,
468
+ ) {
469
+ let subInput = '0x';
470
+
471
+ subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
472
+ .padStart(32, '0'));
473
+ subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
474
+ .padStart(32, '0'));
475
+ subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
476
+ .padStart(32, '0'));
477
+ subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
478
+ .padStart(32, '0'));
479
+ subInput = subInput.concat(boostEnabled ? '01' : '00');
480
+
481
+ return subInput;
482
+ },
483
+ closeToAsset(
484
+ strategyOrBundleId: number,
485
+ isBundle: boolean = true,
486
+ triggerData: {
487
+ baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, ratioState: RatioState
488
+ },
489
+ subData: {
490
+ collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number,
491
+ },
492
+ ) {
493
+ const {
494
+ collAsset, collAssetId, debtAsset, debtAssetId,
495
+ } = subData;
496
+ const subDataEncoded = subDataService.sparkQuotePriceSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId);
497
+
498
+ const {
499
+ baseTokenAddress, quoteTokenAddress, price, ratioState,
500
+ } = triggerData;
501
+ const triggerDataEncoded = triggerService.sparkQuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, ratioState);
502
+
503
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
504
+ },
505
+ };
506
+
507
+ export const crvUSDEncode = {
508
+ leverageManagement(
509
+ owner: EthereumAddress,
510
+ controllerAddr: EthereumAddress,
511
+ ratioState: RatioState,
512
+ targetRatio: number,
513
+ triggerRatio: number,
514
+ collTokenAddr: EthereumAddress,
515
+ crvUSDAddr: EthereumAddress,
516
+ ) {
517
+ const subData = subDataService.crvUSDLeverageManagementSubData.encode(controllerAddr, ratioState, targetRatio, collTokenAddr, crvUSDAddr);
518
+ const triggerData = triggerService.crvUSDRatioTrigger.encode(owner, controllerAddr, triggerRatio, ratioState);
519
+
520
+ // over is boost, under is repay
521
+ const strategyOrBundleId = ratioState === RatioState.OVER ? Bundles.MainnetIds.CRVUSD_BOOST : Bundles.MainnetIds.CRVUSD_REPAY;
522
+ const isBundle = true;
523
+
524
+ return [strategyOrBundleId, isBundle, triggerData, subData];
525
+ },
526
+ payback(
527
+ proxyAddress: EthereumAddress,
528
+ addressToPullTokensFrom: EthereumAddress,
529
+ positionOwner: EthereumAddress,
530
+ paybackAmount: string,
531
+ crvUSDAddr: EthereumAddress,
532
+ controllerAddr: EthereumAddress,
533
+ minHealthRatio: number,
534
+ ) {
535
+ const subData = subDataService.crvUSDPaybackSubData.encode(controllerAddr, addressToPullTokensFrom, positionOwner, paybackAmount, crvUSDAddr);
536
+ const triggerData = triggerService.crvUsdHealthRatioTrigger.encode(proxyAddress, controllerAddr, minHealthRatio);
537
+
538
+ const strategyId = Strategies.MainnetIds.CURVEUSD_PAYBACK;
539
+ const isBundle = false;
540
+
541
+ return [strategyId, isBundle, triggerData, subData];
542
+ },
543
+ };
544
+
545
+ export const morphoBlueEncode = {
546
+ leverageManagement(
547
+ marketId: string,
548
+ loanToken: EthereumAddress,
549
+ collToken: EthereumAddress,
550
+ oracle: EthereumAddress,
551
+ irm: EthereumAddress,
552
+ lltv: string,
553
+ ratioState: RatioState,
554
+ targetRatio: number,
555
+ triggerRatio: number,
556
+ user: EthereumAddress,
557
+ isEOA: boolean,
558
+ network: ChainId,
559
+ ) {
560
+ const subData = subDataService.morphoBlueLeverageManagementSubData.encode(loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA);
561
+
562
+ const triggerData = triggerService.morphoBlueRatioTrigger.encode(marketId, user, triggerRatio, ratioState);
563
+
564
+ // over is boost, under is repay
565
+ const isBoost = ratioState === RatioState.OVER;
566
+ let strategyOrBundleId;
567
+
568
+ if (network === ChainId.Base) {
569
+ return [isBoost ? Bundles.BaseIds.MORPHO_BLUE_BOOST : Bundles.BaseIds.MORPHO_BLUE_REPAY, true, triggerData, subData];
570
+ }
571
+
572
+ if (isBoost) strategyOrBundleId = isEOA ? Bundles.MainnetIds.MORPHO_BLUE_EOA_BOOST : Bundles.MainnetIds.MORPHO_BLUE_BOOST;
573
+ else strategyOrBundleId = isEOA ? Bundles.MainnetIds.MORPHO_BLUE_EOA_REPAY : Bundles.MainnetIds.MORPHO_BLUE_REPAY;
574
+ const isBundle = true;
575
+
576
+ return [strategyOrBundleId, isBundle, triggerData, subData];
577
+ },
578
+ leverageManagementOnPrice(
579
+ strategyOrBundleId: number,
580
+ isBundle: boolean = true,
581
+ loanToken: EthereumAddress,
582
+ collToken: EthereumAddress,
583
+ oracle: EthereumAddress,
584
+ irm: EthereumAddress,
585
+ lltv: string,
586
+ user: EthereumAddress,
587
+ targetRatio: number,
588
+ price: number,
589
+ priceState: RatioState,
590
+ ) {
591
+ const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user);
592
+ const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
593
+ return [strategyOrBundleId, isBundle, triggerData, subData];
594
+ },
595
+ };
596
+
597
+ export const liquityV2Encode = {
598
+ leverageManagement(
599
+ market: EthereumAddress,
600
+ troveId: string,
601
+ collToken: EthereumAddress,
602
+ boldToken: EthereumAddress,
603
+ ratioState: RatioState,
604
+ targetRatio: number,
605
+ triggerRatio: number,
606
+ strategyOrBundleId: number,
607
+ ) {
608
+ const isBundle = true;
609
+ const subData = subDataService.liquityV2LeverageManagementSubData.encode(market, troveId, collToken, boldToken, ratioState, targetRatio);
610
+ const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
611
+
612
+ return [strategyOrBundleId, isBundle, triggerData, subData];
613
+ },
614
+ closeOnPrice(
615
+ strategyOrBundleId: number,
616
+ market: EthereumAddress,
617
+ troveId: string,
618
+ collToken: EthereumAddress,
619
+ boldToken: EthereumAddress,
620
+ stopLossPrice: number = 0,
621
+ stopLossType: CloseToAssetType = CloseToAssetType.DEBT,
622
+ takeProfitPrice: number = 0,
623
+ takeProfitType: CloseToAssetType = CloseToAssetType.COLLATERAL,
624
+ ) {
625
+ const isBundle = true;
626
+ const closeType = getCloseStrategyType(stopLossPrice, stopLossType, takeProfitPrice, takeProfitType);
627
+
628
+ const subData = subDataService.liquityV2CloseSubData.encode(market, troveId, collToken, boldToken, closeType);
629
+ const triggerData = triggerService.closePriceTrigger.encode(collToken, stopLossPrice, takeProfitPrice);
630
+
631
+ return [strategyOrBundleId, isBundle, triggerData, subData];
632
+ },
633
+ leverageManagementOnPrice(
634
+ strategyOrBundleId: number,
635
+ market: EthereumAddress,
636
+ price: number,
637
+ state: RatioState,
638
+ troveId: string,
639
+ collToken: EthereumAddress,
640
+ boldToken: EthereumAddress,
641
+ targetRatio: number,
642
+ isRepayOnPrice: boolean,
643
+ ) {
644
+ const subDataEncoded = subDataService.liquityV2LeverageManagementOnPriceSubData.encode(
645
+ market, troveId, collToken, boldToken, targetRatio, isRepayOnPrice,
646
+ );
647
+
648
+ const triggerDataEncoded = triggerService.liquityV2QuotePriceTrigger.encode(market, price, state);
649
+ const isBundle = true;
650
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
651
+ },
652
+ payback(
653
+ market: EthereumAddress,
654
+ troveId: string,
655
+ boldToken: EthereumAddress,
656
+ targetRatio: number,
657
+ ratioState: RatioState,
658
+ triggerRatio: number,
659
+ ) {
660
+ const strategyId = Strategies.MainnetIds.LIQUITY_V2_PAYBACK;
661
+ const isBundle = false;
662
+
663
+ const subData = subDataService.liquityV2PaybackSubData.encode(market, troveId, boldToken, targetRatio, ratioState);
664
+ const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
665
+
666
+ return [strategyId, isBundle, triggerData, subData];
667
+ },
668
+ };
669
+
670
+ export const fluidEncode = {
671
+ leverageManagement(
672
+ nftId: string,
673
+ vault: EthereumAddress,
674
+ ratioState: RatioState,
675
+ targetRatio: number,
676
+ triggerRatio: number,
677
+ strategyOrBundleId: number,
678
+ ) {
679
+ const isBundle = true;
680
+ const subData = subDataService.fluidLeverageManagementSubData.encode(nftId, vault, ratioState, targetRatio);
681
+ const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
682
+
683
+ return [strategyOrBundleId, isBundle, triggerData, subData];
684
+ },
685
+ };