@defisaver/automation-sdk 3.1.4-dev-2 → 3.1.5

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