@defisaver/automation-sdk 3.3.11 → 3.3.12-strategies-refactor-dev

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 (54) hide show
  1. package/cjs/automation/private/StrategiesAutomation.d.ts +2 -0
  2. package/cjs/automation/private/StrategiesAutomation.js +10 -1
  3. package/cjs/automation/private/StrategiesAutomation.test.js +25 -0
  4. package/cjs/constants/index.d.ts +1 -0
  5. package/cjs/constants/index.js +62 -1
  6. package/cjs/services/strategiesService.js +104 -0
  7. package/cjs/services/strategySubService.d.ts +11 -0
  8. package/cjs/services/strategySubService.js +61 -1
  9. package/cjs/services/strategySubService.test.js +96 -0
  10. package/cjs/services/subDataService.d.ts +333 -137
  11. package/cjs/services/subDataService.js +853 -537
  12. package/cjs/services/subDataService.test.js +157 -0
  13. package/cjs/services/triggerService.d.ts +29 -0
  14. package/cjs/services/triggerService.js +53 -1
  15. package/cjs/services/triggerService.test.js +84 -0
  16. package/cjs/services/utils.d.ts +1 -1
  17. package/cjs/services/utils.js +10 -2
  18. package/cjs/types/enums.d.ts +17 -3
  19. package/cjs/types/enums.js +14 -0
  20. package/cjs/types/index.d.ts +22 -1
  21. package/esm/automation/private/StrategiesAutomation.d.ts +2 -0
  22. package/esm/automation/private/StrategiesAutomation.js +10 -1
  23. package/esm/automation/private/StrategiesAutomation.test.js +25 -0
  24. package/esm/constants/index.d.ts +1 -0
  25. package/esm/constants/index.js +61 -0
  26. package/esm/services/strategiesService.js +105 -1
  27. package/esm/services/strategySubService.d.ts +11 -0
  28. package/esm/services/strategySubService.js +60 -0
  29. package/esm/services/strategySubService.test.js +97 -1
  30. package/esm/services/subDataService.d.ts +333 -137
  31. package/esm/services/subDataService.js +852 -537
  32. package/esm/services/subDataService.test.js +157 -0
  33. package/esm/services/triggerService.d.ts +29 -0
  34. package/esm/services/triggerService.js +52 -0
  35. package/esm/services/triggerService.test.js +85 -1
  36. package/esm/services/utils.d.ts +1 -1
  37. package/esm/services/utils.js +10 -2
  38. package/esm/types/enums.d.ts +17 -3
  39. package/esm/types/enums.js +14 -0
  40. package/esm/types/index.d.ts +22 -1
  41. package/package.json +2 -2
  42. package/src/automation/private/StrategiesAutomation.test.ts +40 -0
  43. package/src/automation/private/StrategiesAutomation.ts +11 -0
  44. package/src/constants/index.ts +62 -0
  45. package/src/services/strategiesService.ts +119 -1
  46. package/src/services/strategySubService.test.ts +124 -0
  47. package/src/services/strategySubService.ts +196 -0
  48. package/src/services/subDataService.test.ts +172 -0
  49. package/src/services/subDataService.ts +1100 -764
  50. package/src/services/triggerService.test.ts +97 -0
  51. package/src/services/triggerService.ts +74 -1
  52. package/src/services/utils.ts +15 -4
  53. package/src/types/enums.ts +14 -0
  54. package/src/types/index.ts +26 -0
@@ -4,8 +4,70 @@ import { fromWei, toWei } from 'web3-utils';
4
4
  import { assetAmountInEth, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
5
5
  import { otherAddresses } from '@defisaver/sdk';
6
6
  import { ChainId, CollActionType, DebtActionType, RatioState, } from '../types/enums';
7
- import { ZERO_ADDRESS } from '../constants';
7
+ import { EMPTY_SLOT, ZERO_ADDRESS } from '../constants';
8
8
  import { compareAddresses, ratioPercentageToWei, weiToRatioPercentage } from './utils';
9
+ /**
10
+ _______ _______ .______ .______ _______ ______ ___ .___________. _______ _______
11
+ | \ | ____|| _ \ | _ \ | ____| / | / \ | || ____|| \
12
+ | .--. || |__ | |_) | | |_) | | |__ | ,----' / ^ \ `---| |----`| |__ | .--. |
13
+ | | | || __| | ___/ | / | __| | | / /_\ \ | | | __| | | | |
14
+ | '--' || |____ | | | |\ \----.| |____ | `----./ _____ \ | | | |____ | '--' |
15
+ |_______/ |_______|| _| | _| `._____||_______| \______/__/ \__\ |__| |_______||_______/
16
+ */
17
+ export const morphoAaveV2LeverageManagementSubData = {
18
+ encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
19
+ return [
20
+ ratioPercentageToWei(triggerRepayRatio),
21
+ ratioPercentageToWei(triggerBoostRatio),
22
+ ratioPercentageToWei(targetBoostRatio),
23
+ ratioPercentageToWei(targetRepayRatio),
24
+ // @ts-ignore
25
+ boostEnabled,
26
+ ];
27
+ },
28
+ decode(subData) {
29
+ const ratioWei = AbiCoder.decodeParameter('uint128', subData[1]);
30
+ const targetRatio = weiToRatioPercentage(ratioWei);
31
+ return { targetRatio };
32
+ },
33
+ };
34
+ export const cBondsRebondSubData = {
35
+ encode(bondId) {
36
+ const bondIdEncoded = AbiCoder.encodeParameter('uint256', bondId);
37
+ return [bondIdEncoded];
38
+ },
39
+ decode(subData) {
40
+ const bondId = AbiCoder.decodeParameter('uint256', subData[1]).toString();
41
+ return { bondId };
42
+ },
43
+ };
44
+ export const liquityPaybackUsingChickenBondSubData = {
45
+ /**
46
+ * @param sourceId bondId or subId
47
+ * @param sourceType 0 for bond, 1 for subId
48
+ * @param chainId
49
+ */
50
+ encode: (sourceId, sourceType, chainId = ChainId.Ethereum) => {
51
+ const sourceIdEncoded = AbiCoder.encodeParameter('uint256', sourceId);
52
+ const sourceTypeEncoded = AbiCoder.encodeParameter('uint256', sourceType);
53
+ const lusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('LUSD', chainId).address);
54
+ const bLusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('bLUSD', chainId).address);
55
+ return [sourceIdEncoded, sourceTypeEncoded, lusdAddressEncoded, bLusdAddressEncoded];
56
+ },
57
+ decode: (subData) => {
58
+ const sourceId = AbiCoder.decodeParameter('uint256', subData[0]).toString();
59
+ const sourceType = AbiCoder.decodeParameter('uint256', subData[1]).toString();
60
+ return { sourceId, sourceType };
61
+ },
62
+ };
63
+ /**
64
+ .___ ___. ___ __ ___ _______ .______
65
+ | \/ | / \ | |/ / | ____|| _ \
66
+ | \ / | / ^ \ | ' / | |__ | |_) |
67
+ | |\/| | / /_\ \ | < | __| | /
68
+ | | | | / _____ \ | . \ | |____ | |\ \----.
69
+ |__| |__| /__/ \__\ |__|\__\ |_______|| _| `._____|
70
+ */
9
71
  export const makerRepayFromSavingsSubData = {
10
72
  encode(vaultId, targetRatioPercentage, chainId, daiAddr, mcdCdpManagerAddr) {
11
73
  const _daiAddr = daiAddr || getAssetInfo('DAI', chainId).address;
@@ -29,13 +91,6 @@ export const makerRepayFromSavingsSubData = {
29
91
  };
30
92
  },
31
93
  };
32
- export const liquityRepayFromSavingsSubData = {
33
- decode(subData) {
34
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]);
35
- const targetRatio = weiToRatioPercentage(weiRatio);
36
- return { targetRatio };
37
- },
38
- };
39
94
  export const makerCloseSubData = {
40
95
  encode(vaultId, closeToAssetAddr, chainId, daiAddr, mcdCdpManagerAddr) {
41
96
  const _daiAddr = daiAddr || getAssetInfo('DAI', chainId).address;
@@ -84,6 +139,21 @@ export const makerLeverageManagementWithoutSubProxy = {
84
139
  return { vaultId, targetRatio, daiAddr };
85
140
  },
86
141
  };
142
+ /**
143
+ __ __ ______ __ __ __ .___________.____ ____ ____ ____ __
144
+ | | | | / __ \ | | | | | | | |\ \ / / \ \ / / /_ |
145
+ | | | | | | | | | | | | | | `---| |----` \ \/ / \ \/ / | |
146
+ | | | | | | | | | | | | | | | | \_ _/ \ / | |
147
+ | `----.| | | `--' '--.| `--' | | | | | | | \ / | |
148
+ |_______||__| \_____\_____\\______/ |__| |__| |__| \__/ |_|
149
+ */
150
+ export const liquityRepayFromSavingsSubData = {
151
+ decode(subData) {
152
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]);
153
+ const targetRatio = weiToRatioPercentage(weiRatio);
154
+ return { targetRatio };
155
+ },
156
+ };
87
157
  export const liquityLeverageManagementSubData = {
88
158
  decode: (subData) => {
89
159
  const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]);
@@ -91,6 +161,18 @@ export const liquityLeverageManagementSubData = {
91
161
  return { targetRatio };
92
162
  },
93
163
  };
164
+ export const liquityLeverageManagementSubDataWithoutSubProxy = {
165
+ encode(targetRatio, ratioState) {
166
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
167
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
168
+ return [encodedTargetRatio, encodedRatioState];
169
+ },
170
+ decode(subData) {
171
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
172
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
173
+ return { targetRatio, ratioState };
174
+ },
175
+ };
94
176
  export const liquityCloseSubData = {
95
177
  encode(closeToAssetAddr, chainId = ChainId.Ethereum, collAddr, debtAddr) {
96
178
  const _collAddr = collAddr || getAssetInfo('WETH', chainId).address;
@@ -110,171 +192,202 @@ export const liquityCloseSubData = {
110
192
  return { closeToAssetAddr, debtAddr };
111
193
  },
112
194
  };
113
- export const aaveV2LeverageManagementSubData = {
114
- encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
115
- return [
116
- new Dec(triggerRepayRatio).mul(1e16).toString(),
117
- new Dec(triggerBoostRatio).mul(1e16).toString(),
118
- new Dec(targetBoostRatio).mul(1e16).toString(),
119
- new Dec(targetRepayRatio).mul(1e16).toString(),
120
- // @ts-ignore // TODO
121
- boostEnabled,
122
- ];
195
+ export const liquityDsrPaybackSubData = {
196
+ encode: (targetRatio) => {
197
+ const daiAddress = getAssetInfo('DAI').address;
198
+ const lusdAddress = getAssetInfo('LUSD').address;
199
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', RatioState.UNDER);
200
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
201
+ const daiAddressEncoded = AbiCoder.encodeParameter('address', daiAddress);
202
+ const lusdAddressEncoded = AbiCoder.encodeParameter('address', lusdAddress);
203
+ return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, lusdAddressEncoded];
123
204
  },
124
- decode(subData) {
125
- const ratioWei = AbiCoder.decodeParameter('uint256', subData[1]);
126
- const targetRatio = weiToRatioPercentage(ratioWei);
205
+ decode: (subData) => {
206
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]);
207
+ const targetRatio = weiToRatioPercentage(weiRatio);
127
208
  return { targetRatio };
128
209
  },
129
210
  };
130
- export const aaveV3LeverageManagementSubData = {
131
- decode(subData) {
132
- const ratioWei = AbiCoder.decodeParameter('uint256', subData[0]);
133
- const targetRatio = weiToRatioPercentage(ratioWei);
211
+ export const liquityDsrSupplySubData = {
212
+ encode: (targetRatio) => {
213
+ const daiAddress = getAssetInfo('DAI').address;
214
+ const wethAddress = getAssetInfo('WETH').address;
215
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', RatioState.UNDER);
216
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
217
+ const daiAddressEncoded = AbiCoder.encodeParameter('address', daiAddress);
218
+ const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
219
+ return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, wethAddressEncoded];
220
+ },
221
+ decode: (subData) => {
222
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]);
223
+ const targetRatio = weiToRatioPercentage(weiRatio);
134
224
  return { targetRatio };
135
225
  },
136
226
  };
137
- export const aaveV3LeverageManagementSubDataWithoutSubProxy = {
138
- encode(targetRatio, ratioState, market, user, isGeneric) {
139
- const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
140
- const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
141
- if (isGeneric) {
142
- const encodedMarket = AbiCoder.encodeParameter('address', market);
143
- const encodedUser = AbiCoder.encodeParameter('address', user);
144
- return [encodedTargetRatio, encodedRatioState, encodedMarket, encodedUser];
145
- }
146
- const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
147
- const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
148
- return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
227
+ export const liquityDebtInFrontRepaySubData = {
228
+ encode: (targetRatioIncrease) => {
229
+ const wethAddress = getAssetInfo('WETH').address;
230
+ const lusdAddress = getAssetInfo('LUSD').address;
231
+ const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
232
+ const lusdAddressEncoded = AbiCoder.encodeParameter('address', lusdAddress);
233
+ const targetRatioIncreaseEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatioIncrease));
234
+ const withdrawIdEncoded = AbiCoder.encodeParameter('uint8', 1); // withdraw - 1
235
+ const paybackIdEncoded = AbiCoder.encodeParameter('uint8', 0); // payback - 0
236
+ return [wethAddressEncoded, lusdAddressEncoded, targetRatioIncreaseEncoded, withdrawIdEncoded, paybackIdEncoded];
149
237
  },
150
- decode(subData) {
151
- const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
152
- const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
153
- return { targetRatio, ratioState };
238
+ decode: (subData) => {
239
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[2]);
240
+ const targetRatioIncrease = weiToRatioPercentage(weiRatio);
241
+ return { targetRatioIncrease };
154
242
  },
155
243
  };
156
- export const aaveV3LeverageManagementOnPriceGeneric = {
157
- encode(collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio, user) {
158
- const encodedColl = AbiCoder.encodeParameter('address', collAsset);
159
- const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
160
- const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
161
- const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
162
- const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
163
- const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
164
- const userEncoded = AbiCoder.encodeParameter('address', user);
244
+ /**
245
+ * __ __ ______ __ __ __ .___________.____ ____ ____ ____ ___
246
+ | | | | / __ \ | | | | | | | |\ \ / / \ \ / / |__ \
247
+ | | | | | | | | | | | | | | `---| |----` \ \/ / \ \/ / ) |
248
+ | | | | | | | | | | | | | | | | \_ _/ \ / / /
249
+ | `----.| | | `--' '--.| `--' | | | | | | | \ / / /_
250
+ |_______||__| \_____\_____\\______/ |__| |__| |__| \__/ |____|
251
+ */
252
+ export const liquityV2LeverageManagementSubData = {
253
+ encode: (market, troveId, collToken, boldToken, ratioState, targetRatio) => {
254
+ const marketEncoded = AbiCoder.encodeParameter('address', market);
255
+ const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
256
+ const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
257
+ const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
258
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
259
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
260
+ const isRepay = ratioState === RatioState.UNDER;
261
+ const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
262
+ const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
263
+ const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
264
+ const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
165
265
  return [
166
- encodedColl,
167
- encodedCollId,
168
- encodedDebt,
169
- encodedDebtId,
170
- encodedMarket,
171
- encodedTargetRatio,
172
- userEncoded,
266
+ marketEncoded,
267
+ troveIdEncoded,
268
+ collTokenEncoded,
269
+ boldTokenEncoded,
270
+ ratioStateEncoded,
271
+ targetRatioEncoded,
272
+ collActionTypeEncoded,
273
+ debtActionTypeEncoded,
173
274
  ];
174
275
  },
175
- decode(subData) {
176
- const collAsset = AbiCoder.decodeParameter('address', subData[0]);
177
- const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
178
- const debtAsset = AbiCoder.decodeParameter('address', subData[2]);
179
- const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
180
- const marketAddr = AbiCoder.decodeParameter('address', subData[4]);
276
+ decode: (subData) => {
277
+ const market = AbiCoder.decodeParameter('address', subData[0]);
278
+ const troveId = AbiCoder.decodeParameter('uint256', subData[1]);
279
+ const collToken = AbiCoder.decodeParameter('address', subData[2]);
280
+ const boldToken = AbiCoder.decodeParameter('address', subData[3]);
281
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[4]);
181
282
  const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]);
182
283
  const targetRatio = weiToRatioPercentage(weiRatio);
183
- const owner = AbiCoder.decodeParameter('address', subData[6]);
184
284
  return {
185
- collAsset,
186
- collAssetId,
187
- debtAsset,
188
- debtAssetId,
189
- marketAddr,
190
- targetRatio,
191
- owner,
285
+ market, troveId, collToken, boldToken, ratioState, targetRatio,
192
286
  };
193
287
  },
194
288
  };
195
- export const aaveV3CloseGenericSubData = {
196
- encode(collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, user) {
197
- const encodedColl = AbiCoder.encodeParameter('address', collAsset);
198
- const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
199
- const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
200
- const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
201
- const encodedCloseType = AbiCoder.encodeParameter('uint8', closeType);
202
- const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
203
- const userEncoded = AbiCoder.encodeParameter('address', user);
289
+ export const liquityV2CloseSubData = {
290
+ encode(market, troveId, collToken, boldToken, closeType) {
291
+ const marketEncoded = AbiCoder.encodeParameter('address', market);
292
+ const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
293
+ const collAddrEncoded = AbiCoder.encodeParameter('address', collToken);
294
+ const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
295
+ const wethAddress = getAssetInfo('WETH').address;
296
+ const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
297
+ const gasCompensation = new Dec('0.0375').mul(1e18).toString();
298
+ const gasCompensationEncoded = AbiCoder.encodeParameter('uint256', gasCompensation);
299
+ const closeTypeEncoded = AbiCoder.encodeParameter('uint8', closeType);
204
300
  return [
205
- encodedColl,
206
- encodedCollId,
207
- encodedDebt,
208
- encodedDebtId,
209
- encodedCloseType,
210
- encodedMarket,
211
- userEncoded,
301
+ marketEncoded,
302
+ troveIdEncoded,
303
+ collAddrEncoded,
304
+ boldTokenEncoded,
305
+ wethAddressEncoded,
306
+ gasCompensationEncoded,
307
+ closeTypeEncoded,
212
308
  ];
213
309
  },
214
310
  decode(subData) {
215
- const collAsset = AbiCoder.decodeParameter('address', subData[0]);
216
- const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
217
- const debtAsset = AbiCoder.decodeParameter('address', subData[2]);
218
- const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
219
- const closeType = Number(AbiCoder.decodeParameter('uint8', subData[4]));
220
- const marketAddr = AbiCoder.decodeParameter('address', subData[5]);
221
- const owner = AbiCoder.decodeParameter('address', subData[6]);
311
+ const market = AbiCoder.decodeParameter('address', subData[0]);
312
+ const troveId = AbiCoder.decodeParameter('uint256', subData[1]);
313
+ const collToken = AbiCoder.decodeParameter('address', subData[2]);
314
+ const boldToken = AbiCoder.decodeParameter('address', subData[3]);
315
+ // skip wethAddress and gasCompensation
316
+ const closeType = AbiCoder.decodeParameter('uint8', subData[6]);
222
317
  return {
223
- collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, owner,
318
+ market, troveId, collToken, boldToken, closeType,
224
319
  };
225
320
  },
226
321
  };
227
- export const aaveV3CollateralSwitchSubData = {
228
- encode(fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, useOnBehalf = false) {
229
- const encodedFromAsset = AbiCoder.encodeParameter('address', fromAsset);
230
- const encodedFromAssetId = AbiCoder.encodeParameter('uint8', fromAssetId);
231
- const encodedToAsset = AbiCoder.encodeParameter('address', toAsset);
232
- const encodedToAssetId = AbiCoder.encodeParameter('uint8', toAssetId);
233
- const encodedMarketAddr = AbiCoder.encodeParameter('address', marketAddr);
234
- const encodedAmountToSwitch = AbiCoder.encodeParameter('uint256', amountToSwitch);
235
- const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', useOnBehalf);
322
+ export const liquityV2LeverageManagementOnPriceSubData = {
323
+ encode(market, troveId, collToken, boldToken, targetRatio, isRepayOnPrice) {
324
+ const encodedMarket = AbiCoder.encodeParameter('address', market);
325
+ const encodedTroveId = AbiCoder.encodeParameter('uint256', troveId);
326
+ const encodedCollToken = AbiCoder.encodeParameter('address', collToken);
327
+ const encodedBoldToken = AbiCoder.encodeParameter('address', boldToken);
328
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
329
+ const collActionType = isRepayOnPrice ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
330
+ const debtActionType = isRepayOnPrice ? DebtActionType.PAYBACK : DebtActionType.BORROW;
331
+ const encodedCollActionType = AbiCoder.encodeParameter('uint8', collActionType);
332
+ const encodedDebtActionType = AbiCoder.encodeParameter('uint8', debtActionType);
236
333
  return [
237
- encodedFromAsset,
238
- encodedFromAssetId,
239
- encodedToAsset,
240
- encodedToAssetId,
241
- encodedMarketAddr,
242
- encodedAmountToSwitch,
243
- encodedUseOnBehalf,
334
+ encodedMarket,
335
+ encodedTroveId,
336
+ encodedCollToken,
337
+ encodedBoldToken,
338
+ encodedTargetRatio,
339
+ encodedCollActionType,
340
+ encodedDebtActionType,
244
341
  ];
245
342
  },
246
343
  decode(subData) {
247
- const fromAsset = AbiCoder.decodeParameter('address', subData[0]);
248
- const fromAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
249
- const toAsset = AbiCoder.decodeParameter('address', subData[2]);
250
- const toAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
251
- const marketAddr = AbiCoder.decodeParameter('address', subData[4]);
252
- const amountToSwitch = AbiCoder.decodeParameter('uint256', subData[5]);
344
+ const market = AbiCoder.decodeParameter('address', subData[0]);
345
+ const troveId = AbiCoder.decodeParameter('uint256', subData[1]);
346
+ const collToken = AbiCoder.decodeParameter('address', subData[2]);
347
+ const boldToken = AbiCoder.decodeParameter('address', subData[3]);
348
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[4]);
349
+ const targetRatio = weiToRatioPercentage(weiRatio);
253
350
  return {
254
- fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch,
351
+ market, troveId, collToken, boldToken, targetRatio,
255
352
  };
256
353
  },
257
354
  };
258
- export const aaveV3QuotePriceSubData = {
259
- encode(collAsset, collAssetId, debtAsset, debtAssetId, nullAddress = ZERO_ADDRESS) {
260
- const encodedColl = AbiCoder.encodeParameter('address', collAsset);
261
- const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
262
- const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
263
- const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
264
- const encodedNullAddress = AbiCoder.encodeParameter('address', nullAddress);
265
- return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedNullAddress];
355
+ export const liquityV2PaybackSubData = {
356
+ encode: (market, troveId, boldToken, targetRatio, ratioState) => {
357
+ const marketEncoded = AbiCoder.encodeParameter('address', market);
358
+ const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
359
+ const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
360
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
361
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
362
+ return [
363
+ marketEncoded,
364
+ troveIdEncoded,
365
+ boldTokenEncoded,
366
+ targetRatioEncoded,
367
+ ratioStateEncoded,
368
+ ];
266
369
  },
267
- decode(subData) {
268
- const collAsset = AbiCoder.decodeParameter('address', subData[0]);
269
- const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
270
- const debtAsset = AbiCoder.decodeParameter('address', subData[2]);
271
- const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
370
+ decode: (subData) => {
371
+ const market = AbiCoder.decodeParameter('address', subData[0]);
372
+ const troveId = AbiCoder.decodeParameter('uint256', subData[1]);
373
+ const boldToken = AbiCoder.decodeParameter('address', subData[2]);
374
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]);
375
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[4]);
376
+ const targetRatio = weiToRatioPercentage(weiRatio);
272
377
  return {
273
- collAsset, collAssetId, debtAsset, debtAssetId,
378
+ market, troveId, boldToken, ratioState, targetRatio,
274
379
  };
275
380
  },
276
381
  };
277
- export const compoundV2LeverageManagementSubData = {
382
+ /**
383
+ ___ ___ ____ ____ _______ ____ ____ ___
384
+ / \ / \ \ \ / / | ____| \ \ / / |__ \
385
+ / ^ \ / ^ \ \ \/ / | |__ \ \/ / ) |
386
+ / /_\ \ / /_\ \ \ / | __| \ / / /
387
+ / _____ \ / _____ \ \ / | |____ \ / / /_
388
+ /__/ \__\ /__/ \__\ \__/ |_______| \__/ |____|
389
+ */
390
+ export const aaveV2LeverageManagementSubData = {
278
391
  encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
279
392
  return [
280
393
  new Dec(triggerRepayRatio).mul(1e16).toString(),
@@ -286,149 +399,47 @@ export const compoundV2LeverageManagementSubData = {
286
399
  ];
287
400
  },
288
401
  decode(subData) {
289
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[0]);
290
- const targetRatio = weiToRatioPercentage(weiRatio);
291
- return { targetRatio };
292
- },
293
- };
294
- export const compoundV3LeverageManagementSubData = {
295
- encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
296
- return [
297
- market,
298
- baseToken,
299
- new Dec(triggerRepayRatio).mul(1e16).toString(),
300
- new Dec(triggerBoostRatio).mul(1e16).toString(),
301
- new Dec(targetBoostRatio).mul(1e16).toString(),
302
- new Dec(targetRepayRatio).mul(1e16).toString(),
303
- // @ts-ignore // TODO
304
- boostEnabled, isEOA,
305
- ];
306
- },
307
- decode(subData) {
308
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]);
309
- const targetRatio = weiToRatioPercentage(weiRatio);
310
- return { targetRatio };
311
- },
312
- };
313
- export const compoundV3L2LeverageManagementSubData = {
314
- encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
315
- let subInput = '0x';
316
- subInput = subInput.concat(market.slice(2));
317
- subInput = subInput.concat(baseToken.slice(2));
318
- subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
319
- .padStart(32, '0'));
320
- subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
321
- .padStart(32, '0'));
322
- subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
323
- .padStart(32, '0'));
324
- subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
325
- .padStart(32, '0'));
326
- subInput = subInput.concat(boostEnabled ? '01' : '00');
327
- subInput = subInput.concat(isEOA ? '01' : '00');
328
- return subInput;
329
- },
330
- decode(subData) {
331
- const ratioWei = AbiCoder.decodeParameter('uint256', subData[3]);
332
- const targetRatio = weiToRatioPercentage(ratioWei);
333
- return { targetRatio };
334
- },
335
- };
336
- export const morphoAaveV2LeverageManagementSubData = {
337
- encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
338
- return [
339
- ratioPercentageToWei(triggerRepayRatio),
340
- ratioPercentageToWei(triggerBoostRatio),
341
- ratioPercentageToWei(targetBoostRatio),
342
- ratioPercentageToWei(targetRepayRatio),
343
- // @ts-ignore
344
- boostEnabled,
345
- ];
346
- },
347
- decode(subData) {
348
- const ratioWei = AbiCoder.decodeParameter('uint128', subData[1]);
402
+ const ratioWei = AbiCoder.decodeParameter('uint256', subData[1]);
349
403
  const targetRatio = weiToRatioPercentage(ratioWei);
350
404
  return { targetRatio };
351
405
  },
352
406
  };
353
- export const cBondsRebondSubData = {
354
- encode(bondId) {
355
- const bondIdEncoded = AbiCoder.encodeParameter('uint256', bondId);
356
- return [bondIdEncoded];
407
+ export const aaveV2LeverageManagementSubDataWithoutSubProxy = {
408
+ encode(targetRatio, ratioState) {
409
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
410
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
411
+ return [encodedTargetRatio, encodedRatioState];
357
412
  },
358
413
  decode(subData) {
359
- const bondId = AbiCoder.decodeParameter('uint256', subData[1]).toString();
360
- return { bondId };
361
- },
362
- };
363
- export const liquityPaybackUsingChickenBondSubData = {
364
- /**
365
- * @param sourceId bondId or subId
366
- * @param sourceType 0 for bond, 1 for subId
367
- * @param chainId
368
- */
369
- encode: (sourceId, sourceType, chainId = ChainId.Ethereum) => {
370
- const sourceIdEncoded = AbiCoder.encodeParameter('uint256', sourceId);
371
- const sourceTypeEncoded = AbiCoder.encodeParameter('uint256', sourceType);
372
- const lusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('LUSD', chainId).address);
373
- const bLusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('bLUSD', chainId).address);
374
- return [sourceIdEncoded, sourceTypeEncoded, lusdAddressEncoded, bLusdAddressEncoded];
375
- },
376
- decode: (subData) => {
377
- const sourceId = AbiCoder.decodeParameter('uint256', subData[0]).toString();
378
- const sourceType = AbiCoder.decodeParameter('uint256', subData[1]).toString();
379
- return { sourceId, sourceType };
380
- },
381
- };
382
- export const exchangeDcaSubData = {
383
- encode: (fromToken, toToken, amount, interval) => {
384
- const sellTokenEncoded = AbiCoder.encodeParameter('address', fromToken);
385
- const buyTokenEncoded = AbiCoder.encodeParameter('address', toToken);
386
- const amountEncoded = AbiCoder.encodeParameter('uint256', amount);
387
- const intervalEncoded = AbiCoder.encodeParameter('uint256', interval);
388
- return [sellTokenEncoded, buyTokenEncoded, amountEncoded, intervalEncoded];
389
- },
390
- decode: (subData, chainId) => {
391
- const fromToken = AbiCoder.decodeParameter('address', subData[0]).toString();
392
- const toToken = AbiCoder.decodeParameter('address', subData[1]).toString();
393
- const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2]).toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
394
- const interval = AbiCoder.decodeParameter('uint256', subData[3]).toString();
395
- return {
396
- fromToken,
397
- toToken,
398
- amount,
399
- interval,
400
- };
401
- },
402
- };
403
- export const exchangeLimitOrderSubData = {
404
- encode(fromToken, toToken, amount, targetPrice, goodUntil, orderType) {
405
- return [
406
- fromToken,
407
- toToken,
408
- amount,
409
- targetPrice,
410
- new Dec(goodUntil).toString(),
411
- new Dec(orderType).toString(),
412
- ];
413
- },
414
- decode: (subData, chainId) => {
415
- const fromToken = AbiCoder.decodeParameter('address', subData[0]).toString();
416
- const toToken = AbiCoder.decodeParameter('address', subData[1]).toString();
417
- const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2]).toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
418
- return { fromToken, toToken, amount };
414
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
415
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
416
+ return { targetRatio, ratioState };
419
417
  },
420
418
  };
421
- export const sparkLeverageManagementSubData = {
419
+ /**
420
+ ___ ___ ____ ____ _______ ____ ____ ____
421
+ / \ / \ \ \ / / | ____| \ \ / / |___ \
422
+ / ^ \ / ^ \ \ \/ / | |__ \ \/ / __) |
423
+ / /_\ \ / /_\ \ \ / | __| \ / |__ <
424
+ / _____ \ / _____ \ \ / | |____ \ / ___) |
425
+ /__/ \__\ /__/ \__\ \__/ |_______| \__/ |____/
426
+ */
427
+ export const aaveV3LeverageManagementSubData = {
422
428
  decode(subData) {
423
429
  const ratioWei = AbiCoder.decodeParameter('uint256', subData[0]);
424
430
  const targetRatio = weiToRatioPercentage(ratioWei);
425
431
  return { targetRatio };
426
432
  },
427
433
  };
428
- export const sparkLeverageManagementSubDataWithoutSubProxy = {
429
- encode(targetRatio, ratioState) {
434
+ export const aaveV3LeverageManagementSubDataWithoutSubProxy = {
435
+ encode(targetRatio, ratioState, market, user, isGeneric) {
430
436
  const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
431
437
  const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
438
+ if (isGeneric) {
439
+ const encodedMarket = AbiCoder.encodeParameter('address', market);
440
+ const encodedUser = AbiCoder.encodeParameter('address', user);
441
+ return [encodedTargetRatio, encodedRatioState, encodedMarket, encodedUser];
442
+ }
432
443
  const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
433
444
  const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
434
445
  return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
@@ -439,130 +450,124 @@ export const sparkLeverageManagementSubDataWithoutSubProxy = {
439
450
  return { targetRatio, ratioState };
440
451
  },
441
452
  };
442
- export const liquityDsrPaybackSubData = {
443
- encode: (targetRatio) => {
444
- const daiAddress = getAssetInfo('DAI').address;
445
- const lusdAddress = getAssetInfo('LUSD').address;
446
- const ratioStateEncoded = AbiCoder.encodeParameter('uint8', RatioState.UNDER);
447
- const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
448
- const daiAddressEncoded = AbiCoder.encodeParameter('address', daiAddress);
449
- const lusdAddressEncoded = AbiCoder.encodeParameter('address', lusdAddress);
450
- return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, lusdAddressEncoded];
451
- },
452
- decode: (subData) => {
453
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]);
454
- const targetRatio = weiToRatioPercentage(weiRatio);
455
- return { targetRatio };
456
- },
457
- };
458
- export const liquityDsrSupplySubData = {
459
- encode: (targetRatio) => {
460
- const daiAddress = getAssetInfo('DAI').address;
461
- const wethAddress = getAssetInfo('WETH').address;
462
- const ratioStateEncoded = AbiCoder.encodeParameter('uint8', RatioState.UNDER);
463
- const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
464
- const daiAddressEncoded = AbiCoder.encodeParameter('address', daiAddress);
465
- const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
466
- return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, wethAddressEncoded];
467
- },
468
- decode: (subData) => {
469
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]);
470
- const targetRatio = weiToRatioPercentage(weiRatio);
471
- return { targetRatio };
472
- },
473
- };
474
- export const liquityDebtInFrontRepaySubData = {
475
- encode: (targetRatioIncrease) => {
476
- const wethAddress = getAssetInfo('WETH').address;
477
- const lusdAddress = getAssetInfo('LUSD').address;
478
- const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
479
- const lusdAddressEncoded = AbiCoder.encodeParameter('address', lusdAddress);
480
- const targetRatioIncreaseEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatioIncrease));
481
- const withdrawIdEncoded = AbiCoder.encodeParameter('uint8', 1); // withdraw - 1
482
- const paybackIdEncoded = AbiCoder.encodeParameter('uint8', 0); // payback - 0
483
- return [wethAddressEncoded, lusdAddressEncoded, targetRatioIncreaseEncoded, withdrawIdEncoded, paybackIdEncoded];
484
- },
485
- decode: (subData) => {
486
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[2]);
487
- const targetRatioIncrease = weiToRatioPercentage(weiRatio);
488
- return { targetRatioIncrease };
489
- },
490
- };
491
- export const crvUSDLeverageManagementSubData = {
492
- encode: (controllerAddr, ratioState, targetRatio, collTokenAddr, crvUSDAddr) => {
493
- const controllerAddrEncoded = AbiCoder.encodeParameter('address', controllerAddr);
494
- const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
495
- const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
496
- const collTokenAddrEncoded = AbiCoder.encodeParameter('address', collTokenAddr);
497
- const crvUSDAddrEncoded = AbiCoder.encodeParameter('address', crvUSDAddr);
498
- return [controllerAddrEncoded, ratioStateEncoded, targetRatioEncoded, collTokenAddrEncoded, crvUSDAddrEncoded];
453
+ export const aaveV3LeverageManagementOnPriceGeneric = {
454
+ encode(collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio, user) {
455
+ const encodedColl = AbiCoder.encodeParameter('address', collAsset);
456
+ const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
457
+ const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
458
+ const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
459
+ const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
460
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
461
+ const userEncoded = AbiCoder.encodeParameter('address', user);
462
+ return [
463
+ encodedColl,
464
+ encodedCollId,
465
+ encodedDebt,
466
+ encodedDebtId,
467
+ encodedMarket,
468
+ encodedTargetRatio,
469
+ userEncoded,
470
+ ];
499
471
  },
500
- decode: (subData) => {
501
- const controller = AbiCoder.decodeParameter('address', subData[0]);
502
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[2]);
472
+ decode(subData) {
473
+ const collAsset = AbiCoder.decodeParameter('address', subData[0]);
474
+ const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
475
+ const debtAsset = AbiCoder.decodeParameter('address', subData[2]);
476
+ const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
477
+ const marketAddr = AbiCoder.decodeParameter('address', subData[4]);
478
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]);
503
479
  const targetRatio = weiToRatioPercentage(weiRatio);
504
- return { controller, targetRatio };
480
+ const owner = AbiCoder.decodeParameter('address', subData[6]);
481
+ return {
482
+ collAsset,
483
+ collAssetId,
484
+ debtAsset,
485
+ debtAssetId,
486
+ marketAddr,
487
+ targetRatio,
488
+ owner,
489
+ };
505
490
  },
506
491
  };
507
- export const crvUSDPaybackSubData = {
508
- encode: (controllerAddr, addressToPullTokensFrom, positionOwner, paybackAmount, crvUSDAddr) => {
509
- const controllerAddrEncoded = AbiCoder.encodeParameter('address', controllerAddr);
510
- const addressToPullTokensFromEncoded = AbiCoder.encodeParameter('address', addressToPullTokensFrom);
511
- const positionOwnerEncoded = AbiCoder.encodeParameter('address', positionOwner);
512
- const paybackAmountEncoded = AbiCoder.encodeParameter('uint256', toWei(paybackAmount, 'ether'));
513
- const crvUSDAddrEncoded = AbiCoder.encodeParameter('address', crvUSDAddr);
492
+ export const aaveV3CloseGenericSubData = {
493
+ encode(collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, user) {
494
+ const encodedColl = AbiCoder.encodeParameter('address', collAsset);
495
+ const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
496
+ const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
497
+ const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
498
+ const encodedCloseType = AbiCoder.encodeParameter('uint8', closeType);
499
+ const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
500
+ const userEncoded = AbiCoder.encodeParameter('address', user);
514
501
  return [
515
- controllerAddrEncoded,
516
- addressToPullTokensFromEncoded,
517
- positionOwnerEncoded,
518
- paybackAmountEncoded,
519
- crvUSDAddrEncoded,
502
+ encodedColl,
503
+ encodedCollId,
504
+ encodedDebt,
505
+ encodedDebtId,
506
+ encodedCloseType,
507
+ encodedMarket,
508
+ userEncoded,
520
509
  ];
521
510
  },
522
- decode: (subData) => {
523
- const controller = AbiCoder.decodeParameter('address', subData[0]);
524
- const addressToPullTokensFrom = AbiCoder.decodeParameter('address', subData[1]);
525
- const positionOwner = AbiCoder.decodeParameter('address', subData[2]);
526
- const weiPaybackAmount = AbiCoder.decodeParameter('uint256', subData[3]);
527
- const paybackAmount = fromWei(weiPaybackAmount, 'ether');
511
+ decode(subData) {
512
+ const collAsset = AbiCoder.decodeParameter('address', subData[0]);
513
+ const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
514
+ const debtAsset = AbiCoder.decodeParameter('address', subData[2]);
515
+ const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
516
+ const closeType = Number(AbiCoder.decodeParameter('uint8', subData[4]));
517
+ const marketAddr = AbiCoder.decodeParameter('address', subData[5]);
518
+ const owner = AbiCoder.decodeParameter('address', subData[6]);
528
519
  return {
529
- controller,
530
- addressToPullTokensFrom,
531
- positionOwner,
532
- paybackAmount,
520
+ collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, owner,
533
521
  };
534
522
  },
535
523
  };
536
- export const morphoBlueLeverageManagementSubData = {
537
- encode: (loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA) => {
538
- const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
539
- const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
540
- const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
541
- const irmEncoded = AbiCoder.encodeParameter('address', irm);
542
- const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
543
- const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
544
- const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
545
- const userEncoded = AbiCoder.encodeParameter('address', user);
546
- const isEOAEncoded = AbiCoder.encodeParameter('bool', isEOA);
547
- return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, ratioStateEncoded, targetRatioEncoded, userEncoded, isEOAEncoded];
524
+ export const aaveV3CollateralSwitchSubData = {
525
+ encode(fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, useOnBehalf = false) {
526
+ const encodedFromAsset = AbiCoder.encodeParameter('address', fromAsset);
527
+ const encodedFromAssetId = AbiCoder.encodeParameter('uint8', fromAssetId);
528
+ const encodedToAsset = AbiCoder.encodeParameter('address', toAsset);
529
+ const encodedToAssetId = AbiCoder.encodeParameter('uint8', toAssetId);
530
+ const encodedMarketAddr = AbiCoder.encodeParameter('address', marketAddr);
531
+ const encodedAmountToSwitch = AbiCoder.encodeParameter('uint256', amountToSwitch);
532
+ const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', useOnBehalf);
533
+ return [
534
+ encodedFromAsset,
535
+ encodedFromAssetId,
536
+ encodedToAsset,
537
+ encodedToAssetId,
538
+ encodedMarketAddr,
539
+ encodedAmountToSwitch,
540
+ encodedUseOnBehalf,
541
+ ];
542
+ },
543
+ decode(subData) {
544
+ const fromAsset = AbiCoder.decodeParameter('address', subData[0]);
545
+ const fromAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
546
+ const toAsset = AbiCoder.decodeParameter('address', subData[2]);
547
+ const toAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
548
+ const marketAddr = AbiCoder.decodeParameter('address', subData[4]);
549
+ const amountToSwitch = AbiCoder.decodeParameter('uint256', subData[5]);
550
+ return {
551
+ fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch,
552
+ };
548
553
  },
549
- decode: (subData) => {
550
- const loanToken = AbiCoder.decodeParameter('address', subData[0]);
551
- const collToken = AbiCoder.decodeParameter('address', subData[1]);
552
- const oracle = AbiCoder.decodeParameter('address', subData[2]);
553
- const irm = AbiCoder.decodeParameter('address', subData[3]);
554
- const lltv = AbiCoder.decodeParameter('uint256', subData[4]);
555
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[6]);
556
- const user = AbiCoder.decodeParameter('address', subData[7]);
557
- const targetRatio = weiToRatioPercentage(weiRatio);
554
+ };
555
+ export const aaveV3QuotePriceSubData = {
556
+ encode(collAsset, collAssetId, debtAsset, debtAssetId, nullAddress = ZERO_ADDRESS) {
557
+ const encodedColl = AbiCoder.encodeParameter('address', collAsset);
558
+ const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
559
+ const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
560
+ const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
561
+ const encodedNullAddress = AbiCoder.encodeParameter('address', nullAddress);
562
+ return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedNullAddress];
563
+ },
564
+ decode(subData) {
565
+ const collAsset = AbiCoder.decodeParameter('address', subData[0]);
566
+ const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
567
+ const debtAsset = AbiCoder.decodeParameter('address', subData[2]);
568
+ const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
558
569
  return {
559
- loanToken,
560
- collToken,
561
- oracle,
562
- irm,
563
- lltv,
564
- user,
565
- targetRatio,
570
+ collAsset, collAssetId, debtAsset, debtAssetId,
566
571
  };
567
572
  },
568
573
  };
@@ -598,200 +603,253 @@ export const aaveV3LeverageManagementOnPriceSubData = {
598
603
  };
599
604
  },
600
605
  };
601
- export const liquityV2LeverageManagementSubData = {
602
- encode: (market, troveId, collToken, boldToken, ratioState, targetRatio) => {
603
- const marketEncoded = AbiCoder.encodeParameter('address', market);
604
- const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
605
- const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
606
- const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
606
+ /**
607
+ * ___ ___ ____ ____ _______ ____ ____ _ _
608
+ / \ / \ \ \ / / | ____| \ \ / / | || |
609
+ / ^ \ / ^ \ \ \/ / | |__ \ \/ / | || |_
610
+ / /_\ \ / /_\ \ \ / | __| \ / |__ _|
611
+ / _____ \ / _____ \ \ / | |____ \ / | |
612
+ /__/ \__\ /__/ \__\ \__/ |_______| \__/ |_|
613
+ */
614
+ export const aaveV4LeverageManagementSubData = {
615
+ encode: (spoke, owner, ratioState, targetRatio) => {
616
+ const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
617
+ const ownerEncoded = AbiCoder.encodeParameter('address', owner);
607
618
  const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
608
619
  const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
609
- const isRepay = ratioState === RatioState.UNDER;
610
- const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
611
- const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
612
- const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
613
- const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
620
+ // Add two empty slots for future addons (e.g tsi or slippage settings)
614
621
  return [
615
- marketEncoded,
616
- troveIdEncoded,
617
- collTokenEncoded,
618
- boldTokenEncoded,
622
+ spokeEncoded,
623
+ ownerEncoded,
619
624
  ratioStateEncoded,
620
625
  targetRatioEncoded,
621
- collActionTypeEncoded,
622
- debtActionTypeEncoded,
626
+ EMPTY_SLOT,
627
+ EMPTY_SLOT,
623
628
  ];
624
629
  },
625
630
  decode: (subData) => {
626
- const market = AbiCoder.decodeParameter('address', subData[0]);
627
- const troveId = AbiCoder.decodeParameter('uint256', subData[1]);
628
- const collToken = AbiCoder.decodeParameter('address', subData[2]);
629
- const boldToken = AbiCoder.decodeParameter('address', subData[3]);
630
- const ratioState = AbiCoder.decodeParameter('uint8', subData[4]);
631
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]);
632
- const targetRatio = weiToRatioPercentage(weiRatio);
631
+ const spoke = AbiCoder.decodeParameter('address', subData[0]);
632
+ const owner = AbiCoder.decodeParameter('address', subData[1]);
633
+ const ratioState = Number(AbiCoder.decodeParameter('uint8', subData[2]));
634
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[3]));
633
635
  return {
634
- market, troveId, collToken, boldToken, ratioState, targetRatio,
636
+ spoke, owner, ratioState, targetRatio,
635
637
  };
636
638
  },
637
639
  };
638
- export const liquityV2CloseSubData = {
639
- encode(market, troveId, collToken, boldToken, closeType) {
640
- const marketEncoded = AbiCoder.encodeParameter('address', market);
641
- const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
642
- const collAddrEncoded = AbiCoder.encodeParameter('address', collToken);
643
- const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
644
- const wethAddress = getAssetInfo('WETH').address;
645
- const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
646
- const gasCompensation = new Dec('0.0375').mul(1e18).toString();
647
- const gasCompensationEncoded = AbiCoder.encodeParameter('uint256', gasCompensation);
648
- const closeTypeEncoded = AbiCoder.encodeParameter('uint8', closeType);
640
+ export const aaveV4LeverageManagementOnPriceSubData = {
641
+ encode: (spoke, owner, collAsset, collAssetId, debtAsset, debtAssetId, ratioState, targetRatio) => {
642
+ const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
643
+ const ownerEncoded = AbiCoder.encodeParameter('address', owner);
644
+ const collAssetEncoded = AbiCoder.encodeParameter('address', collAsset);
645
+ const collAssetIdEncoded = AbiCoder.encodeParameter('uint256', collAssetId);
646
+ const debtAssetEncoded = AbiCoder.encodeParameter('address', debtAsset);
647
+ const debtAssetIdEncoded = AbiCoder.encodeParameter('uint256', debtAssetId);
648
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
649
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
650
+ // Add two empty slots for future addons (e.g tsi or slippage settings)
649
651
  return [
650
- marketEncoded,
651
- troveIdEncoded,
652
- collAddrEncoded,
653
- boldTokenEncoded,
654
- wethAddressEncoded,
655
- gasCompensationEncoded,
656
- closeTypeEncoded,
652
+ spokeEncoded,
653
+ ownerEncoded,
654
+ collAssetEncoded,
655
+ collAssetIdEncoded,
656
+ debtAssetEncoded,
657
+ debtAssetIdEncoded,
658
+ ratioStateEncoded,
659
+ targetRatioEncoded,
660
+ EMPTY_SLOT,
661
+ EMPTY_SLOT,
657
662
  ];
658
663
  },
659
- decode(subData) {
660
- const market = AbiCoder.decodeParameter('address', subData[0]);
661
- const troveId = AbiCoder.decodeParameter('uint256', subData[1]);
662
- const collToken = AbiCoder.decodeParameter('address', subData[2]);
663
- const boldToken = AbiCoder.decodeParameter('address', subData[3]);
664
- // skip wethAddress and gasCompensation
665
- const closeType = AbiCoder.decodeParameter('uint8', subData[6]);
664
+ decode: (subData) => {
665
+ const spoke = AbiCoder.decodeParameter('address', subData[0]);
666
+ const owner = AbiCoder.decodeParameter('address', subData[1]);
667
+ const collAsset = AbiCoder.decodeParameter('address', subData[2]);
668
+ const collAssetId = Number(AbiCoder.decodeParameter('uint256', subData[3]));
669
+ const debtAsset = AbiCoder.decodeParameter('address', subData[4]);
670
+ const debtAssetId = Number(AbiCoder.decodeParameter('uint256', subData[5]));
671
+ const ratioState = Number(AbiCoder.decodeParameter('uint8', subData[6]));
672
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[7]));
666
673
  return {
667
- market, troveId, collToken, boldToken, closeType,
674
+ spoke, owner, collAsset, collAssetId, debtAsset, debtAssetId, ratioState, targetRatio,
668
675
  };
669
676
  },
670
677
  };
671
- export const liquityV2LeverageManagementOnPriceSubData = {
672
- encode(market, troveId, collToken, boldToken, targetRatio, isRepayOnPrice) {
673
- const encodedMarket = AbiCoder.encodeParameter('address', market);
674
- const encodedTroveId = AbiCoder.encodeParameter('uint256', troveId);
675
- const encodedCollToken = AbiCoder.encodeParameter('address', collToken);
676
- const encodedBoldToken = AbiCoder.encodeParameter('address', boldToken);
677
- const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
678
- const collActionType = isRepayOnPrice ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
679
- const debtActionType = isRepayOnPrice ? DebtActionType.PAYBACK : DebtActionType.BORROW;
680
- const encodedCollActionType = AbiCoder.encodeParameter('uint8', collActionType);
681
- const encodedDebtActionType = AbiCoder.encodeParameter('uint8', debtActionType);
678
+ export const aaveV4CloseSubData = {
679
+ encode: (spoke, owner, collAsset, collAssetId, debtAsset, debtAssetId, closeType) => {
680
+ const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
681
+ const ownerEncoded = AbiCoder.encodeParameter('address', owner);
682
+ const collAssetEncoded = AbiCoder.encodeParameter('address', collAsset);
683
+ const collAssetIdEncoded = AbiCoder.encodeParameter('uint256', collAssetId);
684
+ const debtAssetEncoded = AbiCoder.encodeParameter('address', debtAsset);
685
+ const debtAssetIdEncoded = AbiCoder.encodeParameter('uint256', debtAssetId);
686
+ const closeTypeEncoded = AbiCoder.encodeParameter('uint8', closeType);
687
+ // Add two empty slots for future addons (e.g tsi or slippage settings)
682
688
  return [
683
- encodedMarket,
684
- encodedTroveId,
685
- encodedCollToken,
686
- encodedBoldToken,
687
- encodedTargetRatio,
688
- encodedCollActionType,
689
- encodedDebtActionType,
689
+ spokeEncoded,
690
+ ownerEncoded,
691
+ collAssetEncoded,
692
+ collAssetIdEncoded,
693
+ debtAssetEncoded,
694
+ debtAssetIdEncoded,
695
+ closeTypeEncoded,
696
+ EMPTY_SLOT,
697
+ EMPTY_SLOT,
690
698
  ];
691
699
  },
692
- decode(subData) {
693
- const market = AbiCoder.decodeParameter('address', subData[0]);
694
- const troveId = AbiCoder.decodeParameter('uint256', subData[1]);
695
- const collToken = AbiCoder.decodeParameter('address', subData[2]);
696
- const boldToken = AbiCoder.decodeParameter('address', subData[3]);
697
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[4]);
698
- const targetRatio = weiToRatioPercentage(weiRatio);
700
+ decode: (subData) => {
701
+ const spoke = AbiCoder.decodeParameter('address', subData[0]);
702
+ const owner = AbiCoder.decodeParameter('address', subData[1]);
703
+ const collAsset = AbiCoder.decodeParameter('address', subData[2]);
704
+ const collAssetId = Number(AbiCoder.decodeParameter('uint256', subData[3]));
705
+ const debtAsset = AbiCoder.decodeParameter('address', subData[4]);
706
+ const debtAssetId = Number(AbiCoder.decodeParameter('uint256', subData[5]));
707
+ const closeType = Number(AbiCoder.decodeParameter('uint8', subData[6]));
699
708
  return {
700
- market, troveId, collToken, boldToken, targetRatio,
709
+ spoke, owner, collAsset, collAssetId, debtAsset, debtAssetId, closeType,
701
710
  };
702
711
  },
703
712
  };
704
- export const morphoBlueLeverageManagementOnPriceSubData = {
705
- encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user) {
706
- const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
707
- const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
708
- const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
709
- const irmEncoded = AbiCoder.encodeParameter('address', irm);
710
- const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
711
- const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
712
- const userEncoded = AbiCoder.encodeParameter('address', user);
713
- return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, targetRatioEncoded, userEncoded];
713
+ export const aaveV4CollateralSwitchSubData = {
714
+ encode: (spoke, owner, fromAsset, fromAssetId, toAsset, toAssetId, amountToSwitch) => {
715
+ const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
716
+ const ownerEncoded = AbiCoder.encodeParameter('address', owner);
717
+ const fromAssetEncoded = AbiCoder.encodeParameter('address', fromAsset);
718
+ const fromAssetIdEncoded = AbiCoder.encodeParameter('uint256', fromAssetId);
719
+ const toAssetEncoded = AbiCoder.encodeParameter('address', toAsset);
720
+ const toAssetIdEncoded = AbiCoder.encodeParameter('uint256', toAssetId);
721
+ const amountToSwitchEncoded = AbiCoder.encodeParameter('uint256', amountToSwitch);
722
+ // Add two empty slots for future addons (e.g tsi or slippage settings)
723
+ return [
724
+ spokeEncoded,
725
+ ownerEncoded,
726
+ fromAssetEncoded,
727
+ fromAssetIdEncoded,
728
+ toAssetEncoded,
729
+ toAssetIdEncoded,
730
+ amountToSwitchEncoded,
731
+ EMPTY_SLOT,
732
+ EMPTY_SLOT,
733
+ ];
714
734
  },
715
- decode(subData) {
716
- const loanToken = AbiCoder.decodeParameter('address', subData[0]);
717
- const collToken = AbiCoder.decodeParameter('address', subData[1]);
718
- const oracle = AbiCoder.decodeParameter('address', subData[2]);
719
- const irm = AbiCoder.decodeParameter('address', subData[3]);
720
- const lltv = AbiCoder.decodeParameter('uint256', subData[4]);
721
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]);
722
- const targetRatio = weiToRatioPercentage(weiRatio);
723
- const user = AbiCoder.decodeParameter('address', subData[6]);
735
+ decode: (subData) => {
736
+ const spoke = AbiCoder.decodeParameter('address', subData[0]);
737
+ const owner = AbiCoder.decodeParameter('address', subData[1]);
738
+ const fromAsset = AbiCoder.decodeParameter('address', subData[2]);
739
+ const fromAssetId = Number(AbiCoder.decodeParameter('uint256', subData[3]));
740
+ const toAsset = AbiCoder.decodeParameter('address', subData[4]);
741
+ const toAssetId = Number(AbiCoder.decodeParameter('uint256', subData[5]));
742
+ const amountToSwitch = AbiCoder.decodeParameter('uint256', subData[6]);
724
743
  return {
725
- loanToken,
726
- collToken,
727
- oracle,
728
- irm,
729
- lltv,
730
- targetRatio,
731
- user,
744
+ spoke, owner, fromAsset, fromAssetId, toAsset, toAssetId, amountToSwitch,
732
745
  };
733
746
  },
734
747
  };
735
- export const liquityV2PaybackSubData = {
736
- encode: (market, troveId, boldToken, targetRatio, ratioState) => {
737
- const marketEncoded = AbiCoder.encodeParameter('address', market);
738
- const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
739
- const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
740
- const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
741
- const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
748
+ /**
749
+ ______ ______ .___ ___. .______ ____ ____ ___
750
+ / | / __ \ | \/ | | _ \ \ \ / / |__ \
751
+ | ,----'| | | | | \ / | | |_) | \ \/ / ) |
752
+ | | | | | | | |\/| | | ___/ \ / / /
753
+ | `----.| `--' | | | | | | | \ / / /_
754
+ \______| \______/ |__| |__| | _| \__/ |____|
755
+ */
756
+ export const compoundV2LeverageManagementSubData = {
757
+ encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
742
758
  return [
743
- marketEncoded,
744
- troveIdEncoded,
745
- boldTokenEncoded,
746
- targetRatioEncoded,
747
- ratioStateEncoded,
759
+ new Dec(triggerRepayRatio).mul(1e16).toString(),
760
+ new Dec(triggerBoostRatio).mul(1e16).toString(),
761
+ new Dec(targetBoostRatio).mul(1e16).toString(),
762
+ new Dec(targetRepayRatio).mul(1e16).toString(),
763
+ // @ts-ignore // TODO
764
+ boostEnabled,
748
765
  ];
749
766
  },
750
- decode: (subData) => {
751
- const market = AbiCoder.decodeParameter('address', subData[0]);
752
- const troveId = AbiCoder.decodeParameter('uint256', subData[1]);
753
- const boldToken = AbiCoder.decodeParameter('address', subData[2]);
754
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]);
755
- const ratioState = AbiCoder.decodeParameter('uint8', subData[4]);
767
+ decode(subData) {
768
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[0]);
756
769
  const targetRatio = weiToRatioPercentage(weiRatio);
757
- return {
758
- market, troveId, boldToken, ratioState, targetRatio,
759
- };
770
+ return { targetRatio };
760
771
  },
761
772
  };
762
- export const fluidLeverageManagementSubData = {
763
- encode: (nftId, vault, ratioState, targetRatio) => {
764
- const nftIdEncoded = AbiCoder.encodeParameter('uint256', nftId);
765
- const vaultEncoded = AbiCoder.encodeParameter('address', vault);
766
- const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
767
- const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
768
- const wrapEthEncoded = AbiCoder.encodeParameter('bool', true);
769
- const isRepay = ratioState === RatioState.UNDER;
770
- const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
771
- const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
772
- const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
773
- const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
773
+ export const compoundV2LeverageManagementSubDataWithoutSubProxy = {
774
+ encode(targetRatio, ratioState) {
775
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
776
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
777
+ return [encodedTargetRatio, encodedRatioState];
778
+ },
779
+ decode(subData) {
780
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
781
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
782
+ return { targetRatio, ratioState };
783
+ },
784
+ };
785
+ /**
786
+ ______ ______ .___ ___. .______ ____ ____ ____
787
+ / | / __ \ | \/ | | _ \ \ \ / / |___ \
788
+ | ,----'| | | | | \ / | | |_) | \ \/ / __) |
789
+ | | | | | | | |\/| | | ___/ \ / |__ <
790
+ | `----.| `--' | | | | | | | \ / ___) |
791
+ \______| \______/ |__| |__| | _| \__/ |____/
792
+ */
793
+ export const compoundV3LeverageManagementSubData = {
794
+ encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
774
795
  return [
775
- nftIdEncoded,
776
- vaultEncoded,
777
- ratioStateEncoded,
778
- targetRatioEncoded,
779
- wrapEthEncoded,
780
- collActionTypeEncoded,
781
- debtActionTypeEncoded,
796
+ market,
797
+ baseToken,
798
+ new Dec(triggerRepayRatio).mul(1e16).toString(),
799
+ new Dec(triggerBoostRatio).mul(1e16).toString(),
800
+ new Dec(targetBoostRatio).mul(1e16).toString(),
801
+ new Dec(targetRepayRatio).mul(1e16).toString(),
802
+ // @ts-ignore // TODO
803
+ boostEnabled, isEOA,
782
804
  ];
783
805
  },
784
- decode: (subData) => {
785
- const nftId = AbiCoder.decodeParameter('uint256', subData[0]);
786
- const vault = AbiCoder.decodeParameter('address', subData[1]);
787
- const ratioState = AbiCoder.decodeParameter('uint8', subData[2]);
806
+ decode(subData) {
788
807
  const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]);
789
808
  const targetRatio = weiToRatioPercentage(weiRatio);
809
+ return { targetRatio };
810
+ },
811
+ };
812
+ export const compoundV3LeverageManagementSubDataWithoutSubProxy = {
813
+ encode(market, baseToken, targetRatio, ratioState) {
814
+ const encodedMarket = AbiCoder.encodeParameter('address', market);
815
+ const encodedBaseToken = AbiCoder.encodeParameter('address', baseToken);
816
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
817
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
818
+ return [encodedMarket, encodedBaseToken, encodedTargetRatio, encodedRatioState];
819
+ },
820
+ decode(subData) {
821
+ const market = AbiCoder.decodeParameter('address', subData[0]);
822
+ const baseToken = AbiCoder.decodeParameter('address', subData[1]);
823
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[2]));
824
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[3]);
790
825
  return {
791
- nftId, vault, ratioState, targetRatio,
826
+ market, baseToken, targetRatio, ratioState,
792
827
  };
793
828
  },
794
829
  };
830
+ export const compoundV3L2LeverageManagementSubData = {
831
+ encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
832
+ let subInput = '0x';
833
+ subInput = subInput.concat(market.slice(2));
834
+ subInput = subInput.concat(baseToken.slice(2));
835
+ subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
836
+ .padStart(32, '0'));
837
+ subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
838
+ .padStart(32, '0'));
839
+ subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
840
+ .padStart(32, '0'));
841
+ subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
842
+ .padStart(32, '0'));
843
+ subInput = subInput.concat(boostEnabled ? '01' : '00');
844
+ subInput = subInput.concat(isEOA ? '01' : '00');
845
+ return subInput;
846
+ },
847
+ decode(subData) {
848
+ const ratioWei = AbiCoder.decodeParameter('uint256', subData[3]);
849
+ const targetRatio = weiToRatioPercentage(ratioWei);
850
+ return { targetRatio };
851
+ },
852
+ };
795
853
  export const compoundV3LeverageManagementOnPriceSubData = {
796
854
  encode(market, collToken, baseToken, targetRatio, ratioState, user) {
797
855
  const marketEncoded = AbiCoder.encodeParameter('address', market);
@@ -848,6 +906,97 @@ export const compoundV3CloseSubData = {
848
906
  };
849
907
  },
850
908
  };
909
+ /**
910
+ __________ ___ ______ __ __ ___ .__ __. _______ _______
911
+ | ____\ \ / / / || | | | / \ | \ | | / _____|| ____|
912
+ | |__ \ V / | ,----'| |__| | / ^ \ | \| | | | __ | |__
913
+ | __| > < | | | __ | / /_\ \ | . ` | | | |_ | | __|
914
+ | |____ / . \ | `----.| | | | / _____ \ | |\ | | |__| | | |____
915
+ |_______/__/ \__\ \______||__| |__| /__/ \__\ |__| \__| \______| |_______|
916
+ */
917
+ export const exchangeDcaSubData = {
918
+ encode: (fromToken, toToken, amount, interval) => {
919
+ const sellTokenEncoded = AbiCoder.encodeParameter('address', fromToken);
920
+ const buyTokenEncoded = AbiCoder.encodeParameter('address', toToken);
921
+ const amountEncoded = AbiCoder.encodeParameter('uint256', amount);
922
+ const intervalEncoded = AbiCoder.encodeParameter('uint256', interval);
923
+ return [sellTokenEncoded, buyTokenEncoded, amountEncoded, intervalEncoded];
924
+ },
925
+ decode: (subData, chainId) => {
926
+ const fromToken = AbiCoder.decodeParameter('address', subData[0]).toString();
927
+ const toToken = AbiCoder.decodeParameter('address', subData[1]).toString();
928
+ const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2]).toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
929
+ const interval = AbiCoder.decodeParameter('uint256', subData[3]).toString();
930
+ return {
931
+ fromToken,
932
+ toToken,
933
+ amount,
934
+ interval,
935
+ };
936
+ },
937
+ };
938
+ export const exchangeLimitOrderSubData = {
939
+ encode(fromToken, toToken, amount, targetPrice, goodUntil, orderType) {
940
+ return [
941
+ fromToken,
942
+ toToken,
943
+ amount,
944
+ targetPrice,
945
+ new Dec(goodUntil).toString(),
946
+ new Dec(orderType).toString(),
947
+ ];
948
+ },
949
+ decode: (subData, chainId) => {
950
+ const fromToken = AbiCoder.decodeParameter('address', subData[0]).toString();
951
+ const toToken = AbiCoder.decodeParameter('address', subData[1]).toString();
952
+ const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2]).toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
953
+ return { fromToken, toToken, amount };
954
+ },
955
+ };
956
+ export const exchangeLimitOrderSubDataWithoutSubProxy = {
957
+ encode(fromToken, toToken, amount) {
958
+ return [
959
+ AbiCoder.encodeParameter('address', fromToken),
960
+ AbiCoder.encodeParameter('address', toToken),
961
+ AbiCoder.encodeParameter('uint256', amount),
962
+ ];
963
+ },
964
+ decode: (subData, chainId) => {
965
+ const fromToken = AbiCoder.decodeParameter('address', subData[0]).toString();
966
+ const toToken = AbiCoder.decodeParameter('address', subData[1]).toString();
967
+ const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2]).toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
968
+ return { fromToken, toToken, amount };
969
+ },
970
+ };
971
+ /**
972
+ _______..______ ___ .______ __ ___
973
+ / || _ \ / \ | _ \ | |/ /
974
+ | (----`| |_) | / ^ \ | |_) | | ' /
975
+ \ \ | ___/ / /_\ \ | / | <
976
+ .----) | | | / _____ \ | |\ \----.| . \
977
+ |_______/ | _| /__/ \__\ | _| `._____||__|\__\
978
+ */
979
+ export const sparkLeverageManagementSubData = {
980
+ decode(subData) {
981
+ const ratioWei = AbiCoder.decodeParameter('uint256', subData[0]);
982
+ const targetRatio = weiToRatioPercentage(ratioWei);
983
+ return { targetRatio };
984
+ },
985
+ };
986
+ export const sparkLeverageManagementSubDataWithoutSubProxy = {
987
+ encode(targetRatio, ratioState) {
988
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
989
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
990
+ const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
991
+ const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
992
+ return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
993
+ },
994
+ decode(subData) {
995
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
996
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
997
+ return { targetRatio, ratioState };
998
+ },
999
+ };
851
1000
  export const sparkCloseGenericSubData = {
852
1001
  encode(collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, user) {
853
1002
  const encodedColl = AbiCoder.encodeParameter('address', collAsset);
@@ -880,6 +1029,155 @@ export const sparkCloseGenericSubData = {
880
1029
  };
881
1030
  },
882
1031
  };
1032
+ export const sparkLeverageManagementOnPriceSubData = {
1033
+ encode(collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio) {
1034
+ const encodedColl = AbiCoder.encodeParameter('address', collAsset);
1035
+ const encodedCollId = AbiCoder.encodeParameter('uint16', collAssetId);
1036
+ const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
1037
+ const encodedDebtId = AbiCoder.encodeParameter('uint16', debtAssetId);
1038
+ const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
1039
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1040
+ const useOnBehalfEncoded = AbiCoder.encodeParameter('bool', false);
1041
+ return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedMarket, encodedTargetRatio, useOnBehalfEncoded];
1042
+ },
1043
+ decode(subData) {
1044
+ const collAsset = AbiCoder.decodeParameter('address', subData[0]);
1045
+ const collAssetId = Number(AbiCoder.decodeParameter('uint16', subData[1]));
1046
+ const debtAsset = AbiCoder.decodeParameter('address', subData[2]);
1047
+ const debtAssetId = Number(AbiCoder.decodeParameter('uint16', subData[3]));
1048
+ const marketAddr = AbiCoder.decodeParameter('address', subData[4]);
1049
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]);
1050
+ const targetRatio = weiToRatioPercentage(weiRatio);
1051
+ return {
1052
+ collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio,
1053
+ };
1054
+ },
1055
+ };
1056
+ /**
1057
+ ______ .______ ____ ____ __ __ _______. _______
1058
+ / || _ \ \ \ / / | | | | / || \
1059
+ | ,----'| |_) | \ \/ / | | | | | (----`| .--. |
1060
+ | | | / \ / | | | | \ \ | | | |
1061
+ | `----.| |\ \----. \ / | `--' | .----) | | '--' |
1062
+ \______|| _| `._____| \__/ \______/ |_______/ |_______/
1063
+ */
1064
+ export const crvUSDLeverageManagementSubData = {
1065
+ encode: (controllerAddr, ratioState, targetRatio, collTokenAddr, crvUSDAddr) => {
1066
+ const controllerAddrEncoded = AbiCoder.encodeParameter('address', controllerAddr);
1067
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
1068
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1069
+ const collTokenAddrEncoded = AbiCoder.encodeParameter('address', collTokenAddr);
1070
+ const crvUSDAddrEncoded = AbiCoder.encodeParameter('address', crvUSDAddr);
1071
+ return [controllerAddrEncoded, ratioStateEncoded, targetRatioEncoded, collTokenAddrEncoded, crvUSDAddrEncoded];
1072
+ },
1073
+ decode: (subData) => {
1074
+ const controller = AbiCoder.decodeParameter('address', subData[0]);
1075
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[2]);
1076
+ const targetRatio = weiToRatioPercentage(weiRatio);
1077
+ return { controller, targetRatio };
1078
+ },
1079
+ };
1080
+ export const crvUSDPaybackSubData = {
1081
+ encode: (controllerAddr, addressToPullTokensFrom, positionOwner, paybackAmount, crvUSDAddr) => {
1082
+ const controllerAddrEncoded = AbiCoder.encodeParameter('address', controllerAddr);
1083
+ const addressToPullTokensFromEncoded = AbiCoder.encodeParameter('address', addressToPullTokensFrom);
1084
+ const positionOwnerEncoded = AbiCoder.encodeParameter('address', positionOwner);
1085
+ const paybackAmountEncoded = AbiCoder.encodeParameter('uint256', toWei(paybackAmount, 'ether'));
1086
+ const crvUSDAddrEncoded = AbiCoder.encodeParameter('address', crvUSDAddr);
1087
+ return [
1088
+ controllerAddrEncoded,
1089
+ addressToPullTokensFromEncoded,
1090
+ positionOwnerEncoded,
1091
+ paybackAmountEncoded,
1092
+ crvUSDAddrEncoded,
1093
+ ];
1094
+ },
1095
+ decode: (subData) => {
1096
+ const controller = AbiCoder.decodeParameter('address', subData[0]);
1097
+ const addressToPullTokensFrom = AbiCoder.decodeParameter('address', subData[1]);
1098
+ const positionOwner = AbiCoder.decodeParameter('address', subData[2]);
1099
+ const weiPaybackAmount = AbiCoder.decodeParameter('uint256', subData[3]);
1100
+ const paybackAmount = fromWei(weiPaybackAmount, 'ether');
1101
+ return {
1102
+ controller,
1103
+ addressToPullTokensFrom,
1104
+ positionOwner,
1105
+ paybackAmount,
1106
+ };
1107
+ },
1108
+ };
1109
+ /**
1110
+ .___ ___. ______ .______ .______ __ __ ______
1111
+ | \/ | / __ \ | _ \ | _ \ | | | | / __ \
1112
+ | \ / | | | | | | |_) | | |_) | | |__| | | | | |
1113
+ | |\/| | | | | | | / | ___/ | __ | | | | |
1114
+ | | | | | `--' | | |\ \----.| | | | | | | `--' |
1115
+ |__| |__| \______/ | _| `._____|| _| |__| |__| \______/
1116
+ */
1117
+ export const morphoBlueLeverageManagementSubData = {
1118
+ encode: (loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA) => {
1119
+ const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
1120
+ const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
1121
+ const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
1122
+ const irmEncoded = AbiCoder.encodeParameter('address', irm);
1123
+ const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
1124
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
1125
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1126
+ const userEncoded = AbiCoder.encodeParameter('address', user);
1127
+ const isEOAEncoded = AbiCoder.encodeParameter('bool', isEOA);
1128
+ return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, ratioStateEncoded, targetRatioEncoded, userEncoded, isEOAEncoded];
1129
+ },
1130
+ decode: (subData) => {
1131
+ const loanToken = AbiCoder.decodeParameter('address', subData[0]);
1132
+ const collToken = AbiCoder.decodeParameter('address', subData[1]);
1133
+ const oracle = AbiCoder.decodeParameter('address', subData[2]);
1134
+ const irm = AbiCoder.decodeParameter('address', subData[3]);
1135
+ const lltv = AbiCoder.decodeParameter('uint256', subData[4]);
1136
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[6]);
1137
+ const user = AbiCoder.decodeParameter('address', subData[7]);
1138
+ const targetRatio = weiToRatioPercentage(weiRatio);
1139
+ return {
1140
+ loanToken,
1141
+ collToken,
1142
+ oracle,
1143
+ irm,
1144
+ lltv,
1145
+ user,
1146
+ targetRatio,
1147
+ };
1148
+ },
1149
+ };
1150
+ export const morphoBlueLeverageManagementOnPriceSubData = {
1151
+ encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user) {
1152
+ const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
1153
+ const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
1154
+ const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
1155
+ const irmEncoded = AbiCoder.encodeParameter('address', irm);
1156
+ const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
1157
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1158
+ const userEncoded = AbiCoder.encodeParameter('address', user);
1159
+ return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, targetRatioEncoded, userEncoded];
1160
+ },
1161
+ decode(subData) {
1162
+ const loanToken = AbiCoder.decodeParameter('address', subData[0]);
1163
+ const collToken = AbiCoder.decodeParameter('address', subData[1]);
1164
+ const oracle = AbiCoder.decodeParameter('address', subData[2]);
1165
+ const irm = AbiCoder.decodeParameter('address', subData[3]);
1166
+ const lltv = AbiCoder.decodeParameter('uint256', subData[4]);
1167
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]);
1168
+ const targetRatio = weiToRatioPercentage(weiRatio);
1169
+ const user = AbiCoder.decodeParameter('address', subData[6]);
1170
+ return {
1171
+ loanToken,
1172
+ collToken,
1173
+ oracle,
1174
+ irm,
1175
+ lltv,
1176
+ targetRatio,
1177
+ user,
1178
+ };
1179
+ },
1180
+ };
883
1181
  export const morphoBlueCloseOnPriceSubData = {
884
1182
  encode(loanToken, collToken, oracle, irm, lltv, user, closeType) {
885
1183
  const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
@@ -910,27 +1208,44 @@ export const morphoBlueCloseOnPriceSubData = {
910
1208
  };
911
1209
  },
912
1210
  };
913
- export const sparkLeverageManagementOnPriceSubData = {
914
- encode(collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio) {
915
- const encodedColl = AbiCoder.encodeParameter('address', collAsset);
916
- const encodedCollId = AbiCoder.encodeParameter('uint16', collAssetId);
917
- const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
918
- const encodedDebtId = AbiCoder.encodeParameter('uint16', debtAssetId);
919
- const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
920
- const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
921
- const useOnBehalfEncoded = AbiCoder.encodeParameter('bool', false);
922
- return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedMarket, encodedTargetRatio, useOnBehalfEncoded];
1211
+ /**
1212
+ _______ __ __ __ __ _______
1213
+ | ____|| | | | | | | | | \
1214
+ | |__ | | | | | | | | | .--. |
1215
+ | __| | | | | | | | | | | | |
1216
+ | | | `----.| `--' | | | | '--' |
1217
+ |__| |_______| \______/ |__| |_______/
1218
+ */
1219
+ export const fluidLeverageManagementSubData = {
1220
+ encode: (nftId, vault, ratioState, targetRatio) => {
1221
+ const nftIdEncoded = AbiCoder.encodeParameter('uint256', nftId);
1222
+ const vaultEncoded = AbiCoder.encodeParameter('address', vault);
1223
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
1224
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1225
+ const wrapEthEncoded = AbiCoder.encodeParameter('bool', true);
1226
+ const isRepay = ratioState === RatioState.UNDER;
1227
+ const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
1228
+ const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
1229
+ const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
1230
+ const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
1231
+ return [
1232
+ nftIdEncoded,
1233
+ vaultEncoded,
1234
+ ratioStateEncoded,
1235
+ targetRatioEncoded,
1236
+ wrapEthEncoded,
1237
+ collActionTypeEncoded,
1238
+ debtActionTypeEncoded,
1239
+ ];
923
1240
  },
924
- decode(subData) {
925
- const collAsset = AbiCoder.decodeParameter('address', subData[0]);
926
- const collAssetId = Number(AbiCoder.decodeParameter('uint16', subData[1]));
927
- const debtAsset = AbiCoder.decodeParameter('address', subData[2]);
928
- const debtAssetId = Number(AbiCoder.decodeParameter('uint16', subData[3]));
929
- const marketAddr = AbiCoder.decodeParameter('address', subData[4]);
930
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]);
1241
+ decode: (subData) => {
1242
+ const nftId = AbiCoder.decodeParameter('uint256', subData[0]);
1243
+ const vault = AbiCoder.decodeParameter('address', subData[1]);
1244
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[2]);
1245
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]);
931
1246
  const targetRatio = weiToRatioPercentage(weiRatio);
932
1247
  return {
933
- collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio,
1248
+ nftId, vault, ratioState, targetRatio,
934
1249
  };
935
1250
  },
936
1251
  };