@defisaver/automation-sdk 3.1.3 → 3.2.0

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 (246) hide show
  1. package/.babelrc +3 -3
  2. package/.editorconfig +9 -9
  3. package/.env +5 -0
  4. package/.env.dev +4 -4
  5. package/.eslintignore +6 -6
  6. package/.eslintrc.js +39 -39
  7. package/.mocharc.json +4 -4
  8. package/.nvmrc +1 -1
  9. package/README.md +46 -46
  10. package/cjs/abis/Erc20.json +223 -223
  11. package/cjs/abis/SubStorage.json +21 -21
  12. package/cjs/abis/UniMulticall.json +17 -17
  13. package/cjs/abis/index.d.ts +9 -9
  14. package/cjs/abis/index.js +30 -30
  15. package/cjs/abis/legacy_AaveV2Subscriptions.json +8 -8
  16. package/cjs/abis/legacy_AuthCheck.json +8 -8
  17. package/cjs/abis/legacy_CompoundV2Subscriptions.json +9 -9
  18. package/cjs/abis/legacy_MakerSubscriptions.json +9 -9
  19. package/cjs/automation/private/Automation.d.ts +12 -12
  20. package/cjs/automation/private/Automation.js +42 -42
  21. package/cjs/automation/private/LegacyAutomation.d.ts +25 -25
  22. package/cjs/automation/private/LegacyAutomation.js +118 -118
  23. package/cjs/automation/private/LegacyProtocol.d.ts +22 -22
  24. package/cjs/automation/private/LegacyProtocol.js +41 -41
  25. package/cjs/automation/private/LegacyProtocol.test.d.ts +1 -1
  26. package/cjs/automation/private/LegacyProtocol.test.js +25 -25
  27. package/cjs/automation/private/Protocol.d.ts +22 -22
  28. package/cjs/automation/private/Protocol.js +41 -41
  29. package/cjs/automation/private/Protocol.test.d.ts +1 -1
  30. package/cjs/automation/private/Protocol.test.js +25 -25
  31. package/cjs/automation/private/StrategiesAutomation.d.ts +33 -33
  32. package/cjs/automation/private/StrategiesAutomation.js +190 -181
  33. package/cjs/automation/private/StrategiesAutomation.test.d.ts +1 -1
  34. package/cjs/automation/private/StrategiesAutomation.test.js +671 -671
  35. package/cjs/automation/public/ArbitrumStrategies.d.ts +5 -5
  36. package/cjs/automation/public/ArbitrumStrategies.js +13 -13
  37. package/cjs/automation/public/BaseStrategies.d.ts +5 -5
  38. package/cjs/automation/public/BaseStrategies.js +13 -13
  39. package/cjs/automation/public/EthereumStrategies.d.ts +5 -5
  40. package/cjs/automation/public/EthereumStrategies.js +13 -13
  41. package/cjs/automation/public/OptimismStrategies.d.ts +5 -5
  42. package/cjs/automation/public/OptimismStrategies.js +13 -13
  43. package/cjs/automation/public/Strategies.test.d.ts +1 -0
  44. package/cjs/automation/public/Strategies.test.js +61 -0
  45. package/cjs/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -6
  46. package/cjs/automation/public/legacy/LegacyAaveAutomation.js +20 -20
  47. package/cjs/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -6
  48. package/cjs/automation/public/legacy/LegacyCompoundAutomation.js +20 -20
  49. package/cjs/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -6
  50. package/cjs/automation/public/legacy/LegacyMakerAutomation.js +20 -20
  51. package/cjs/configuration.d.ts +1 -1
  52. package/cjs/configuration.js +12 -12
  53. package/cjs/constants/index.d.ts +28 -28
  54. package/cjs/constants/index.js +494 -489
  55. package/cjs/index.d.ts +23 -23
  56. package/cjs/index.js +65 -65
  57. package/cjs/services/contractService.d.ts +12 -12
  58. package/cjs/services/contractService.js +54 -54
  59. package/cjs/services/ethereumService.d.ts +7 -7
  60. package/cjs/services/ethereumService.js +49 -49
  61. package/cjs/services/ethereumService.test.d.ts +1 -1
  62. package/cjs/services/ethereumService.test.js +242 -242
  63. package/cjs/services/strategiesService.d.ts +2 -2
  64. package/cjs/services/strategiesService.js +724 -723
  65. package/cjs/services/strategiesService.test.d.ts +1 -1
  66. package/cjs/services/strategiesService.test.js +110 -110
  67. package/cjs/services/strategySubService.d.ts +100 -100
  68. package/cjs/services/strategySubService.js +267 -267
  69. package/cjs/services/strategySubService.test.d.ts +1 -1
  70. package/cjs/services/strategySubService.test.js +936 -936
  71. package/cjs/services/subDataService.d.ts +192 -192
  72. package/cjs/services/subDataService.js +475 -475
  73. package/cjs/services/subDataService.test.d.ts +1 -1
  74. package/cjs/services/subDataService.test.js +1282 -1282
  75. package/cjs/services/triggerService.d.ts +191 -191
  76. package/cjs/services/triggerService.js +367 -367
  77. package/cjs/services/triggerService.test.d.ts +1 -1
  78. package/cjs/services/triggerService.test.js +926 -926
  79. package/cjs/services/utils.d.ts +25 -25
  80. package/cjs/services/utils.js +131 -131
  81. package/cjs/services/utils.test.d.ts +1 -1
  82. package/cjs/services/utils.test.js +376 -376
  83. package/cjs/types/contracts/generated/Erc20.d.ts +53 -53
  84. package/cjs/types/contracts/generated/Erc20.js +5 -5
  85. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -129
  86. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.js +5 -5
  87. package/cjs/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -20
  88. package/cjs/types/contracts/generated/Legacy_AuthCheck.js +5 -5
  89. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -128
  90. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +5 -5
  91. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -246
  92. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.js +5 -5
  93. package/cjs/types/contracts/generated/SubStorage.d.ts +110 -114
  94. package/cjs/types/contracts/generated/SubStorage.js +5 -5
  95. package/cjs/types/contracts/generated/UniMulticall.d.ts +55 -55
  96. package/cjs/types/contracts/generated/UniMulticall.js +5 -5
  97. package/cjs/types/contracts/generated/index.d.ts +7 -7
  98. package/cjs/types/contracts/generated/index.js +2 -2
  99. package/cjs/types/contracts/generated/types.d.ts +54 -54
  100. package/cjs/types/contracts/generated/types.js +2 -2
  101. package/cjs/types/enums.d.ts +186 -184
  102. package/cjs/types/enums.js +208 -206
  103. package/cjs/types/index.d.ts +224 -224
  104. package/cjs/types/index.js +2 -2
  105. package/esm/abis/Erc20.json +223 -223
  106. package/esm/abis/SubStorage.json +21 -21
  107. package/esm/abis/UniMulticall.json +17 -17
  108. package/esm/abis/index.d.ts +9 -9
  109. package/esm/abis/index.js +18 -18
  110. package/esm/abis/legacy_AaveV2Subscriptions.json +8 -8
  111. package/esm/abis/legacy_AuthCheck.json +8 -8
  112. package/esm/abis/legacy_CompoundV2Subscriptions.json +9 -9
  113. package/esm/abis/legacy_MakerSubscriptions.json +9 -9
  114. package/esm/automation/private/Automation.d.ts +12 -12
  115. package/esm/automation/private/Automation.js +39 -39
  116. package/esm/automation/private/LegacyAutomation.d.ts +25 -25
  117. package/esm/automation/private/LegacyAutomation.js +112 -112
  118. package/esm/automation/private/LegacyProtocol.d.ts +22 -22
  119. package/esm/automation/private/LegacyProtocol.js +38 -38
  120. package/esm/automation/private/LegacyProtocol.test.d.ts +1 -1
  121. package/esm/automation/private/LegacyProtocol.test.js +20 -20
  122. package/esm/automation/private/Protocol.d.ts +22 -22
  123. package/esm/automation/private/Protocol.js +38 -38
  124. package/esm/automation/private/Protocol.test.d.ts +1 -1
  125. package/esm/automation/private/Protocol.test.js +20 -20
  126. package/esm/automation/private/StrategiesAutomation.d.ts +33 -33
  127. package/esm/automation/private/StrategiesAutomation.js +184 -175
  128. package/esm/automation/private/StrategiesAutomation.test.d.ts +1 -1
  129. package/esm/automation/private/StrategiesAutomation.test.js +666 -666
  130. package/esm/automation/public/ArbitrumStrategies.d.ts +5 -5
  131. package/esm/automation/public/ArbitrumStrategies.js +7 -7
  132. package/esm/automation/public/BaseStrategies.d.ts +5 -5
  133. package/esm/automation/public/BaseStrategies.js +7 -7
  134. package/esm/automation/public/EthereumStrategies.d.ts +5 -5
  135. package/esm/automation/public/EthereumStrategies.js +7 -7
  136. package/esm/automation/public/OptimismStrategies.d.ts +5 -5
  137. package/esm/automation/public/OptimismStrategies.js +7 -7
  138. package/esm/automation/public/Strategies.test.d.ts +1 -0
  139. package/esm/automation/public/Strategies.test.js +56 -0
  140. package/esm/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -6
  141. package/esm/automation/public/legacy/LegacyAaveAutomation.js +14 -14
  142. package/esm/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -6
  143. package/esm/automation/public/legacy/LegacyCompoundAutomation.js +14 -14
  144. package/esm/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -6
  145. package/esm/automation/public/legacy/LegacyMakerAutomation.js +14 -14
  146. package/esm/configuration.d.ts +1 -1
  147. package/esm/configuration.js +7 -7
  148. package/esm/constants/index.d.ts +28 -28
  149. package/esm/constants/index.js +488 -483
  150. package/esm/index.d.ts +23 -23
  151. package/esm/index.js +23 -23
  152. package/esm/services/contractService.d.ts +12 -12
  153. package/esm/services/contractService.js +45 -45
  154. package/esm/services/ethereumService.d.ts +7 -7
  155. package/esm/services/ethereumService.js +41 -41
  156. package/esm/services/ethereumService.test.d.ts +1 -1
  157. package/esm/services/ethereumService.test.js +237 -237
  158. package/esm/services/strategiesService.d.ts +2 -2
  159. package/esm/services/strategiesService.js +697 -696
  160. package/esm/services/strategiesService.test.d.ts +1 -1
  161. package/esm/services/strategiesService.test.js +108 -108
  162. package/esm/services/strategySubService.d.ts +100 -100
  163. package/esm/services/strategySubService.js +238 -238
  164. package/esm/services/strategySubService.test.d.ts +1 -1
  165. package/esm/services/strategySubService.test.js +908 -908
  166. package/esm/services/subDataService.d.ts +192 -192
  167. package/esm/services/subDataService.js +469 -469
  168. package/esm/services/subDataService.test.d.ts +1 -1
  169. package/esm/services/subDataService.test.js +1254 -1254
  170. package/esm/services/triggerService.d.ts +191 -191
  171. package/esm/services/triggerService.js +338 -338
  172. package/esm/services/triggerService.test.d.ts +1 -1
  173. package/esm/services/triggerService.test.js +901 -901
  174. package/esm/services/utils.d.ts +25 -25
  175. package/esm/services/utils.js +82 -82
  176. package/esm/services/utils.test.d.ts +1 -1
  177. package/esm/services/utils.test.js +348 -348
  178. package/esm/types/contracts/generated/Erc20.d.ts +53 -53
  179. package/esm/types/contracts/generated/Erc20.js +4 -4
  180. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -129
  181. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.js +4 -4
  182. package/esm/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -20
  183. package/esm/types/contracts/generated/Legacy_AuthCheck.js +4 -4
  184. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -128
  185. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +4 -4
  186. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -246
  187. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.js +4 -4
  188. package/esm/types/contracts/generated/SubStorage.d.ts +110 -114
  189. package/esm/types/contracts/generated/SubStorage.js +4 -4
  190. package/esm/types/contracts/generated/UniMulticall.d.ts +55 -55
  191. package/esm/types/contracts/generated/UniMulticall.js +4 -4
  192. package/esm/types/contracts/generated/index.d.ts +7 -7
  193. package/esm/types/contracts/generated/index.js +1 -1
  194. package/esm/types/contracts/generated/types.d.ts +54 -54
  195. package/esm/types/contracts/generated/types.js +1 -1
  196. package/esm/types/enums.d.ts +186 -184
  197. package/esm/types/enums.js +205 -203
  198. package/esm/types/index.d.ts +224 -224
  199. package/esm/types/index.js +1 -1
  200. package/package.json +62 -61
  201. package/scripts/generateContractTypes.js +39 -39
  202. package/src/abis/Erc20.json +222 -222
  203. package/src/abis/SubStorage.json +21 -21
  204. package/src/abis/UniMulticall.json +17 -17
  205. package/src/abis/index.ts +28 -28
  206. package/src/abis/legacy_AaveV2Subscriptions.json +7 -7
  207. package/src/abis/legacy_AuthCheck.json +7 -7
  208. package/src/abis/legacy_CompoundV2Subscriptions.json +8 -8
  209. package/src/abis/legacy_MakerSubscriptions.json +8 -8
  210. package/src/automation/private/Automation.ts +44 -44
  211. package/src/automation/private/LegacyAutomation.ts +135 -135
  212. package/src/automation/private/LegacyProtocol.test.ts +23 -23
  213. package/src/automation/private/LegacyProtocol.ts +51 -51
  214. package/src/automation/private/Protocol.test.ts +23 -23
  215. package/src/automation/private/Protocol.ts +51 -51
  216. package/src/automation/private/StrategiesAutomation.test.ts +663 -663
  217. package/src/automation/private/StrategiesAutomation.ts +254 -242
  218. package/src/automation/public/ArbitrumStrategies.ts +10 -10
  219. package/src/automation/public/BaseStrategies.ts +10 -10
  220. package/src/automation/public/EthereumStrategies.ts +10 -10
  221. package/src/automation/public/OptimismStrategies.ts +10 -10
  222. package/src/automation/public/Strategies.test.ts +49 -0
  223. package/src/automation/public/legacy/LegacyAaveAutomation.ts +20 -20
  224. package/src/automation/public/legacy/LegacyCompoundAutomation.ts +20 -20
  225. package/src/automation/public/legacy/LegacyMakerAutomation.ts +20 -20
  226. package/src/configuration.ts +8 -8
  227. package/src/constants/index.ts +523 -507
  228. package/src/index.ts +39 -39
  229. package/src/services/contractService.ts +77 -77
  230. package/src/services/ethereumService.test.ts +257 -257
  231. package/src/services/ethereumService.ts +69 -69
  232. package/src/services/strategiesService.test.ts +105 -105
  233. package/src/services/strategiesService.ts +935 -934
  234. package/src/services/strategySubService.test.ts +1122 -1122
  235. package/src/services/strategySubService.ts +524 -524
  236. package/src/services/subDataService.test.ts +1387 -1387
  237. package/src/services/subDataService.ts +645 -645
  238. package/src/services/triggerService.test.ts +1004 -1004
  239. package/src/services/triggerService.ts +449 -449
  240. package/src/services/utils.test.ts +430 -430
  241. package/src/services/utils.ts +103 -103
  242. package/src/types/enums.ts +202 -200
  243. package/src/types/index.ts +279 -279
  244. package/tsconfig.esm.json +8 -8
  245. package/tsconfig.json +22 -22
  246. package/umd/index.js +0 -34103
@@ -1,1387 +1,1387 @@
1
- import Dec from 'decimal.js';
2
- import { expect } from 'chai';
3
- import { getAssetInfo } from '@defisaver/tokens';
4
- import * as web3Utils from 'web3-utils';
5
-
6
- import { ChainId, OrderType, RatioState } from '../types/enums';
7
- import type { EthereumAddress, SubData } from '../types';
8
-
9
- import '../configuration';
10
- import {
11
- aaveV2LeverageManagementSubData,
12
- aaveV3LeverageManagementSubData,
13
- aaveV3QuotePriceSubData,
14
- cBondsRebondSubData,
15
- compoundV2LeverageManagementSubData,
16
- compoundV3LeverageManagementSubData,
17
- exchangeDcaSubData,
18
- exchangeLimitOrderSubData,
19
- liquityCloseSubData,
20
- liquityDebtInFrontRepaySubData,
21
- liquityDsrPaybackSubData,
22
- liquityDsrSupplySubData,
23
- liquityLeverageManagementSubData,
24
- liquityPaybackUsingChickenBondSubData,
25
- liquityRepayFromSavingsSubData,
26
- makerCloseSubData,
27
- makerLeverageManagementSubData,
28
- makerRepayFromSavingsSubData,
29
- morphoAaveV2LeverageManagementSubData,
30
- sparkLeverageManagementSubData,
31
- sparkQuotePriceSubData,
32
- crvUSDLeverageManagementSubData,
33
- compoundV3L2LeverageManagementSubData, morphoBlueLeverageManagementSubData, crvUSDPaybackSubData,
34
- aaveV3OpenOrderSubData,
35
- } from './subDataService';
36
- import { AAVE_V3_VARIABLE_BORROW_RATE } from '../constants';
37
-
38
- describe('Feature: subDataService.ts', () => {
39
-
40
- describe('When testing subDataService.makerRepayFromSavingsSubData', () => {
41
- describe('encode()', () => {
42
- const examples: Array<[SubData, [vaultId: number, targetRatioPercentage: number, chainId: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress]]> = [
43
- [
44
- [
45
- '0x000000000000000000000000000000000000000000000000000000000000007b', '0x00000000000000000000000000000000000000000000000010a741a462780000',
46
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
47
- ],
48
- [123, 120, ChainId.Ethereum, web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address), web3Utils.toChecksumAddress('0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e')]
49
- ],
50
- ];
51
-
52
- examples.forEach(([expected, actual]) => {
53
- it(`Given ${actual} should return expected value: ${expected}`, () => {
54
- expect(makerRepayFromSavingsSubData.encode(...actual)).to.eql(expected);
55
- });
56
- });
57
- });
58
-
59
- describe('decode()', () => {
60
- const examples: Array<[{ vaultId: number, daiAddr: string, mcdManagerAddr: string, targetRatio: number }, SubData]> = [
61
- [
62
- {
63
- vaultId: 123,
64
- daiAddr: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
65
- mcdManagerAddr: web3Utils.toChecksumAddress('0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e'),
66
- targetRatio: 120,
67
- },
68
- [
69
- '0x000000000000000000000000000000000000000000000000000000000000007b', '0x00000000000000000000000000000000000000000000000010a741a462780000',
70
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
71
- ],
72
- ],
73
- ];
74
-
75
- examples.forEach(([expected, actual]) => {
76
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
77
- expect(makerRepayFromSavingsSubData.decode(actual)).to.eql(expected);
78
- });
79
- });
80
- });
81
- });
82
-
83
- describe('When testing subDataService.liquityRepayFromSavingsSubData', () => {
84
- describe('decode()', () => {
85
- const examples: Array<[{ targetRatio: number }, SubData]> = [
86
- [
87
- { targetRatio: 120 },
88
- [
89
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x00000000000000000000000000000000000000000000000010a741a462780000',
90
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
91
- ],
92
- ],
93
- ];
94
-
95
- examples.forEach(([expected, actual]) => {
96
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
97
- expect(liquityRepayFromSavingsSubData.decode(actual)).to.eql(expected);
98
- });
99
- });
100
- });
101
- });
102
-
103
- describe('When testing subDataService.makerCloseSubData', () => {
104
- describe('encode()', () => {
105
- const examples: Array<[SubData, [vaultId: number, closeToAssetAddr: EthereumAddress, chainId: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress]]> = [
106
- [
107
- [
108
- '0x0000000000000000000000000000000000000000000000000000000000000141', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
109
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
110
- ],
111
- [321, web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address), ChainId.Ethereum, web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address), web3Utils.toChecksumAddress('0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e')]
112
- ],
113
- [
114
- [
115
- '0x00000000000000000000000000000000000000000000000000000000000001a4', '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
116
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002439d218133afab8f2b819b1066c7e434ad94e9e',
117
- ],
118
- [420, web3Utils.toChecksumAddress(getAssetInfo('WBTC', ChainId.Ethereum).address), ChainId.Ethereum, web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address), web3Utils.toChecksumAddress('0x2439d218133AFaB8F2B819B1066c7E434Ad94E9e')]
119
- ],
120
- ];
121
-
122
- examples.forEach(([expected, actual]) => {
123
- it(`Given ${actual} should return expected value: ${expected}`, () => {
124
- expect(makerCloseSubData.encode(...actual)).to.eql(expected);
125
- });
126
- });
127
- });
128
-
129
- describe('decode()', () => {
130
- const examples: Array<[{ vaultId: number, closeToAssetAddr: EthereumAddress }, SubData]> = [
131
- [
132
- {
133
- vaultId: 321,
134
- closeToAssetAddr: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
135
- },
136
- [
137
- '0x0000000000000000000000000000000000000000000000000000000000000141', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
138
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
139
- ],
140
- ],
141
- [
142
- {
143
- vaultId: 420,
144
- closeToAssetAddr: web3Utils.toChecksumAddress(getAssetInfo('WBTC', ChainId.Ethereum).address),
145
- },
146
- [
147
- '0x00000000000000000000000000000000000000000000000000000000000001a4', '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
148
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002439d218133afab8f2b819b1066c7e434ad94e9e',
149
- ],
150
- ],
151
- ];
152
-
153
- examples.forEach(([expected, actual]) => {
154
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
155
- expect(makerCloseSubData.decode(actual)).to.eql(expected);
156
- });
157
- });
158
- });
159
- });
160
-
161
- describe('When testing subDataService.makerLeverageManagementSubData', () => {
162
- describe('decode()', () => {
163
- const examples: Array<[{ vaultId: number, targetRatio: number }, SubData]> = [
164
- [
165
- { vaultId: 321, targetRatio: 200 },
166
- [
167
- '0x0000000000000000000000000000000000000000000000000000000000000141', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
168
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
169
- ],
170
- ],
171
- ];
172
-
173
- examples.forEach(([expected, actual]) => {
174
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
175
- expect(makerLeverageManagementSubData.decode(actual)).to.eql(expected);
176
- });
177
- });
178
- });
179
- });
180
-
181
- describe('When testing subDataService.liquityLeverageManagementSubData', () => {
182
- describe('decode()', () => {
183
- const examples: Array<[{ targetRatio: number }, SubData]> = [
184
- [
185
- { targetRatio: 200 },
186
- [
187
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
188
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
189
- ],
190
- ],
191
- ];
192
-
193
- examples.forEach(([expected, actual]) => {
194
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
195
- expect(liquityLeverageManagementSubData.decode(actual)).to.eql(expected);
196
- });
197
- });
198
- });
199
- });
200
-
201
- describe('When testing subDataService.liquityCloseSubData', () => {
202
- describe('encode()', () => {
203
- const examples: Array<[SubData, [closeToAssetAddr: EthereumAddress, chainId: ChainId, collAddr?: EthereumAddress, debtAddr?: EthereumAddress]]> = [
204
- [
205
- [
206
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
207
- ],
208
- [web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address), ChainId.Ethereum, web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address), web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address)]
209
- ],
210
- [
211
- [
212
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
213
- ],
214
- [web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address), ChainId.Ethereum]
215
- ],
216
- ];
217
-
218
- examples.forEach(([expected, actual]) => {
219
- it(`Given ${actual} should return expected value: ${expected}`, () => {
220
- expect(liquityCloseSubData.encode(...actual)).to.eql(expected);
221
- });
222
- });
223
- });
224
-
225
- describe('decode()', () => {
226
- const examples: Array<[{ closeToAssetAddr: EthereumAddress, debtAddr: string }, SubData]> = [
227
- [
228
- {
229
- closeToAssetAddr: web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address),
230
- debtAddr: web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address),
231
- },
232
- [
233
- '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
234
- ],
235
- ],
236
- [
237
- {
238
- closeToAssetAddr: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
239
- debtAddr: web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address),
240
- },
241
- [
242
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
243
- ],
244
- ],
245
- ];
246
-
247
- examples.forEach(([expected, actual]) => {
248
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
249
- expect(liquityCloseSubData.decode(actual)).to.eql(expected);
250
- });
251
- });
252
- });
253
- });
254
-
255
- describe('When testing subDataService.aaveV2LeverageManagementSubData', () => {
256
- describe('encode()', () => {
257
- const examples: Array<[[string, string, string, string, boolean], [triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean]]> = [
258
- [
259
- [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],
260
- [160, 220, 180, 190, true]
261
- ],
262
- [
263
- [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],
264
- [160, 200, 180, 190, false]
265
- ],
266
- ];
267
-
268
- examples.forEach(([expected, actual]) => {
269
- it(`Given ${actual} should return expected value: ${expected}`, () => {
270
- expect(aaveV2LeverageManagementSubData.encode(...actual)).to.eql(expected);
271
- });
272
- });
273
- });
274
-
275
- describe('decode()', () => {
276
- const examples: Array<[{ targetRatio: number }, SubData]> = [
277
- [
278
- { targetRatio: 200 },
279
- ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000'],
280
- ],
281
- [
282
- { targetRatio: 123 },
283
- ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000'],
284
- ],
285
- ];
286
-
287
- examples.forEach(([expected, actual]) => {
288
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
289
- expect(aaveV2LeverageManagementSubData.decode(actual)).to.eql(expected);
290
- });
291
- });
292
- });
293
- });
294
-
295
- describe('When testing subDataService.aaveV3LeverageManagementSubData', () => {
296
- describe('decode()', () => {
297
- const examples: Array<[{ targetRatio: number }, SubData]> = [
298
- [
299
- { targetRatio: 200 },
300
- ['0x0000000000000000000000000000000000000000000000001bc16d674ec80000'],
301
- ],
302
- [
303
- { targetRatio: 123 },
304
- ['0x0000000000000000000000000000000000000000000000001111d67bb1bb0000'],
305
- ],
306
- ];
307
-
308
- examples.forEach(([expected, actual]) => {
309
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
310
- expect(aaveV3LeverageManagementSubData.decode(actual)).to.eql(expected);
311
- });
312
- });
313
- });
314
- });
315
-
316
- describe('When testing subDataService.aaveV3QuotePriceSubData', () => {
317
- describe('encode()', () => {
318
- const examples: Array<[SubData, [collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, nullAddress?: EthereumAddress]]> = [
319
- [
320
- [
321
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000002',
322
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000004',
323
- '0x0000000000000000000000000000000000000000000000000000000000000000',
324
- ],
325
- [
326
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
327
- 2,
328
- web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
329
- 4,
330
- ]
331
- ],
332
- [
333
- [
334
- '0x0000000000000000000000005979d7b546e38e414f7e9822514be443a4800529', '0x0000000000000000000000000000000000000000000000000000000000000006',
335
- '0x000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831', '0x0000000000000000000000000000000000000000000000000000000000000002',
336
- '0x0000000000000000000000000000000000000000000000000000000000000000',
337
- ],
338
- [
339
- web3Utils.toChecksumAddress(getAssetInfo('wstETH', ChainId.Arbitrum).address),
340
- 6,
341
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
342
- 2,
343
- ]
344
- ],
345
- ];
346
-
347
- examples.forEach(([expected, actual]) => {
348
- it(`Given ${actual} should return expected value: ${expected}`, () => {
349
- expect(aaveV3QuotePriceSubData.encode(...actual)).to.eql(expected);
350
- });
351
- });
352
- });
353
-
354
- describe('decode()', () => {
355
- const examples: Array<[{ collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number }, SubData]> = [
356
- [
357
- {
358
- collAsset: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
359
- collAssetId: 2,
360
- debtAsset: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
361
- debtAssetId: 4,
362
- },
363
- [
364
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000002',
365
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000004',
366
- '0x0000000000000000000000000000000000000000000000000000000000000000',
367
- ],
368
- ],
369
- [
370
- {
371
- collAsset: web3Utils.toChecksumAddress(getAssetInfo('wstETH', ChainId.Arbitrum).address),
372
- collAssetId: 6,
373
- debtAsset: web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
374
- debtAssetId: 2,
375
- },
376
- [
377
- '0x0000000000000000000000005979d7b546e38e414f7e9822514be443a4800529', '0x0000000000000000000000000000000000000000000000000000000000000006',
378
- '0x000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831', '0x0000000000000000000000000000000000000000000000000000000000000002',
379
- '0x0000000000000000000000000000000000000000000000000000000000000000',
380
- ],
381
- ],
382
- ];
383
-
384
- examples.forEach(([expected, actual]) => {
385
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
386
- expect(aaveV3QuotePriceSubData.decode(actual)).to.eql(expected);
387
- });
388
- });
389
- });
390
- });
391
-
392
- describe('When testing subDataService.compoundV2LeverageManagementSubData', () => {
393
- describe('encode()', () => {
394
- const examples: Array<[[string, string, string, string, boolean], [triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean]]> = [
395
- [
396
- [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],
397
- [160, 220, 180, 190, true]
398
- ],
399
- [
400
- [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],
401
- [160, 200, 180, 190, false]
402
- ],
403
- ];
404
-
405
- examples.forEach(([expected, actual]) => {
406
- it(`Given ${actual} should return expected value: ${expected}`, () => {
407
- expect(compoundV2LeverageManagementSubData.encode(...actual)).to.eql(expected);
408
- });
409
- });
410
- });
411
-
412
- describe('decode()', () => {
413
- const examples: Array<[{ targetRatio: number }, SubData]> = [
414
- [
415
- { targetRatio: 200 },
416
- ['0x0000000000000000000000000000000000000000000000001bc16d674ec80000'],
417
- ],
418
- [
419
- { targetRatio: 123 },
420
- ['0x0000000000000000000000000000000000000000000000001111d67bb1bb0000'],
421
- ],
422
- ];
423
-
424
- examples.forEach(([expected, actual]) => {
425
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
426
- expect(compoundV2LeverageManagementSubData.decode(actual)).to.eql(expected);
427
- });
428
- });
429
- });
430
- });
431
-
432
- describe('When testing subDataService.compoundV3LeverageManagementSubData', () => {
433
- describe('encode()', () => {
434
- const examples: Array<[[EthereumAddress, EthereumAddress, string, string, string, string, boolean, boolean], [market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean]]> = [
435
- [
436
- [
437
- web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
438
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
439
- new Dec(160).mul(1e16).toString(),
440
- new Dec(220).mul(1e16).toString(),
441
- new Dec(180).mul(1e16).toString(),
442
- new Dec(190).mul(1e16).toString(),
443
- true, false,
444
- ],
445
- [
446
- web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
447
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
448
- 160, 220, 180, 190,
449
- true, false,
450
- ]
451
- ],
452
- [
453
- [
454
- web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
455
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
456
- new Dec(160).mul(1e16).toString(),
457
- new Dec(210).mul(1e16).toString(),
458
- new Dec(180).mul(1e16).toString(),
459
- new Dec(190).mul(1e16).toString(),
460
- false, true,
461
- ],
462
- [
463
- web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
464
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
465
- 160, 210, 180, 190,
466
- false, true,
467
- ]
468
- ],
469
- ];
470
-
471
- examples.forEach(([expected, actual]) => {
472
- it(`Given ${actual} should return expected value: ${expected}`, () => {
473
- expect(compoundV3LeverageManagementSubData.encode(...actual)).to.eql(expected);
474
- });
475
- });
476
- });
477
-
478
- describe('decode()', () => {
479
- const examples: Array<[{ targetRatio: number }, SubData]> = [
480
- [
481
- { targetRatio: 123 },
482
- [
483
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
484
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
485
- ],
486
- ],
487
- [
488
- { targetRatio: 200 },
489
- [
490
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
491
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
492
- ],
493
- ],
494
- ];
495
-
496
- examples.forEach(([expected, actual]) => {
497
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
498
- expect(compoundV3LeverageManagementSubData.decode(actual)).to.eql(expected);
499
- });
500
- });
501
- });
502
- });
503
-
504
- describe('When testing subDataService.morphoAaveV2LeverageManagementSubData', () => {
505
- describe('encode()', () => {
506
- const examples: Array<[[string, string, string, string, boolean], [triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean]]> = [
507
- [
508
- [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],
509
- [160, 220, 180, 190, true]
510
- ],
511
- [
512
- [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],
513
- [160, 200, 180, 190, false]
514
- ],
515
- ];
516
-
517
- examples.forEach(([expected, actual]) => {
518
- it(`Given ${actual} should return expected value: ${expected}`, () => {
519
- expect(morphoAaveV2LeverageManagementSubData.encode(...actual)).to.eql(expected);
520
- });
521
- });
522
- });
523
-
524
- describe('decode()', () => {
525
- const examples: Array<[{ targetRatio: number }, SubData]> = [
526
- [
527
- { targetRatio: 200 },
528
- ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000'],
529
- ],
530
- [
531
- { targetRatio: 123 },
532
- ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000'],
533
- ],
534
- ];
535
-
536
- examples.forEach(([expected, actual]) => {
537
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
538
- expect(morphoAaveV2LeverageManagementSubData.decode(actual)).to.eql(expected);
539
- });
540
- });
541
- });
542
- });
543
-
544
- describe('When testing subDataService.cBondsRebondSubData', () => {
545
- describe('encode()', () => {
546
- const examples: Array<[SubData, [bondId: number | string]]> = [
547
- [
548
- ['0x00000000000000000000000000000000000000000000000000000000000000c8'],
549
- [200]
550
- ],
551
- [
552
- ['0x000000000000000000000000000000000000000000000000000000000000a119'],
553
- [41241]
554
- ],
555
- ];
556
-
557
- examples.forEach(([expected, actual]) => {
558
- it(`Given ${actual} should return expected value: ${expected}`, () => {
559
- expect(cBondsRebondSubData.encode(...actual)).to.eql(expected);
560
- });
561
- });
562
- });
563
-
564
- describe('decode()', () => {
565
- const examples: Array<[{ bondId: string }, SubData]> = [
566
- [
567
- { bondId: '200' },
568
- ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x00000000000000000000000000000000000000000000000000000000000000c8'],
569
- ],
570
- [
571
- { bondId: '41241' },
572
- ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000000000000000000000000000000000000000a119'],
573
- ],
574
- ];
575
-
576
- examples.forEach(([expected, actual]) => {
577
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
578
- expect(cBondsRebondSubData.decode(actual)).to.eql(expected);
579
- });
580
- });
581
- });
582
- });
583
-
584
- describe('When testing subDataService.liquityPaybackUsingChickenBondSubData', () => {
585
- describe('encode()', () => {
586
- const examples: Array<[SubData, [sourceId: string, sourceType: number, chainId?: ChainId]]> = [
587
- [
588
- [
589
- '0x0000000000000000000000000000000000000000000000000000000000001076', '0x0000000000000000000000000000000000000000000000000000000000000000',
590
- '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x000000000000000000000000b9d7dddca9a4ac480991865efef82e01273f79c3',
591
- ],
592
- ['4214', 0, ChainId.Ethereum]
593
- ],
594
- [
595
- [
596
- '0x00000000000000000000000000000000000000000000000000000000000002b8', '0x0000000000000000000000000000000000000000000000000000000000000001',
597
- '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x000000000000000000000000b9d7dddca9a4ac480991865efef82e01273f79c3',
598
- ],
599
- ['696', 1]
600
- ],
601
- ];
602
-
603
- examples.forEach(([expected, actual]) => {
604
- it(`Given ${actual} should return expected value: ${expected}`, () => {
605
- expect(liquityPaybackUsingChickenBondSubData.encode(...actual)).to.eql(expected);
606
- });
607
- });
608
- });
609
-
610
- describe('decode()', () => {
611
- const examples: Array<[{ sourceId: string, sourceType: string }, SubData]> = [
612
- [
613
- { sourceId: '4214', sourceType: '0' },
614
- [
615
- '0x0000000000000000000000000000000000000000000000000000000000001076', '0x0000000000000000000000000000000000000000000000000000000000000000',
616
- '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x000000000000000000000000b9d7dddca9a4ac480991865efef82e01273f79c3',
617
- ],
618
- ],
619
- [
620
- { sourceId: '696', sourceType: '1' },
621
- [
622
- '0x00000000000000000000000000000000000000000000000000000000000002b8', '0x0000000000000000000000000000000000000000000000000000000000000001',
623
- '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x000000000000000000000000b9d7dddca9a4ac480991865efef82e01273f79c3',
624
- ],
625
- ],
626
- ];
627
-
628
- examples.forEach(([expected, actual]) => {
629
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
630
- expect(liquityPaybackUsingChickenBondSubData.decode(actual)).to.eql(expected);
631
- });
632
- });
633
- });
634
- });
635
-
636
- describe('When testing subDataService.exchangeDcaSubData', () => {
637
- describe('encode()', () => {
638
- const examples: Array<[SubData, [fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, interval: number]]> = [
639
- [
640
- [
641
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
642
- '0x0000000000000000000000000000000000000000000000000000000000000853', '0x0000000000000000000000000000000000000000000000000000000000231860'
643
- ],
644
- [
645
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
646
- web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
647
- '2131',
648
- 2300000,
649
- ]
650
- ],
651
- [
652
- [
653
- '0x0000000000000000000000002f2a2543b76a4166549f7aab2e75bef0aefc5b0f', '0x000000000000000000000000f97f4df75117a78c1a5a0dbb814af92458539fb4',
654
- '0x00000000000000000000000000000000000000000000000000000000003eddd7', '0x0000000000000000000000000000000000000000000000000000000008f57500'
655
- ],
656
- [
657
- web3Utils.toChecksumAddress(getAssetInfo('WBTC', ChainId.Arbitrum).address),
658
- web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
659
- '4120023',
660
- 150304000,
661
- ]
662
- ],
663
- ];
664
-
665
- examples.forEach(([expected, actual]) => {
666
- it(`Given ${actual} should return expected value: ${expected}`, () => {
667
- expect(exchangeDcaSubData.encode(...actual)).to.eql(expected);
668
- });
669
- });
670
- });
671
-
672
- describe('decode()', () => {
673
- const examples: Array<[{ fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, interval: string }, [SubData, ChainId]]> = [
674
- [
675
- {
676
- fromToken: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
677
- toToken: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
678
- amount: '0.000000000000002131',
679
- interval: '2300000',
680
- },
681
- [
682
- [
683
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
684
- '0x0000000000000000000000000000000000000000000000000000000000000853', '0x0000000000000000000000000000000000000000000000000000000000231860'
685
- ],
686
- ChainId.Ethereum
687
- ],
688
- ],
689
- [
690
- {
691
- fromToken: web3Utils.toChecksumAddress(getAssetInfo('WBTC', ChainId.Arbitrum).address),
692
- toToken: web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
693
- amount: '0.04120023',
694
- interval: '150304000',
695
- },
696
- [
697
- [
698
- '0x0000000000000000000000002f2a2543b76a4166549f7aab2e75bef0aefc5b0f', '0x000000000000000000000000f97f4df75117a78c1a5a0dbb814af92458539fb4',
699
- '0x00000000000000000000000000000000000000000000000000000000003eddd7', '0x0000000000000000000000000000000000000000000000000000000008f57500'
700
- ],
701
- ChainId.Arbitrum
702
- ]
703
- ],
704
- ];
705
-
706
- examples.forEach(([expected, actual]) => {
707
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
708
- expect(exchangeDcaSubData.decode(...actual)).to.eql(expected);
709
- });
710
- });
711
- });
712
- });
713
-
714
- describe('When testing subDataService.exchangeLimitOrderSubData', () => {
715
- describe('encode()', () => {
716
- const examples: Array<[[EthereumAddress, EthereumAddress, string, string, string, string], [fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, targetPrice: string, goodUntil: string | number, orderType: OrderType]]> = [
717
- [
718
- [
719
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
720
- web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
721
- '2131',
722
- '0.53123',
723
- '1696590921159',
724
- `${OrderType.STOP_LOSS}`
725
- ],
726
- [
727
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
728
- web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
729
- '2131',
730
- '0.53123',
731
- 1696590921159,
732
- OrderType.STOP_LOSS
733
- ]
734
- ],
735
- [
736
- [
737
- web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
738
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
739
- '2131',
740
- '0.43123',
741
- '1646590921159',
742
- `${OrderType.TAKE_PROFIT}`
743
- ],
744
- [
745
- web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
746
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
747
- '2131',
748
- '0.43123',
749
- 1646590921159,
750
- OrderType.TAKE_PROFIT
751
- ]
752
- ],
753
- ];
754
-
755
- examples.forEach(([expected, actual]) => {
756
- it(`Given ${actual} should return expected value: ${expected}`, () => {
757
- expect(exchangeLimitOrderSubData.encode(...actual)).to.eql(expected);
758
- });
759
- });
760
- });
761
-
762
- describe('decode()', () => {
763
- const examples: Array<[{ fromToken: EthereumAddress, toToken: EthereumAddress, amount: string }, [SubData, ChainId]]> = [
764
- [
765
- {
766
- fromToken: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
767
- toToken: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
768
- amount: '0.000000000000002131',
769
- },
770
- [
771
- [
772
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
773
- '0x0000000000000000000000000000000000000000000000000000000000000853', '0x0000000000000000000000000000000000000000000000000000000000231860'
774
- ],
775
- ChainId.Ethereum
776
- ],
777
- ],
778
- [
779
- {
780
- fromToken: web3Utils.toChecksumAddress(getAssetInfo('WBTC', ChainId.Arbitrum).address),
781
- toToken: web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
782
- amount: '0.04120023',
783
- },
784
- [
785
- [
786
- '0x0000000000000000000000002f2a2543b76a4166549f7aab2e75bef0aefc5b0f', '0x000000000000000000000000f97f4df75117a78c1a5a0dbb814af92458539fb4',
787
- '0x00000000000000000000000000000000000000000000000000000000003eddd7', '0x0000000000000000000000000000000000000000000000000000000008f57500'
788
- ],
789
- ChainId.Arbitrum
790
- ]
791
- ],
792
- ];
793
-
794
- examples.forEach(([expected, actual]) => {
795
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
796
- expect(exchangeLimitOrderSubData.decode(...actual)).to.eql(expected);
797
- });
798
- });
799
- });
800
- });
801
-
802
- describe('When testing subDataService.sparkLeverageManagementSubData', () => {
803
- describe('decode()', () => {
804
- const examples: Array<[{ targetRatio: number }, SubData]> = [
805
- [
806
- { targetRatio: 200 },
807
- ['0x0000000000000000000000000000000000000000000000001bc16d674ec80000'],
808
- ],
809
- [
810
- { targetRatio: 123 },
811
- ['0x0000000000000000000000000000000000000000000000001111d67bb1bb0000'],
812
- ],
813
- ];
814
-
815
- examples.forEach(([expected, actual]) => {
816
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
817
- expect(sparkLeverageManagementSubData.decode(actual)).to.eql(expected);
818
- });
819
- });
820
- });
821
- });
822
-
823
- describe('When testing subDataService.sparkQuotePriceSubData', () => {
824
- describe('encode()', () => {
825
- const examples: Array<[SubData, [collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, nullAddress?: EthereumAddress]]> = [
826
- [
827
- [
828
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000002',
829
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000004',
830
- '0x0000000000000000000000000000000000000000000000000000000000000000',
831
- ],
832
- [
833
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
834
- 2,
835
- web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
836
- 4,
837
- ]
838
- ],
839
- [
840
- [
841
- '0x0000000000000000000000005979d7b546e38e414f7e9822514be443a4800529', '0x0000000000000000000000000000000000000000000000000000000000000006',
842
- '0x000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831', '0x0000000000000000000000000000000000000000000000000000000000000002',
843
- '0x0000000000000000000000000000000000000000000000000000000000000000',
844
- ],
845
- [
846
- web3Utils.toChecksumAddress(getAssetInfo('wstETH', ChainId.Arbitrum).address),
847
- 6,
848
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
849
- 2,
850
- ]
851
- ],
852
- ];
853
-
854
- examples.forEach(([expected, actual]) => {
855
- it(`Given ${actual} should return expected value: ${expected}`, () => {
856
- expect(sparkQuotePriceSubData.encode(...actual)).to.eql(expected);
857
- });
858
- });
859
- });
860
-
861
- describe('decode()', () => {
862
- const examples: Array<[{ collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number }, SubData]> = [
863
- [
864
- {
865
- collAsset: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
866
- collAssetId: 2,
867
- debtAsset: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
868
- debtAssetId: 4,
869
- },
870
- [
871
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000002',
872
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000004',
873
- '0x0000000000000000000000000000000000000000000000000000000000000000',
874
- ],
875
- ],
876
- [
877
- {
878
- collAsset: web3Utils.toChecksumAddress(getAssetInfo('wstETH', ChainId.Arbitrum).address),
879
- collAssetId: 6,
880
- debtAsset: web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
881
- debtAssetId: 2,
882
- },
883
- [
884
- '0x0000000000000000000000005979d7b546e38e414f7e9822514be443a4800529', '0x0000000000000000000000000000000000000000000000000000000000000006',
885
- '0x000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831', '0x0000000000000000000000000000000000000000000000000000000000000002',
886
- '0x0000000000000000000000000000000000000000000000000000000000000000',
887
- ],
888
- ],
889
- ];
890
-
891
- examples.forEach(([expected, actual]) => {
892
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
893
- expect(sparkQuotePriceSubData.decode(actual)).to.eql(expected);
894
- });
895
- });
896
- });
897
- });
898
-
899
- describe('When testing subDataService.liquityDsrPaybackSubData', () => {
900
- describe('encode()', () => {
901
- const examples: Array<[SubData, [targetRatio: number]]> = [
902
- [
903
- [
904
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
905
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
906
- ],
907
- [123]
908
- ],
909
- [
910
- [
911
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000003a4965bf58a40000',
912
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
913
- ],
914
- [420]
915
- ],
916
- ];
917
-
918
- examples.forEach(([expected, actual]) => {
919
- it(`Given ${actual} should return expected value: ${expected}`, () => {
920
- expect(liquityDsrPaybackSubData.encode(...actual)).to.eql(expected);
921
- });
922
- });
923
- });
924
-
925
- describe('decode()', () => {
926
- const examples: Array<[{ targetRatio: number }, SubData]> = [
927
- [
928
- {
929
- targetRatio: 123,
930
- },
931
- [
932
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
933
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
934
- ],
935
- ],
936
- [
937
- {
938
- targetRatio: 420,
939
- },
940
- [
941
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000003a4965bf58a40000',
942
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
943
- ],
944
- ],
945
- ];
946
-
947
- examples.forEach(([expected, actual]) => {
948
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
949
- expect(liquityDsrPaybackSubData.decode(actual)).to.eql(expected);
950
- });
951
- });
952
- });
953
- });
954
-
955
- describe('When testing subDataService.liquityDsrSupplySubData', () => {
956
- describe('encode()', () => {
957
- const examples: Array<[SubData, [targetRatio: number]]> = [
958
- [
959
- [
960
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000002c68af0bb1400000',
961
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
962
- ],
963
- [320]
964
- ],
965
- [
966
- [
967
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001eab7f4a799d0000',
968
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
969
- ],
970
- [221]
971
- ],
972
- ];
973
-
974
- examples.forEach(([expected, actual]) => {
975
- it(`Given ${actual} should return expected value: ${expected}`, () => {
976
- expect(liquityDsrSupplySubData.encode(...actual)).to.eql(expected);
977
- });
978
- });
979
- });
980
-
981
- describe('decode()', () => {
982
- const examples: Array<[{ targetRatio: number }, SubData]> = [
983
- [
984
- {
985
- targetRatio: 320,
986
- },
987
- [
988
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000002c68af0bb1400000',
989
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
990
- ],
991
- ],
992
- [
993
- {
994
- targetRatio: 221,
995
- },
996
- [
997
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001eab7f4a799d0000',
998
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
999
- ],
1000
- ],
1001
- ];
1002
-
1003
- examples.forEach(([expected, actual]) => {
1004
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1005
- expect(liquityDsrSupplySubData.decode(actual)).to.eql(expected);
1006
- });
1007
- });
1008
- });
1009
- });
1010
-
1011
- describe('When testing subDataService.liquityDebtInFrontRepaySubData', () => {
1012
- describe('encode()', () => {
1013
- const examples: Array<[SubData, [targetRatioIncrease: number]]> = [
1014
- [
1015
- [
1016
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
1017
- '0x000000000000000000000000000000000000000000000000016345785d8a0000', '0x0000000000000000000000000000000000000000000000000000000000000001',
1018
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1019
- ],
1020
- [10]
1021
- ],
1022
- [
1023
- [
1024
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
1025
- '0x000000000000000000000000000000000000000000000000063eb89da4ed0000', '0x0000000000000000000000000000000000000000000000000000000000000001',
1026
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1027
- ],
1028
- [45]
1029
- ],
1030
- ];
1031
-
1032
- examples.forEach(([expected, actual]) => {
1033
- it(`Given ${actual} should return expected value: ${expected}`, () => {
1034
- expect(liquityDebtInFrontRepaySubData.encode(...actual)).to.eql(expected);
1035
- });
1036
- });
1037
- });
1038
-
1039
- describe('decode()', () => {
1040
- const examples: Array<[{ targetRatioIncrease: number }, SubData]> = [
1041
- [
1042
- {
1043
- targetRatioIncrease: 10,
1044
- },
1045
- [
1046
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
1047
- '0x000000000000000000000000000000000000000000000000016345785d8a0000', '0x0000000000000000000000000000000000000000000000000000000000000001',
1048
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1049
- ],
1050
- ],
1051
- [
1052
- {
1053
- targetRatioIncrease: 45,
1054
- },
1055
- [
1056
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
1057
- '0x000000000000000000000000000000000000000000000000063eb89da4ed0000', '0x0000000000000000000000000000000000000000000000000000000000000001',
1058
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1059
- ],
1060
- ],
1061
- ];
1062
-
1063
- examples.forEach(([expected, actual]) => {
1064
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1065
- expect(liquityDebtInFrontRepaySubData.decode(actual)).to.eql(expected);
1066
- });
1067
- });
1068
- });
1069
- });
1070
-
1071
- describe('When testing subDataService.crvUSDLeverageManagementSubData', () => {
1072
- describe('encode()', () => {
1073
- const examples: Array<[SubData, [controller: EthereumAddress, ratioState: RatioState, targetRatio: number, collToken: EthereumAddress, crvUSD: EthereumAddress]]> = [
1074
- [
1075
- [
1076
- '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
1077
- '0x0000000000000000000000000000000000000000000000000000000000000001',
1078
- '0x00000000000000000000000000000000000000000000000010a741a462780000',
1079
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1080
- '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
1081
- ],
1082
- ['0xa920de414ea4ab66b97da1bfe9e6eca7d4219635', RatioState.UNDER, 120, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E'],
1083
- ],
1084
- [
1085
- [
1086
- '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
1087
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1088
- '0x00000000000000000000000000000000000000000000000018fae27693b40000',
1089
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1090
- '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
1091
- ],
1092
- ['0xa920de414ea4ab66b97da1bfe9e6eca7d4219635', RatioState.OVER, 180, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E']
1093
- ],
1094
- ];
1095
- examples.forEach(([expected, actual]) => {
1096
- it(`Given ${actual} should return expected value: ${expected}`, () => {
1097
- expect(crvUSDLeverageManagementSubData.encode(...actual)).to.eql(expected);
1098
- });
1099
- });
1100
- });
1101
- describe('decode()', () => {
1102
- const examples: Array<[{
1103
- controller: EthereumAddress,
1104
- targetRatio: number,
1105
- }, SubData]> = [
1106
- [
1107
- {
1108
- controller: '0xA920De414eA4Ab66b97dA1bFE9e6EcA7d4219635',
1109
- targetRatio: 120,
1110
- },
1111
- ['0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635', '0x0000000000000000000000000000000000000000000000000000000000000001', '0x00000000000000000000000000000000000000000000000010a741a462780000', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',],
1112
- ],
1113
- [
1114
- {
1115
- controller: '0xA920De414eA4Ab66b97dA1bFE9e6EcA7d4219635',
1116
- targetRatio: 180,
1117
- },
1118
- ['0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x00000000000000000000000000000000000000000000000018fae27693b40000', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',],
1119
- ],
1120
- ];
1121
-
1122
- examples.forEach(([expected, actual]) => {
1123
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1124
- expect(crvUSDLeverageManagementSubData.decode(actual)).to.eql(expected);
1125
- });
1126
- });
1127
- });
1128
- });
1129
-
1130
- describe('When testing subDataService.crvUSDPaybackSubData', () => {
1131
- describe('encode()', () => {
1132
- const examples: Array<[SubData, [controller: EthereumAddress, addressToPullTokensFrom: EthereumAddress, positionOwner: EthereumAddress, paybackAmount: string, crvUSDAddr: EthereumAddress]]> = [
1133
- [
1134
- [
1135
- '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
1136
- '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
1137
- '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
1138
- '0x00000000000000000000000000000000000000000000043c33c1937564800000',
1139
- '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
1140
- ],
1141
- ['0xa920de414ea4ab66b97da1bfe9e6eca7d4219635', '0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280', '0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280', '20000', '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E'],
1142
- ]
1143
- ];
1144
- examples.forEach(([expected, actual]) => {
1145
- it(`Given ${actual} should return expected value: ${expected}`, () => {
1146
- expect(crvUSDPaybackSubData.encode(...actual)).to.eql(expected);
1147
- });
1148
- });
1149
- });
1150
- describe('decode()', () => {
1151
- const examples: Array<[{
1152
- controller: EthereumAddress,
1153
- addressToPullTokensFrom: EthereumAddress,
1154
- positionOwner: EthereumAddress,
1155
- paybackAmount: string,
1156
- }, SubData]> = [
1157
- [
1158
- {
1159
- controller: '0xA920De414eA4Ab66b97dA1bFE9e6EcA7d4219635',
1160
- addressToPullTokensFrom: '0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280',
1161
- positionOwner: '0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280',
1162
- paybackAmount: '20000'
1163
- },
1164
- [
1165
- '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
1166
- '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
1167
- '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
1168
- '0x00000000000000000000000000000000000000000000043c33c1937564800000',
1169
- '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
1170
- ]
1171
- ]
1172
- ];
1173
-
1174
- examples.forEach(([expected, actual]) => {
1175
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1176
- expect(crvUSDPaybackSubData.decode(actual)).to.eql(expected);
1177
- });
1178
- });
1179
- });
1180
- });
1181
-
1182
- describe('When testing subDataService.compoundV3L2LeverageManagementSubData', () => {
1183
- describe('encode()', () => {
1184
- const examples: Array<[
1185
- string,
1186
- [market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean],
1187
- ]> = [
1188
- [
1189
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e000001',
1190
- [web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 190, true]
1191
- ],
1192
- [
1193
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee000000',
1194
- [web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 110, false]
1195
- ],
1196
- ];
1197
-
1198
- examples.forEach(([expected, actual]) => {
1199
- it(`Given ${actual} should return expected value: ${expected}`, () => {
1200
- expect(compoundV3L2LeverageManagementSubData.encode(...actual)).to.eql(expected);
1201
- });
1202
- });
1203
- });
1204
- describe('decode()', () => {
1205
- const examples: Array<[{ targetRatio: number }, SubData]> = [
1206
- [
1207
- { targetRatio: 200 },
1208
- [
1209
- '0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000213d212133AFaB8F2B829B1066c7E43cAd94E2c',
1210
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1211
- ],
1212
- ],
1213
- [
1214
- { targetRatio: 123 },
1215
- [
1216
- '0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000413d212133AFaB8F2B829B1066c7E43cAd94E2c',
1217
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
1218
- ],
1219
- ],
1220
- ];
1221
-
1222
- examples.forEach(([expected, actual]) => {
1223
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1224
- expect(compoundV3L2LeverageManagementSubData.decode(actual)).to.eql(expected);
1225
- });
1226
- });
1227
- });
1228
- });
1229
-
1230
- describe('When testing subDataService.morphoBlueLeverageManagementSubData', () => {
1231
- describe('encode()', () => {
1232
- const examples: Array<[
1233
- SubData,
1234
- [loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, ratioState: RatioState, targetRatio: number, user: EthereumAddress, isEOA: boolean],
1235
- ]> = [
1236
- [
1237
- [
1238
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1239
- '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1240
- '0x0000000000000000000000002a01eb9496094da03c4e364def50f5ad1280ad72',
1241
- '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1242
- '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
1243
- '0x0000000000000000000000000000000000000000000000000000000000000001',
1244
- '0x00000000000000000000000000000000000000000000000010a741a462780000',
1245
- '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
1246
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1247
- ],
1248
- [web3Utils.toChecksumAddress('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0x2a01eb9496094da03c4e364def50f5ad1280ad72'), web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), '945000000000000000', RatioState.UNDER, 120, web3Utils.toChecksumAddress('0x1031d218133AFaB8c2B819B1366c7E434Ad91E9c'), false]
1249
- ],
1250
- [
1251
- [
1252
- '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
1253
- '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1254
- '0x00000000000000000000000048f7e36eb6b826b2df4b2e630b62cd25e89e40e2',
1255
- '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1256
- '0x0000000000000000000000000000000000000000000000000bef55718ad60000',
1257
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1258
- '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1259
- '0x0000000000000000000000000043d218133afab8f2b829b106633e434ad94e2c',
1260
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1261
- ],
1262
- [web3Utils.toChecksumAddress('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2'), web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), '860000000000000000', RatioState.OVER, 200, web3Utils.toChecksumAddress('0x0043d218133AFaB8F2B829B106633E434Ad94E2c'), false]
1263
- ],
1264
- ];
1265
-
1266
- examples.forEach(([expected, actual]) => {
1267
- it(`Given ${actual} should return expected value: ${expected}`, () => {
1268
- expect(morphoBlueLeverageManagementSubData.encode(...actual)).to.eql(expected);
1269
- });
1270
- });
1271
- });
1272
-
1273
- describe('decode()', () => {
1274
- const examples: Array<[{ collToken: EthereumAddress, loanToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, targetRatio: number, user: EthereumAddress }, SubData]> = [
1275
- [
1276
- {
1277
- 'collToken': '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
1278
- 'irm': '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
1279
- 'lltv': '945000000000000000',
1280
- 'loanToken': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
1281
- 'oracle': '0x2a01EB9496094dA03c4E364Def50f5aD1280AD72',
1282
- 'targetRatio': 120,
1283
- 'user': '0x1031d218133AFaB8C2B819B1366c7e434Ad91e9c',
1284
- },
1285
- [
1286
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1287
- '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1288
- '0x0000000000000000000000002a01eb9496094da03c4e364def50f5ad1280ad72',
1289
- '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1290
- '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
1291
- '0x0000000000000000000000000000000000000000000000000000000000000001',
1292
- '0x00000000000000000000000000000000000000000000000010a741a462780000',
1293
- '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
1294
- ],
1295
- ],
1296
- [
1297
- {
1298
- 'collToken': '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
1299
- 'irm': '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
1300
- 'lltv': '860000000000000000',
1301
- 'loanToken': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
1302
- 'oracle': '0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2',
1303
- 'targetRatio': 200,
1304
- 'user': '0x0043d218133aFaB8F2b829B106633E434aD94e2C',
1305
- },
1306
- [
1307
- '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
1308
- '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1309
- '0x00000000000000000000000048f7e36eb6b826b2df4b2e630b62cd25e89e40e2',
1310
- '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1311
- '0x0000000000000000000000000000000000000000000000000bef55718ad60000',
1312
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1313
- '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1314
- '0x0000000000000000000000000043d218133afab8f2b829b106633e434ad94e2c',
1315
- ],
1316
- ],
1317
- ];
1318
-
1319
- examples.forEach(([expected, actual]) => {
1320
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1321
- expect(morphoBlueLeverageManagementSubData.decode(actual)).to.eql(expected);
1322
- });
1323
- });
1324
- });
1325
- });
1326
-
1327
- describe('When testing subDataService.aaveV3OpenOrderSubData', () => {
1328
- describe('encode()', () => {
1329
- const examples: Array<[SubData, [collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number]]> = [
1330
- [
1331
- [
1332
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1333
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1334
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
1335
- '0x0000000000000000000000000000000000000000000000000000000000000004',
1336
- '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
1337
- '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1338
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1339
- ],
1340
- [
1341
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1342
- 0,
1343
- web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
1344
- 4,
1345
- web3Utils.toChecksumAddress('0x2f39d218133afab8f2b819b1066c7e434ad94e9e'),
1346
- 200,
1347
- ]
1348
- ],
1349
- ];
1350
-
1351
- examples.forEach(([expected, actual]) => {
1352
- it(`Given ${actual} should return expected value: ${expected}`, () => {
1353
- expect(aaveV3OpenOrderSubData.encode(...actual)).to.eql(expected);
1354
- });
1355
- });
1356
- });
1357
-
1358
- describe('decode()', () => {
1359
- const examples: Array<[{ collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number}, SubData]> = [
1360
- [
1361
- {
1362
- collAsset: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1363
- collAssetId: 0,
1364
- debtAsset: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
1365
- debtAssetId: 4,
1366
- marketAddr: web3Utils.toChecksumAddress('0x2f39d218133afab8f2b819b1066c7e434ad94e9e'),
1367
- targetRatio: 200,
1368
- },
1369
- [
1370
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1371
- '0x0000000000000000000000000000000000000000000000000000000000000000',
1372
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
1373
- '0x0000000000000000000000000000000000000000000000000000000000000004',
1374
- '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
1375
- '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1376
- ],
1377
- ],
1378
- ];
1379
-
1380
- examples.forEach(([expected, actual]) => {
1381
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1382
- expect(aaveV3OpenOrderSubData.decode(actual)).to.eql(expected);
1383
- });
1384
- });
1385
- });
1386
- });
1387
- });
1
+ import Dec from 'decimal.js';
2
+ import { expect } from 'chai';
3
+ import { getAssetInfo } from '@defisaver/tokens';
4
+ import * as web3Utils from 'web3-utils';
5
+
6
+ import { ChainId, OrderType, RatioState } from '../types/enums';
7
+ import type { EthereumAddress, SubData } from '../types';
8
+
9
+ import '../configuration';
10
+ import {
11
+ aaveV2LeverageManagementSubData,
12
+ aaveV3LeverageManagementSubData,
13
+ aaveV3QuotePriceSubData,
14
+ cBondsRebondSubData,
15
+ compoundV2LeverageManagementSubData,
16
+ compoundV3LeverageManagementSubData,
17
+ exchangeDcaSubData,
18
+ exchangeLimitOrderSubData,
19
+ liquityCloseSubData,
20
+ liquityDebtInFrontRepaySubData,
21
+ liquityDsrPaybackSubData,
22
+ liquityDsrSupplySubData,
23
+ liquityLeverageManagementSubData,
24
+ liquityPaybackUsingChickenBondSubData,
25
+ liquityRepayFromSavingsSubData,
26
+ makerCloseSubData,
27
+ makerLeverageManagementSubData,
28
+ makerRepayFromSavingsSubData,
29
+ morphoAaveV2LeverageManagementSubData,
30
+ sparkLeverageManagementSubData,
31
+ sparkQuotePriceSubData,
32
+ crvUSDLeverageManagementSubData,
33
+ compoundV3L2LeverageManagementSubData, morphoBlueLeverageManagementSubData, crvUSDPaybackSubData,
34
+ aaveV3LeverageManagementOnPriceSubData,
35
+ } from './subDataService';
36
+ import { AAVE_V3_VARIABLE_BORROW_RATE } from '../constants';
37
+
38
+ describe('Feature: subDataService.ts', () => {
39
+
40
+ describe('When testing subDataService.makerRepayFromSavingsSubData', () => {
41
+ describe('encode()', () => {
42
+ const examples: Array<[SubData, [vaultId: number, targetRatioPercentage: number, chainId: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress]]> = [
43
+ [
44
+ [
45
+ '0x000000000000000000000000000000000000000000000000000000000000007b', '0x00000000000000000000000000000000000000000000000010a741a462780000',
46
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
47
+ ],
48
+ [123, 120, ChainId.Ethereum, web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address), web3Utils.toChecksumAddress('0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e')]
49
+ ],
50
+ ];
51
+
52
+ examples.forEach(([expected, actual]) => {
53
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
54
+ expect(makerRepayFromSavingsSubData.encode(...actual)).to.eql(expected);
55
+ });
56
+ });
57
+ });
58
+
59
+ describe('decode()', () => {
60
+ const examples: Array<[{ vaultId: number, daiAddr: string, mcdManagerAddr: string, targetRatio: number }, SubData]> = [
61
+ [
62
+ {
63
+ vaultId: 123,
64
+ daiAddr: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
65
+ mcdManagerAddr: web3Utils.toChecksumAddress('0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e'),
66
+ targetRatio: 120,
67
+ },
68
+ [
69
+ '0x000000000000000000000000000000000000000000000000000000000000007b', '0x00000000000000000000000000000000000000000000000010a741a462780000',
70
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
71
+ ],
72
+ ],
73
+ ];
74
+
75
+ examples.forEach(([expected, actual]) => {
76
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
77
+ expect(makerRepayFromSavingsSubData.decode(actual)).to.eql(expected);
78
+ });
79
+ });
80
+ });
81
+ });
82
+
83
+ describe('When testing subDataService.liquityRepayFromSavingsSubData', () => {
84
+ describe('decode()', () => {
85
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
86
+ [
87
+ { targetRatio: 120 },
88
+ [
89
+ '0x0000000000000000000000000000000000000000000000000000000000000000', '0x00000000000000000000000000000000000000000000000010a741a462780000',
90
+ '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
91
+ ],
92
+ ],
93
+ ];
94
+
95
+ examples.forEach(([expected, actual]) => {
96
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
97
+ expect(liquityRepayFromSavingsSubData.decode(actual)).to.eql(expected);
98
+ });
99
+ });
100
+ });
101
+ });
102
+
103
+ describe('When testing subDataService.makerCloseSubData', () => {
104
+ describe('encode()', () => {
105
+ const examples: Array<[SubData, [vaultId: number, closeToAssetAddr: EthereumAddress, chainId: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress]]> = [
106
+ [
107
+ [
108
+ '0x0000000000000000000000000000000000000000000000000000000000000141', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
109
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
110
+ ],
111
+ [321, web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address), ChainId.Ethereum, web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address), web3Utils.toChecksumAddress('0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e')]
112
+ ],
113
+ [
114
+ [
115
+ '0x00000000000000000000000000000000000000000000000000000000000001a4', '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
116
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002439d218133afab8f2b819b1066c7e434ad94e9e',
117
+ ],
118
+ [420, web3Utils.toChecksumAddress(getAssetInfo('WBTC', ChainId.Ethereum).address), ChainId.Ethereum, web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address), web3Utils.toChecksumAddress('0x2439d218133AFaB8F2B819B1066c7E434Ad94E9e')]
119
+ ],
120
+ ];
121
+
122
+ examples.forEach(([expected, actual]) => {
123
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
124
+ expect(makerCloseSubData.encode(...actual)).to.eql(expected);
125
+ });
126
+ });
127
+ });
128
+
129
+ describe('decode()', () => {
130
+ const examples: Array<[{ vaultId: number, closeToAssetAddr: EthereumAddress }, SubData]> = [
131
+ [
132
+ {
133
+ vaultId: 321,
134
+ closeToAssetAddr: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
135
+ },
136
+ [
137
+ '0x0000000000000000000000000000000000000000000000000000000000000141', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
138
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
139
+ ],
140
+ ],
141
+ [
142
+ {
143
+ vaultId: 420,
144
+ closeToAssetAddr: web3Utils.toChecksumAddress(getAssetInfo('WBTC', ChainId.Ethereum).address),
145
+ },
146
+ [
147
+ '0x00000000000000000000000000000000000000000000000000000000000001a4', '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
148
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000002439d218133afab8f2b819b1066c7e434ad94e9e',
149
+ ],
150
+ ],
151
+ ];
152
+
153
+ examples.forEach(([expected, actual]) => {
154
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
155
+ expect(makerCloseSubData.decode(actual)).to.eql(expected);
156
+ });
157
+ });
158
+ });
159
+ });
160
+
161
+ describe('When testing subDataService.makerLeverageManagementSubData', () => {
162
+ describe('decode()', () => {
163
+ const examples: Array<[{ vaultId: number, targetRatio: number }, SubData]> = [
164
+ [
165
+ { vaultId: 321, targetRatio: 200 },
166
+ [
167
+ '0x0000000000000000000000000000000000000000000000000000000000000141', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
168
+ '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
169
+ ],
170
+ ],
171
+ ];
172
+
173
+ examples.forEach(([expected, actual]) => {
174
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
175
+ expect(makerLeverageManagementSubData.decode(actual)).to.eql(expected);
176
+ });
177
+ });
178
+ });
179
+ });
180
+
181
+ describe('When testing subDataService.liquityLeverageManagementSubData', () => {
182
+ describe('decode()', () => {
183
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
184
+ [
185
+ { targetRatio: 200 },
186
+ [
187
+ '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
188
+ '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
189
+ ],
190
+ ],
191
+ ];
192
+
193
+ examples.forEach(([expected, actual]) => {
194
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
195
+ expect(liquityLeverageManagementSubData.decode(actual)).to.eql(expected);
196
+ });
197
+ });
198
+ });
199
+ });
200
+
201
+ describe('When testing subDataService.liquityCloseSubData', () => {
202
+ describe('encode()', () => {
203
+ const examples: Array<[SubData, [closeToAssetAddr: EthereumAddress, chainId: ChainId, collAddr?: EthereumAddress, debtAddr?: EthereumAddress]]> = [
204
+ [
205
+ [
206
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
207
+ ],
208
+ [web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address), ChainId.Ethereum, web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address), web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address)]
209
+ ],
210
+ [
211
+ [
212
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
213
+ ],
214
+ [web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address), ChainId.Ethereum]
215
+ ],
216
+ ];
217
+
218
+ examples.forEach(([expected, actual]) => {
219
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
220
+ expect(liquityCloseSubData.encode(...actual)).to.eql(expected);
221
+ });
222
+ });
223
+ });
224
+
225
+ describe('decode()', () => {
226
+ const examples: Array<[{ closeToAssetAddr: EthereumAddress, debtAddr: string }, SubData]> = [
227
+ [
228
+ {
229
+ closeToAssetAddr: web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address),
230
+ debtAddr: web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address),
231
+ },
232
+ [
233
+ '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
234
+ ],
235
+ ],
236
+ [
237
+ {
238
+ closeToAssetAddr: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
239
+ debtAddr: web3Utils.toChecksumAddress(getAssetInfo('LUSD', ChainId.Ethereum).address),
240
+ },
241
+ [
242
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
243
+ ],
244
+ ],
245
+ ];
246
+
247
+ examples.forEach(([expected, actual]) => {
248
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
249
+ expect(liquityCloseSubData.decode(actual)).to.eql(expected);
250
+ });
251
+ });
252
+ });
253
+ });
254
+
255
+ describe('When testing subDataService.aaveV2LeverageManagementSubData', () => {
256
+ describe('encode()', () => {
257
+ const examples: Array<[[string, string, string, string, boolean], [triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean]]> = [
258
+ [
259
+ [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],
260
+ [160, 220, 180, 190, true]
261
+ ],
262
+ [
263
+ [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],
264
+ [160, 200, 180, 190, false]
265
+ ],
266
+ ];
267
+
268
+ examples.forEach(([expected, actual]) => {
269
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
270
+ expect(aaveV2LeverageManagementSubData.encode(...actual)).to.eql(expected);
271
+ });
272
+ });
273
+ });
274
+
275
+ describe('decode()', () => {
276
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
277
+ [
278
+ { targetRatio: 200 },
279
+ ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000'],
280
+ ],
281
+ [
282
+ { targetRatio: 123 },
283
+ ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000'],
284
+ ],
285
+ ];
286
+
287
+ examples.forEach(([expected, actual]) => {
288
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
289
+ expect(aaveV2LeverageManagementSubData.decode(actual)).to.eql(expected);
290
+ });
291
+ });
292
+ });
293
+ });
294
+
295
+ describe('When testing subDataService.aaveV3LeverageManagementSubData', () => {
296
+ describe('decode()', () => {
297
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
298
+ [
299
+ { targetRatio: 200 },
300
+ ['0x0000000000000000000000000000000000000000000000001bc16d674ec80000'],
301
+ ],
302
+ [
303
+ { targetRatio: 123 },
304
+ ['0x0000000000000000000000000000000000000000000000001111d67bb1bb0000'],
305
+ ],
306
+ ];
307
+
308
+ examples.forEach(([expected, actual]) => {
309
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
310
+ expect(aaveV3LeverageManagementSubData.decode(actual)).to.eql(expected);
311
+ });
312
+ });
313
+ });
314
+ });
315
+
316
+ describe('When testing subDataService.aaveV3QuotePriceSubData', () => {
317
+ describe('encode()', () => {
318
+ const examples: Array<[SubData, [collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, nullAddress?: EthereumAddress]]> = [
319
+ [
320
+ [
321
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000002',
322
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000004',
323
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
324
+ ],
325
+ [
326
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
327
+ 2,
328
+ web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
329
+ 4,
330
+ ]
331
+ ],
332
+ [
333
+ [
334
+ '0x0000000000000000000000005979d7b546e38e414f7e9822514be443a4800529', '0x0000000000000000000000000000000000000000000000000000000000000006',
335
+ '0x000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831', '0x0000000000000000000000000000000000000000000000000000000000000002',
336
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
337
+ ],
338
+ [
339
+ web3Utils.toChecksumAddress(getAssetInfo('wstETH', ChainId.Arbitrum).address),
340
+ 6,
341
+ web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
342
+ 2,
343
+ ]
344
+ ],
345
+ ];
346
+
347
+ examples.forEach(([expected, actual]) => {
348
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
349
+ expect(aaveV3QuotePriceSubData.encode(...actual)).to.eql(expected);
350
+ });
351
+ });
352
+ });
353
+
354
+ describe('decode()', () => {
355
+ const examples: Array<[{ collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number }, SubData]> = [
356
+ [
357
+ {
358
+ collAsset: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
359
+ collAssetId: 2,
360
+ debtAsset: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
361
+ debtAssetId: 4,
362
+ },
363
+ [
364
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000002',
365
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000004',
366
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
367
+ ],
368
+ ],
369
+ [
370
+ {
371
+ collAsset: web3Utils.toChecksumAddress(getAssetInfo('wstETH', ChainId.Arbitrum).address),
372
+ collAssetId: 6,
373
+ debtAsset: web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
374
+ debtAssetId: 2,
375
+ },
376
+ [
377
+ '0x0000000000000000000000005979d7b546e38e414f7e9822514be443a4800529', '0x0000000000000000000000000000000000000000000000000000000000000006',
378
+ '0x000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831', '0x0000000000000000000000000000000000000000000000000000000000000002',
379
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
380
+ ],
381
+ ],
382
+ ];
383
+
384
+ examples.forEach(([expected, actual]) => {
385
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
386
+ expect(aaveV3QuotePriceSubData.decode(actual)).to.eql(expected);
387
+ });
388
+ });
389
+ });
390
+ });
391
+
392
+ describe('When testing subDataService.compoundV2LeverageManagementSubData', () => {
393
+ describe('encode()', () => {
394
+ const examples: Array<[[string, string, string, string, boolean], [triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean]]> = [
395
+ [
396
+ [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],
397
+ [160, 220, 180, 190, true]
398
+ ],
399
+ [
400
+ [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],
401
+ [160, 200, 180, 190, false]
402
+ ],
403
+ ];
404
+
405
+ examples.forEach(([expected, actual]) => {
406
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
407
+ expect(compoundV2LeverageManagementSubData.encode(...actual)).to.eql(expected);
408
+ });
409
+ });
410
+ });
411
+
412
+ describe('decode()', () => {
413
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
414
+ [
415
+ { targetRatio: 200 },
416
+ ['0x0000000000000000000000000000000000000000000000001bc16d674ec80000'],
417
+ ],
418
+ [
419
+ { targetRatio: 123 },
420
+ ['0x0000000000000000000000000000000000000000000000001111d67bb1bb0000'],
421
+ ],
422
+ ];
423
+
424
+ examples.forEach(([expected, actual]) => {
425
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
426
+ expect(compoundV2LeverageManagementSubData.decode(actual)).to.eql(expected);
427
+ });
428
+ });
429
+ });
430
+ });
431
+
432
+ describe('When testing subDataService.compoundV3LeverageManagementSubData', () => {
433
+ describe('encode()', () => {
434
+ const examples: Array<[[EthereumAddress, EthereumAddress, string, string, string, string, boolean, boolean], [market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean]]> = [
435
+ [
436
+ [
437
+ web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
438
+ web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
439
+ new Dec(160).mul(1e16).toString(),
440
+ new Dec(220).mul(1e16).toString(),
441
+ new Dec(180).mul(1e16).toString(),
442
+ new Dec(190).mul(1e16).toString(),
443
+ true, false,
444
+ ],
445
+ [
446
+ web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
447
+ web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
448
+ 160, 220, 180, 190,
449
+ true, false,
450
+ ]
451
+ ],
452
+ [
453
+ [
454
+ web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
455
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
456
+ new Dec(160).mul(1e16).toString(),
457
+ new Dec(210).mul(1e16).toString(),
458
+ new Dec(180).mul(1e16).toString(),
459
+ new Dec(190).mul(1e16).toString(),
460
+ false, true,
461
+ ],
462
+ [
463
+ web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
464
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
465
+ 160, 210, 180, 190,
466
+ false, true,
467
+ ]
468
+ ],
469
+ ];
470
+
471
+ examples.forEach(([expected, actual]) => {
472
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
473
+ expect(compoundV3LeverageManagementSubData.encode(...actual)).to.eql(expected);
474
+ });
475
+ });
476
+ });
477
+
478
+ describe('decode()', () => {
479
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
480
+ [
481
+ { targetRatio: 123 },
482
+ [
483
+ '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
484
+ '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
485
+ ],
486
+ ],
487
+ [
488
+ { targetRatio: 200 },
489
+ [
490
+ '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
491
+ '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
492
+ ],
493
+ ],
494
+ ];
495
+
496
+ examples.forEach(([expected, actual]) => {
497
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
498
+ expect(compoundV3LeverageManagementSubData.decode(actual)).to.eql(expected);
499
+ });
500
+ });
501
+ });
502
+ });
503
+
504
+ describe('When testing subDataService.morphoAaveV2LeverageManagementSubData', () => {
505
+ describe('encode()', () => {
506
+ const examples: Array<[[string, string, string, string, boolean], [triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean]]> = [
507
+ [
508
+ [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],
509
+ [160, 220, 180, 190, true]
510
+ ],
511
+ [
512
+ [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],
513
+ [160, 200, 180, 190, false]
514
+ ],
515
+ ];
516
+
517
+ examples.forEach(([expected, actual]) => {
518
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
519
+ expect(morphoAaveV2LeverageManagementSubData.encode(...actual)).to.eql(expected);
520
+ });
521
+ });
522
+ });
523
+
524
+ describe('decode()', () => {
525
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
526
+ [
527
+ { targetRatio: 200 },
528
+ ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000'],
529
+ ],
530
+ [
531
+ { targetRatio: 123 },
532
+ ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000'],
533
+ ],
534
+ ];
535
+
536
+ examples.forEach(([expected, actual]) => {
537
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
538
+ expect(morphoAaveV2LeverageManagementSubData.decode(actual)).to.eql(expected);
539
+ });
540
+ });
541
+ });
542
+ });
543
+
544
+ describe('When testing subDataService.cBondsRebondSubData', () => {
545
+ describe('encode()', () => {
546
+ const examples: Array<[SubData, [bondId: number | string]]> = [
547
+ [
548
+ ['0x00000000000000000000000000000000000000000000000000000000000000c8'],
549
+ [200]
550
+ ],
551
+ [
552
+ ['0x000000000000000000000000000000000000000000000000000000000000a119'],
553
+ [41241]
554
+ ],
555
+ ];
556
+
557
+ examples.forEach(([expected, actual]) => {
558
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
559
+ expect(cBondsRebondSubData.encode(...actual)).to.eql(expected);
560
+ });
561
+ });
562
+ });
563
+
564
+ describe('decode()', () => {
565
+ const examples: Array<[{ bondId: string }, SubData]> = [
566
+ [
567
+ { bondId: '200' },
568
+ ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x00000000000000000000000000000000000000000000000000000000000000c8'],
569
+ ],
570
+ [
571
+ { bondId: '41241' },
572
+ ['0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000000000000000000000000000000000000000a119'],
573
+ ],
574
+ ];
575
+
576
+ examples.forEach(([expected, actual]) => {
577
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
578
+ expect(cBondsRebondSubData.decode(actual)).to.eql(expected);
579
+ });
580
+ });
581
+ });
582
+ });
583
+
584
+ describe('When testing subDataService.liquityPaybackUsingChickenBondSubData', () => {
585
+ describe('encode()', () => {
586
+ const examples: Array<[SubData, [sourceId: string, sourceType: number, chainId?: ChainId]]> = [
587
+ [
588
+ [
589
+ '0x0000000000000000000000000000000000000000000000000000000000001076', '0x0000000000000000000000000000000000000000000000000000000000000000',
590
+ '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x000000000000000000000000b9d7dddca9a4ac480991865efef82e01273f79c3',
591
+ ],
592
+ ['4214', 0, ChainId.Ethereum]
593
+ ],
594
+ [
595
+ [
596
+ '0x00000000000000000000000000000000000000000000000000000000000002b8', '0x0000000000000000000000000000000000000000000000000000000000000001',
597
+ '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x000000000000000000000000b9d7dddca9a4ac480991865efef82e01273f79c3',
598
+ ],
599
+ ['696', 1]
600
+ ],
601
+ ];
602
+
603
+ examples.forEach(([expected, actual]) => {
604
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
605
+ expect(liquityPaybackUsingChickenBondSubData.encode(...actual)).to.eql(expected);
606
+ });
607
+ });
608
+ });
609
+
610
+ describe('decode()', () => {
611
+ const examples: Array<[{ sourceId: string, sourceType: string }, SubData]> = [
612
+ [
613
+ { sourceId: '4214', sourceType: '0' },
614
+ [
615
+ '0x0000000000000000000000000000000000000000000000000000000000001076', '0x0000000000000000000000000000000000000000000000000000000000000000',
616
+ '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x000000000000000000000000b9d7dddca9a4ac480991865efef82e01273f79c3',
617
+ ],
618
+ ],
619
+ [
620
+ { sourceId: '696', sourceType: '1' },
621
+ [
622
+ '0x00000000000000000000000000000000000000000000000000000000000002b8', '0x0000000000000000000000000000000000000000000000000000000000000001',
623
+ '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0', '0x000000000000000000000000b9d7dddca9a4ac480991865efef82e01273f79c3',
624
+ ],
625
+ ],
626
+ ];
627
+
628
+ examples.forEach(([expected, actual]) => {
629
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
630
+ expect(liquityPaybackUsingChickenBondSubData.decode(actual)).to.eql(expected);
631
+ });
632
+ });
633
+ });
634
+ });
635
+
636
+ describe('When testing subDataService.exchangeDcaSubData', () => {
637
+ describe('encode()', () => {
638
+ const examples: Array<[SubData, [fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, interval: number]]> = [
639
+ [
640
+ [
641
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
642
+ '0x0000000000000000000000000000000000000000000000000000000000000853', '0x0000000000000000000000000000000000000000000000000000000000231860'
643
+ ],
644
+ [
645
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
646
+ web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
647
+ '2131',
648
+ 2300000,
649
+ ]
650
+ ],
651
+ [
652
+ [
653
+ '0x0000000000000000000000002f2a2543b76a4166549f7aab2e75bef0aefc5b0f', '0x000000000000000000000000f97f4df75117a78c1a5a0dbb814af92458539fb4',
654
+ '0x00000000000000000000000000000000000000000000000000000000003eddd7', '0x0000000000000000000000000000000000000000000000000000000008f57500'
655
+ ],
656
+ [
657
+ web3Utils.toChecksumAddress(getAssetInfo('WBTC', ChainId.Arbitrum).address),
658
+ web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
659
+ '4120023',
660
+ 150304000,
661
+ ]
662
+ ],
663
+ ];
664
+
665
+ examples.forEach(([expected, actual]) => {
666
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
667
+ expect(exchangeDcaSubData.encode(...actual)).to.eql(expected);
668
+ });
669
+ });
670
+ });
671
+
672
+ describe('decode()', () => {
673
+ const examples: Array<[{ fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, interval: string }, [SubData, ChainId]]> = [
674
+ [
675
+ {
676
+ fromToken: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
677
+ toToken: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
678
+ amount: '0.000000000000002131',
679
+ interval: '2300000',
680
+ },
681
+ [
682
+ [
683
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
684
+ '0x0000000000000000000000000000000000000000000000000000000000000853', '0x0000000000000000000000000000000000000000000000000000000000231860'
685
+ ],
686
+ ChainId.Ethereum
687
+ ],
688
+ ],
689
+ [
690
+ {
691
+ fromToken: web3Utils.toChecksumAddress(getAssetInfo('WBTC', ChainId.Arbitrum).address),
692
+ toToken: web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
693
+ amount: '0.04120023',
694
+ interval: '150304000',
695
+ },
696
+ [
697
+ [
698
+ '0x0000000000000000000000002f2a2543b76a4166549f7aab2e75bef0aefc5b0f', '0x000000000000000000000000f97f4df75117a78c1a5a0dbb814af92458539fb4',
699
+ '0x00000000000000000000000000000000000000000000000000000000003eddd7', '0x0000000000000000000000000000000000000000000000000000000008f57500'
700
+ ],
701
+ ChainId.Arbitrum
702
+ ]
703
+ ],
704
+ ];
705
+
706
+ examples.forEach(([expected, actual]) => {
707
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
708
+ expect(exchangeDcaSubData.decode(...actual)).to.eql(expected);
709
+ });
710
+ });
711
+ });
712
+ });
713
+
714
+ describe('When testing subDataService.exchangeLimitOrderSubData', () => {
715
+ describe('encode()', () => {
716
+ const examples: Array<[[EthereumAddress, EthereumAddress, string, string, string, string], [fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, targetPrice: string, goodUntil: string | number, orderType: OrderType]]> = [
717
+ [
718
+ [
719
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
720
+ web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
721
+ '2131',
722
+ '0.53123',
723
+ '1696590921159',
724
+ `${OrderType.STOP_LOSS}`
725
+ ],
726
+ [
727
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
728
+ web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
729
+ '2131',
730
+ '0.53123',
731
+ 1696590921159,
732
+ OrderType.STOP_LOSS
733
+ ]
734
+ ],
735
+ [
736
+ [
737
+ web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
738
+ web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
739
+ '2131',
740
+ '0.43123',
741
+ '1646590921159',
742
+ `${OrderType.TAKE_PROFIT}`
743
+ ],
744
+ [
745
+ web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
746
+ web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
747
+ '2131',
748
+ '0.43123',
749
+ 1646590921159,
750
+ OrderType.TAKE_PROFIT
751
+ ]
752
+ ],
753
+ ];
754
+
755
+ examples.forEach(([expected, actual]) => {
756
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
757
+ expect(exchangeLimitOrderSubData.encode(...actual)).to.eql(expected);
758
+ });
759
+ });
760
+ });
761
+
762
+ describe('decode()', () => {
763
+ const examples: Array<[{ fromToken: EthereumAddress, toToken: EthereumAddress, amount: string }, [SubData, ChainId]]> = [
764
+ [
765
+ {
766
+ fromToken: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
767
+ toToken: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
768
+ amount: '0.000000000000002131',
769
+ },
770
+ [
771
+ [
772
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
773
+ '0x0000000000000000000000000000000000000000000000000000000000000853', '0x0000000000000000000000000000000000000000000000000000000000231860'
774
+ ],
775
+ ChainId.Ethereum
776
+ ],
777
+ ],
778
+ [
779
+ {
780
+ fromToken: web3Utils.toChecksumAddress(getAssetInfo('WBTC', ChainId.Arbitrum).address),
781
+ toToken: web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
782
+ amount: '0.04120023',
783
+ },
784
+ [
785
+ [
786
+ '0x0000000000000000000000002f2a2543b76a4166549f7aab2e75bef0aefc5b0f', '0x000000000000000000000000f97f4df75117a78c1a5a0dbb814af92458539fb4',
787
+ '0x00000000000000000000000000000000000000000000000000000000003eddd7', '0x0000000000000000000000000000000000000000000000000000000008f57500'
788
+ ],
789
+ ChainId.Arbitrum
790
+ ]
791
+ ],
792
+ ];
793
+
794
+ examples.forEach(([expected, actual]) => {
795
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
796
+ expect(exchangeLimitOrderSubData.decode(...actual)).to.eql(expected);
797
+ });
798
+ });
799
+ });
800
+ });
801
+
802
+ describe('When testing subDataService.sparkLeverageManagementSubData', () => {
803
+ describe('decode()', () => {
804
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
805
+ [
806
+ { targetRatio: 200 },
807
+ ['0x0000000000000000000000000000000000000000000000001bc16d674ec80000'],
808
+ ],
809
+ [
810
+ { targetRatio: 123 },
811
+ ['0x0000000000000000000000000000000000000000000000001111d67bb1bb0000'],
812
+ ],
813
+ ];
814
+
815
+ examples.forEach(([expected, actual]) => {
816
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
817
+ expect(sparkLeverageManagementSubData.decode(actual)).to.eql(expected);
818
+ });
819
+ });
820
+ });
821
+ });
822
+
823
+ describe('When testing subDataService.sparkQuotePriceSubData', () => {
824
+ describe('encode()', () => {
825
+ const examples: Array<[SubData, [collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, nullAddress?: EthereumAddress]]> = [
826
+ [
827
+ [
828
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000002',
829
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000004',
830
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
831
+ ],
832
+ [
833
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
834
+ 2,
835
+ web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
836
+ 4,
837
+ ]
838
+ ],
839
+ [
840
+ [
841
+ '0x0000000000000000000000005979d7b546e38e414f7e9822514be443a4800529', '0x0000000000000000000000000000000000000000000000000000000000000006',
842
+ '0x000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831', '0x0000000000000000000000000000000000000000000000000000000000000002',
843
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
844
+ ],
845
+ [
846
+ web3Utils.toChecksumAddress(getAssetInfo('wstETH', ChainId.Arbitrum).address),
847
+ 6,
848
+ web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
849
+ 2,
850
+ ]
851
+ ],
852
+ ];
853
+
854
+ examples.forEach(([expected, actual]) => {
855
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
856
+ expect(sparkQuotePriceSubData.encode(...actual)).to.eql(expected);
857
+ });
858
+ });
859
+ });
860
+
861
+ describe('decode()', () => {
862
+ const examples: Array<[{ collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number }, SubData]> = [
863
+ [
864
+ {
865
+ collAsset: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
866
+ collAssetId: 2,
867
+ debtAsset: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
868
+ debtAssetId: 4,
869
+ },
870
+ [
871
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000000000000000000000000000000000000000000002',
872
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000000000000000000000000000000000000000000004',
873
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
874
+ ],
875
+ ],
876
+ [
877
+ {
878
+ collAsset: web3Utils.toChecksumAddress(getAssetInfo('wstETH', ChainId.Arbitrum).address),
879
+ collAssetId: 6,
880
+ debtAsset: web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
881
+ debtAssetId: 2,
882
+ },
883
+ [
884
+ '0x0000000000000000000000005979d7b546e38e414f7e9822514be443a4800529', '0x0000000000000000000000000000000000000000000000000000000000000006',
885
+ '0x000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831', '0x0000000000000000000000000000000000000000000000000000000000000002',
886
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
887
+ ],
888
+ ],
889
+ ];
890
+
891
+ examples.forEach(([expected, actual]) => {
892
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
893
+ expect(sparkQuotePriceSubData.decode(actual)).to.eql(expected);
894
+ });
895
+ });
896
+ });
897
+ });
898
+
899
+ describe('When testing subDataService.liquityDsrPaybackSubData', () => {
900
+ describe('encode()', () => {
901
+ const examples: Array<[SubData, [targetRatio: number]]> = [
902
+ [
903
+ [
904
+ '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
905
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
906
+ ],
907
+ [123]
908
+ ],
909
+ [
910
+ [
911
+ '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000003a4965bf58a40000',
912
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
913
+ ],
914
+ [420]
915
+ ],
916
+ ];
917
+
918
+ examples.forEach(([expected, actual]) => {
919
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
920
+ expect(liquityDsrPaybackSubData.encode(...actual)).to.eql(expected);
921
+ });
922
+ });
923
+ });
924
+
925
+ describe('decode()', () => {
926
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
927
+ [
928
+ {
929
+ targetRatio: 123,
930
+ },
931
+ [
932
+ '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
933
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
934
+ ],
935
+ ],
936
+ [
937
+ {
938
+ targetRatio: 420,
939
+ },
940
+ [
941
+ '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000003a4965bf58a40000',
942
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
943
+ ],
944
+ ],
945
+ ];
946
+
947
+ examples.forEach(([expected, actual]) => {
948
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
949
+ expect(liquityDsrPaybackSubData.decode(actual)).to.eql(expected);
950
+ });
951
+ });
952
+ });
953
+ });
954
+
955
+ describe('When testing subDataService.liquityDsrSupplySubData', () => {
956
+ describe('encode()', () => {
957
+ const examples: Array<[SubData, [targetRatio: number]]> = [
958
+ [
959
+ [
960
+ '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000002c68af0bb1400000',
961
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
962
+ ],
963
+ [320]
964
+ ],
965
+ [
966
+ [
967
+ '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001eab7f4a799d0000',
968
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
969
+ ],
970
+ [221]
971
+ ],
972
+ ];
973
+
974
+ examples.forEach(([expected, actual]) => {
975
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
976
+ expect(liquityDsrSupplySubData.encode(...actual)).to.eql(expected);
977
+ });
978
+ });
979
+ });
980
+
981
+ describe('decode()', () => {
982
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
983
+ [
984
+ {
985
+ targetRatio: 320,
986
+ },
987
+ [
988
+ '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000002c68af0bb1400000',
989
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
990
+ ],
991
+ ],
992
+ [
993
+ {
994
+ targetRatio: 221,
995
+ },
996
+ [
997
+ '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001eab7f4a799d0000',
998
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
999
+ ],
1000
+ ],
1001
+ ];
1002
+
1003
+ examples.forEach(([expected, actual]) => {
1004
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1005
+ expect(liquityDsrSupplySubData.decode(actual)).to.eql(expected);
1006
+ });
1007
+ });
1008
+ });
1009
+ });
1010
+
1011
+ describe('When testing subDataService.liquityDebtInFrontRepaySubData', () => {
1012
+ describe('encode()', () => {
1013
+ const examples: Array<[SubData, [targetRatioIncrease: number]]> = [
1014
+ [
1015
+ [
1016
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
1017
+ '0x000000000000000000000000000000000000000000000000016345785d8a0000', '0x0000000000000000000000000000000000000000000000000000000000000001',
1018
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1019
+ ],
1020
+ [10]
1021
+ ],
1022
+ [
1023
+ [
1024
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
1025
+ '0x000000000000000000000000000000000000000000000000063eb89da4ed0000', '0x0000000000000000000000000000000000000000000000000000000000000001',
1026
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1027
+ ],
1028
+ [45]
1029
+ ],
1030
+ ];
1031
+
1032
+ examples.forEach(([expected, actual]) => {
1033
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
1034
+ expect(liquityDebtInFrontRepaySubData.encode(...actual)).to.eql(expected);
1035
+ });
1036
+ });
1037
+ });
1038
+
1039
+ describe('decode()', () => {
1040
+ const examples: Array<[{ targetRatioIncrease: number }, SubData]> = [
1041
+ [
1042
+ {
1043
+ targetRatioIncrease: 10,
1044
+ },
1045
+ [
1046
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
1047
+ '0x000000000000000000000000000000000000000000000000016345785d8a0000', '0x0000000000000000000000000000000000000000000000000000000000000001',
1048
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1049
+ ],
1050
+ ],
1051
+ [
1052
+ {
1053
+ targetRatioIncrease: 45,
1054
+ },
1055
+ [
1056
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0',
1057
+ '0x000000000000000000000000000000000000000000000000063eb89da4ed0000', '0x0000000000000000000000000000000000000000000000000000000000000001',
1058
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1059
+ ],
1060
+ ],
1061
+ ];
1062
+
1063
+ examples.forEach(([expected, actual]) => {
1064
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1065
+ expect(liquityDebtInFrontRepaySubData.decode(actual)).to.eql(expected);
1066
+ });
1067
+ });
1068
+ });
1069
+ });
1070
+
1071
+ describe('When testing subDataService.crvUSDLeverageManagementSubData', () => {
1072
+ describe('encode()', () => {
1073
+ const examples: Array<[SubData, [controller: EthereumAddress, ratioState: RatioState, targetRatio: number, collToken: EthereumAddress, crvUSD: EthereumAddress]]> = [
1074
+ [
1075
+ [
1076
+ '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
1077
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
1078
+ '0x00000000000000000000000000000000000000000000000010a741a462780000',
1079
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1080
+ '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
1081
+ ],
1082
+ ['0xa920de414ea4ab66b97da1bfe9e6eca7d4219635', RatioState.UNDER, 120, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E'],
1083
+ ],
1084
+ [
1085
+ [
1086
+ '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
1087
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1088
+ '0x00000000000000000000000000000000000000000000000018fae27693b40000',
1089
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1090
+ '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
1091
+ ],
1092
+ ['0xa920de414ea4ab66b97da1bfe9e6eca7d4219635', RatioState.OVER, 180, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E']
1093
+ ],
1094
+ ];
1095
+ examples.forEach(([expected, actual]) => {
1096
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
1097
+ expect(crvUSDLeverageManagementSubData.encode(...actual)).to.eql(expected);
1098
+ });
1099
+ });
1100
+ });
1101
+ describe('decode()', () => {
1102
+ const examples: Array<[{
1103
+ controller: EthereumAddress,
1104
+ targetRatio: number,
1105
+ }, SubData]> = [
1106
+ [
1107
+ {
1108
+ controller: '0xA920De414eA4Ab66b97dA1bFE9e6EcA7d4219635',
1109
+ targetRatio: 120,
1110
+ },
1111
+ ['0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635', '0x0000000000000000000000000000000000000000000000000000000000000001', '0x00000000000000000000000000000000000000000000000010a741a462780000', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',],
1112
+ ],
1113
+ [
1114
+ {
1115
+ controller: '0xA920De414eA4Ab66b97dA1bFE9e6EcA7d4219635',
1116
+ targetRatio: 180,
1117
+ },
1118
+ ['0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x00000000000000000000000000000000000000000000000018fae27693b40000', '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',],
1119
+ ],
1120
+ ];
1121
+
1122
+ examples.forEach(([expected, actual]) => {
1123
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1124
+ expect(crvUSDLeverageManagementSubData.decode(actual)).to.eql(expected);
1125
+ });
1126
+ });
1127
+ });
1128
+ });
1129
+
1130
+ describe('When testing subDataService.crvUSDPaybackSubData', () => {
1131
+ describe('encode()', () => {
1132
+ const examples: Array<[SubData, [controller: EthereumAddress, addressToPullTokensFrom: EthereumAddress, positionOwner: EthereumAddress, paybackAmount: string, crvUSDAddr: EthereumAddress]]> = [
1133
+ [
1134
+ [
1135
+ '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
1136
+ '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
1137
+ '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
1138
+ '0x00000000000000000000000000000000000000000000043c33c1937564800000',
1139
+ '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
1140
+ ],
1141
+ ['0xa920de414ea4ab66b97da1bfe9e6eca7d4219635', '0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280', '0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280', '20000', '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E'],
1142
+ ]
1143
+ ];
1144
+ examples.forEach(([expected, actual]) => {
1145
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
1146
+ expect(crvUSDPaybackSubData.encode(...actual)).to.eql(expected);
1147
+ });
1148
+ });
1149
+ });
1150
+ describe('decode()', () => {
1151
+ const examples: Array<[{
1152
+ controller: EthereumAddress,
1153
+ addressToPullTokensFrom: EthereumAddress,
1154
+ positionOwner: EthereumAddress,
1155
+ paybackAmount: string,
1156
+ }, SubData]> = [
1157
+ [
1158
+ {
1159
+ controller: '0xA920De414eA4Ab66b97dA1bFE9e6EcA7d4219635',
1160
+ addressToPullTokensFrom: '0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280',
1161
+ positionOwner: '0xDc0Ad7a48088f1AA55d26f8b36F7C1E827DdD280',
1162
+ paybackAmount: '20000'
1163
+ },
1164
+ [
1165
+ '0x000000000000000000000000a920de414ea4ab66b97da1bfe9e6eca7d4219635',
1166
+ '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
1167
+ '0x000000000000000000000000dc0ad7a48088f1aa55d26f8b36f7c1e827ddd280',
1168
+ '0x00000000000000000000000000000000000000000000043c33c1937564800000',
1169
+ '0x000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e',
1170
+ ]
1171
+ ]
1172
+ ];
1173
+
1174
+ examples.forEach(([expected, actual]) => {
1175
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1176
+ expect(crvUSDPaybackSubData.decode(actual)).to.eql(expected);
1177
+ });
1178
+ });
1179
+ });
1180
+ });
1181
+
1182
+ describe('When testing subDataService.compoundV3L2LeverageManagementSubData', () => {
1183
+ describe('encode()', () => {
1184
+ const examples: Array<[
1185
+ string,
1186
+ [market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean],
1187
+ ]> = [
1188
+ [
1189
+ '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e000001',
1190
+ [web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 190, true]
1191
+ ],
1192
+ [
1193
+ '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee000000',
1194
+ [web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 110, false]
1195
+ ],
1196
+ ];
1197
+
1198
+ examples.forEach(([expected, actual]) => {
1199
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
1200
+ expect(compoundV3L2LeverageManagementSubData.encode(...actual)).to.eql(expected);
1201
+ });
1202
+ });
1203
+ });
1204
+ describe('decode()', () => {
1205
+ const examples: Array<[{ targetRatio: number }, SubData]> = [
1206
+ [
1207
+ { targetRatio: 200 },
1208
+ [
1209
+ '0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000213d212133AFaB8F2B829B1066c7E43cAd94E2c',
1210
+ '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1211
+ ],
1212
+ ],
1213
+ [
1214
+ { targetRatio: 123 },
1215
+ [
1216
+ '0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000413d212133AFaB8F2B829B1066c7E43cAd94E2c',
1217
+ '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
1218
+ ],
1219
+ ],
1220
+ ];
1221
+
1222
+ examples.forEach(([expected, actual]) => {
1223
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1224
+ expect(compoundV3L2LeverageManagementSubData.decode(actual)).to.eql(expected);
1225
+ });
1226
+ });
1227
+ });
1228
+ });
1229
+
1230
+ describe('When testing subDataService.morphoBlueLeverageManagementSubData', () => {
1231
+ describe('encode()', () => {
1232
+ const examples: Array<[
1233
+ SubData,
1234
+ [loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, ratioState: RatioState, targetRatio: number, user: EthereumAddress, isEOA: boolean],
1235
+ ]> = [
1236
+ [
1237
+ [
1238
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1239
+ '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1240
+ '0x0000000000000000000000002a01eb9496094da03c4e364def50f5ad1280ad72',
1241
+ '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1242
+ '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
1243
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
1244
+ '0x00000000000000000000000000000000000000000000000010a741a462780000',
1245
+ '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
1246
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1247
+ ],
1248
+ [web3Utils.toChecksumAddress('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0x2a01eb9496094da03c4e364def50f5ad1280ad72'), web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), '945000000000000000', RatioState.UNDER, 120, web3Utils.toChecksumAddress('0x1031d218133AFaB8c2B819B1366c7E434Ad91E9c'), false]
1249
+ ],
1250
+ [
1251
+ [
1252
+ '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
1253
+ '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1254
+ '0x00000000000000000000000048f7e36eb6b826b2df4b2e630b62cd25e89e40e2',
1255
+ '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1256
+ '0x0000000000000000000000000000000000000000000000000bef55718ad60000',
1257
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1258
+ '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1259
+ '0x0000000000000000000000000043d218133afab8f2b829b106633e434ad94e2c',
1260
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1261
+ ],
1262
+ [web3Utils.toChecksumAddress('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2'), web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), '860000000000000000', RatioState.OVER, 200, web3Utils.toChecksumAddress('0x0043d218133AFaB8F2B829B106633E434Ad94E2c'), false]
1263
+ ],
1264
+ ];
1265
+
1266
+ examples.forEach(([expected, actual]) => {
1267
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
1268
+ expect(morphoBlueLeverageManagementSubData.encode(...actual)).to.eql(expected);
1269
+ });
1270
+ });
1271
+ });
1272
+
1273
+ describe('decode()', () => {
1274
+ const examples: Array<[{ collToken: EthereumAddress, loanToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, targetRatio: number, user: EthereumAddress }, SubData]> = [
1275
+ [
1276
+ {
1277
+ 'collToken': '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
1278
+ 'irm': '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
1279
+ 'lltv': '945000000000000000',
1280
+ 'loanToken': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
1281
+ 'oracle': '0x2a01EB9496094dA03c4E364Def50f5aD1280AD72',
1282
+ 'targetRatio': 120,
1283
+ 'user': '0x1031d218133AFaB8C2B819B1366c7e434Ad91e9c',
1284
+ },
1285
+ [
1286
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1287
+ '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1288
+ '0x0000000000000000000000002a01eb9496094da03c4e364def50f5ad1280ad72',
1289
+ '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1290
+ '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
1291
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
1292
+ '0x00000000000000000000000000000000000000000000000010a741a462780000',
1293
+ '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
1294
+ ],
1295
+ ],
1296
+ [
1297
+ {
1298
+ 'collToken': '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
1299
+ 'irm': '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
1300
+ 'lltv': '860000000000000000',
1301
+ 'loanToken': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
1302
+ 'oracle': '0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2',
1303
+ 'targetRatio': 200,
1304
+ 'user': '0x0043d218133aFaB8F2b829B106633E434aD94e2C',
1305
+ },
1306
+ [
1307
+ '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
1308
+ '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1309
+ '0x00000000000000000000000048f7e36eb6b826b2df4b2e630b62cd25e89e40e2',
1310
+ '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1311
+ '0x0000000000000000000000000000000000000000000000000bef55718ad60000',
1312
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1313
+ '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1314
+ '0x0000000000000000000000000043d218133afab8f2b829b106633e434ad94e2c',
1315
+ ],
1316
+ ],
1317
+ ];
1318
+
1319
+ examples.forEach(([expected, actual]) => {
1320
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1321
+ expect(morphoBlueLeverageManagementSubData.decode(actual)).to.eql(expected);
1322
+ });
1323
+ });
1324
+ });
1325
+ });
1326
+
1327
+ describe('When testing subDataService.aaveV3LeverageManagementOnPriceSubData', () => {
1328
+ describe('encode()', () => {
1329
+ const examples: Array<[SubData, [collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number]]> = [
1330
+ [
1331
+ [
1332
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1333
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1334
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
1335
+ '0x0000000000000000000000000000000000000000000000000000000000000004',
1336
+ '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
1337
+ '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1338
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1339
+ ],
1340
+ [
1341
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1342
+ 0,
1343
+ web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
1344
+ 4,
1345
+ web3Utils.toChecksumAddress('0x2f39d218133afab8f2b819b1066c7e434ad94e9e'),
1346
+ 200,
1347
+ ]
1348
+ ],
1349
+ ];
1350
+
1351
+ examples.forEach(([expected, actual]) => {
1352
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
1353
+ expect(aaveV3LeverageManagementOnPriceSubData.encode(...actual)).to.eql(expected);
1354
+ });
1355
+ });
1356
+ });
1357
+
1358
+ describe('decode()', () => {
1359
+ const examples: Array<[{ collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number}, SubData]> = [
1360
+ [
1361
+ {
1362
+ collAsset: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1363
+ collAssetId: 0,
1364
+ debtAsset: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
1365
+ debtAssetId: 4,
1366
+ marketAddr: web3Utils.toChecksumAddress('0x2f39d218133afab8f2b819b1066c7e434ad94e9e'),
1367
+ targetRatio: 200,
1368
+ },
1369
+ [
1370
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1371
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1372
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
1373
+ '0x0000000000000000000000000000000000000000000000000000000000000004',
1374
+ '0x0000000000000000000000002f39d218133afab8f2b819b1066c7e434ad94e9e',
1375
+ '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1376
+ ],
1377
+ ],
1378
+ ];
1379
+
1380
+ examples.forEach(([expected, actual]) => {
1381
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1382
+ expect(aaveV3LeverageManagementOnPriceSubData.decode(actual)).to.eql(expected);
1383
+ });
1384
+ });
1385
+ });
1386
+ });
1387
+ });