@defisaver/automation-sdk 3.0.9 → 3.1.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 (242) hide show
  1. package/.babelrc +3 -3
  2. package/.editorconfig +9 -9
  3. package/.env.dev +4 -4
  4. package/.eslintignore +6 -7
  5. package/.eslintrc.js +39 -41
  6. package/.mocharc.json +5 -0
  7. package/.nvmrc +1 -0
  8. package/README.md +47 -41
  9. package/cjs/abis/Erc20.json +223 -0
  10. package/cjs/abis/SubStorage.json +21 -0
  11. package/cjs/abis/UniMulticall.json +17 -0
  12. package/cjs/abis/index.d.ts +9 -0
  13. package/cjs/abis/index.js +30 -0
  14. package/cjs/abis/legacy_AaveV2Subscriptions.json +8 -0
  15. package/cjs/abis/legacy_AuthCheck.json +8 -0
  16. package/cjs/abis/legacy_CompoundV2Subscriptions.json +9 -0
  17. package/cjs/abis/legacy_MakerSubscriptions.json +9 -0
  18. package/cjs/automation/private/Automation.d.ts +12 -0
  19. package/cjs/automation/private/Automation.js +42 -0
  20. package/cjs/automation/private/LegacyAutomation.d.ts +25 -0
  21. package/cjs/automation/private/LegacyAutomation.js +118 -0
  22. package/cjs/automation/private/LegacyProtocol.d.ts +22 -0
  23. package/cjs/automation/private/LegacyProtocol.js +41 -0
  24. package/cjs/automation/private/LegacyProtocol.test.d.ts +1 -0
  25. package/cjs/automation/private/LegacyProtocol.test.js +25 -0
  26. package/cjs/automation/private/Protocol.d.ts +22 -0
  27. package/cjs/automation/private/Protocol.js +41 -0
  28. package/cjs/automation/private/Protocol.test.d.ts +1 -0
  29. package/cjs/automation/private/Protocol.test.js +25 -0
  30. package/cjs/automation/private/StrategiesAutomation.d.ts +33 -0
  31. package/cjs/automation/private/StrategiesAutomation.js +181 -0
  32. package/cjs/automation/private/StrategiesAutomation.test.d.ts +1 -0
  33. package/cjs/automation/private/StrategiesAutomation.test.js +671 -0
  34. package/cjs/automation/public/ArbitrumStrategies.d.ts +5 -0
  35. package/cjs/automation/public/ArbitrumStrategies.js +13 -0
  36. package/cjs/automation/public/BaseStrategies.d.ts +5 -0
  37. package/cjs/automation/public/BaseStrategies.js +13 -0
  38. package/cjs/automation/public/EthereumStrategies.d.ts +5 -0
  39. package/cjs/automation/public/EthereumStrategies.js +13 -0
  40. package/cjs/automation/public/OptimismStrategies.d.ts +5 -0
  41. package/cjs/automation/public/OptimismStrategies.js +13 -0
  42. package/cjs/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -0
  43. package/cjs/automation/public/legacy/LegacyAaveAutomation.js +20 -0
  44. package/cjs/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -0
  45. package/cjs/automation/public/legacy/LegacyCompoundAutomation.js +20 -0
  46. package/cjs/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -0
  47. package/cjs/automation/public/legacy/LegacyMakerAutomation.js +20 -0
  48. package/cjs/configuration.d.ts +1 -0
  49. package/cjs/configuration.js +12 -0
  50. package/cjs/constants/index.d.ts +28 -0
  51. package/cjs/constants/index.js +474 -0
  52. package/cjs/index.d.ts +23 -0
  53. package/cjs/index.js +65 -0
  54. package/cjs/services/contractService.d.ts +12 -0
  55. package/cjs/services/contractService.js +54 -0
  56. package/cjs/services/ethereumService.d.ts +7 -0
  57. package/cjs/services/ethereumService.js +49 -0
  58. package/cjs/services/ethereumService.test.d.ts +1 -0
  59. package/cjs/services/ethereumService.test.js +242 -0
  60. package/cjs/services/strategiesService.d.ts +2 -0
  61. package/cjs/services/strategiesService.js +723 -0
  62. package/cjs/services/strategiesService.test.d.ts +1 -0
  63. package/cjs/services/strategiesService.test.js +110 -0
  64. package/cjs/services/strategySubService.d.ts +100 -0
  65. package/cjs/services/strategySubService.js +264 -0
  66. package/cjs/services/strategySubService.test.d.ts +1 -0
  67. package/cjs/services/strategySubService.test.js +934 -0
  68. package/cjs/services/subDataService.d.ts +192 -0
  69. package/cjs/services/subDataService.js +475 -0
  70. package/cjs/services/subDataService.test.d.ts +1 -0
  71. package/cjs/services/subDataService.test.js +1282 -0
  72. package/cjs/services/triggerService.d.ts +191 -0
  73. package/cjs/services/triggerService.js +367 -0
  74. package/cjs/services/triggerService.test.d.ts +1 -0
  75. package/cjs/services/triggerService.test.js +926 -0
  76. package/cjs/services/utils.d.ts +25 -0
  77. package/cjs/services/utils.js +131 -0
  78. package/cjs/services/utils.test.d.ts +1 -0
  79. package/cjs/services/utils.test.js +376 -0
  80. package/cjs/types/contracts/generated/Erc20.d.ts +53 -0
  81. package/cjs/types/contracts/generated/Erc20.js +5 -0
  82. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -0
  83. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.js +5 -0
  84. package/cjs/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -0
  85. package/cjs/types/contracts/generated/Legacy_AuthCheck.js +5 -0
  86. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -0
  87. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +5 -0
  88. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -0
  89. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.js +5 -0
  90. package/cjs/types/contracts/generated/SubStorage.d.ts +114 -0
  91. package/cjs/types/contracts/generated/SubStorage.js +5 -0
  92. package/cjs/types/contracts/generated/UniMulticall.d.ts +55 -0
  93. package/cjs/types/contracts/generated/UniMulticall.js +5 -0
  94. package/cjs/types/contracts/generated/index.d.ts +7 -0
  95. package/cjs/types/contracts/generated/index.js +2 -0
  96. package/cjs/types/contracts/generated/types.d.ts +54 -0
  97. package/cjs/types/contracts/generated/types.js +2 -0
  98. package/cjs/types/enums.d.ts +181 -0
  99. package/cjs/types/enums.js +203 -0
  100. package/cjs/types/index.d.ts +224 -0
  101. package/cjs/types/index.js +2 -0
  102. package/esm/abis/Erc20.json +223 -223
  103. package/esm/abis/SubStorage.json +21 -17
  104. package/esm/abis/UniMulticall.json +17 -14
  105. package/esm/abis/index.d.ts +9 -9
  106. package/esm/abis/index.js +18 -30
  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 -42
  113. package/esm/automation/private/LegacyAutomation.d.ts +25 -25
  114. package/esm/automation/private/LegacyAutomation.js +112 -118
  115. package/esm/automation/private/LegacyProtocol.d.ts +22 -22
  116. package/esm/automation/private/LegacyProtocol.js +38 -41
  117. package/esm/automation/private/LegacyProtocol.test.d.ts +1 -1
  118. package/esm/automation/private/LegacyProtocol.test.js +20 -25
  119. package/esm/automation/private/Protocol.d.ts +22 -22
  120. package/esm/automation/private/Protocol.js +38 -41
  121. package/esm/automation/private/Protocol.test.d.ts +1 -1
  122. package/esm/automation/private/Protocol.test.js +20 -25
  123. package/esm/automation/private/StrategiesAutomation.d.ts +33 -33
  124. package/esm/automation/private/StrategiesAutomation.js +175 -181
  125. package/esm/automation/private/StrategiesAutomation.test.d.ts +1 -1
  126. package/esm/automation/private/StrategiesAutomation.test.js +666 -671
  127. package/esm/automation/public/ArbitrumStrategies.d.ts +5 -5
  128. package/esm/automation/public/ArbitrumStrategies.js +7 -13
  129. package/esm/automation/public/BaseStrategies.d.ts +5 -0
  130. package/esm/automation/public/BaseStrategies.js +7 -0
  131. package/esm/automation/public/EthereumStrategies.d.ts +5 -5
  132. package/esm/automation/public/EthereumStrategies.js +7 -13
  133. package/esm/automation/public/OptimismStrategies.d.ts +5 -5
  134. package/esm/automation/public/OptimismStrategies.js +7 -13
  135. package/esm/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -6
  136. package/esm/automation/public/legacy/LegacyAaveAutomation.js +14 -20
  137. package/esm/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -6
  138. package/esm/automation/public/legacy/LegacyCompoundAutomation.js +14 -20
  139. package/esm/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -6
  140. package/esm/automation/public/legacy/LegacyMakerAutomation.js +14 -20
  141. package/esm/configuration.d.ts +1 -1
  142. package/esm/configuration.js +7 -12
  143. package/esm/constants/index.d.ts +28 -24
  144. package/esm/constants/index.js +468 -426
  145. package/esm/index.d.ts +23 -22
  146. package/esm/index.js +23 -63
  147. package/esm/services/contractService.d.ts +12 -12
  148. package/esm/services/contractService.js +45 -54
  149. package/esm/services/ethereumService.d.ts +7 -7
  150. package/esm/services/ethereumService.js +41 -49
  151. package/esm/services/ethereumService.test.d.ts +1 -1
  152. package/esm/services/ethereumService.test.js +237 -242
  153. package/esm/services/strategiesService.d.ts +2 -2
  154. package/esm/services/strategiesService.js +696 -722
  155. package/esm/services/strategiesService.test.d.ts +1 -1
  156. package/esm/services/strategiesService.test.js +108 -110
  157. package/esm/services/strategySubService.d.ts +100 -100
  158. package/esm/services/strategySubService.js +235 -264
  159. package/esm/services/strategySubService.test.d.ts +1 -1
  160. package/esm/services/strategySubService.test.js +906 -934
  161. package/esm/services/subDataService.d.ts +192 -192
  162. package/esm/services/subDataService.js +469 -475
  163. package/esm/services/subDataService.test.d.ts +1 -1
  164. package/esm/services/subDataService.test.js +1254 -1282
  165. package/esm/services/triggerService.d.ts +191 -191
  166. package/esm/services/triggerService.js +338 -367
  167. package/esm/services/triggerService.test.d.ts +1 -1
  168. package/esm/services/triggerService.test.js +901 -926
  169. package/esm/services/utils.d.ts +25 -25
  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 -376
  173. package/esm/types/contracts/generated/Erc20.d.ts +53 -53
  174. package/esm/types/contracts/generated/Erc20.js +4 -5
  175. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -129
  176. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.js +4 -5
  177. package/esm/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -20
  178. package/esm/types/contracts/generated/Legacy_AuthCheck.js +4 -5
  179. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -128
  180. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +4 -5
  181. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -246
  182. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.js +4 -5
  183. package/esm/types/contracts/generated/SubStorage.d.ts +114 -114
  184. package/esm/types/contracts/generated/SubStorage.js +4 -5
  185. package/esm/types/contracts/generated/UniMulticall.d.ts +55 -55
  186. package/esm/types/contracts/generated/UniMulticall.js +4 -5
  187. package/esm/types/contracts/generated/index.d.ts +7 -7
  188. package/esm/types/contracts/generated/index.js +1 -2
  189. package/esm/types/contracts/generated/types.d.ts +54 -54
  190. package/esm/types/contracts/generated/types.js +1 -2
  191. package/esm/types/enums.d.ts +181 -168
  192. package/esm/types/enums.js +200 -188
  193. package/esm/types/index.d.ts +224 -220
  194. package/esm/types/index.js +1 -2
  195. package/package.json +61 -71
  196. package/scripts/generateContractTypes.js +39 -39
  197. package/src/abis/Erc20.json +222 -222
  198. package/src/abis/SubStorage.json +21 -17
  199. package/src/abis/UniMulticall.json +17 -14
  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 -0
  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 +492 -441
  222. package/src/index.ts +39 -38
  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 +934 -932
  228. package/src/services/strategySubService.test.ts +1119 -1119
  229. package/src/services/strategySubService.ts +518 -518
  230. package/src/services/subDataService.test.ts +1387 -1387
  231. package/src/services/subDataService.ts +644 -644
  232. package/src/services/triggerService.test.ts +1004 -1004
  233. package/src/services/triggerService.ts +449 -449
  234. package/src/services/utils.test.ts +430 -430
  235. package/src/services/utils.ts +103 -103
  236. package/src/types/enums.ts +197 -182
  237. package/src/types/index.ts +279 -273
  238. package/tsconfig.esm.json +8 -0
  239. package/tsconfig.json +22 -79
  240. package/umd/index.js +17 -133
  241. package/.tests.sh +0 -3
  242. package/webpack.umd.js +0 -52
@@ -1,934 +1,906 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const chai_1 = require("chai");
30
- const decimal_js_1 = __importDefault(require("decimal.js"));
31
- const sdk_1 = require("@defisaver/sdk");
32
- const tokens_1 = require("@defisaver/tokens");
33
- const web3Utils = __importStar(require("web3-utils"));
34
- const enums_1 = require("../types/enums");
35
- require("../configuration");
36
- const strategySubService_1 = require("./strategySubService");
37
- describe('Feature: strategySubService.ts', () => {
38
- describe('When testing strategySubService.makerEncode', () => {
39
- // @ts-ignore // TODO - this requires change in @defisaver/tokens
40
- const mcdCdpManagerAddr = (0, sdk_1.otherAddresses)(enums_1.ChainId.Ethereum).McdCdpManager;
41
- describe('repayFromSavings()', () => {
42
- const examples = [
43
- [
44
- [
45
- enums_1.Bundles.MainnetIds.MAKER_REPAY_FROM_SMART_SAVINGS_RARI,
46
- true,
47
- ['0x00000000000000000000000000000000000000000000000000000000000000de000000000000000000000000000000000000000000000000136dcc951d8c00000000000000000000000000000000000000000000000000000000000000000001'],
48
- [
49
- '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
50
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005ef30b9986345249bc32d8928b7ee64de9435e39',
51
- ],
52
- ],
53
- [
54
- enums_1.Bundles.MainnetIds.MAKER_REPAY_FROM_SMART_SAVINGS_RARI,
55
- 222,
56
- 140,
57
- 180,
58
- true,
59
- enums_1.ChainId.Ethereum,
60
- (0, tokens_1.getAssetInfo)('DAI').address,
61
- mcdCdpManagerAddr,
62
- ]
63
- ]
64
- ];
65
- examples.forEach(([expected, actual]) => {
66
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
67
- (0, chai_1.expect)(strategySubService_1.makerEncode.repayFromSavings(...actual)).to.eql(expected);
68
- });
69
- });
70
- });
71
- describe('closeOnPrice()', () => {
72
- const examples = [
73
- [
74
- [
75
- enums_1.Strategies.MainnetIds.MAKER_CLOSE_ON_PRICE_TO_DAI,
76
- false,
77
- ['0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5990000000000000000000000000000000000000000000000000000000002cc9e4c0000000000000000000000000000000000000000000000000000000000000000'],
78
- [
79
- '0x0000000000000000000000000000000000000000000000000000000000000078', '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
80
- '0x0000000000000000000000005ef30b9986345249bc32d8928b7ee64de9435e39',
81
- ],
82
- ],
83
- [
84
- 120,
85
- enums_1.RatioState.OVER,
86
- '0.469643',
87
- (0, tokens_1.getAssetInfo)('DAI').address,
88
- (0, tokens_1.getAssetInfo)('WBTC').address,
89
- enums_1.ChainId.Ethereum,
90
- ]
91
- ]
92
- ];
93
- examples.forEach(([expected, actual]) => {
94
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
95
- (0, chai_1.expect)(strategySubService_1.makerEncode.closeOnPrice(...actual)).to.eql(expected);
96
- });
97
- });
98
- });
99
- describe('trailingStop()', () => {
100
- const examples = [
101
- [
102
- [
103
- enums_1.Strategies.MainnetIds.MAKER_TRAILING_STOP_LOSS_TO_COLL,
104
- false,
105
- ['0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000000000000000000000000000000000055ae82600000000000000000000000000000000000000000000000000000000000000007b'],
106
- [
107
- '0x000000000000000000000000000000000000000000000000000000000000096e', '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
108
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005ef30b9986345249bc32d8928b7ee64de9435e39',
109
- ],
110
- ],
111
- [
112
- 2414,
113
- 230,
114
- (0, tokens_1.getAssetInfo)('WBTC').address,
115
- (0, tokens_1.getAssetInfo)('WBTC').address,
116
- 123,
117
- enums_1.ChainId.Ethereum,
118
- ]
119
- ]
120
- ];
121
- examples.forEach(([expected, actual]) => {
122
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
123
- (0, chai_1.expect)(strategySubService_1.makerEncode.trailingStop(...actual)).to.eql(expected);
124
- });
125
- });
126
- });
127
- describe('leverageManagement()', () => {
128
- const examples = [
129
- [
130
- [
131
- 5791,
132
- new decimal_js_1.default('210').mul(1e16).toString(),
133
- new decimal_js_1.default('290').mul(1e16).toString(),
134
- new decimal_js_1.default('240').mul(1e16).toString(),
135
- new decimal_js_1.default('240').mul(1e16).toString(),
136
- true,
137
- ],
138
- [
139
- 5791, '210', '290', '240', '240', true,
140
- ]
141
- ]
142
- ];
143
- examples.forEach(([expected, actual]) => {
144
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
145
- (0, chai_1.expect)(strategySubService_1.makerEncode.leverageManagement(...actual)).to.eql(expected);
146
- });
147
- });
148
- });
149
- });
150
- describe('When testing strategySubService.liquityEncode', () => {
151
- describe('closeOnPrice()', () => {
152
- const examples = [
153
- [
154
- [
155
- enums_1.Strategies.MainnetIds.LIQUITY_CLOSE_ON_PRICE_TO_COLL,
156
- false,
157
- ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000001c027053000000000000000000000000000000000000000000000000000000000000000000'],
158
- [
159
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
160
- ],
161
- ],
162
- [
163
- enums_1.RatioState.OVER,
164
- '1203',
165
- (0, tokens_1.getAssetInfo)('WETH').address,
166
- (0, tokens_1.getAssetInfo)('WETH').address,
167
- ]
168
- ]
169
- ];
170
- examples.forEach(([expected, actual]) => {
171
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
172
- (0, chai_1.expect)(strategySubService_1.liquityEncode.closeOnPrice(...actual)).to.eql(expected);
173
- });
174
- });
175
- });
176
- describe('trailingStop()', () => {
177
- const examples = [
178
- [
179
- [
180
- enums_1.Strategies.MainnetIds.LIQUITY_TRAILING_STOP_LOSS_TO_COLL,
181
- false,
182
- ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000055ae826000000000000000000000000000000000000000000000000000000000000000c97'],
183
- [
184
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
185
- ],
186
- ],
187
- [
188
- 230,
189
- (0, tokens_1.getAssetInfo)('WETH').address,
190
- (0, tokens_1.getAssetInfo)('WETH').address,
191
- 3223,
192
- ]
193
- ]
194
- ];
195
- examples.forEach(([expected, actual]) => {
196
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
197
- (0, chai_1.expect)(strategySubService_1.liquityEncode.trailingStop(...actual)).to.eql(expected);
198
- });
199
- });
200
- });
201
- describe('leverageManagement()', () => {
202
- const examples = [
203
- [
204
- [
205
- new decimal_js_1.default('210').mul(1e16).toString(),
206
- new decimal_js_1.default('290').mul(1e16).toString(),
207
- new decimal_js_1.default('240').mul(1e16).toString(),
208
- new decimal_js_1.default('240').mul(1e16).toString(),
209
- false,
210
- ],
211
- [
212
- '210', '290', '240', '240', false,
213
- ]
214
- ]
215
- ];
216
- examples.forEach(([expected, actual]) => {
217
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
218
- (0, chai_1.expect)(strategySubService_1.liquityEncode.leverageManagement(...actual)).to.eql(expected);
219
- });
220
- });
221
- });
222
- describe('paybackFromChickenBondStrategySub()', () => {
223
- const examples = [
224
- [
225
- [
226
- enums_1.Bundles.MainnetIds.LIQUITY_PAYBACK_USING_CHICKEN_BOND,
227
- true,
228
- ['0x0000000000000000000000002439d211133afab8f2b819b1066c7e434ad94e9e0000000000000000000000000000000000000000000000002dcbf4840eca00000000000000000000000000000000000000000000000000000000000000000000'],
229
- [
230
- '0x000000000000000000000000000000000000000000000000000000000000007b', '0x0000000000000000000000000000000000000000000000000000000000000000',
231
- '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x000000000000000000000000b9d7dddca9a4ac480991865efef82e01273f79c3',
232
- ],
233
- ],
234
- [
235
- web3Utils.toChecksumAddress('0x2439d211133AFaB8F2B819B1066c7E434Ad94E9e'),
236
- 330,
237
- '123',
238
- 0,
239
- enums_1.RatioState.OVER
240
- ]
241
- ]
242
- ];
243
- examples.forEach(([expected, actual]) => {
244
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
245
- (0, chai_1.expect)(strategySubService_1.liquityEncode.paybackFromChickenBondStrategySub(...actual)).to.eql(expected);
246
- });
247
- });
248
- });
249
- describe('dsrPayback()', () => {
250
- const examples = [
251
- [
252
- [
253
- enums_1.Strategies.MainnetIds.LIQUITY_DSR_PAYBACK,
254
- false,
255
- ['0x0000000000000000000000002439d211133afab8f2b819b1066c7e434ad94e9e000000000000000000000000000000000000000000000000250dbeda8e4b00000000000000000000000000000000000000000000000000000000000000000001'],
256
- [
257
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x00000000000000000000000000000000000000000000000029a2241af62c0000',
258
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
259
- ],
260
- ],
261
- [web3Utils.toChecksumAddress('0x2439d211133AFaB8F2B819B1066c7E434Ad94E9e'), 267, 300]
262
- ]
263
- ];
264
- examples.forEach(([expected, actual]) => {
265
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
266
- (0, chai_1.expect)(strategySubService_1.liquityEncode.dsrPayback(...actual)).to.eql(expected);
267
- });
268
- });
269
- });
270
- describe('debtInFrontRepay()', () => {
271
- const examples = [
272
- [
273
- [
274
- enums_1.Strategies.MainnetIds.LIQUITY_DEBT_IN_FRONT_REPAY,
275
- false,
276
- ['0x000000000000000000000000235d6a8db3c57c3f7b4eba749e1738db6093732a0000000000000000000000000000000000000000019d971e4fe8401e74000000'],
277
- [
278
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
279
- '0x000000000000000000000000000000000000000000000000063eb89da4ed0000', '0x0000000000000000000000000000000000000000000000000000000000000001',
280
- '0x0000000000000000000000000000000000000000000000000000000000000000'
281
- ],
282
- ],
283
- [web3Utils.toChecksumAddress('0x235d6A8DB3C57c3f7b4ebA749E1738Db6093732a'), '500000000', 45]
284
- ]
285
- ];
286
- examples.forEach(([expected, actual]) => {
287
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
288
- (0, chai_1.expect)(strategySubService_1.liquityEncode.debtInFrontRepay(...actual)).to.eql(expected);
289
- });
290
- });
291
- });
292
- });
293
- describe('When testing strategySubService.chickenBondsEncode', () => {
294
- describe('rebond()', () => {
295
- const examples = [
296
- [
297
- ['0x00000000000000000000000000000000000000000000000000000000000005e3'],
298
- [1507]
299
- ]
300
- ];
301
- examples.forEach(([expected, actual]) => {
302
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
303
- (0, chai_1.expect)(strategySubService_1.chickenBondsEncode.rebond(...actual)).to.eql(expected);
304
- });
305
- });
306
- });
307
- });
308
- describe('When testing strategySubService.aaveV2Encode', () => {
309
- describe('leverageManagement()', () => {
310
- const examples = [
311
- [
312
- [new decimal_js_1.default(160).mul(1e16).toString(), new decimal_js_1.default(220).mul(1e16).toString(), new decimal_js_1.default(180).mul(1e16).toString(), new decimal_js_1.default(190).mul(1e16).toString(), true],
313
- [160, 220, 180, 190, true]
314
- ],
315
- [
316
- [new decimal_js_1.default(160).mul(1e16).toString(), new decimal_js_1.default(200).mul(1e16).toString(), new decimal_js_1.default(180).mul(1e16).toString(), new decimal_js_1.default(190).mul(1e16).toString(), false],
317
- [160, 200, 180, 190, false]
318
- ],
319
- ];
320
- examples.forEach(([expected, actual]) => {
321
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
322
- (0, chai_1.expect)(strategySubService_1.aaveV2Encode.leverageManagement(...actual)).to.eql(expected);
323
- });
324
- });
325
- });
326
- });
327
- describe('When testing strategySubService.aaveV3Encode', () => {
328
- describe('leverageManagement()', () => {
329
- const examples = [
330
- [
331
- '0x000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e000001',
332
- [160, 220, 180, 190, true]
333
- ],
334
- [
335
- '0x000000000000000016345785d8a0000000000000000000001bc16d674ec80000000000000000000018fae27693b4000000000000000000001a5e27eef13e000000',
336
- [160, 200, 180, 190, false]
337
- ],
338
- ];
339
- examples.forEach(([expected, actual]) => {
340
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
341
- (0, chai_1.expect)(strategySubService_1.aaveV3Encode.leverageManagement(...actual)).to.eql(expected);
342
- });
343
- });
344
- });
345
- describe('closeToAsset()', () => {
346
- const examples = [
347
- [
348
- [
349
- enums_1.Bundles.MainnetIds.AAVE_V3_CLOSE_TO_COLLATERAL,
350
- true,
351
- ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000026e1f9c6000000000000000000000000000000000000000000000000000000000000000000'],
352
- [
353
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000015',
354
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000020',
355
- '0x0000000000000000000000000000000000000000000000000000000000000000',
356
- ],
357
- ],
358
- [
359
- enums_1.Bundles.MainnetIds.AAVE_V3_CLOSE_TO_COLLATERAL,
360
- true,
361
- {
362
- baseTokenAddress: (0, tokens_1.getAssetInfo)('WETH').address, quoteTokenAddress: (0, tokens_1.getAssetInfo)('DAI').address, price: 1670, ratioState: enums_1.RatioState.OVER
363
- },
364
- {
365
- collAsset: (0, tokens_1.getAssetInfo)('WETH').address, collAssetId: 21, debtAsset: (0, tokens_1.getAssetInfo)('DAI').address, debtAssetId: 32,
366
- },
367
- ]
368
- ],
369
- [
370
- [
371
- enums_1.Bundles.MainnetIds.AAVE_V3_CLOSE_TO_DEBT,
372
- true,
373
- ['0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000084d000000000000000000000000000000000000000000000000000000000000000001'],
374
- [
375
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000015',
376
- '0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca', '0x0000000000000000000000000000000000000000000000000000000000000020',
377
- '0x0000000000000000000000000000000000000000000000000000000000000000',
378
- ],
379
- ],
380
- [
381
- enums_1.Bundles.MainnetIds.AAVE_V3_CLOSE_TO_DEBT,
382
- true,
383
- {
384
- baseTokenAddress: (0, tokens_1.getAssetInfo)('LINK').address, quoteTokenAddress: (0, tokens_1.getAssetInfo)('DAI').address, price: 0.00544, ratioState: enums_1.RatioState.UNDER
385
- },
386
- {
387
- collAsset: (0, tokens_1.getAssetInfo)('DAI').address, collAssetId: 21, debtAsset: (0, tokens_1.getAssetInfo)('LINK').address, debtAssetId: 32,
388
- },
389
- ]
390
- ]
391
- ];
392
- examples.forEach(([expected, actual]) => {
393
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
394
- (0, chai_1.expect)(strategySubService_1.aaveV3Encode.closeToAsset(...actual)).to.eql(expected);
395
- });
396
- });
397
- });
398
- describe('closeToAssetWithMaximumGasPrice()', () => {
399
- const examples = [
400
- [
401
- [
402
- enums_1.Bundles.MainnetIds.AAVE_V3_CLOSE_TO_COLLATERAL,
403
- true,
404
- [
405
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000026e1f9c6000000000000000000000000000000000000000000000000000000000000000000',
406
- '0x00000000000000000000000000000000000000000000000000000002cb417800',
407
- ],
408
- [
409
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000015',
410
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000020',
411
- '0x0000000000000000000000000000000000000000000000000000000000000000',
412
- ],
413
- ],
414
- [
415
- enums_1.Bundles.MainnetIds.AAVE_V3_CLOSE_TO_COLLATERAL,
416
- true,
417
- {
418
- baseTokenAddress: (0, tokens_1.getAssetInfo)('WETH').address, quoteTokenAddress: (0, tokens_1.getAssetInfo)('DAI').address, price: 1670, ratioState: enums_1.RatioState.OVER, maximumGasPrice: 12,
419
- },
420
- {
421
- collAsset: (0, tokens_1.getAssetInfo)('WETH').address, collAssetId: 21, debtAsset: (0, tokens_1.getAssetInfo)('DAI').address, debtAssetId: 32,
422
- },
423
- ]
424
- ],
425
- [
426
- [
427
- enums_1.Bundles.MainnetIds.AAVE_V3_CLOSE_TO_DEBT,
428
- true,
429
- [
430
- '0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000084d000000000000000000000000000000000000000000000000000000000000000001',
431
- '0x0000000000000000000000000000000000000000000000000000004a817c8000',
432
- ],
433
- [
434
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000015',
435
- '0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca', '0x0000000000000000000000000000000000000000000000000000000000000020',
436
- '0x0000000000000000000000000000000000000000000000000000000000000000',
437
- ],
438
- ],
439
- [
440
- enums_1.Bundles.MainnetIds.AAVE_V3_CLOSE_TO_DEBT,
441
- true,
442
- {
443
- baseTokenAddress: (0, tokens_1.getAssetInfo)('LINK').address, quoteTokenAddress: (0, tokens_1.getAssetInfo)('DAI').address, price: 0.00544, ratioState: enums_1.RatioState.UNDER, maximumGasPrice: 320,
444
- },
445
- {
446
- collAsset: (0, tokens_1.getAssetInfo)('DAI').address, collAssetId: 21, debtAsset: (0, tokens_1.getAssetInfo)('LINK').address, debtAssetId: 32,
447
- },
448
- ]
449
- ]
450
- ];
451
- examples.forEach(([expected, actual]) => {
452
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
453
- (0, chai_1.expect)(strategySubService_1.aaveV3Encode.closeToAssetWithMaximumGasPrice(...actual)).to.eql(expected);
454
- });
455
- });
456
- });
457
- describe('openOrder()', () => {
458
- const examples = [
459
- [
460
- [
461
- enums_1.Bundles.MainnetIds.AAVE_V3_OPEN_ORDER_FROM_COLLATERAL,
462
- true,
463
- ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000007acead34980000000000000000000000000000000000000000000000000000000000000001'],
464
- [
465
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
466
- '0x000000000000000000000000000000000000000000000000000000000000000a',
467
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
468
- '0x0000000000000000000000000000000000000000000000000000000000000004',
469
- '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
470
- '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
471
- '0x0000000000000000000000000000000000000000000000000000000000000000',
472
- ],
473
- ],
474
- [
475
- enums_1.Bundles.MainnetIds.AAVE_V3_OPEN_ORDER_FROM_COLLATERAL,
476
- true,
477
- {
478
- baseTokenAddress: (0, tokens_1.getAssetInfo)('WETH').address, quoteTokenAddress: (0, tokens_1.getAssetInfo)('DAI').address, price: 5274.534678, state: enums_1.RatioState.UNDER
479
- },
480
- {
481
- collAsset: (0, tokens_1.getAssetInfo)('WETH').address,
482
- collAssetId: 10,
483
- debtAsset: (0, tokens_1.getAssetInfo)('DAI').address,
484
- debtAssetId: 4,
485
- marketAddr: '0x2f39d218133afab8f2b819b1066c7e434ad94e9e',
486
- targetRatio: 200,
487
- },
488
- ]
489
- ],
490
- ];
491
- examples.forEach(([expected, actual]) => {
492
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
493
- (0, chai_1.expect)(strategySubService_1.aaveV3Encode.openOrder(...actual)).to.eql(expected);
494
- });
495
- });
496
- });
497
- });
498
- describe('When testing strategySubService.compoundV2Encode', () => {
499
- describe('leverageManagement()', () => {
500
- const examples = [
501
- [
502
- [new decimal_js_1.default(160).mul(1e16).toString(), new decimal_js_1.default(220).mul(1e16).toString(), new decimal_js_1.default(180).mul(1e16).toString(), new decimal_js_1.default(190).mul(1e16).toString(), true],
503
- [160, 220, 180, 190, true]
504
- ],
505
- [
506
- [new decimal_js_1.default(160).mul(1e16).toString(), new decimal_js_1.default(200).mul(1e16).toString(), new decimal_js_1.default(180).mul(1e16).toString(), new decimal_js_1.default(190).mul(1e16).toString(), false],
507
- [160, 200, 180, 190, false]
508
- ],
509
- ];
510
- examples.forEach(([expected, actual]) => {
511
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
512
- (0, chai_1.expect)(strategySubService_1.compoundV2Encode.leverageManagement(...actual)).to.eql(expected);
513
- });
514
- });
515
- });
516
- });
517
- describe('When testing strategySubService.compoundV3Encode', () => {
518
- describe('leverageManagement()', () => {
519
- const examples = [
520
- [
521
- [
522
- web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
523
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('USDC', enums_1.ChainId.Ethereum).address),
524
- new decimal_js_1.default(160).mul(1e16).toString(),
525
- new decimal_js_1.default(220).mul(1e16).toString(),
526
- new decimal_js_1.default(180).mul(1e16).toString(),
527
- new decimal_js_1.default(190).mul(1e16).toString(),
528
- true, false,
529
- ],
530
- [
531
- web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
532
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('USDC', enums_1.ChainId.Ethereum).address),
533
- 160, 220, 180, 190,
534
- true, false,
535
- ]
536
- ],
537
- [
538
- [
539
- web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
540
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WETH', enums_1.ChainId.Ethereum).address),
541
- new decimal_js_1.default(160).mul(1e16).toString(),
542
- new decimal_js_1.default(210).mul(1e16).toString(),
543
- new decimal_js_1.default(180).mul(1e16).toString(),
544
- new decimal_js_1.default(190).mul(1e16).toString(),
545
- false, true,
546
- ],
547
- [
548
- web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
549
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WETH', enums_1.ChainId.Ethereum).address),
550
- 160, 210, 180, 190,
551
- false, true,
552
- ]
553
- ],
554
- ];
555
- examples.forEach(([expected, actual]) => {
556
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
557
- (0, chai_1.expect)(strategySubService_1.compoundV3Encode.leverageManagement(...actual)).to.eql(expected);
558
- });
559
- });
560
- });
561
- });
562
- describe('When testing strategySubService.morphoAaveV2Encode', () => {
563
- describe('leverageManagement()', () => {
564
- const examples = [
565
- [
566
- [new decimal_js_1.default(160).mul(1e16).toString(), new decimal_js_1.default(220).mul(1e16).toString(), new decimal_js_1.default(180).mul(1e16).toString(), new decimal_js_1.default(190).mul(1e16).toString(), true],
567
- [160, 220, 180, 190, true]
568
- ],
569
- [
570
- [new decimal_js_1.default(160).mul(1e16).toString(), new decimal_js_1.default(200).mul(1e16).toString(), new decimal_js_1.default(180).mul(1e16).toString(), new decimal_js_1.default(190).mul(1e16).toString(), false],
571
- [160, 200, 180, 190, false]
572
- ],
573
- ];
574
- examples.forEach(([expected, actual]) => {
575
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
576
- (0, chai_1.expect)(strategySubService_1.morphoAaveV2Encode.leverageManagement(...actual)).to.eql(expected);
577
- });
578
- });
579
- });
580
- });
581
- describe('When testing strategySubService.exchangeEncode', () => {
582
- describe('dca()', () => {
583
- const examples = [
584
- [
585
- [
586
- enums_1.Strategies.ArbitrumIds.EXCHANGE_DCA,
587
- false,
588
- ['0x0000000000000000000000000000000000000000000000000000018b23bd88cd000000000000000000000000000000000000000000000000000000000012d068'],
589
- [
590
- '0x000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1', '0x000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831',
591
- '0x0000000000000000000000000000000000000000000000000000000000038270', '0x000000000000000000000000000000000000000000000000000000000012d068'
592
- ],
593
- ],
594
- [(0, tokens_1.getAssetInfo)('DAI', enums_1.ChainId.Arbitrum).address, (0, tokens_1.getAssetInfo)('USDC', enums_1.ChainId.Arbitrum).address, '230000', 1697111705805, 1233000, enums_1.ChainId.Arbitrum]
595
- ],
596
- [
597
- [
598
- enums_1.Strategies.MainnetIds.EXCHANGE_DCA,
599
- false,
600
- ['0x0000000000000000000000000000000000000000000000000000018b23bd88cd0000000000000000000000000000000000000000000000000000000000067458'],
601
- [
602
- '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599', '0x000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
603
- '0x0000000000000000000000000000000000000000000000000000000000000015', '0x0000000000000000000000000000000000000000000000000000000000067458',
604
- ],
605
- ],
606
- [(0, tokens_1.getAssetInfo)('WBTC').address, (0, tokens_1.getAssetInfo)('ETH').address, '21', 1697111705805, 423000, enums_1.ChainId.Ethereum]
607
- ],
608
- ];
609
- examples.forEach(([expected, actual]) => {
610
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
611
- (0, chai_1.expect)(strategySubService_1.exchangeEncode.dca(...actual)).to.eql(expected);
612
- });
613
- });
614
- });
615
- describe('limitOrder()', () => {
616
- const examples = [
617
- [
618
- [
619
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WETH', enums_1.ChainId.Ethereum).address),
620
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('DAI', enums_1.ChainId.Ethereum).address),
621
- '2131',
622
- '0.53123',
623
- '1696590921159',
624
- `${enums_1.OrderType.STOP_LOSS}`
625
- ],
626
- [
627
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WETH', enums_1.ChainId.Ethereum).address),
628
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('DAI', enums_1.ChainId.Ethereum).address),
629
- '2131',
630
- '0.53123',
631
- 1696590921159,
632
- enums_1.OrderType.STOP_LOSS
633
- ]
634
- ],
635
- [
636
- [
637
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('LINK', enums_1.ChainId.Arbitrum).address),
638
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('USDC', enums_1.ChainId.Arbitrum).address),
639
- '2131',
640
- '0.43123',
641
- '1646590921159',
642
- `${enums_1.OrderType.TAKE_PROFIT}`
643
- ],
644
- [
645
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('LINK', enums_1.ChainId.Arbitrum).address),
646
- web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('USDC', enums_1.ChainId.Arbitrum).address),
647
- '2131',
648
- '0.43123',
649
- 1646590921159,
650
- enums_1.OrderType.TAKE_PROFIT
651
- ]
652
- ],
653
- ];
654
- examples.forEach(([expected, actual]) => {
655
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
656
- (0, chai_1.expect)(strategySubService_1.exchangeEncode.limitOrder(...actual)).to.eql(expected);
657
- });
658
- });
659
- });
660
- });
661
- describe('When testing strategySubService.sparkEncode', () => {
662
- describe('leverageManagement()', () => {
663
- const examples = [
664
- [
665
- '0x000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e000001',
666
- [160, 220, 180, 190, true]
667
- ],
668
- [
669
- '0x000000000000000016345785d8a0000000000000000000001bc16d674ec80000000000000000000018fae27693b4000000000000000000001a5e27eef13e000000',
670
- [160, 200, 180, 190, false]
671
- ],
672
- ];
673
- examples.forEach(([expected, actual]) => {
674
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
675
- (0, chai_1.expect)(strategySubService_1.sparkEncode.leverageManagement(...actual)).to.eql(expected);
676
- });
677
- });
678
- });
679
- describe('closeToAsset()', () => {
680
- const examples = [
681
- [
682
- [
683
- enums_1.Bundles.MainnetIds.SPARK_CLOSE_TO_COLLATERAL,
684
- true,
685
- ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000026e1f9c6000000000000000000000000000000000000000000000000000000000000000000'],
686
- [
687
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000015',
688
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000020',
689
- '0x0000000000000000000000000000000000000000000000000000000000000000',
690
- ],
691
- ],
692
- [
693
- enums_1.Bundles.MainnetIds.SPARK_CLOSE_TO_COLLATERAL,
694
- true,
695
- {
696
- baseTokenAddress: (0, tokens_1.getAssetInfo)('WETH').address, quoteTokenAddress: (0, tokens_1.getAssetInfo)('DAI').address, price: 1670, ratioState: enums_1.RatioState.OVER
697
- },
698
- {
699
- collAsset: (0, tokens_1.getAssetInfo)('WETH').address, collAssetId: 21, debtAsset: (0, tokens_1.getAssetInfo)('DAI').address, debtAssetId: 32,
700
- },
701
- ]
702
- ],
703
- [
704
- [
705
- enums_1.Bundles.MainnetIds.SPARK_CLOSE_TO_DEBT,
706
- true,
707
- ['0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000084d000000000000000000000000000000000000000000000000000000000000000001'],
708
- [
709
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000015',
710
- '0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca', '0x0000000000000000000000000000000000000000000000000000000000000020',
711
- '0x0000000000000000000000000000000000000000000000000000000000000000',
712
- ],
713
- ],
714
- [
715
- enums_1.Bundles.MainnetIds.SPARK_CLOSE_TO_DEBT,
716
- true,
717
- {
718
- baseTokenAddress: (0, tokens_1.getAssetInfo)('LINK').address, quoteTokenAddress: (0, tokens_1.getAssetInfo)('DAI').address, price: 0.00544, ratioState: enums_1.RatioState.UNDER
719
- },
720
- {
721
- collAsset: (0, tokens_1.getAssetInfo)('DAI').address, collAssetId: 21, debtAsset: (0, tokens_1.getAssetInfo)('LINK').address, debtAssetId: 32,
722
- },
723
- ]
724
- ]
725
- ];
726
- examples.forEach(([expected, actual]) => {
727
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
728
- (0, chai_1.expect)(strategySubService_1.sparkEncode.closeToAsset(...actual)).to.eql(expected);
729
- });
730
- });
731
- });
732
- });
733
- describe('When testing strategySubService.crvUSDEncode', () => {
734
- describe('leverageManagement()', () => {
735
- const examples = [
736
- [
737
- [
738
- enums_1.Bundles.MainnetIds.CRVUSD_REPAY,
739
- true,
740
- [
741
- '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635000000000000000000000000000000000000000000000000136dcc951d8c00000000000000000000000000000000000000000000000000000000000000000001',
742
- ],
743
- [
744
- '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
745
- '0x0000000000000000000000000000000000000000000000000000000000000001',
746
- '0x0000000000000000000000000000000000000000000000001a5e27eef13e0000',
747
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
748
- '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
749
- ],
750
- ],
751
- [
752
- web3Utils.toChecksumAddress('0x1031d218133AFaB8c2B819B1366c7E434Ad91E9c'),
753
- web3Utils.toChecksumAddress('0xa920de414ea4ab66b97da1bfe9e6eca7d4219635'),
754
- enums_1.RatioState.UNDER,
755
- 190,
756
- 140,
757
- '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
758
- '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E',
759
- ]
760
- ],
761
- [
762
- [
763
- enums_1.Bundles.MainnetIds.CRVUSD_BOOST,
764
- true,
765
- [
766
- '0x0000000000000000000000000043d218133afab8f2b829b106633e434ad94e2c000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d42196350000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000000'
767
- ],
768
- [
769
- '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
770
- '0x0000000000000000000000000000000000000000000000000000000000000000',
771
- '0x00000000000000000000000000000000000000000000000016345785d8a00000',
772
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
773
- '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
774
- ],
775
- ],
776
- [
777
- web3Utils.toChecksumAddress('0x0043d218133AFaB8F2B829B106633E434Ad94E2c'),
778
- web3Utils.toChecksumAddress('0xa920de414ea4ab66b97da1bfe9e6eca7d4219635'),
779
- enums_1.RatioState.OVER,
780
- 160,
781
- 200,
782
- '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
783
- '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E',
784
- ]
785
- ],
786
- ];
787
- examples.forEach(([expected, actual]) => {
788
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
789
- (0, chai_1.expect)(strategySubService_1.crvUSDEncode.leverageManagement(...actual)).to.eql(expected);
790
- });
791
- });
792
- });
793
- describe('payback()', () => {
794
- const examples = [
795
- [
796
- [
797
- enums_1.Strategies.MainnetIds.CURVEUSD_PAYBACK,
798
- false,
799
- [
800
- '0x0000000000000000000000007a2af22ba3276108cd331c8985ef9528e10a871a000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d421963500000000000000000000000000000000000000000000000002c68af0bb140000',
801
- ],
802
- [
803
- '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
804
- '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
805
- '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
806
- '0x00000000000000000000000000000000000000000000043c33c1937564800000',
807
- '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e'
808
- ],
809
- ],
810
- [
811
- web3Utils.toChecksumAddress('0x7a2af22ba3276108cd331c8985ef9528e10a871a'),
812
- web3Utils.toChecksumAddress('0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280'),
813
- web3Utils.toChecksumAddress('0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280'),
814
- '20000',
815
- '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E',
816
- web3Utils.toChecksumAddress('0xA920De414eA4Ab66b97dA1bFE9e6EcA7d4219635'),
817
- 20,
818
- ]
819
- ]
820
- ];
821
- examples.forEach(([expected, actual]) => {
822
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
823
- (0, chai_1.expect)(strategySubService_1.crvUSDEncode.payback(...actual)).to.eql(expected);
824
- });
825
- });
826
- });
827
- });
828
- describe('When testing strategySubService.morphoBlueEncode', () => {
829
- describe('leverageManagement()', () => {
830
- const examples = [
831
- [
832
- [
833
- enums_1.Bundles.MainnetIds.MORPHO_BLUE_REPAY,
834
- true,
835
- [
836
- '0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec410000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c00000000000000000000000000000000000000000000000010a741a4627800000000000000000000000000000000000000000000000000000000000000000001',
837
- ],
838
- [
839
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
840
- '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
841
- '0x0000000000000000000000002a01eb9496094da03c4e364def50f5ad1280ad72',
842
- '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
843
- '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
844
- '0x0000000000000000000000000000000000000000000000000000000000000001',
845
- '0x000000000000000000000000000000000000000000000000136dcc951d8c0000',
846
- '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
847
- '0x0000000000000000000000000000000000000000000000000000000000000000',
848
- ],
849
- ],
850
- [
851
- '0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41',
852
- web3Utils.toChecksumAddress('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
853
- web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
854
- web3Utils.toChecksumAddress('0x2a01eb9496094da03c4e364def50f5ad1280ad72'),
855
- web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
856
- '945000000000000000',
857
- enums_1.RatioState.UNDER,
858
- 140,
859
- 120,
860
- web3Utils.toChecksumAddress('0x1031d218133AFaB8c2B819B1366c7E434Ad91E9c'),
861
- false,
862
- ]
863
- ],
864
- [
865
- [
866
- enums_1.Bundles.MainnetIds.MORPHO_BLUE_BOOST,
867
- true,
868
- [
869
- '0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec410000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c0000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000000'
870
- ],
871
- [
872
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
873
- '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
874
- '0x0000000000000000000000002a01eb9496094da03c4e364def50f5ad1280ad72',
875
- '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
876
- '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
877
- '0x0000000000000000000000000000000000000000000000000000000000000000',
878
- '0x00000000000000000000000000000000000000000000000016345785d8a00000',
879
- '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
880
- '0x0000000000000000000000000000000000000000000000000000000000000000',
881
- ],
882
- ],
883
- [
884
- '0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41',
885
- web3Utils.toChecksumAddress('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
886
- web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
887
- web3Utils.toChecksumAddress('0x2a01eb9496094da03c4e364def50f5ad1280ad72'),
888
- web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
889
- '945000000000000000',
890
- enums_1.RatioState.OVER,
891
- 160,
892
- 200,
893
- web3Utils.toChecksumAddress('0x1031d218133AFaB8c2B819B1366c7E434Ad91E9c'),
894
- false,
895
- ]
896
- ],
897
- ];
898
- examples.forEach(([expected, actual]) => {
899
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
900
- (0, chai_1.expect)(strategySubService_1.morphoBlueEncode.leverageManagement(...actual)).to.eql(expected);
901
- });
902
- });
903
- });
904
- });
905
- describe('When testing strategySubService.compoundV3L2Encode', () => {
906
- describe('leverageManagement()', () => {
907
- const examples = [
908
- [
909
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e000001',
910
- [
911
- web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
912
- web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'),
913
- 160, 220, 180, 190,
914
- true
915
- ],
916
- ],
917
- [
918
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee000000',
919
- [
920
- web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
921
- web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'),
922
- 160, 220, 180, 110,
923
- false
924
- ],
925
- ],
926
- ];
927
- examples.forEach(([expected, actual]) => {
928
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
929
- (0, chai_1.expect)(strategySubService_1.compoundV3L2Encode.leverageManagement(...actual)).to.eql(expected);
930
- });
931
- });
932
- });
933
- });
934
- });
1
+ import { expect } from 'chai';
2
+ import Dec from 'decimal.js';
3
+ import { otherAddresses } from '@defisaver/sdk';
4
+ import { getAssetInfo } from '@defisaver/tokens';
5
+ import * as web3Utils from 'web3-utils';
6
+ import { Bundles, ChainId, OrderType, RatioState, Strategies } from '../types/enums';
7
+ import '../configuration';
8
+ import { aaveV2Encode, chickenBondsEncode, liquityEncode, makerEncode, aaveV3Encode, compoundV2Encode, compoundV3Encode, morphoAaveV2Encode, exchangeEncode, sparkEncode, crvUSDEncode, compoundV3L2Encode, morphoBlueEncode, } from './strategySubService';
9
+ describe('Feature: strategySubService.ts', () => {
10
+ describe('When testing strategySubService.makerEncode', () => {
11
+ // @ts-ignore // TODO - this requires change in @defisaver/tokens
12
+ const mcdCdpManagerAddr = otherAddresses(ChainId.Ethereum).McdCdpManager;
13
+ describe('repayFromSavings()', () => {
14
+ const examples = [
15
+ [
16
+ [
17
+ Bundles.MainnetIds.MAKER_REPAY_FROM_SMART_SAVINGS_RARI,
18
+ true,
19
+ ['0x00000000000000000000000000000000000000000000000000000000000000de000000000000000000000000000000000000000000000000136dcc951d8c00000000000000000000000000000000000000000000000000000000000000000001'],
20
+ [
21
+ '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
22
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005ef30b9986345249bc32d8928b7ee64de9435e39',
23
+ ],
24
+ ],
25
+ [
26
+ Bundles.MainnetIds.MAKER_REPAY_FROM_SMART_SAVINGS_RARI,
27
+ 222,
28
+ 140,
29
+ 180,
30
+ true,
31
+ ChainId.Ethereum,
32
+ getAssetInfo('DAI').address,
33
+ mcdCdpManagerAddr,
34
+ ]
35
+ ]
36
+ ];
37
+ examples.forEach(([expected, actual]) => {
38
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
39
+ expect(makerEncode.repayFromSavings(...actual)).to.eql(expected);
40
+ });
41
+ });
42
+ });
43
+ describe('closeOnPrice()', () => {
44
+ const examples = [
45
+ [
46
+ [
47
+ Strategies.MainnetIds.MAKER_CLOSE_ON_PRICE_TO_DAI,
48
+ false,
49
+ ['0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5990000000000000000000000000000000000000000000000000000000002cc9e4c0000000000000000000000000000000000000000000000000000000000000000'],
50
+ [
51
+ '0x0000000000000000000000000000000000000000000000000000000000000078', '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
52
+ '0x0000000000000000000000005ef30b9986345249bc32d8928b7ee64de9435e39',
53
+ ],
54
+ ],
55
+ [
56
+ 120,
57
+ RatioState.OVER,
58
+ '0.469643',
59
+ getAssetInfo('DAI').address,
60
+ getAssetInfo('WBTC').address,
61
+ ChainId.Ethereum,
62
+ ]
63
+ ]
64
+ ];
65
+ examples.forEach(([expected, actual]) => {
66
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
67
+ expect(makerEncode.closeOnPrice(...actual)).to.eql(expected);
68
+ });
69
+ });
70
+ });
71
+ describe('trailingStop()', () => {
72
+ const examples = [
73
+ [
74
+ [
75
+ Strategies.MainnetIds.MAKER_TRAILING_STOP_LOSS_TO_COLL,
76
+ false,
77
+ ['0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000000000000000000000000000000000055ae82600000000000000000000000000000000000000000000000000000000000000007b'],
78
+ [
79
+ '0x000000000000000000000000000000000000000000000000000000000000096e', '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
80
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005ef30b9986345249bc32d8928b7ee64de9435e39',
81
+ ],
82
+ ],
83
+ [
84
+ 2414,
85
+ 230,
86
+ getAssetInfo('WBTC').address,
87
+ getAssetInfo('WBTC').address,
88
+ 123,
89
+ ChainId.Ethereum,
90
+ ]
91
+ ]
92
+ ];
93
+ examples.forEach(([expected, actual]) => {
94
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
95
+ expect(makerEncode.trailingStop(...actual)).to.eql(expected);
96
+ });
97
+ });
98
+ });
99
+ describe('leverageManagement()', () => {
100
+ const examples = [
101
+ [
102
+ [
103
+ 5791,
104
+ new Dec('210').mul(1e16).toString(),
105
+ new Dec('290').mul(1e16).toString(),
106
+ new Dec('240').mul(1e16).toString(),
107
+ new Dec('240').mul(1e16).toString(),
108
+ true,
109
+ ],
110
+ [
111
+ 5791, '210', '290', '240', '240', true,
112
+ ]
113
+ ]
114
+ ];
115
+ examples.forEach(([expected, actual]) => {
116
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
117
+ expect(makerEncode.leverageManagement(...actual)).to.eql(expected);
118
+ });
119
+ });
120
+ });
121
+ });
122
+ describe('When testing strategySubService.liquityEncode', () => {
123
+ describe('closeOnPrice()', () => {
124
+ const examples = [
125
+ [
126
+ [
127
+ Strategies.MainnetIds.LIQUITY_CLOSE_ON_PRICE_TO_COLL,
128
+ false,
129
+ ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000001c027053000000000000000000000000000000000000000000000000000000000000000000'],
130
+ [
131
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
132
+ ],
133
+ ],
134
+ [
135
+ RatioState.OVER,
136
+ '1203',
137
+ getAssetInfo('WETH').address,
138
+ getAssetInfo('WETH').address,
139
+ ]
140
+ ]
141
+ ];
142
+ examples.forEach(([expected, actual]) => {
143
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
144
+ expect(liquityEncode.closeOnPrice(...actual)).to.eql(expected);
145
+ });
146
+ });
147
+ });
148
+ describe('trailingStop()', () => {
149
+ const examples = [
150
+ [
151
+ [
152
+ Strategies.MainnetIds.LIQUITY_TRAILING_STOP_LOSS_TO_COLL,
153
+ false,
154
+ ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000055ae826000000000000000000000000000000000000000000000000000000000000000c97'],
155
+ [
156
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
157
+ ],
158
+ ],
159
+ [
160
+ 230,
161
+ getAssetInfo('WETH').address,
162
+ getAssetInfo('WETH').address,
163
+ 3223,
164
+ ]
165
+ ]
166
+ ];
167
+ examples.forEach(([expected, actual]) => {
168
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
169
+ expect(liquityEncode.trailingStop(...actual)).to.eql(expected);
170
+ });
171
+ });
172
+ });
173
+ describe('leverageManagement()', () => {
174
+ const examples = [
175
+ [
176
+ [
177
+ new Dec('210').mul(1e16).toString(),
178
+ new Dec('290').mul(1e16).toString(),
179
+ new Dec('240').mul(1e16).toString(),
180
+ new Dec('240').mul(1e16).toString(),
181
+ false,
182
+ ],
183
+ [
184
+ '210', '290', '240', '240', false,
185
+ ]
186
+ ]
187
+ ];
188
+ examples.forEach(([expected, actual]) => {
189
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
190
+ expect(liquityEncode.leverageManagement(...actual)).to.eql(expected);
191
+ });
192
+ });
193
+ });
194
+ describe('paybackFromChickenBondStrategySub()', () => {
195
+ const examples = [
196
+ [
197
+ [
198
+ Bundles.MainnetIds.LIQUITY_PAYBACK_USING_CHICKEN_BOND,
199
+ true,
200
+ ['0x0000000000000000000000002439d211133afab8f2b819b1066c7e434ad94e9e0000000000000000000000000000000000000000000000002dcbf4840eca00000000000000000000000000000000000000000000000000000000000000000000'],
201
+ [
202
+ '0x000000000000000000000000000000000000000000000000000000000000007b', '0x0000000000000000000000000000000000000000000000000000000000000000',
203
+ '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x000000000000000000000000b9d7dddca9a4ac480991865efef82e01273f79c3',
204
+ ],
205
+ ],
206
+ [
207
+ web3Utils.toChecksumAddress('0x2439d211133AFaB8F2B819B1066c7E434Ad94E9e'),
208
+ 330,
209
+ '123',
210
+ 0,
211
+ RatioState.OVER
212
+ ]
213
+ ]
214
+ ];
215
+ examples.forEach(([expected, actual]) => {
216
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
217
+ expect(liquityEncode.paybackFromChickenBondStrategySub(...actual)).to.eql(expected);
218
+ });
219
+ });
220
+ });
221
+ describe('dsrPayback()', () => {
222
+ const examples = [
223
+ [
224
+ [
225
+ Strategies.MainnetIds.LIQUITY_DSR_PAYBACK,
226
+ false,
227
+ ['0x0000000000000000000000002439d211133afab8f2b819b1066c7e434ad94e9e000000000000000000000000000000000000000000000000250dbeda8e4b00000000000000000000000000000000000000000000000000000000000000000001'],
228
+ [
229
+ '0x0000000000000000000000000000000000000000000000000000000000000001', '0x00000000000000000000000000000000000000000000000029a2241af62c0000',
230
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
231
+ ],
232
+ ],
233
+ [web3Utils.toChecksumAddress('0x2439d211133AFaB8F2B819B1066c7E434Ad94E9e'), 267, 300]
234
+ ]
235
+ ];
236
+ examples.forEach(([expected, actual]) => {
237
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
238
+ expect(liquityEncode.dsrPayback(...actual)).to.eql(expected);
239
+ });
240
+ });
241
+ });
242
+ describe('debtInFrontRepay()', () => {
243
+ const examples = [
244
+ [
245
+ [
246
+ Strategies.MainnetIds.LIQUITY_DEBT_IN_FRONT_REPAY,
247
+ false,
248
+ ['0x000000000000000000000000235d6a8db3c57c3f7b4eba749e1738db6093732a0000000000000000000000000000000000000000019d971e4fe8401e74000000'],
249
+ [
250
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
251
+ '0x000000000000000000000000000000000000000000000000063eb89da4ed0000', '0x0000000000000000000000000000000000000000000000000000000000000001',
252
+ '0x0000000000000000000000000000000000000000000000000000000000000000'
253
+ ],
254
+ ],
255
+ [web3Utils.toChecksumAddress('0x235d6A8DB3C57c3f7b4ebA749E1738Db6093732a'), '500000000', 45]
256
+ ]
257
+ ];
258
+ examples.forEach(([expected, actual]) => {
259
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
260
+ expect(liquityEncode.debtInFrontRepay(...actual)).to.eql(expected);
261
+ });
262
+ });
263
+ });
264
+ });
265
+ describe('When testing strategySubService.chickenBondsEncode', () => {
266
+ describe('rebond()', () => {
267
+ const examples = [
268
+ [
269
+ ['0x00000000000000000000000000000000000000000000000000000000000005e3'],
270
+ [1507]
271
+ ]
272
+ ];
273
+ examples.forEach(([expected, actual]) => {
274
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
275
+ expect(chickenBondsEncode.rebond(...actual)).to.eql(expected);
276
+ });
277
+ });
278
+ });
279
+ });
280
+ describe('When testing strategySubService.aaveV2Encode', () => {
281
+ describe('leverageManagement()', () => {
282
+ const examples = [
283
+ [
284
+ [new Dec(160).mul(1e16).toString(), new Dec(220).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), true],
285
+ [160, 220, 180, 190, true]
286
+ ],
287
+ [
288
+ [new Dec(160).mul(1e16).toString(), new Dec(200).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), false],
289
+ [160, 200, 180, 190, false]
290
+ ],
291
+ ];
292
+ examples.forEach(([expected, actual]) => {
293
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
294
+ expect(aaveV2Encode.leverageManagement(...actual)).to.eql(expected);
295
+ });
296
+ });
297
+ });
298
+ });
299
+ describe('When testing strategySubService.aaveV3Encode', () => {
300
+ describe('leverageManagement()', () => {
301
+ const examples = [
302
+ [
303
+ '0x000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e000001',
304
+ [160, 220, 180, 190, true]
305
+ ],
306
+ [
307
+ '0x000000000000000016345785d8a0000000000000000000001bc16d674ec80000000000000000000018fae27693b4000000000000000000001a5e27eef13e000000',
308
+ [160, 200, 180, 190, false]
309
+ ],
310
+ ];
311
+ examples.forEach(([expected, actual]) => {
312
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
313
+ expect(aaveV3Encode.leverageManagement(...actual)).to.eql(expected);
314
+ });
315
+ });
316
+ });
317
+ describe('closeToAsset()', () => {
318
+ const examples = [
319
+ [
320
+ [
321
+ Bundles.MainnetIds.AAVE_V3_CLOSE_TO_COLLATERAL,
322
+ true,
323
+ ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000026e1f9c6000000000000000000000000000000000000000000000000000000000000000000'],
324
+ [
325
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000015',
326
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000020',
327
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
328
+ ],
329
+ ],
330
+ [
331
+ Bundles.MainnetIds.AAVE_V3_CLOSE_TO_COLLATERAL,
332
+ true,
333
+ {
334
+ baseTokenAddress: getAssetInfo('WETH').address, quoteTokenAddress: getAssetInfo('DAI').address, price: 1670, ratioState: RatioState.OVER
335
+ },
336
+ {
337
+ collAsset: getAssetInfo('WETH').address, collAssetId: 21, debtAsset: getAssetInfo('DAI').address, debtAssetId: 32,
338
+ },
339
+ ]
340
+ ],
341
+ [
342
+ [
343
+ Bundles.MainnetIds.AAVE_V3_CLOSE_TO_DEBT,
344
+ true,
345
+ ['0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000084d000000000000000000000000000000000000000000000000000000000000000001'],
346
+ [
347
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000015',
348
+ '0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca', '0x0000000000000000000000000000000000000000000000000000000000000020',
349
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
350
+ ],
351
+ ],
352
+ [
353
+ Bundles.MainnetIds.AAVE_V3_CLOSE_TO_DEBT,
354
+ true,
355
+ {
356
+ baseTokenAddress: getAssetInfo('LINK').address, quoteTokenAddress: getAssetInfo('DAI').address, price: 0.00544, ratioState: RatioState.UNDER
357
+ },
358
+ {
359
+ collAsset: getAssetInfo('DAI').address, collAssetId: 21, debtAsset: getAssetInfo('LINK').address, debtAssetId: 32,
360
+ },
361
+ ]
362
+ ]
363
+ ];
364
+ examples.forEach(([expected, actual]) => {
365
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
366
+ expect(aaveV3Encode.closeToAsset(...actual)).to.eql(expected);
367
+ });
368
+ });
369
+ });
370
+ describe('closeToAssetWithMaximumGasPrice()', () => {
371
+ const examples = [
372
+ [
373
+ [
374
+ Bundles.MainnetIds.AAVE_V3_CLOSE_TO_COLLATERAL,
375
+ true,
376
+ [
377
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000026e1f9c6000000000000000000000000000000000000000000000000000000000000000000',
378
+ '0x00000000000000000000000000000000000000000000000000000002cb417800',
379
+ ],
380
+ [
381
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000015',
382
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000020',
383
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
384
+ ],
385
+ ],
386
+ [
387
+ Bundles.MainnetIds.AAVE_V3_CLOSE_TO_COLLATERAL,
388
+ true,
389
+ {
390
+ baseTokenAddress: getAssetInfo('WETH').address, quoteTokenAddress: getAssetInfo('DAI').address, price: 1670, ratioState: RatioState.OVER, maximumGasPrice: 12,
391
+ },
392
+ {
393
+ collAsset: getAssetInfo('WETH').address, collAssetId: 21, debtAsset: getAssetInfo('DAI').address, debtAssetId: 32,
394
+ },
395
+ ]
396
+ ],
397
+ [
398
+ [
399
+ Bundles.MainnetIds.AAVE_V3_CLOSE_TO_DEBT,
400
+ true,
401
+ [
402
+ '0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000084d000000000000000000000000000000000000000000000000000000000000000001',
403
+ '0x0000000000000000000000000000000000000000000000000000004a817c8000',
404
+ ],
405
+ [
406
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000015',
407
+ '0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca', '0x0000000000000000000000000000000000000000000000000000000000000020',
408
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
409
+ ],
410
+ ],
411
+ [
412
+ Bundles.MainnetIds.AAVE_V3_CLOSE_TO_DEBT,
413
+ true,
414
+ {
415
+ baseTokenAddress: getAssetInfo('LINK').address, quoteTokenAddress: getAssetInfo('DAI').address, price: 0.00544, ratioState: RatioState.UNDER, maximumGasPrice: 320,
416
+ },
417
+ {
418
+ collAsset: getAssetInfo('DAI').address, collAssetId: 21, debtAsset: getAssetInfo('LINK').address, debtAssetId: 32,
419
+ },
420
+ ]
421
+ ]
422
+ ];
423
+ examples.forEach(([expected, actual]) => {
424
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
425
+ expect(aaveV3Encode.closeToAssetWithMaximumGasPrice(...actual)).to.eql(expected);
426
+ });
427
+ });
428
+ });
429
+ describe('openOrder()', () => {
430
+ const examples = [
431
+ [
432
+ [
433
+ Bundles.MainnetIds.AAVE_V3_OPEN_ORDER_FROM_COLLATERAL,
434
+ true,
435
+ ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000007acead34980000000000000000000000000000000000000000000000000000000000000001'],
436
+ [
437
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
438
+ '0x000000000000000000000000000000000000000000000000000000000000000a',
439
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
440
+ '0x0000000000000000000000000000000000000000000000000000000000000004',
441
+ '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
442
+ '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
443
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
444
+ ],
445
+ ],
446
+ [
447
+ Bundles.MainnetIds.AAVE_V3_OPEN_ORDER_FROM_COLLATERAL,
448
+ true,
449
+ {
450
+ baseTokenAddress: getAssetInfo('WETH').address, quoteTokenAddress: getAssetInfo('DAI').address, price: 5274.534678, state: RatioState.UNDER
451
+ },
452
+ {
453
+ collAsset: getAssetInfo('WETH').address,
454
+ collAssetId: 10,
455
+ debtAsset: getAssetInfo('DAI').address,
456
+ debtAssetId: 4,
457
+ marketAddr: '0x2f39d218133afab8f2b819b1066c7e434ad94e9e',
458
+ targetRatio: 200,
459
+ },
460
+ ]
461
+ ],
462
+ ];
463
+ examples.forEach(([expected, actual]) => {
464
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
465
+ expect(aaveV3Encode.openOrder(...actual)).to.eql(expected);
466
+ });
467
+ });
468
+ });
469
+ });
470
+ describe('When testing strategySubService.compoundV2Encode', () => {
471
+ describe('leverageManagement()', () => {
472
+ const examples = [
473
+ [
474
+ [new Dec(160).mul(1e16).toString(), new Dec(220).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), true],
475
+ [160, 220, 180, 190, true]
476
+ ],
477
+ [
478
+ [new Dec(160).mul(1e16).toString(), new Dec(200).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), false],
479
+ [160, 200, 180, 190, false]
480
+ ],
481
+ ];
482
+ examples.forEach(([expected, actual]) => {
483
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
484
+ expect(compoundV2Encode.leverageManagement(...actual)).to.eql(expected);
485
+ });
486
+ });
487
+ });
488
+ });
489
+ describe('When testing strategySubService.compoundV3Encode', () => {
490
+ describe('leverageManagement()', () => {
491
+ const examples = [
492
+ [
493
+ [
494
+ web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
495
+ web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
496
+ new Dec(160).mul(1e16).toString(),
497
+ new Dec(220).mul(1e16).toString(),
498
+ new Dec(180).mul(1e16).toString(),
499
+ new Dec(190).mul(1e16).toString(),
500
+ true, false,
501
+ ],
502
+ [
503
+ web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
504
+ web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
505
+ 160, 220, 180, 190,
506
+ true, false,
507
+ ]
508
+ ],
509
+ [
510
+ [
511
+ web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
512
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
513
+ new Dec(160).mul(1e16).toString(),
514
+ new Dec(210).mul(1e16).toString(),
515
+ new Dec(180).mul(1e16).toString(),
516
+ new Dec(190).mul(1e16).toString(),
517
+ false, true,
518
+ ],
519
+ [
520
+ web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
521
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
522
+ 160, 210, 180, 190,
523
+ false, true,
524
+ ]
525
+ ],
526
+ ];
527
+ examples.forEach(([expected, actual]) => {
528
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
529
+ expect(compoundV3Encode.leverageManagement(...actual)).to.eql(expected);
530
+ });
531
+ });
532
+ });
533
+ });
534
+ describe('When testing strategySubService.morphoAaveV2Encode', () => {
535
+ describe('leverageManagement()', () => {
536
+ const examples = [
537
+ [
538
+ [new Dec(160).mul(1e16).toString(), new Dec(220).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), true],
539
+ [160, 220, 180, 190, true]
540
+ ],
541
+ [
542
+ [new Dec(160).mul(1e16).toString(), new Dec(200).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), false],
543
+ [160, 200, 180, 190, false]
544
+ ],
545
+ ];
546
+ examples.forEach(([expected, actual]) => {
547
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
548
+ expect(morphoAaveV2Encode.leverageManagement(...actual)).to.eql(expected);
549
+ });
550
+ });
551
+ });
552
+ });
553
+ describe('When testing strategySubService.exchangeEncode', () => {
554
+ describe('dca()', () => {
555
+ const examples = [
556
+ [
557
+ [
558
+ Strategies.ArbitrumIds.EXCHANGE_DCA,
559
+ false,
560
+ ['0x0000000000000000000000000000000000000000000000000000018b23bd88cd000000000000000000000000000000000000000000000000000000000012d068'],
561
+ [
562
+ '0x000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1', '0x000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831',
563
+ '0x0000000000000000000000000000000000000000000000000000000000038270', '0x000000000000000000000000000000000000000000000000000000000012d068'
564
+ ],
565
+ ],
566
+ [getAssetInfo('DAI', ChainId.Arbitrum).address, getAssetInfo('USDC', ChainId.Arbitrum).address, '230000', 1697111705805, 1233000, ChainId.Arbitrum]
567
+ ],
568
+ [
569
+ [
570
+ Strategies.MainnetIds.EXCHANGE_DCA,
571
+ false,
572
+ ['0x0000000000000000000000000000000000000000000000000000018b23bd88cd0000000000000000000000000000000000000000000000000000000000067458'],
573
+ [
574
+ '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599', '0x000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
575
+ '0x0000000000000000000000000000000000000000000000000000000000000015', '0x0000000000000000000000000000000000000000000000000000000000067458',
576
+ ],
577
+ ],
578
+ [getAssetInfo('WBTC').address, getAssetInfo('ETH').address, '21', 1697111705805, 423000, ChainId.Ethereum]
579
+ ],
580
+ ];
581
+ examples.forEach(([expected, actual]) => {
582
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
583
+ expect(exchangeEncode.dca(...actual)).to.eql(expected);
584
+ });
585
+ });
586
+ });
587
+ describe('limitOrder()', () => {
588
+ const examples = [
589
+ [
590
+ [
591
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
592
+ web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
593
+ '2131',
594
+ '0.53123',
595
+ '1696590921159',
596
+ `${OrderType.STOP_LOSS}`
597
+ ],
598
+ [
599
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
600
+ web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
601
+ '2131',
602
+ '0.53123',
603
+ 1696590921159,
604
+ OrderType.STOP_LOSS
605
+ ]
606
+ ],
607
+ [
608
+ [
609
+ web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
610
+ web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
611
+ '2131',
612
+ '0.43123',
613
+ '1646590921159',
614
+ `${OrderType.TAKE_PROFIT}`
615
+ ],
616
+ [
617
+ web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
618
+ web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
619
+ '2131',
620
+ '0.43123',
621
+ 1646590921159,
622
+ OrderType.TAKE_PROFIT
623
+ ]
624
+ ],
625
+ ];
626
+ examples.forEach(([expected, actual]) => {
627
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
628
+ expect(exchangeEncode.limitOrder(...actual)).to.eql(expected);
629
+ });
630
+ });
631
+ });
632
+ });
633
+ describe('When testing strategySubService.sparkEncode', () => {
634
+ describe('leverageManagement()', () => {
635
+ const examples = [
636
+ [
637
+ '0x000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e000001',
638
+ [160, 220, 180, 190, true]
639
+ ],
640
+ [
641
+ '0x000000000000000016345785d8a0000000000000000000001bc16d674ec80000000000000000000018fae27693b4000000000000000000001a5e27eef13e000000',
642
+ [160, 200, 180, 190, false]
643
+ ],
644
+ ];
645
+ examples.forEach(([expected, actual]) => {
646
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
647
+ expect(sparkEncode.leverageManagement(...actual)).to.eql(expected);
648
+ });
649
+ });
650
+ });
651
+ describe('closeToAsset()', () => {
652
+ const examples = [
653
+ [
654
+ [
655
+ Bundles.MainnetIds.SPARK_CLOSE_TO_COLLATERAL,
656
+ true,
657
+ ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000026e1f9c6000000000000000000000000000000000000000000000000000000000000000000'],
658
+ [
659
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000015',
660
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000020',
661
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
662
+ ],
663
+ ],
664
+ [
665
+ Bundles.MainnetIds.SPARK_CLOSE_TO_COLLATERAL,
666
+ true,
667
+ {
668
+ baseTokenAddress: getAssetInfo('WETH').address, quoteTokenAddress: getAssetInfo('DAI').address, price: 1670, ratioState: RatioState.OVER
669
+ },
670
+ {
671
+ collAsset: getAssetInfo('WETH').address, collAssetId: 21, debtAsset: getAssetInfo('DAI').address, debtAssetId: 32,
672
+ },
673
+ ]
674
+ ],
675
+ [
676
+ [
677
+ Bundles.MainnetIds.SPARK_CLOSE_TO_DEBT,
678
+ true,
679
+ ['0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000084d000000000000000000000000000000000000000000000000000000000000000001'],
680
+ [
681
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000015',
682
+ '0x000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca', '0x0000000000000000000000000000000000000000000000000000000000000020',
683
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
684
+ ],
685
+ ],
686
+ [
687
+ Bundles.MainnetIds.SPARK_CLOSE_TO_DEBT,
688
+ true,
689
+ {
690
+ baseTokenAddress: getAssetInfo('LINK').address, quoteTokenAddress: getAssetInfo('DAI').address, price: 0.00544, ratioState: RatioState.UNDER
691
+ },
692
+ {
693
+ collAsset: getAssetInfo('DAI').address, collAssetId: 21, debtAsset: getAssetInfo('LINK').address, debtAssetId: 32,
694
+ },
695
+ ]
696
+ ]
697
+ ];
698
+ examples.forEach(([expected, actual]) => {
699
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
700
+ expect(sparkEncode.closeToAsset(...actual)).to.eql(expected);
701
+ });
702
+ });
703
+ });
704
+ });
705
+ describe('When testing strategySubService.crvUSDEncode', () => {
706
+ describe('leverageManagement()', () => {
707
+ const examples = [
708
+ [
709
+ [
710
+ Bundles.MainnetIds.CRVUSD_REPAY,
711
+ true,
712
+ [
713
+ '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635000000000000000000000000000000000000000000000000136dcc951d8c00000000000000000000000000000000000000000000000000000000000000000001',
714
+ ],
715
+ [
716
+ '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
717
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
718
+ '0x0000000000000000000000000000000000000000000000001a5e27eef13e0000',
719
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
720
+ '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
721
+ ],
722
+ ],
723
+ [
724
+ web3Utils.toChecksumAddress('0x1031d218133AFaB8c2B819B1366c7E434Ad91E9c'),
725
+ web3Utils.toChecksumAddress('0xa920de414ea4ab66b97da1bfe9e6eca7d4219635'),
726
+ RatioState.UNDER,
727
+ 190,
728
+ 140,
729
+ '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
730
+ '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E',
731
+ ]
732
+ ],
733
+ [
734
+ [
735
+ Bundles.MainnetIds.CRVUSD_BOOST,
736
+ true,
737
+ [
738
+ '0x0000000000000000000000000043d218133afab8f2b829b106633e434ad94e2c000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d42196350000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000000'
739
+ ],
740
+ [
741
+ '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
742
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
743
+ '0x00000000000000000000000000000000000000000000000016345785d8a00000',
744
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
745
+ '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
746
+ ],
747
+ ],
748
+ [
749
+ web3Utils.toChecksumAddress('0x0043d218133AFaB8F2B829B106633E434Ad94E2c'),
750
+ web3Utils.toChecksumAddress('0xa920de414ea4ab66b97da1bfe9e6eca7d4219635'),
751
+ RatioState.OVER,
752
+ 160,
753
+ 200,
754
+ '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
755
+ '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E',
756
+ ]
757
+ ],
758
+ ];
759
+ examples.forEach(([expected, actual]) => {
760
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
761
+ expect(crvUSDEncode.leverageManagement(...actual)).to.eql(expected);
762
+ });
763
+ });
764
+ });
765
+ describe('payback()', () => {
766
+ const examples = [
767
+ [
768
+ [
769
+ Strategies.MainnetIds.CURVEUSD_PAYBACK,
770
+ false,
771
+ [
772
+ '0x0000000000000000000000007a2af22ba3276108cd331c8985ef9528e10a871a000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d421963500000000000000000000000000000000000000000000000002c68af0bb140000',
773
+ ],
774
+ [
775
+ '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
776
+ '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
777
+ '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
778
+ '0x00000000000000000000000000000000000000000000043c33c1937564800000',
779
+ '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e'
780
+ ],
781
+ ],
782
+ [
783
+ web3Utils.toChecksumAddress('0x7a2af22ba3276108cd331c8985ef9528e10a871a'),
784
+ web3Utils.toChecksumAddress('0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280'),
785
+ web3Utils.toChecksumAddress('0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280'),
786
+ '20000',
787
+ '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E',
788
+ web3Utils.toChecksumAddress('0xA920De414eA4Ab66b97dA1bFE9e6EcA7d4219635'),
789
+ 20,
790
+ ]
791
+ ]
792
+ ];
793
+ examples.forEach(([expected, actual]) => {
794
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
795
+ expect(crvUSDEncode.payback(...actual)).to.eql(expected);
796
+ });
797
+ });
798
+ });
799
+ });
800
+ describe('When testing strategySubService.morphoBlueEncode', () => {
801
+ describe('leverageManagement()', () => {
802
+ const examples = [
803
+ [
804
+ [
805
+ Bundles.MainnetIds.MORPHO_BLUE_REPAY,
806
+ true,
807
+ [
808
+ '0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec410000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c00000000000000000000000000000000000000000000000010a741a4627800000000000000000000000000000000000000000000000000000000000000000001',
809
+ ],
810
+ [
811
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
812
+ '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
813
+ '0x0000000000000000000000002a01eb9496094da03c4e364def50f5ad1280ad72',
814
+ '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
815
+ '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
816
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
817
+ '0x000000000000000000000000000000000000000000000000136dcc951d8c0000',
818
+ '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
819
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
820
+ ],
821
+ ],
822
+ [
823
+ '0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41',
824
+ web3Utils.toChecksumAddress('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
825
+ web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
826
+ web3Utils.toChecksumAddress('0x2a01eb9496094da03c4e364def50f5ad1280ad72'),
827
+ web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
828
+ '945000000000000000',
829
+ RatioState.UNDER,
830
+ 140,
831
+ 120,
832
+ web3Utils.toChecksumAddress('0x1031d218133AFaB8c2B819B1366c7E434Ad91E9c'),
833
+ false,
834
+ ]
835
+ ],
836
+ [
837
+ [
838
+ Bundles.MainnetIds.MORPHO_BLUE_BOOST,
839
+ true,
840
+ [
841
+ '0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec410000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c0000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000000'
842
+ ],
843
+ [
844
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
845
+ '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
846
+ '0x0000000000000000000000002a01eb9496094da03c4e364def50f5ad1280ad72',
847
+ '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
848
+ '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
849
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
850
+ '0x00000000000000000000000000000000000000000000000016345785d8a00000',
851
+ '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
852
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
853
+ ],
854
+ ],
855
+ [
856
+ '0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41',
857
+ web3Utils.toChecksumAddress('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
858
+ web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
859
+ web3Utils.toChecksumAddress('0x2a01eb9496094da03c4e364def50f5ad1280ad72'),
860
+ web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
861
+ '945000000000000000',
862
+ RatioState.OVER,
863
+ 160,
864
+ 200,
865
+ web3Utils.toChecksumAddress('0x1031d218133AFaB8c2B819B1366c7E434Ad91E9c'),
866
+ false,
867
+ ]
868
+ ],
869
+ ];
870
+ examples.forEach(([expected, actual]) => {
871
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
872
+ expect(morphoBlueEncode.leverageManagement(...actual)).to.eql(expected);
873
+ });
874
+ });
875
+ });
876
+ });
877
+ describe('When testing strategySubService.compoundV3L2Encode', () => {
878
+ describe('leverageManagement()', () => {
879
+ const examples = [
880
+ [
881
+ '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e000001',
882
+ [
883
+ web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
884
+ web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'),
885
+ 160, 220, 180, 190,
886
+ true
887
+ ],
888
+ ],
889
+ [
890
+ '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee000000',
891
+ [
892
+ web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
893
+ web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'),
894
+ 160, 220, 180, 110,
895
+ false
896
+ ],
897
+ ],
898
+ ];
899
+ examples.forEach(([expected, actual]) => {
900
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
901
+ expect(compoundV3L2Encode.leverageManagement(...actual)).to.eql(expected);
902
+ });
903
+ });
904
+ });
905
+ });
906
+ });