@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.
- package/cjs/automation/private/StrategiesAutomation.d.ts +2 -0
- package/cjs/automation/private/StrategiesAutomation.js +10 -1
- package/cjs/automation/private/StrategiesAutomation.test.js +25 -0
- package/cjs/constants/index.d.ts +1 -0
- package/cjs/constants/index.js +62 -1
- package/cjs/services/strategiesService.js +104 -0
- package/cjs/services/strategySubService.d.ts +11 -0
- package/cjs/services/strategySubService.js +61 -1
- package/cjs/services/strategySubService.test.js +96 -0
- package/cjs/services/subDataService.d.ts +333 -137
- package/cjs/services/subDataService.js +853 -537
- package/cjs/services/subDataService.test.js +157 -0
- package/cjs/services/triggerService.d.ts +29 -0
- package/cjs/services/triggerService.js +53 -1
- package/cjs/services/triggerService.test.js +84 -0
- package/cjs/services/utils.d.ts +1 -1
- package/cjs/services/utils.js +10 -2
- package/cjs/types/enums.d.ts +17 -3
- package/cjs/types/enums.js +14 -0
- package/cjs/types/index.d.ts +22 -1
- package/esm/automation/private/StrategiesAutomation.d.ts +2 -0
- package/esm/automation/private/StrategiesAutomation.js +10 -1
- package/esm/automation/private/StrategiesAutomation.test.js +25 -0
- package/esm/constants/index.d.ts +1 -0
- package/esm/constants/index.js +61 -0
- package/esm/services/strategiesService.js +105 -1
- package/esm/services/strategySubService.d.ts +11 -0
- package/esm/services/strategySubService.js +60 -0
- package/esm/services/strategySubService.test.js +97 -1
- package/esm/services/subDataService.d.ts +333 -137
- package/esm/services/subDataService.js +852 -537
- package/esm/services/subDataService.test.js +157 -0
- package/esm/services/triggerService.d.ts +29 -0
- package/esm/services/triggerService.js +52 -0
- package/esm/services/triggerService.test.js +85 -1
- package/esm/services/utils.d.ts +1 -1
- package/esm/services/utils.js +10 -2
- package/esm/types/enums.d.ts +17 -3
- package/esm/types/enums.js +14 -0
- package/esm/types/index.d.ts +22 -1
- package/package.json +2 -2
- package/src/automation/private/StrategiesAutomation.test.ts +40 -0
- package/src/automation/private/StrategiesAutomation.ts +11 -0
- package/src/constants/index.ts +62 -0
- package/src/services/strategiesService.ts +119 -1
- package/src/services/strategySubService.test.ts +124 -0
- package/src/services/strategySubService.ts +196 -0
- package/src/services/subDataService.test.ts +172 -0
- package/src/services/subDataService.ts +1100 -764
- package/src/services/triggerService.test.ts +97 -0
- package/src/services/triggerService.ts +74 -1
- package/src/services/utils.ts +15 -4
- package/src/types/enums.ts +14 -0
- package/src/types/index.ts +26 -0
|
@@ -11,10 +11,82 @@ import {
|
|
|
11
11
|
ChainId, CollActionType, DebtActionType, RatioState,
|
|
12
12
|
} from '../types/enums';
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { EMPTY_SLOT, ZERO_ADDRESS } from '../constants';
|
|
15
15
|
|
|
16
16
|
import { compareAddresses, ratioPercentageToWei, weiToRatioPercentage } from './utils';
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
_______ _______ .______ .______ _______ ______ ___ .___________. _______ _______
|
|
20
|
+
| \ | ____|| _ \ | _ \ | ____| / | / \ | || ____|| \
|
|
21
|
+
| .--. || |__ | |_) | | |_) | | |__ | ,----' / ^ \ `---| |----`| |__ | .--. |
|
|
22
|
+
| | | || __| | ___/ | / | __| | | / /_\ \ | | | __| | | | |
|
|
23
|
+
| '--' || |____ | | | |\ \----.| |____ | `----./ _____ \ | | | |____ | '--' |
|
|
24
|
+
|_______/ |_______|| _| | _| `._____||_______| \______/__/ \__\ |__| |_______||_______/
|
|
25
|
+
*/
|
|
26
|
+
export const morphoAaveV2LeverageManagementSubData = {
|
|
27
|
+
encode(
|
|
28
|
+
triggerRepayRatio: number,
|
|
29
|
+
triggerBoostRatio: number,
|
|
30
|
+
targetBoostRatio: number,
|
|
31
|
+
targetRepayRatio: number,
|
|
32
|
+
boostEnabled: boolean,
|
|
33
|
+
): SubData {
|
|
34
|
+
return [
|
|
35
|
+
ratioPercentageToWei(triggerRepayRatio),
|
|
36
|
+
ratioPercentageToWei(triggerBoostRatio),
|
|
37
|
+
ratioPercentageToWei(targetBoostRatio),
|
|
38
|
+
ratioPercentageToWei(targetRepayRatio),
|
|
39
|
+
// @ts-ignore
|
|
40
|
+
boostEnabled,
|
|
41
|
+
];
|
|
42
|
+
},
|
|
43
|
+
decode(subData: SubData): { targetRatio: number } {
|
|
44
|
+
const ratioWei = AbiCoder.decodeParameter('uint128', subData[1]) as any as string;
|
|
45
|
+
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
46
|
+
|
|
47
|
+
return { targetRatio };
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
export const cBondsRebondSubData = {
|
|
51
|
+
encode(bondId: number | string): SubData {
|
|
52
|
+
const bondIdEncoded = AbiCoder.encodeParameter('uint256', bondId);
|
|
53
|
+
return [bondIdEncoded];
|
|
54
|
+
},
|
|
55
|
+
decode(subData: SubData): { bondId: string } {
|
|
56
|
+
const bondId = AbiCoder.decodeParameter('uint256', subData[1])!.toString();
|
|
57
|
+
return { bondId };
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
export const liquityPaybackUsingChickenBondSubData = {
|
|
61
|
+
/**
|
|
62
|
+
* @param sourceId bondId or subId
|
|
63
|
+
* @param sourceType 0 for bond, 1 for subId
|
|
64
|
+
* @param chainId
|
|
65
|
+
*/
|
|
66
|
+
encode: (sourceId: string, sourceType: number, chainId: ChainId = ChainId.Ethereum): SubData => {
|
|
67
|
+
const sourceIdEncoded = AbiCoder.encodeParameter('uint256', sourceId);
|
|
68
|
+
const sourceTypeEncoded = AbiCoder.encodeParameter('uint256', sourceType);
|
|
69
|
+
const lusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('LUSD', chainId).address);
|
|
70
|
+
const bLusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('bLUSD', chainId).address);
|
|
71
|
+
|
|
72
|
+
return [sourceIdEncoded, sourceTypeEncoded, lusdAddressEncoded, bLusdAddressEncoded];
|
|
73
|
+
},
|
|
74
|
+
decode: (subData: SubData) => {
|
|
75
|
+
const sourceId = AbiCoder.decodeParameter('uint256', subData[0])!.toString();
|
|
76
|
+
const sourceType = AbiCoder.decodeParameter('uint256', subData[1])!.toString();
|
|
77
|
+
|
|
78
|
+
return { sourceId, sourceType };
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
.___ ___. ___ __ ___ _______ .______
|
|
84
|
+
| \/ | / \ | |/ / | ____|| _ \
|
|
85
|
+
| \ / | / ^ \ | ' / | |__ | |_) |
|
|
86
|
+
| |\/| | / /_\ \ | < | __| | /
|
|
87
|
+
| | | | / _____ \ | . \ | |____ | |\ \----.
|
|
88
|
+
|__| |__| /__/ \__\ |__|\__\ |_______|| _| `._____|
|
|
89
|
+
*/
|
|
18
90
|
export const makerRepayFromSavingsSubData = {
|
|
19
91
|
encode(
|
|
20
92
|
vaultId: number,
|
|
@@ -49,16 +121,6 @@ export const makerRepayFromSavingsSubData = {
|
|
|
49
121
|
};
|
|
50
122
|
},
|
|
51
123
|
};
|
|
52
|
-
|
|
53
|
-
export const liquityRepayFromSavingsSubData = {
|
|
54
|
-
decode(subData: SubData): { targetRatio: number } {
|
|
55
|
-
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
56
|
-
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
57
|
-
|
|
58
|
-
return { targetRatio };
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
|
|
62
124
|
export const makerCloseSubData = {
|
|
63
125
|
encode(
|
|
64
126
|
vaultId: number,
|
|
@@ -94,7 +156,6 @@ export const makerCloseSubData = {
|
|
|
94
156
|
};
|
|
95
157
|
},
|
|
96
158
|
};
|
|
97
|
-
|
|
98
159
|
export const makerLeverageManagementSubData = {
|
|
99
160
|
decode: (subData:SubData) => {
|
|
100
161
|
const vaultId = +AbiCoder.decodeParameter('uint256', subData[0])!.toString();
|
|
@@ -103,7 +164,6 @@ export const makerLeverageManagementSubData = {
|
|
|
103
164
|
return { vaultId, targetRatio };
|
|
104
165
|
},
|
|
105
166
|
};
|
|
106
|
-
|
|
107
167
|
export const makerLeverageManagementWithoutSubProxy = {
|
|
108
168
|
encode(
|
|
109
169
|
vaultId: number,
|
|
@@ -124,6 +184,22 @@ export const makerLeverageManagementWithoutSubProxy = {
|
|
|
124
184
|
},
|
|
125
185
|
};
|
|
126
186
|
|
|
187
|
+
/**
|
|
188
|
+
__ __ ______ __ __ __ .___________.____ ____ ____ ____ __
|
|
189
|
+
| | | | / __ \ | | | | | | | |\ \ / / \ \ / / /_ |
|
|
190
|
+
| | | | | | | | | | | | | | `---| |----` \ \/ / \ \/ / | |
|
|
191
|
+
| | | | | | | | | | | | | | | | \_ _/ \ / | |
|
|
192
|
+
| `----.| | | `--' '--.| `--' | | | | | | | \ / | |
|
|
193
|
+
|_______||__| \_____\_____\\______/ |__| |__| |__| \__/ |_|
|
|
194
|
+
*/
|
|
195
|
+
export const liquityRepayFromSavingsSubData = {
|
|
196
|
+
decode(subData: SubData): { targetRatio: number } {
|
|
197
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
198
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
199
|
+
|
|
200
|
+
return { targetRatio };
|
|
201
|
+
},
|
|
202
|
+
};
|
|
127
203
|
export const liquityLeverageManagementSubData = {
|
|
128
204
|
decode: (subData:SubData) => {
|
|
129
205
|
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
@@ -131,7 +207,22 @@ export const liquityLeverageManagementSubData = {
|
|
|
131
207
|
return { targetRatio };
|
|
132
208
|
},
|
|
133
209
|
};
|
|
210
|
+
export const liquityLeverageManagementSubDataWithoutSubProxy = {
|
|
211
|
+
encode(
|
|
212
|
+
targetRatio: number,
|
|
213
|
+
ratioState: RatioState,
|
|
214
|
+
): SubData {
|
|
215
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
216
|
+
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
217
|
+
return [encodedTargetRatio, encodedRatioState];
|
|
218
|
+
},
|
|
219
|
+
decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
|
|
220
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
|
|
221
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
|
|
134
222
|
|
|
223
|
+
return { targetRatio, ratioState };
|
|
224
|
+
},
|
|
225
|
+
};
|
|
135
226
|
export const liquityCloseSubData = {
|
|
136
227
|
encode(
|
|
137
228
|
closeToAssetAddr: EthereumAddress,
|
|
@@ -158,262 +249,260 @@ export const liquityCloseSubData = {
|
|
|
158
249
|
return { closeToAssetAddr, debtAddr };
|
|
159
250
|
},
|
|
160
251
|
};
|
|
252
|
+
export const liquityDsrPaybackSubData = {
|
|
253
|
+
encode: (targetRatio: number) => {
|
|
254
|
+
const daiAddress = getAssetInfo('DAI').address;
|
|
255
|
+
const lusdAddress = getAssetInfo('LUSD').address;
|
|
161
256
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
targetBoostRatio: number,
|
|
167
|
-
targetRepayRatio: number,
|
|
168
|
-
boostEnabled: boolean,
|
|
169
|
-
): SubData {
|
|
170
|
-
return [
|
|
171
|
-
new Dec(triggerRepayRatio).mul(1e16).toString(),
|
|
172
|
-
new Dec(triggerBoostRatio).mul(1e16).toString(),
|
|
173
|
-
new Dec(targetBoostRatio).mul(1e16).toString(),
|
|
174
|
-
new Dec(targetRepayRatio).mul(1e16).toString(),
|
|
175
|
-
// @ts-ignore // TODO
|
|
176
|
-
boostEnabled,
|
|
177
|
-
];
|
|
178
|
-
},
|
|
179
|
-
decode(subData: SubData): { targetRatio: number } {
|
|
180
|
-
const ratioWei = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
181
|
-
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
257
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', RatioState.UNDER);
|
|
258
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
259
|
+
const daiAddressEncoded = AbiCoder.encodeParameter('address', daiAddress);
|
|
260
|
+
const lusdAddressEncoded = AbiCoder.encodeParameter('address', lusdAddress);
|
|
182
261
|
|
|
262
|
+
return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, lusdAddressEncoded];
|
|
263
|
+
},
|
|
264
|
+
decode: (subData: SubData) => {
|
|
265
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
266
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
183
267
|
return { targetRatio };
|
|
184
268
|
},
|
|
185
269
|
};
|
|
270
|
+
export const liquityDsrSupplySubData = {
|
|
271
|
+
encode: (targetRatio: number) => {
|
|
272
|
+
const daiAddress = getAssetInfo('DAI').address;
|
|
273
|
+
const wethAddress = getAssetInfo('WETH').address;
|
|
186
274
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
const
|
|
190
|
-
const
|
|
275
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', RatioState.UNDER);
|
|
276
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
277
|
+
const daiAddressEncoded = AbiCoder.encodeParameter('address', daiAddress);
|
|
278
|
+
const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
|
|
191
279
|
|
|
280
|
+
return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, wethAddressEncoded];
|
|
281
|
+
},
|
|
282
|
+
decode: (subData: SubData) => {
|
|
283
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
284
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
192
285
|
return { targetRatio };
|
|
193
286
|
},
|
|
194
287
|
};
|
|
288
|
+
export const liquityDebtInFrontRepaySubData = {
|
|
289
|
+
encode: (targetRatioIncrease: number) => {
|
|
290
|
+
const wethAddress = getAssetInfo('WETH').address;
|
|
291
|
+
const lusdAddress = getAssetInfo('LUSD').address;
|
|
195
292
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
user: EthereumAddress,
|
|
202
|
-
isGeneric: boolean,
|
|
203
|
-
): SubData {
|
|
204
|
-
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
205
|
-
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
293
|
+
const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
|
|
294
|
+
const lusdAddressEncoded = AbiCoder.encodeParameter('address', lusdAddress);
|
|
295
|
+
const targetRatioIncreaseEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatioIncrease));
|
|
296
|
+
const withdrawIdEncoded = AbiCoder.encodeParameter('uint8', 1); // withdraw - 1
|
|
297
|
+
const paybackIdEncoded = AbiCoder.encodeParameter('uint8', 0); // payback - 0
|
|
206
298
|
|
|
207
|
-
|
|
208
|
-
const encodedMarket = AbiCoder.encodeParameter('address', market);
|
|
209
|
-
const encodedUser = AbiCoder.encodeParameter('address', user);
|
|
210
|
-
return [encodedTargetRatio, encodedRatioState, encodedMarket, encodedUser];
|
|
211
|
-
}
|
|
212
|
-
const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
|
|
213
|
-
const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
|
|
214
|
-
return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
|
|
299
|
+
return [wethAddressEncoded, lusdAddressEncoded, targetRatioIncreaseEncoded, withdrawIdEncoded, paybackIdEncoded];
|
|
215
300
|
},
|
|
216
|
-
decode(subData: SubData)
|
|
217
|
-
const
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
return { targetRatio, ratioState };
|
|
301
|
+
decode: (subData: SubData) => {
|
|
302
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[2]) as any as string;
|
|
303
|
+
const targetRatioIncrease = weiToRatioPercentage(weiRatio);
|
|
304
|
+
return { targetRatioIncrease };
|
|
221
305
|
},
|
|
222
306
|
};
|
|
223
307
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
308
|
+
/**
|
|
309
|
+
* __ __ ______ __ __ __ .___________.____ ____ ____ ____ ___
|
|
310
|
+
| | | | / __ \ | | | | | | | |\ \ / / \ \ / / |__ \
|
|
311
|
+
| | | | | | | | | | | | | | `---| |----` \ \/ / \ \/ / ) |
|
|
312
|
+
| | | | | | | | | | | | | | | | \_ _/ \ / / /
|
|
313
|
+
| `----.| | | `--' '--.| `--' | | | | | | | \ / / /_
|
|
314
|
+
|_______||__| \_____\_____\\______/ |__| |__| |__| \__/ |____|
|
|
315
|
+
*/
|
|
316
|
+
export const liquityV2LeverageManagementSubData = {
|
|
317
|
+
encode: (
|
|
318
|
+
market: EthereumAddress,
|
|
319
|
+
troveId: string,
|
|
320
|
+
collToken: EthereumAddress,
|
|
321
|
+
boldToken: EthereumAddress,
|
|
322
|
+
ratioState: RatioState,
|
|
231
323
|
targetRatio: number,
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
const
|
|
235
|
-
const
|
|
236
|
-
const
|
|
237
|
-
const
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
const
|
|
324
|
+
) => {
|
|
325
|
+
const marketEncoded = AbiCoder.encodeParameter('address', market);
|
|
326
|
+
const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
|
|
327
|
+
const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
|
|
328
|
+
const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
|
|
329
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
|
|
330
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
331
|
+
|
|
332
|
+
const isRepay = ratioState === RatioState.UNDER;
|
|
333
|
+
const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
|
|
334
|
+
const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
|
|
335
|
+
|
|
336
|
+
const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
|
|
337
|
+
const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
|
|
241
338
|
|
|
242
339
|
return [
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
340
|
+
marketEncoded,
|
|
341
|
+
troveIdEncoded,
|
|
342
|
+
collTokenEncoded,
|
|
343
|
+
boldTokenEncoded,
|
|
344
|
+
ratioStateEncoded,
|
|
345
|
+
targetRatioEncoded,
|
|
346
|
+
collActionTypeEncoded,
|
|
347
|
+
debtActionTypeEncoded,
|
|
250
348
|
];
|
|
251
349
|
},
|
|
252
|
-
decode(subData: SubData)
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
owner: EthereumAddress,
|
|
260
|
-
} {
|
|
261
|
-
const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
262
|
-
const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
|
|
263
|
-
const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
264
|
-
const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
|
|
265
|
-
const marketAddr = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
|
|
266
|
-
|
|
267
|
-
const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]) as unknown as string;
|
|
350
|
+
decode: (subData: SubData) => {
|
|
351
|
+
const market = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
352
|
+
const troveId = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
353
|
+
const collToken = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
|
|
354
|
+
const boldToken = AbiCoder.decodeParameter('address', subData[3]) as any as EthereumAddress;
|
|
355
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[4]) as any as RatioState;
|
|
356
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]) as any as string;
|
|
268
357
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
269
358
|
|
|
270
|
-
const owner = AbiCoder.decodeParameter('address', subData[6]) as unknown as EthereumAddress;
|
|
271
|
-
|
|
272
359
|
return {
|
|
273
|
-
|
|
274
|
-
collAssetId,
|
|
275
|
-
debtAsset,
|
|
276
|
-
debtAssetId,
|
|
277
|
-
marketAddr,
|
|
278
|
-
targetRatio,
|
|
279
|
-
owner,
|
|
360
|
+
market, troveId, collToken, boldToken, ratioState, targetRatio,
|
|
280
361
|
};
|
|
281
362
|
},
|
|
282
363
|
};
|
|
283
|
-
|
|
284
|
-
export const aaveV3CloseGenericSubData = {
|
|
364
|
+
export const liquityV2CloseSubData = {
|
|
285
365
|
encode(
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
366
|
+
market: EthereumAddress,
|
|
367
|
+
troveId: string,
|
|
368
|
+
collToken: EthereumAddress,
|
|
369
|
+
boldToken: EthereumAddress,
|
|
290
370
|
closeType: CloseStrategyType,
|
|
291
|
-
marketAddr: EthereumAddress,
|
|
292
|
-
user: EthereumAddress,
|
|
293
371
|
): SubData {
|
|
294
|
-
const
|
|
295
|
-
const
|
|
296
|
-
const
|
|
297
|
-
const
|
|
298
|
-
const
|
|
299
|
-
const
|
|
300
|
-
const
|
|
372
|
+
const marketEncoded = AbiCoder.encodeParameter('address', market);
|
|
373
|
+
const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
|
|
374
|
+
const collAddrEncoded = AbiCoder.encodeParameter('address', collToken);
|
|
375
|
+
const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
|
|
376
|
+
const wethAddress = getAssetInfo('WETH').address;
|
|
377
|
+
const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
|
|
378
|
+
const gasCompensation = new Dec('0.0375').mul(1e18).toString();
|
|
379
|
+
const gasCompensationEncoded = AbiCoder.encodeParameter('uint256', gasCompensation);
|
|
380
|
+
const closeTypeEncoded = AbiCoder.encodeParameter('uint8', closeType);
|
|
301
381
|
|
|
302
382
|
return [
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
383
|
+
marketEncoded,
|
|
384
|
+
troveIdEncoded,
|
|
385
|
+
collAddrEncoded,
|
|
386
|
+
boldTokenEncoded,
|
|
387
|
+
wethAddressEncoded,
|
|
388
|
+
gasCompensationEncoded,
|
|
389
|
+
closeTypeEncoded,
|
|
310
390
|
];
|
|
311
391
|
},
|
|
312
|
-
|
|
313
392
|
decode(subData: SubData): {
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
393
|
+
market: EthereumAddress,
|
|
394
|
+
troveId: string,
|
|
395
|
+
collToken: EthereumAddress,
|
|
396
|
+
boldToken: EthereumAddress,
|
|
318
397
|
closeType: CloseStrategyType,
|
|
319
|
-
marketAddr: EthereumAddress,
|
|
320
|
-
owner: EthereumAddress,
|
|
321
398
|
} {
|
|
322
|
-
const
|
|
323
|
-
const
|
|
324
|
-
const
|
|
325
|
-
const
|
|
326
|
-
|
|
327
|
-
const
|
|
328
|
-
const owner = AbiCoder.decodeParameter('address', subData[6]) as unknown as EthereumAddress;
|
|
399
|
+
const market = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
400
|
+
const troveId = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
401
|
+
const collToken = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
|
|
402
|
+
const boldToken = AbiCoder.decodeParameter('address', subData[3]) as any as EthereumAddress;
|
|
403
|
+
// skip wethAddress and gasCompensation
|
|
404
|
+
const closeType = AbiCoder.decodeParameter('uint8', subData[6]) as any as CloseStrategyType;
|
|
329
405
|
|
|
330
406
|
return {
|
|
331
|
-
|
|
407
|
+
market, troveId, collToken, boldToken, closeType,
|
|
332
408
|
};
|
|
333
409
|
},
|
|
334
410
|
};
|
|
335
|
-
|
|
336
|
-
export const aaveV3CollateralSwitchSubData = {
|
|
411
|
+
export const liquityV2LeverageManagementOnPriceSubData = {
|
|
337
412
|
encode(
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
useOnBehalf: boolean = false,
|
|
413
|
+
market: EthereumAddress,
|
|
414
|
+
troveId: string,
|
|
415
|
+
collToken: EthereumAddress,
|
|
416
|
+
boldToken: EthereumAddress,
|
|
417
|
+
targetRatio: number,
|
|
418
|
+
isRepayOnPrice: boolean,
|
|
345
419
|
): SubData {
|
|
346
|
-
const
|
|
347
|
-
const
|
|
348
|
-
const
|
|
349
|
-
const
|
|
350
|
-
const
|
|
351
|
-
|
|
352
|
-
const
|
|
420
|
+
const encodedMarket = AbiCoder.encodeParameter('address', market);
|
|
421
|
+
const encodedTroveId = AbiCoder.encodeParameter('uint256', troveId);
|
|
422
|
+
const encodedCollToken = AbiCoder.encodeParameter('address', collToken);
|
|
423
|
+
const encodedBoldToken = AbiCoder.encodeParameter('address', boldToken);
|
|
424
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
425
|
+
|
|
426
|
+
const collActionType = isRepayOnPrice ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
|
|
427
|
+
const debtActionType = isRepayOnPrice ? DebtActionType.PAYBACK : DebtActionType.BORROW;
|
|
428
|
+
|
|
429
|
+
const encodedCollActionType = AbiCoder.encodeParameter('uint8', collActionType);
|
|
430
|
+
const encodedDebtActionType = AbiCoder.encodeParameter('uint8', debtActionType);
|
|
353
431
|
|
|
354
432
|
return [
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
433
|
+
encodedMarket,
|
|
434
|
+
encodedTroveId,
|
|
435
|
+
encodedCollToken,
|
|
436
|
+
encodedBoldToken,
|
|
437
|
+
encodedTargetRatio,
|
|
438
|
+
encodedCollActionType,
|
|
439
|
+
encodedDebtActionType,
|
|
362
440
|
];
|
|
363
441
|
},
|
|
364
442
|
decode(subData: SubData): {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
amountToSwitch: string,
|
|
443
|
+
market: EthereumAddress,
|
|
444
|
+
troveId: string,
|
|
445
|
+
collToken: EthereumAddress,
|
|
446
|
+
boldToken: EthereumAddress,
|
|
447
|
+
targetRatio: number,
|
|
371
448
|
} {
|
|
372
|
-
const
|
|
373
|
-
const
|
|
374
|
-
const
|
|
375
|
-
const
|
|
376
|
-
const
|
|
377
|
-
const
|
|
449
|
+
const market = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
450
|
+
const troveId = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
451
|
+
const collToken = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
452
|
+
const boldToken = AbiCoder.decodeParameter('address', subData[3]) as unknown as EthereumAddress;
|
|
453
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[4]) as any as string;
|
|
454
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
378
455
|
|
|
379
456
|
return {
|
|
380
|
-
|
|
457
|
+
market, troveId, collToken, boldToken, targetRatio,
|
|
381
458
|
};
|
|
382
459
|
},
|
|
383
460
|
};
|
|
461
|
+
export const liquityV2PaybackSubData = {
|
|
462
|
+
encode: (
|
|
463
|
+
market: EthereumAddress,
|
|
464
|
+
troveId: string,
|
|
465
|
+
boldToken: EthereumAddress,
|
|
466
|
+
targetRatio: number,
|
|
467
|
+
ratioState: RatioState,
|
|
468
|
+
) => {
|
|
469
|
+
const marketEncoded = AbiCoder.encodeParameter('address', market);
|
|
470
|
+
const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
|
|
471
|
+
const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
|
|
472
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
473
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
|
|
384
474
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
): SubData {
|
|
393
|
-
const encodedColl = AbiCoder.encodeParameter('address', collAsset);
|
|
394
|
-
const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
|
|
395
|
-
|
|
396
|
-
const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
|
|
397
|
-
const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
|
|
398
|
-
|
|
399
|
-
const encodedNullAddress = AbiCoder.encodeParameter('address', nullAddress);
|
|
400
|
-
|
|
401
|
-
return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedNullAddress];
|
|
475
|
+
return [
|
|
476
|
+
marketEncoded,
|
|
477
|
+
troveIdEncoded,
|
|
478
|
+
boldTokenEncoded,
|
|
479
|
+
targetRatioEncoded,
|
|
480
|
+
ratioStateEncoded,
|
|
481
|
+
];
|
|
402
482
|
},
|
|
403
|
-
decode(subData: SubData)
|
|
404
|
-
const
|
|
405
|
-
const
|
|
406
|
-
|
|
407
|
-
const
|
|
408
|
-
const
|
|
483
|
+
decode: (subData: SubData) => {
|
|
484
|
+
const market = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
485
|
+
const troveId = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
486
|
+
const boldToken = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
|
|
487
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
|
|
488
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[4]) as any as RatioState;
|
|
489
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
409
490
|
|
|
410
491
|
return {
|
|
411
|
-
|
|
492
|
+
market, troveId, boldToken, ratioState, targetRatio,
|
|
412
493
|
};
|
|
413
494
|
},
|
|
414
495
|
};
|
|
415
496
|
|
|
416
|
-
|
|
497
|
+
/**
|
|
498
|
+
___ ___ ____ ____ _______ ____ ____ ___
|
|
499
|
+
/ \ / \ \ \ / / | ____| \ \ / / |__ \
|
|
500
|
+
/ ^ \ / ^ \ \ \/ / | |__ \ \/ / ) |
|
|
501
|
+
/ /_\ \ / /_\ \ \ / | __| \ / / /
|
|
502
|
+
/ _____ \ / _____ \ \ / | |____ \ / / /_
|
|
503
|
+
/__/ \__\ /__/ \__\ \__/ |_______| \__/ |____|
|
|
504
|
+
*/
|
|
505
|
+
export const aaveV2LeverageManagementSubData = {
|
|
417
506
|
encode(
|
|
418
507
|
triggerRepayRatio: number,
|
|
419
508
|
triggerBoostRatio: number,
|
|
@@ -431,195 +520,61 @@ export const compoundV2LeverageManagementSubData = {
|
|
|
431
520
|
];
|
|
432
521
|
},
|
|
433
522
|
decode(subData: SubData): { targetRatio: number } {
|
|
434
|
-
const
|
|
435
|
-
const targetRatio = weiToRatioPercentage(
|
|
523
|
+
const ratioWei = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
524
|
+
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
436
525
|
|
|
437
526
|
return { targetRatio };
|
|
438
527
|
},
|
|
439
528
|
};
|
|
440
|
-
|
|
441
|
-
export const compoundV3LeverageManagementSubData = {
|
|
529
|
+
export const aaveV2LeverageManagementSubDataWithoutSubProxy = {
|
|
442
530
|
encode(
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
triggerRepayRatio: number,
|
|
446
|
-
triggerBoostRatio: number,
|
|
447
|
-
targetBoostRatio: number,
|
|
448
|
-
targetRepayRatio: number,
|
|
449
|
-
boostEnabled: boolean,
|
|
450
|
-
isEOA: boolean,
|
|
531
|
+
targetRatio: number,
|
|
532
|
+
ratioState: RatioState,
|
|
451
533
|
): SubData {
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
];
|
|
534
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
535
|
+
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
536
|
+
return [encodedTargetRatio, encodedRatioState];
|
|
537
|
+
},
|
|
538
|
+
decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
|
|
539
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
|
|
540
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
|
|
541
|
+
|
|
542
|
+
return { targetRatio, ratioState };
|
|
462
543
|
},
|
|
544
|
+
};
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
___ ___ ____ ____ _______ ____ ____ ____
|
|
548
|
+
/ \ / \ \ \ / / | ____| \ \ / / |___ \
|
|
549
|
+
/ ^ \ / ^ \ \ \/ / | |__ \ \/ / __) |
|
|
550
|
+
/ /_\ \ / /_\ \ \ / | __| \ / |__ <
|
|
551
|
+
/ _____ \ / _____ \ \ / | |____ \ / ___) |
|
|
552
|
+
/__/ \__\ /__/ \__\ \__/ |_______| \__/ |____/
|
|
553
|
+
*/
|
|
554
|
+
export const aaveV3LeverageManagementSubData = {
|
|
463
555
|
decode(subData: SubData): { targetRatio: number } {
|
|
464
|
-
const
|
|
465
|
-
const targetRatio = weiToRatioPercentage(
|
|
556
|
+
const ratioWei = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
557
|
+
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
466
558
|
|
|
467
559
|
return { targetRatio };
|
|
468
560
|
},
|
|
469
561
|
};
|
|
470
|
-
|
|
471
|
-
export const compoundV3L2LeverageManagementSubData = {
|
|
562
|
+
export const aaveV3LeverageManagementSubDataWithoutSubProxy = {
|
|
472
563
|
encode(
|
|
564
|
+
targetRatio: number,
|
|
565
|
+
ratioState: RatioState,
|
|
473
566
|
market: EthereumAddress,
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
triggerBoostRatio: number,
|
|
477
|
-
targetBoostRatio: number,
|
|
478
|
-
targetRepayRatio: number,
|
|
479
|
-
boostEnabled: boolean,
|
|
480
|
-
isEOA: boolean,
|
|
481
|
-
): string {
|
|
482
|
-
let subInput = '0x';
|
|
483
|
-
|
|
484
|
-
subInput = subInput.concat(market.slice(2));
|
|
485
|
-
subInput = subInput.concat(baseToken.slice(2));
|
|
486
|
-
subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
|
|
487
|
-
.padStart(32, '0'));
|
|
488
|
-
subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
|
|
489
|
-
.padStart(32, '0'));
|
|
490
|
-
subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
|
|
491
|
-
.padStart(32, '0'));
|
|
492
|
-
subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
|
|
493
|
-
.padStart(32, '0'));
|
|
494
|
-
subInput = subInput.concat(boostEnabled ? '01' : '00');
|
|
495
|
-
subInput = subInput.concat(isEOA ? '01' : '00');
|
|
496
|
-
|
|
497
|
-
return subInput;
|
|
498
|
-
},
|
|
499
|
-
decode(subData: SubData): { targetRatio: number } {
|
|
500
|
-
const ratioWei = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
|
|
501
|
-
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
502
|
-
|
|
503
|
-
return { targetRatio };
|
|
504
|
-
},
|
|
505
|
-
};
|
|
506
|
-
|
|
507
|
-
export const morphoAaveV2LeverageManagementSubData = {
|
|
508
|
-
encode(
|
|
509
|
-
triggerRepayRatio: number,
|
|
510
|
-
triggerBoostRatio: number,
|
|
511
|
-
targetBoostRatio: number,
|
|
512
|
-
targetRepayRatio: number,
|
|
513
|
-
boostEnabled: boolean,
|
|
514
|
-
): SubData {
|
|
515
|
-
return [
|
|
516
|
-
ratioPercentageToWei(triggerRepayRatio),
|
|
517
|
-
ratioPercentageToWei(triggerBoostRatio),
|
|
518
|
-
ratioPercentageToWei(targetBoostRatio),
|
|
519
|
-
ratioPercentageToWei(targetRepayRatio),
|
|
520
|
-
// @ts-ignore
|
|
521
|
-
boostEnabled,
|
|
522
|
-
];
|
|
523
|
-
},
|
|
524
|
-
decode(subData: SubData): { targetRatio: number } {
|
|
525
|
-
const ratioWei = AbiCoder.decodeParameter('uint128', subData[1]) as any as string;
|
|
526
|
-
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
527
|
-
|
|
528
|
-
return { targetRatio };
|
|
529
|
-
},
|
|
530
|
-
};
|
|
531
|
-
|
|
532
|
-
export const cBondsRebondSubData = {
|
|
533
|
-
encode(bondId: number | string): SubData {
|
|
534
|
-
const bondIdEncoded = AbiCoder.encodeParameter('uint256', bondId);
|
|
535
|
-
return [bondIdEncoded];
|
|
536
|
-
},
|
|
537
|
-
decode(subData: SubData): { bondId: string } {
|
|
538
|
-
const bondId = AbiCoder.decodeParameter('uint256', subData[1])!.toString();
|
|
539
|
-
return { bondId };
|
|
540
|
-
},
|
|
541
|
-
};
|
|
542
|
-
|
|
543
|
-
export const liquityPaybackUsingChickenBondSubData = {
|
|
544
|
-
/**
|
|
545
|
-
* @param sourceId bondId or subId
|
|
546
|
-
* @param sourceType 0 for bond, 1 for subId
|
|
547
|
-
* @param chainId
|
|
548
|
-
*/
|
|
549
|
-
encode: (sourceId: string, sourceType: number, chainId: ChainId = ChainId.Ethereum): SubData => {
|
|
550
|
-
const sourceIdEncoded = AbiCoder.encodeParameter('uint256', sourceId);
|
|
551
|
-
const sourceTypeEncoded = AbiCoder.encodeParameter('uint256', sourceType);
|
|
552
|
-
const lusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('LUSD', chainId).address);
|
|
553
|
-
const bLusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('bLUSD', chainId).address);
|
|
554
|
-
|
|
555
|
-
return [sourceIdEncoded, sourceTypeEncoded, lusdAddressEncoded, bLusdAddressEncoded];
|
|
556
|
-
},
|
|
557
|
-
decode: (subData: SubData) => {
|
|
558
|
-
const sourceId = AbiCoder.decodeParameter('uint256', subData[0])!.toString();
|
|
559
|
-
const sourceType = AbiCoder.decodeParameter('uint256', subData[1])!.toString();
|
|
560
|
-
|
|
561
|
-
return { sourceId, sourceType };
|
|
562
|
-
},
|
|
563
|
-
};
|
|
564
|
-
|
|
565
|
-
export const exchangeDcaSubData = {
|
|
566
|
-
encode: (fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, interval: number) : SubData => {
|
|
567
|
-
const sellTokenEncoded = AbiCoder.encodeParameter('address', fromToken);
|
|
568
|
-
const buyTokenEncoded = AbiCoder.encodeParameter('address', toToken);
|
|
569
|
-
const amountEncoded = AbiCoder.encodeParameter('uint256', amount);
|
|
570
|
-
const intervalEncoded = AbiCoder.encodeParameter('uint256', interval);
|
|
571
|
-
|
|
572
|
-
return [sellTokenEncoded, buyTokenEncoded, amountEncoded, intervalEncoded];
|
|
573
|
-
},
|
|
574
|
-
decode: (subData: SubData, chainId: ChainId) => {
|
|
575
|
-
const fromToken = AbiCoder.decodeParameter('address', subData[0])!.toString();
|
|
576
|
-
const toToken = AbiCoder.decodeParameter('address', subData[1])!.toString();
|
|
577
|
-
const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2])!.toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
|
|
578
|
-
const interval = AbiCoder.decodeParameter('uint256', subData[3])!.toString();
|
|
579
|
-
return {
|
|
580
|
-
fromToken,
|
|
581
|
-
toToken,
|
|
582
|
-
amount,
|
|
583
|
-
interval,
|
|
584
|
-
};
|
|
585
|
-
},
|
|
586
|
-
};
|
|
587
|
-
|
|
588
|
-
export const exchangeLimitOrderSubData = {
|
|
589
|
-
encode(fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, targetPrice: string, goodUntil: string | number, orderType: OrderType) : SubData {
|
|
590
|
-
return [
|
|
591
|
-
fromToken,
|
|
592
|
-
toToken,
|
|
593
|
-
amount,
|
|
594
|
-
targetPrice,
|
|
595
|
-
new Dec(goodUntil).toString(),
|
|
596
|
-
new Dec(orderType).toString(),
|
|
597
|
-
];
|
|
598
|
-
},
|
|
599
|
-
decode: (subData: SubData, chainId: ChainId) => {
|
|
600
|
-
const fromToken = AbiCoder.decodeParameter('address', subData[0])!.toString();
|
|
601
|
-
const toToken = AbiCoder.decodeParameter('address', subData[1])!.toString();
|
|
602
|
-
const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2])!.toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
|
|
603
|
-
return { fromToken, toToken, amount };
|
|
604
|
-
},
|
|
605
|
-
};
|
|
606
|
-
|
|
607
|
-
export const sparkLeverageManagementSubData = { // TODO encode?
|
|
608
|
-
decode(subData: SubData): { targetRatio: number } {
|
|
609
|
-
const ratioWei = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
610
|
-
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
611
|
-
|
|
612
|
-
return { targetRatio };
|
|
613
|
-
},
|
|
614
|
-
};
|
|
615
|
-
export const sparkLeverageManagementSubDataWithoutSubProxy = {
|
|
616
|
-
encode(
|
|
617
|
-
targetRatio: number,
|
|
618
|
-
ratioState: RatioState,
|
|
567
|
+
user: EthereumAddress,
|
|
568
|
+
isGeneric: boolean,
|
|
619
569
|
): SubData {
|
|
620
570
|
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
621
571
|
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
622
572
|
|
|
573
|
+
if (isGeneric) {
|
|
574
|
+
const encodedMarket = AbiCoder.encodeParameter('address', market);
|
|
575
|
+
const encodedUser = AbiCoder.encodeParameter('address', user);
|
|
576
|
+
return [encodedTargetRatio, encodedRatioState, encodedMarket, encodedUser];
|
|
577
|
+
}
|
|
623
578
|
const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
|
|
624
579
|
const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
|
|
625
580
|
return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
|
|
@@ -631,171 +586,194 @@ export const sparkLeverageManagementSubDataWithoutSubProxy = {
|
|
|
631
586
|
return { targetRatio, ratioState };
|
|
632
587
|
},
|
|
633
588
|
};
|
|
589
|
+
export const aaveV3LeverageManagementOnPriceGeneric = {
|
|
590
|
+
encode(
|
|
591
|
+
collAsset: EthereumAddress,
|
|
592
|
+
collAssetId: number,
|
|
593
|
+
debtAsset: EthereumAddress,
|
|
594
|
+
debtAssetId: number,
|
|
595
|
+
marketAddr: EthereumAddress,
|
|
596
|
+
targetRatio: number,
|
|
597
|
+
user: EthereumAddress,
|
|
598
|
+
): SubData {
|
|
599
|
+
const encodedColl = AbiCoder.encodeParameter('address', collAsset);
|
|
600
|
+
const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
|
|
601
|
+
const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
|
|
602
|
+
const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
|
|
603
|
+
const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
|
|
604
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
605
|
+
const userEncoded = AbiCoder.encodeParameter('address', user);
|
|
634
606
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
const lusdAddressEncoded = AbiCoder.encodeParameter('address', lusdAddress);
|
|
645
|
-
|
|
646
|
-
return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, lusdAddressEncoded];
|
|
647
|
-
},
|
|
648
|
-
decode: (subData: SubData) => {
|
|
649
|
-
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
650
|
-
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
651
|
-
return { targetRatio };
|
|
607
|
+
return [
|
|
608
|
+
encodedColl,
|
|
609
|
+
encodedCollId,
|
|
610
|
+
encodedDebt,
|
|
611
|
+
encodedDebtId,
|
|
612
|
+
encodedMarket,
|
|
613
|
+
encodedTargetRatio,
|
|
614
|
+
userEncoded,
|
|
615
|
+
];
|
|
652
616
|
},
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
const
|
|
663
|
-
const
|
|
617
|
+
decode(subData: SubData): {
|
|
618
|
+
collAsset: EthereumAddress,
|
|
619
|
+
collAssetId: number,
|
|
620
|
+
debtAsset: EthereumAddress,
|
|
621
|
+
debtAssetId: number,
|
|
622
|
+
marketAddr: EthereumAddress,
|
|
623
|
+
targetRatio: number,
|
|
624
|
+
owner: EthereumAddress,
|
|
625
|
+
} {
|
|
626
|
+
const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
627
|
+
const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
|
|
628
|
+
const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
629
|
+
const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
|
|
630
|
+
const marketAddr = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
|
|
664
631
|
|
|
665
|
-
|
|
666
|
-
},
|
|
667
|
-
decode: (subData: SubData) => {
|
|
668
|
-
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
632
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]) as unknown as string;
|
|
669
633
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
670
|
-
return { targetRatio };
|
|
671
|
-
},
|
|
672
|
-
};
|
|
673
634
|
|
|
674
|
-
|
|
675
|
-
encode: (targetRatioIncrease: number) => {
|
|
676
|
-
const wethAddress = getAssetInfo('WETH').address;
|
|
677
|
-
const lusdAddress = getAssetInfo('LUSD').address;
|
|
678
|
-
|
|
679
|
-
const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
|
|
680
|
-
const lusdAddressEncoded = AbiCoder.encodeParameter('address', lusdAddress);
|
|
681
|
-
const targetRatioIncreaseEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatioIncrease));
|
|
682
|
-
const withdrawIdEncoded = AbiCoder.encodeParameter('uint8', 1); // withdraw - 1
|
|
683
|
-
const paybackIdEncoded = AbiCoder.encodeParameter('uint8', 0); // payback - 0
|
|
635
|
+
const owner = AbiCoder.decodeParameter('address', subData[6]) as unknown as EthereumAddress;
|
|
684
636
|
|
|
685
|
-
return
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
637
|
+
return {
|
|
638
|
+
collAsset,
|
|
639
|
+
collAssetId,
|
|
640
|
+
debtAsset,
|
|
641
|
+
debtAssetId,
|
|
642
|
+
marketAddr,
|
|
643
|
+
targetRatio,
|
|
644
|
+
owner,
|
|
645
|
+
};
|
|
691
646
|
},
|
|
692
647
|
};
|
|
648
|
+
export const aaveV3CloseGenericSubData = {
|
|
649
|
+
encode(
|
|
650
|
+
collAsset: EthereumAddress,
|
|
651
|
+
collAssetId: number,
|
|
652
|
+
debtAsset: EthereumAddress,
|
|
653
|
+
debtAssetId: number,
|
|
654
|
+
closeType: CloseStrategyType,
|
|
655
|
+
marketAddr: EthereumAddress,
|
|
656
|
+
user: EthereumAddress,
|
|
657
|
+
): SubData {
|
|
658
|
+
const encodedColl = AbiCoder.encodeParameter('address', collAsset);
|
|
659
|
+
const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
|
|
660
|
+
const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
|
|
661
|
+
const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
|
|
662
|
+
const encodedCloseType = AbiCoder.encodeParameter('uint8', closeType);
|
|
663
|
+
const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
|
|
664
|
+
const userEncoded = AbiCoder.encodeParameter('address', user);
|
|
693
665
|
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
|
|
704
|
-
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
705
|
-
const collTokenAddrEncoded = AbiCoder.encodeParameter('address', collTokenAddr);
|
|
706
|
-
const crvUSDAddrEncoded = AbiCoder.encodeParameter('address', crvUSDAddr);
|
|
707
|
-
return [controllerAddrEncoded, ratioStateEncoded, targetRatioEncoded, collTokenAddrEncoded, crvUSDAddrEncoded];
|
|
666
|
+
return [
|
|
667
|
+
encodedColl,
|
|
668
|
+
encodedCollId,
|
|
669
|
+
encodedDebt,
|
|
670
|
+
encodedDebtId,
|
|
671
|
+
encodedCloseType,
|
|
672
|
+
encodedMarket,
|
|
673
|
+
userEncoded,
|
|
674
|
+
];
|
|
708
675
|
},
|
|
709
|
-
decode: (subData: SubData) => {
|
|
710
|
-
const controller = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
711
|
-
const weiRatio = AbiCoder.decodeParameter('uint256', subData[2]) as any as string;
|
|
712
|
-
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
713
676
|
|
|
714
|
-
|
|
677
|
+
decode(subData: SubData): {
|
|
678
|
+
collAsset: EthereumAddress,
|
|
679
|
+
collAssetId: number,
|
|
680
|
+
debtAsset: EthereumAddress,
|
|
681
|
+
debtAssetId: number,
|
|
682
|
+
closeType: CloseStrategyType,
|
|
683
|
+
marketAddr: EthereumAddress,
|
|
684
|
+
owner: EthereumAddress,
|
|
685
|
+
} {
|
|
686
|
+
const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
687
|
+
const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
|
|
688
|
+
const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
689
|
+
const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
|
|
690
|
+
const closeType = Number(AbiCoder.decodeParameter('uint8', subData[4])) as CloseStrategyType;
|
|
691
|
+
const marketAddr = AbiCoder.decodeParameter('address', subData[5]) as unknown as EthereumAddress;
|
|
692
|
+
const owner = AbiCoder.decodeParameter('address', subData[6]) as unknown as EthereumAddress;
|
|
693
|
+
|
|
694
|
+
return {
|
|
695
|
+
collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, owner,
|
|
696
|
+
};
|
|
715
697
|
},
|
|
716
698
|
};
|
|
699
|
+
export const aaveV3CollateralSwitchSubData = {
|
|
700
|
+
encode(
|
|
701
|
+
fromAsset: EthereumAddress,
|
|
702
|
+
fromAssetId: number,
|
|
703
|
+
toAsset: EthereumAddress,
|
|
704
|
+
toAssetId: number,
|
|
705
|
+
marketAddr: EthereumAddress,
|
|
706
|
+
amountToSwitch: string,
|
|
707
|
+
useOnBehalf: boolean = false,
|
|
708
|
+
): SubData {
|
|
709
|
+
const encodedFromAsset = AbiCoder.encodeParameter('address', fromAsset);
|
|
710
|
+
const encodedFromAssetId = AbiCoder.encodeParameter('uint8', fromAssetId);
|
|
711
|
+
const encodedToAsset = AbiCoder.encodeParameter('address', toAsset);
|
|
712
|
+
const encodedToAssetId = AbiCoder.encodeParameter('uint8', toAssetId);
|
|
713
|
+
const encodedMarketAddr = AbiCoder.encodeParameter('address', marketAddr);
|
|
714
|
+
const encodedAmountToSwitch = AbiCoder.encodeParameter('uint256', amountToSwitch);
|
|
715
|
+
const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', useOnBehalf);
|
|
717
716
|
|
|
718
|
-
export const crvUSDPaybackSubData = {
|
|
719
|
-
encode: (
|
|
720
|
-
controllerAddr: EthereumAddress,
|
|
721
|
-
addressToPullTokensFrom: EthereumAddress,
|
|
722
|
-
positionOwner: EthereumAddress,
|
|
723
|
-
paybackAmount: string,
|
|
724
|
-
crvUSDAddr: EthereumAddress,
|
|
725
|
-
) => {
|
|
726
|
-
const controllerAddrEncoded = AbiCoder.encodeParameter('address', controllerAddr);
|
|
727
|
-
const addressToPullTokensFromEncoded = AbiCoder.encodeParameter('address', addressToPullTokensFrom);
|
|
728
|
-
const positionOwnerEncoded = AbiCoder.encodeParameter('address', positionOwner);
|
|
729
|
-
const paybackAmountEncoded = AbiCoder.encodeParameter('uint256', toWei(paybackAmount, 'ether'));
|
|
730
|
-
const crvUSDAddrEncoded = AbiCoder.encodeParameter('address', crvUSDAddr);
|
|
731
717
|
return [
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
718
|
+
encodedFromAsset,
|
|
719
|
+
encodedFromAssetId,
|
|
720
|
+
encodedToAsset,
|
|
721
|
+
encodedToAssetId,
|
|
722
|
+
encodedMarketAddr,
|
|
723
|
+
encodedAmountToSwitch,
|
|
724
|
+
encodedUseOnBehalf,
|
|
737
725
|
];
|
|
738
726
|
},
|
|
739
|
-
decode
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
727
|
+
decode(subData: SubData): {
|
|
728
|
+
fromAsset: EthereumAddress,
|
|
729
|
+
fromAssetId: number,
|
|
730
|
+
toAsset: EthereumAddress,
|
|
731
|
+
toAssetId: number,
|
|
732
|
+
marketAddr: EthereumAddress,
|
|
733
|
+
amountToSwitch: string,
|
|
734
|
+
} {
|
|
735
|
+
const fromAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
736
|
+
const fromAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
|
|
737
|
+
const toAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
738
|
+
const toAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
|
|
739
|
+
const marketAddr = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
|
|
740
|
+
const amountToSwitch = AbiCoder.decodeParameter('uint256', subData[5]) as unknown as string;
|
|
741
|
+
|
|
745
742
|
return {
|
|
746
|
-
|
|
747
|
-
addressToPullTokensFrom,
|
|
748
|
-
positionOwner,
|
|
749
|
-
paybackAmount,
|
|
743
|
+
fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch,
|
|
750
744
|
};
|
|
751
745
|
},
|
|
752
746
|
};
|
|
747
|
+
export const aaveV3QuotePriceSubData = {
|
|
748
|
+
encode(
|
|
749
|
+
collAsset: EthereumAddress,
|
|
750
|
+
collAssetId: number,
|
|
751
|
+
debtAsset: EthereumAddress,
|
|
752
|
+
debtAssetId: number,
|
|
753
|
+
nullAddress: EthereumAddress = ZERO_ADDRESS,
|
|
754
|
+
): SubData {
|
|
755
|
+
const encodedColl = AbiCoder.encodeParameter('address', collAsset);
|
|
756
|
+
const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
|
|
753
757
|
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
lltv: string,
|
|
761
|
-
ratioState: RatioState,
|
|
762
|
-
targetRatio: number,
|
|
763
|
-
user: EthereumAddress,
|
|
764
|
-
isEOA: boolean,
|
|
765
|
-
) => {
|
|
766
|
-
const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
|
|
767
|
-
const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
|
|
768
|
-
const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
|
|
769
|
-
const irmEncoded = AbiCoder.encodeParameter('address', irm);
|
|
770
|
-
const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
|
|
771
|
-
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
|
|
772
|
-
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
773
|
-
const userEncoded = AbiCoder.encodeParameter('address', user);
|
|
774
|
-
const isEOAEncoded = AbiCoder.encodeParameter('bool', isEOA);
|
|
775
|
-
return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, ratioStateEncoded, targetRatioEncoded, userEncoded, isEOAEncoded];
|
|
758
|
+
const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
|
|
759
|
+
const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
|
|
760
|
+
|
|
761
|
+
const encodedNullAddress = AbiCoder.encodeParameter('address', nullAddress);
|
|
762
|
+
|
|
763
|
+
return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedNullAddress];
|
|
776
764
|
},
|
|
777
|
-
decode
|
|
778
|
-
const
|
|
779
|
-
const
|
|
780
|
-
|
|
781
|
-
const
|
|
782
|
-
const
|
|
783
|
-
const weiRatio = AbiCoder.decodeParameter('uint256', subData[6]) as any as EthereumAddress;
|
|
784
|
-
const user = AbiCoder.decodeParameter('address', subData[7]) as any as EthereumAddress;
|
|
785
|
-
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
765
|
+
decode(subData: SubData): { collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number } {
|
|
766
|
+
const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
767
|
+
const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
|
|
768
|
+
|
|
769
|
+
const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
770
|
+
const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
|
|
786
771
|
|
|
787
772
|
return {
|
|
788
|
-
|
|
789
|
-
collToken,
|
|
790
|
-
oracle,
|
|
791
|
-
irm,
|
|
792
|
-
lltv,
|
|
793
|
-
user,
|
|
794
|
-
targetRatio,
|
|
773
|
+
collAsset, collAssetId, debtAsset, debtAssetId,
|
|
795
774
|
};
|
|
796
775
|
},
|
|
797
776
|
};
|
|
798
|
-
|
|
799
777
|
export const aaveV3LeverageManagementOnPriceSubData = {
|
|
800
778
|
encode(
|
|
801
779
|
collAsset: EthereumAddress,
|
|
@@ -846,273 +824,324 @@ export const aaveV3LeverageManagementOnPriceSubData = {
|
|
|
846
824
|
},
|
|
847
825
|
};
|
|
848
826
|
|
|
849
|
-
|
|
827
|
+
/**
|
|
828
|
+
* ___ ___ ____ ____ _______ ____ ____ _ _
|
|
829
|
+
/ \ / \ \ \ / / | ____| \ \ / / | || |
|
|
830
|
+
/ ^ \ / ^ \ \ \/ / | |__ \ \/ / | || |_
|
|
831
|
+
/ /_\ \ / /_\ \ \ / | __| \ / |__ _|
|
|
832
|
+
/ _____ \ / _____ \ \ / | |____ \ / | |
|
|
833
|
+
/__/ \__\ /__/ \__\ \__/ |_______| \__/ |_|
|
|
834
|
+
*/
|
|
835
|
+
export const aaveV4LeverageManagementSubData = {
|
|
850
836
|
encode: (
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
collToken: EthereumAddress,
|
|
854
|
-
boldToken: EthereumAddress,
|
|
837
|
+
spoke: EthereumAddress,
|
|
838
|
+
owner: EthereumAddress,
|
|
855
839
|
ratioState: RatioState,
|
|
856
840
|
targetRatio: number,
|
|
857
841
|
) => {
|
|
858
|
-
const
|
|
859
|
-
const
|
|
860
|
-
const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
|
|
861
|
-
const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
|
|
842
|
+
const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
|
|
843
|
+
const ownerEncoded = AbiCoder.encodeParameter('address', owner);
|
|
862
844
|
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
|
|
863
845
|
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
864
|
-
|
|
865
|
-
const isRepay = ratioState === RatioState.UNDER;
|
|
866
|
-
const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
|
|
867
|
-
const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
|
|
868
|
-
|
|
869
|
-
const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
|
|
870
|
-
const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
|
|
871
|
-
|
|
846
|
+
// Add two empty slots for future addons (e.g tsi or slippage settings)
|
|
872
847
|
return [
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
collTokenEncoded,
|
|
876
|
-
boldTokenEncoded,
|
|
848
|
+
spokeEncoded,
|
|
849
|
+
ownerEncoded,
|
|
877
850
|
ratioStateEncoded,
|
|
878
851
|
targetRatioEncoded,
|
|
879
|
-
|
|
880
|
-
|
|
852
|
+
EMPTY_SLOT,
|
|
853
|
+
EMPTY_SLOT,
|
|
881
854
|
];
|
|
882
855
|
},
|
|
883
856
|
decode: (subData: SubData) => {
|
|
884
|
-
const
|
|
885
|
-
const
|
|
886
|
-
const
|
|
887
|
-
const
|
|
888
|
-
const ratioState = AbiCoder.decodeParameter('uint8', subData[4]) as any as RatioState;
|
|
889
|
-
const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]) as any as string;
|
|
890
|
-
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
891
|
-
|
|
892
|
-
return {
|
|
893
|
-
market, troveId, collToken, boldToken, ratioState, targetRatio,
|
|
894
|
-
};
|
|
895
|
-
},
|
|
896
|
-
};
|
|
897
|
-
|
|
898
|
-
export const liquityV2CloseSubData = {
|
|
899
|
-
encode(
|
|
900
|
-
market: EthereumAddress,
|
|
901
|
-
troveId: string,
|
|
902
|
-
collToken: EthereumAddress,
|
|
903
|
-
boldToken: EthereumAddress,
|
|
904
|
-
closeType: CloseStrategyType,
|
|
905
|
-
): SubData {
|
|
906
|
-
const marketEncoded = AbiCoder.encodeParameter('address', market);
|
|
907
|
-
const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
|
|
908
|
-
const collAddrEncoded = AbiCoder.encodeParameter('address', collToken);
|
|
909
|
-
const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
|
|
910
|
-
const wethAddress = getAssetInfo('WETH').address;
|
|
911
|
-
const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
|
|
912
|
-
const gasCompensation = new Dec('0.0375').mul(1e18).toString();
|
|
913
|
-
const gasCompensationEncoded = AbiCoder.encodeParameter('uint256', gasCompensation);
|
|
914
|
-
const closeTypeEncoded = AbiCoder.encodeParameter('uint8', closeType);
|
|
915
|
-
|
|
916
|
-
return [
|
|
917
|
-
marketEncoded,
|
|
918
|
-
troveIdEncoded,
|
|
919
|
-
collAddrEncoded,
|
|
920
|
-
boldTokenEncoded,
|
|
921
|
-
wethAddressEncoded,
|
|
922
|
-
gasCompensationEncoded,
|
|
923
|
-
closeTypeEncoded,
|
|
924
|
-
];
|
|
925
|
-
},
|
|
926
|
-
decode(subData: SubData): {
|
|
927
|
-
market: EthereumAddress,
|
|
928
|
-
troveId: string,
|
|
929
|
-
collToken: EthereumAddress,
|
|
930
|
-
boldToken: EthereumAddress,
|
|
931
|
-
closeType: CloseStrategyType,
|
|
932
|
-
} {
|
|
933
|
-
const market = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
934
|
-
const troveId = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
935
|
-
const collToken = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
|
|
936
|
-
const boldToken = AbiCoder.decodeParameter('address', subData[3]) as any as EthereumAddress;
|
|
937
|
-
// skip wethAddress and gasCompensation
|
|
938
|
-
const closeType = AbiCoder.decodeParameter('uint8', subData[6]) as any as CloseStrategyType;
|
|
939
|
-
|
|
857
|
+
const spoke = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
858
|
+
const owner = AbiCoder.decodeParameter('address', subData[1]) as unknown as EthereumAddress;
|
|
859
|
+
const ratioState = Number(AbiCoder.decodeParameter('uint8', subData[2])) as RatioState;
|
|
860
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[3]) as any as string);
|
|
940
861
|
return {
|
|
941
|
-
|
|
862
|
+
spoke, owner, ratioState, targetRatio,
|
|
942
863
|
};
|
|
943
864
|
},
|
|
944
865
|
};
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
866
|
+
export const aaveV4LeverageManagementOnPriceSubData = {
|
|
867
|
+
encode: (
|
|
868
|
+
spoke: EthereumAddress,
|
|
869
|
+
owner: EthereumAddress,
|
|
870
|
+
collAsset: EthereumAddress,
|
|
871
|
+
collAssetId: number,
|
|
872
|
+
debtAsset: EthereumAddress,
|
|
873
|
+
debtAssetId: number,
|
|
874
|
+
ratioState: RatioState,
|
|
952
875
|
targetRatio: number,
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
const
|
|
956
|
-
const
|
|
957
|
-
const
|
|
958
|
-
const
|
|
959
|
-
const
|
|
960
|
-
|
|
961
|
-
const
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
const encodedCollActionType = AbiCoder.encodeParameter('uint8', collActionType);
|
|
965
|
-
const encodedDebtActionType = AbiCoder.encodeParameter('uint8', debtActionType);
|
|
966
|
-
|
|
876
|
+
) => {
|
|
877
|
+
const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
|
|
878
|
+
const ownerEncoded = AbiCoder.encodeParameter('address', owner);
|
|
879
|
+
const collAssetEncoded = AbiCoder.encodeParameter('address', collAsset);
|
|
880
|
+
const collAssetIdEncoded = AbiCoder.encodeParameter('uint256', collAssetId);
|
|
881
|
+
const debtAssetEncoded = AbiCoder.encodeParameter('address', debtAsset);
|
|
882
|
+
const debtAssetIdEncoded = AbiCoder.encodeParameter('uint256', debtAssetId);
|
|
883
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
|
|
884
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
885
|
+
// Add two empty slots for future addons (e.g tsi or slippage settings)
|
|
967
886
|
return [
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
887
|
+
spokeEncoded,
|
|
888
|
+
ownerEncoded,
|
|
889
|
+
collAssetEncoded,
|
|
890
|
+
collAssetIdEncoded,
|
|
891
|
+
debtAssetEncoded,
|
|
892
|
+
debtAssetIdEncoded,
|
|
893
|
+
ratioStateEncoded,
|
|
894
|
+
targetRatioEncoded,
|
|
895
|
+
EMPTY_SLOT,
|
|
896
|
+
EMPTY_SLOT,
|
|
975
897
|
];
|
|
976
898
|
},
|
|
977
|
-
decode(subData: SubData)
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
const
|
|
985
|
-
const
|
|
986
|
-
const collToken = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
987
|
-
const boldToken = AbiCoder.decodeParameter('address', subData[3]) as unknown as EthereumAddress;
|
|
988
|
-
const weiRatio = AbiCoder.decodeParameter('uint256', subData[4]) as any as string;
|
|
989
|
-
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
990
|
-
|
|
899
|
+
decode: (subData: SubData) => {
|
|
900
|
+
const spoke = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
901
|
+
const owner = AbiCoder.decodeParameter('address', subData[1]) as unknown as EthereumAddress;
|
|
902
|
+
const collAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
903
|
+
const collAssetId = Number(AbiCoder.decodeParameter('uint256', subData[3]));
|
|
904
|
+
const debtAsset = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
|
|
905
|
+
const debtAssetId = Number(AbiCoder.decodeParameter('uint256', subData[5]));
|
|
906
|
+
const ratioState = Number(AbiCoder.decodeParameter('uint8', subData[6])) as RatioState;
|
|
907
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[7]) as any as string);
|
|
991
908
|
return {
|
|
992
|
-
|
|
909
|
+
spoke, owner, collAsset, collAssetId, debtAsset, debtAssetId, ratioState, targetRatio,
|
|
993
910
|
};
|
|
994
911
|
},
|
|
995
912
|
};
|
|
996
|
-
export const
|
|
997
|
-
encode(
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
)
|
|
1006
|
-
const
|
|
1007
|
-
const
|
|
1008
|
-
const
|
|
1009
|
-
const
|
|
1010
|
-
const
|
|
1011
|
-
const
|
|
1012
|
-
const
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
913
|
+
export const aaveV4CloseSubData = {
|
|
914
|
+
encode: (
|
|
915
|
+
spoke: EthereumAddress,
|
|
916
|
+
owner: EthereumAddress,
|
|
917
|
+
collAsset: EthereumAddress,
|
|
918
|
+
collAssetId: number,
|
|
919
|
+
debtAsset: EthereumAddress,
|
|
920
|
+
debtAssetId: number,
|
|
921
|
+
closeType: CloseStrategyType,
|
|
922
|
+
) => {
|
|
923
|
+
const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
|
|
924
|
+
const ownerEncoded = AbiCoder.encodeParameter('address', owner);
|
|
925
|
+
const collAssetEncoded = AbiCoder.encodeParameter('address', collAsset);
|
|
926
|
+
const collAssetIdEncoded = AbiCoder.encodeParameter('uint256', collAssetId);
|
|
927
|
+
const debtAssetEncoded = AbiCoder.encodeParameter('address', debtAsset);
|
|
928
|
+
const debtAssetIdEncoded = AbiCoder.encodeParameter('uint256', debtAssetId);
|
|
929
|
+
const closeTypeEncoded = AbiCoder.encodeParameter('uint8', closeType);
|
|
930
|
+
// Add two empty slots for future addons (e.g tsi or slippage settings)
|
|
931
|
+
return [
|
|
932
|
+
spokeEncoded,
|
|
933
|
+
ownerEncoded,
|
|
934
|
+
collAssetEncoded,
|
|
935
|
+
collAssetIdEncoded,
|
|
936
|
+
debtAssetEncoded,
|
|
937
|
+
debtAssetIdEncoded,
|
|
938
|
+
closeTypeEncoded,
|
|
939
|
+
EMPTY_SLOT,
|
|
940
|
+
EMPTY_SLOT,
|
|
941
|
+
];
|
|
942
|
+
},
|
|
943
|
+
decode: (subData: SubData) => {
|
|
944
|
+
const spoke = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
945
|
+
const owner = AbiCoder.decodeParameter('address', subData[1]) as unknown as EthereumAddress;
|
|
946
|
+
const collAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
947
|
+
const collAssetId = Number(AbiCoder.decodeParameter('uint256', subData[3]));
|
|
948
|
+
const debtAsset = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
|
|
949
|
+
const debtAssetId = Number(AbiCoder.decodeParameter('uint256', subData[5]));
|
|
950
|
+
const closeType = Number(AbiCoder.decodeParameter('uint8', subData[6])) as CloseStrategyType;
|
|
1025
951
|
return {
|
|
1026
|
-
|
|
1027
|
-
collToken,
|
|
1028
|
-
oracle,
|
|
1029
|
-
irm,
|
|
1030
|
-
lltv,
|
|
1031
|
-
targetRatio,
|
|
1032
|
-
user,
|
|
952
|
+
spoke, owner, collAsset, collAssetId, debtAsset, debtAssetId, closeType,
|
|
1033
953
|
};
|
|
1034
954
|
},
|
|
1035
955
|
};
|
|
1036
|
-
|
|
1037
|
-
export const liquityV2PaybackSubData = {
|
|
956
|
+
export const aaveV4CollateralSwitchSubData = {
|
|
1038
957
|
encode: (
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
958
|
+
spoke: EthereumAddress,
|
|
959
|
+
owner: EthereumAddress,
|
|
960
|
+
fromAsset: EthereumAddress,
|
|
961
|
+
fromAssetId: number,
|
|
962
|
+
toAsset: EthereumAddress,
|
|
963
|
+
toAssetId: number,
|
|
964
|
+
amountToSwitch: string,
|
|
1044
965
|
) => {
|
|
1045
|
-
const
|
|
1046
|
-
const
|
|
1047
|
-
const
|
|
1048
|
-
const
|
|
1049
|
-
const
|
|
1050
|
-
|
|
966
|
+
const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
|
|
967
|
+
const ownerEncoded = AbiCoder.encodeParameter('address', owner);
|
|
968
|
+
const fromAssetEncoded = AbiCoder.encodeParameter('address', fromAsset);
|
|
969
|
+
const fromAssetIdEncoded = AbiCoder.encodeParameter('uint256', fromAssetId);
|
|
970
|
+
const toAssetEncoded = AbiCoder.encodeParameter('address', toAsset);
|
|
971
|
+
const toAssetIdEncoded = AbiCoder.encodeParameter('uint256', toAssetId);
|
|
972
|
+
const amountToSwitchEncoded = AbiCoder.encodeParameter('uint256', amountToSwitch);
|
|
973
|
+
// Add two empty slots for future addons (e.g tsi or slippage settings)
|
|
1051
974
|
return [
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
975
|
+
spokeEncoded,
|
|
976
|
+
ownerEncoded,
|
|
977
|
+
fromAssetEncoded,
|
|
978
|
+
fromAssetIdEncoded,
|
|
979
|
+
toAssetEncoded,
|
|
980
|
+
toAssetIdEncoded,
|
|
981
|
+
amountToSwitchEncoded,
|
|
982
|
+
EMPTY_SLOT,
|
|
983
|
+
EMPTY_SLOT,
|
|
1057
984
|
];
|
|
1058
985
|
},
|
|
1059
986
|
decode: (subData: SubData) => {
|
|
1060
|
-
const
|
|
1061
|
-
const
|
|
1062
|
-
const
|
|
1063
|
-
const
|
|
1064
|
-
const
|
|
1065
|
-
const
|
|
1066
|
-
|
|
987
|
+
const spoke = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
988
|
+
const owner = AbiCoder.decodeParameter('address', subData[1]) as unknown as EthereumAddress;
|
|
989
|
+
const fromAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
990
|
+
const fromAssetId = Number(AbiCoder.decodeParameter('uint256', subData[3]));
|
|
991
|
+
const toAsset = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
|
|
992
|
+
const toAssetId = Number(AbiCoder.decodeParameter('uint256', subData[5]));
|
|
993
|
+
const amountToSwitch = AbiCoder.decodeParameter('uint256', subData[6]) as any as string;
|
|
1067
994
|
return {
|
|
1068
|
-
|
|
995
|
+
spoke, owner, fromAsset, fromAssetId, toAsset, toAssetId, amountToSwitch,
|
|
1069
996
|
};
|
|
1070
997
|
},
|
|
1071
998
|
};
|
|
1072
999
|
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1000
|
+
/**
|
|
1001
|
+
______ ______ .___ ___. .______ ____ ____ ___
|
|
1002
|
+
/ | / __ \ | \/ | | _ \ \ \ / / |__ \
|
|
1003
|
+
| ,----'| | | | | \ / | | |_) | \ \/ / ) |
|
|
1004
|
+
| | | | | | | |\/| | | ___/ \ / / /
|
|
1005
|
+
| `----.| `--' | | | | | | | \ / / /_
|
|
1006
|
+
\______| \______/ |__| |__| | _| \__/ |____|
|
|
1007
|
+
*/
|
|
1008
|
+
export const compoundV2LeverageManagementSubData = {
|
|
1009
|
+
encode(
|
|
1010
|
+
triggerRepayRatio: number,
|
|
1011
|
+
triggerBoostRatio: number,
|
|
1012
|
+
targetBoostRatio: number,
|
|
1013
|
+
targetRepayRatio: number,
|
|
1014
|
+
boostEnabled: boolean,
|
|
1015
|
+
): SubData {
|
|
1016
|
+
return [
|
|
1017
|
+
new Dec(triggerRepayRatio).mul(1e16).toString(),
|
|
1018
|
+
new Dec(triggerBoostRatio).mul(1e16).toString(),
|
|
1019
|
+
new Dec(targetBoostRatio).mul(1e16).toString(),
|
|
1020
|
+
new Dec(targetRepayRatio).mul(1e16).toString(),
|
|
1021
|
+
// @ts-ignore // TODO
|
|
1022
|
+
boostEnabled,
|
|
1023
|
+
];
|
|
1024
|
+
},
|
|
1025
|
+
decode(subData: SubData): { targetRatio: number } {
|
|
1026
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
1027
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
1085
1028
|
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1029
|
+
return { targetRatio };
|
|
1030
|
+
},
|
|
1031
|
+
};
|
|
1032
|
+
export const compoundV2LeverageManagementSubDataWithoutSubProxy = {
|
|
1033
|
+
encode(
|
|
1034
|
+
targetRatio: number,
|
|
1035
|
+
ratioState: RatioState,
|
|
1036
|
+
): SubData {
|
|
1037
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1038
|
+
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
1039
|
+
return [encodedTargetRatio, encodedRatioState];
|
|
1040
|
+
},
|
|
1041
|
+
decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
|
|
1042
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
|
|
1043
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
|
|
1089
1044
|
|
|
1090
|
-
|
|
1091
|
-
|
|
1045
|
+
return { targetRatio, ratioState };
|
|
1046
|
+
},
|
|
1047
|
+
};
|
|
1092
1048
|
|
|
1049
|
+
/**
|
|
1050
|
+
______ ______ .___ ___. .______ ____ ____ ____
|
|
1051
|
+
/ | / __ \ | \/ | | _ \ \ \ / / |___ \
|
|
1052
|
+
| ,----'| | | | | \ / | | |_) | \ \/ / __) |
|
|
1053
|
+
| | | | | | | |\/| | | ___/ \ / |__ <
|
|
1054
|
+
| `----.| `--' | | | | | | | \ / ___) |
|
|
1055
|
+
\______| \______/ |__| |__| | _| \__/ |____/
|
|
1056
|
+
*/
|
|
1057
|
+
export const compoundV3LeverageManagementSubData = {
|
|
1058
|
+
encode(
|
|
1059
|
+
market: EthereumAddress,
|
|
1060
|
+
baseToken: EthereumAddress,
|
|
1061
|
+
triggerRepayRatio: number,
|
|
1062
|
+
triggerBoostRatio: number,
|
|
1063
|
+
targetBoostRatio: number,
|
|
1064
|
+
targetRepayRatio: number,
|
|
1065
|
+
boostEnabled: boolean,
|
|
1066
|
+
isEOA: boolean,
|
|
1067
|
+
): SubData {
|
|
1093
1068
|
return [
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1069
|
+
market,
|
|
1070
|
+
baseToken,
|
|
1071
|
+
new Dec(triggerRepayRatio).mul(1e16).toString(),
|
|
1072
|
+
new Dec(triggerBoostRatio).mul(1e16).toString(),
|
|
1073
|
+
new Dec(targetBoostRatio).mul(1e16).toString(),
|
|
1074
|
+
new Dec(targetRepayRatio).mul(1e16).toString(),
|
|
1075
|
+
// @ts-ignore // TODO
|
|
1076
|
+
boostEnabled, isEOA,
|
|
1101
1077
|
];
|
|
1102
1078
|
},
|
|
1103
|
-
decode
|
|
1104
|
-
const nftId = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
1105
|
-
const vault = AbiCoder.decodeParameter('address', subData[1]) as unknown as EthereumAddress;
|
|
1106
|
-
const ratioState = AbiCoder.decodeParameter('uint8', subData[2]) as any as RatioState;
|
|
1079
|
+
decode(subData: SubData): { targetRatio: number } {
|
|
1107
1080
|
const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
|
|
1108
1081
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
1109
1082
|
|
|
1083
|
+
return { targetRatio };
|
|
1084
|
+
},
|
|
1085
|
+
};
|
|
1086
|
+
export const compoundV3LeverageManagementSubDataWithoutSubProxy = {
|
|
1087
|
+
encode(
|
|
1088
|
+
market: EthereumAddress,
|
|
1089
|
+
baseToken: EthereumAddress,
|
|
1090
|
+
targetRatio: number,
|
|
1091
|
+
ratioState: RatioState,
|
|
1092
|
+
): SubData {
|
|
1093
|
+
const encodedMarket = AbiCoder.encodeParameter('address', market);
|
|
1094
|
+
const encodedBaseToken = AbiCoder.encodeParameter('address', baseToken);
|
|
1095
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1096
|
+
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
1097
|
+
return [encodedMarket, encodedBaseToken, encodedTargetRatio, encodedRatioState];
|
|
1098
|
+
},
|
|
1099
|
+
decode(subData: SubData): { market: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, ratioState: RatioState } {
|
|
1100
|
+
const market = AbiCoder.decodeParameter('address', subData[0]) as any as EthereumAddress;
|
|
1101
|
+
const baseToken = AbiCoder.decodeParameter('address', subData[1]) as any as EthereumAddress;
|
|
1102
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[2]) as any as string);
|
|
1103
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[3]) as any as RatioState;
|
|
1104
|
+
|
|
1110
1105
|
return {
|
|
1111
|
-
|
|
1106
|
+
market, baseToken, targetRatio, ratioState,
|
|
1112
1107
|
};
|
|
1113
1108
|
},
|
|
1114
1109
|
};
|
|
1110
|
+
export const compoundV3L2LeverageManagementSubData = {
|
|
1111
|
+
encode(
|
|
1112
|
+
market: EthereumAddress,
|
|
1113
|
+
baseToken: EthereumAddress,
|
|
1114
|
+
triggerRepayRatio: number,
|
|
1115
|
+
triggerBoostRatio: number,
|
|
1116
|
+
targetBoostRatio: number,
|
|
1117
|
+
targetRepayRatio: number,
|
|
1118
|
+
boostEnabled: boolean,
|
|
1119
|
+
isEOA: boolean,
|
|
1120
|
+
): string {
|
|
1121
|
+
let subInput = '0x';
|
|
1122
|
+
|
|
1123
|
+
subInput = subInput.concat(market.slice(2));
|
|
1124
|
+
subInput = subInput.concat(baseToken.slice(2));
|
|
1125
|
+
subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
|
|
1126
|
+
.padStart(32, '0'));
|
|
1127
|
+
subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
|
|
1128
|
+
.padStart(32, '0'));
|
|
1129
|
+
subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
|
|
1130
|
+
.padStart(32, '0'));
|
|
1131
|
+
subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
|
|
1132
|
+
.padStart(32, '0'));
|
|
1133
|
+
subInput = subInput.concat(boostEnabled ? '01' : '00');
|
|
1134
|
+
subInput = subInput.concat(isEOA ? '01' : '00');
|
|
1135
|
+
|
|
1136
|
+
return subInput;
|
|
1137
|
+
},
|
|
1138
|
+
decode(subData: SubData): { targetRatio: number } {
|
|
1139
|
+
const ratioWei = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
|
|
1140
|
+
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
1115
1141
|
|
|
1142
|
+
return { targetRatio };
|
|
1143
|
+
},
|
|
1144
|
+
};
|
|
1116
1145
|
export const compoundV3LeverageManagementOnPriceSubData = {
|
|
1117
1146
|
encode(
|
|
1118
1147
|
market: EthereumAddress,
|
|
@@ -1159,7 +1188,6 @@ export const compoundV3LeverageManagementOnPriceSubData = {
|
|
|
1159
1188
|
};
|
|
1160
1189
|
},
|
|
1161
1190
|
};
|
|
1162
|
-
|
|
1163
1191
|
export const compoundV3CloseSubData = {
|
|
1164
1192
|
encode(
|
|
1165
1193
|
market: EthereumAddress,
|
|
@@ -1195,12 +1223,111 @@ export const compoundV3CloseSubData = {
|
|
|
1195
1223
|
const closeType = Number(AbiCoder.decodeParameter('uint8', subData[3])) as CloseStrategyType;
|
|
1196
1224
|
const owner = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
|
|
1197
1225
|
|
|
1198
|
-
return {
|
|
1199
|
-
market, collToken, baseToken, closeType, owner,
|
|
1200
|
-
};
|
|
1226
|
+
return {
|
|
1227
|
+
market, collToken, baseToken, closeType, owner,
|
|
1228
|
+
};
|
|
1229
|
+
},
|
|
1230
|
+
};
|
|
1231
|
+
|
|
1232
|
+
/**
|
|
1233
|
+
__________ ___ ______ __ __ ___ .__ __. _______ _______
|
|
1234
|
+
| ____\ \ / / / || | | | / \ | \ | | / _____|| ____|
|
|
1235
|
+
| |__ \ V / | ,----'| |__| | / ^ \ | \| | | | __ | |__
|
|
1236
|
+
| __| > < | | | __ | / /_\ \ | . ` | | | |_ | | __|
|
|
1237
|
+
| |____ / . \ | `----.| | | | / _____ \ | |\ | | |__| | | |____
|
|
1238
|
+
|_______/__/ \__\ \______||__| |__| /__/ \__\ |__| \__| \______| |_______|
|
|
1239
|
+
*/
|
|
1240
|
+
export const exchangeDcaSubData = {
|
|
1241
|
+
encode: (fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, interval: number) : SubData => {
|
|
1242
|
+
const sellTokenEncoded = AbiCoder.encodeParameter('address', fromToken);
|
|
1243
|
+
const buyTokenEncoded = AbiCoder.encodeParameter('address', toToken);
|
|
1244
|
+
const amountEncoded = AbiCoder.encodeParameter('uint256', amount);
|
|
1245
|
+
const intervalEncoded = AbiCoder.encodeParameter('uint256', interval);
|
|
1246
|
+
|
|
1247
|
+
return [sellTokenEncoded, buyTokenEncoded, amountEncoded, intervalEncoded];
|
|
1248
|
+
},
|
|
1249
|
+
decode: (subData: SubData, chainId: ChainId) => {
|
|
1250
|
+
const fromToken = AbiCoder.decodeParameter('address', subData[0])!.toString();
|
|
1251
|
+
const toToken = AbiCoder.decodeParameter('address', subData[1])!.toString();
|
|
1252
|
+
const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2])!.toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
|
|
1253
|
+
const interval = AbiCoder.decodeParameter('uint256', subData[3])!.toString();
|
|
1254
|
+
return {
|
|
1255
|
+
fromToken,
|
|
1256
|
+
toToken,
|
|
1257
|
+
amount,
|
|
1258
|
+
interval,
|
|
1259
|
+
};
|
|
1260
|
+
},
|
|
1261
|
+
};
|
|
1262
|
+
export const exchangeLimitOrderSubData = {
|
|
1263
|
+
encode(fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, targetPrice: string, goodUntil: string | number, orderType: OrderType) : SubData {
|
|
1264
|
+
return [
|
|
1265
|
+
fromToken,
|
|
1266
|
+
toToken,
|
|
1267
|
+
amount,
|
|
1268
|
+
targetPrice,
|
|
1269
|
+
new Dec(goodUntil).toString(),
|
|
1270
|
+
new Dec(orderType).toString(),
|
|
1271
|
+
];
|
|
1272
|
+
},
|
|
1273
|
+
decode: (subData: SubData, chainId: ChainId) => {
|
|
1274
|
+
const fromToken = AbiCoder.decodeParameter('address', subData[0])!.toString();
|
|
1275
|
+
const toToken = AbiCoder.decodeParameter('address', subData[1])!.toString();
|
|
1276
|
+
const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2])!.toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
|
|
1277
|
+
return { fromToken, toToken, amount };
|
|
1278
|
+
},
|
|
1279
|
+
};
|
|
1280
|
+
export const exchangeLimitOrderSubDataWithoutSubProxy = {
|
|
1281
|
+
encode(fromToken: EthereumAddress, toToken: EthereumAddress, amount: string): SubData {
|
|
1282
|
+
return [
|
|
1283
|
+
AbiCoder.encodeParameter('address', fromToken),
|
|
1284
|
+
AbiCoder.encodeParameter('address', toToken),
|
|
1285
|
+
AbiCoder.encodeParameter('uint256', amount),
|
|
1286
|
+
];
|
|
1287
|
+
},
|
|
1288
|
+
decode: (subData: SubData, chainId: ChainId) => {
|
|
1289
|
+
const fromToken = AbiCoder.decodeParameter('address', subData[0])!.toString();
|
|
1290
|
+
const toToken = AbiCoder.decodeParameter('address', subData[1])!.toString();
|
|
1291
|
+
const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2])!.toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
|
|
1292
|
+
return { fromToken, toToken, amount };
|
|
1293
|
+
},
|
|
1294
|
+
};
|
|
1295
|
+
|
|
1296
|
+
/**
|
|
1297
|
+
_______..______ ___ .______ __ ___
|
|
1298
|
+
/ || _ \ / \ | _ \ | |/ /
|
|
1299
|
+
| (----`| |_) | / ^ \ | |_) | | ' /
|
|
1300
|
+
\ \ | ___/ / /_\ \ | / | <
|
|
1301
|
+
.----) | | | / _____ \ | |\ \----.| . \
|
|
1302
|
+
|_______/ | _| /__/ \__\ | _| `._____||__|\__\
|
|
1303
|
+
*/
|
|
1304
|
+
export const sparkLeverageManagementSubData = {
|
|
1305
|
+
decode(subData: SubData): { targetRatio: number } {
|
|
1306
|
+
const ratioWei = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
1307
|
+
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
1308
|
+
|
|
1309
|
+
return { targetRatio };
|
|
1310
|
+
},
|
|
1311
|
+
};
|
|
1312
|
+
export const sparkLeverageManagementSubDataWithoutSubProxy = {
|
|
1313
|
+
encode(
|
|
1314
|
+
targetRatio: number,
|
|
1315
|
+
ratioState: RatioState,
|
|
1316
|
+
): SubData {
|
|
1317
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1318
|
+
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
1319
|
+
|
|
1320
|
+
const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
|
|
1321
|
+
const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
|
|
1322
|
+
return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
|
|
1323
|
+
},
|
|
1324
|
+
decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
|
|
1325
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
|
|
1326
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
|
|
1327
|
+
|
|
1328
|
+
return { targetRatio, ratioState };
|
|
1201
1329
|
},
|
|
1202
1330
|
};
|
|
1203
|
-
|
|
1204
1331
|
export const sparkCloseGenericSubData = {
|
|
1205
1332
|
encode(
|
|
1206
1333
|
collAsset: EthereumAddress,
|
|
@@ -1252,7 +1379,204 @@ export const sparkCloseGenericSubData = {
|
|
|
1252
1379
|
};
|
|
1253
1380
|
},
|
|
1254
1381
|
};
|
|
1382
|
+
export const sparkLeverageManagementOnPriceSubData = {
|
|
1383
|
+
encode(
|
|
1384
|
+
collAsset: EthereumAddress,
|
|
1385
|
+
collAssetId: number,
|
|
1386
|
+
debtAsset: EthereumAddress,
|
|
1387
|
+
debtAssetId: number,
|
|
1388
|
+
marketAddr: EthereumAddress,
|
|
1389
|
+
targetRatio: number,
|
|
1390
|
+
): SubData {
|
|
1391
|
+
const encodedColl = AbiCoder.encodeParameter('address', collAsset);
|
|
1392
|
+
const encodedCollId = AbiCoder.encodeParameter('uint16', collAssetId);
|
|
1393
|
+
const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
|
|
1394
|
+
const encodedDebtId = AbiCoder.encodeParameter('uint16', debtAssetId);
|
|
1395
|
+
const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
|
|
1396
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1397
|
+
const useOnBehalfEncoded = AbiCoder.encodeParameter('bool', false);
|
|
1398
|
+
return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedMarket, encodedTargetRatio, useOnBehalfEncoded];
|
|
1399
|
+
},
|
|
1400
|
+
decode(subData: SubData): {
|
|
1401
|
+
collAsset: EthereumAddress,
|
|
1402
|
+
collAssetId: number,
|
|
1403
|
+
debtAsset: EthereumAddress,
|
|
1404
|
+
debtAssetId: number,
|
|
1405
|
+
marketAddr: EthereumAddress,
|
|
1406
|
+
targetRatio: number,
|
|
1407
|
+
} {
|
|
1408
|
+
const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
1409
|
+
const collAssetId = Number(AbiCoder.decodeParameter('uint16', subData[1]));
|
|
1410
|
+
const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
1411
|
+
const debtAssetId = Number(AbiCoder.decodeParameter('uint16', subData[3]));
|
|
1412
|
+
const marketAddr = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
|
|
1413
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]) as any as string;
|
|
1414
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
1415
|
+
return {
|
|
1416
|
+
collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio,
|
|
1417
|
+
};
|
|
1418
|
+
},
|
|
1419
|
+
};
|
|
1420
|
+
|
|
1421
|
+
/**
|
|
1422
|
+
______ .______ ____ ____ __ __ _______. _______
|
|
1423
|
+
/ || _ \ \ \ / / | | | | / || \
|
|
1424
|
+
| ,----'| |_) | \ \/ / | | | | | (----`| .--. |
|
|
1425
|
+
| | | / \ / | | | | \ \ | | | |
|
|
1426
|
+
| `----.| |\ \----. \ / | `--' | .----) | | '--' |
|
|
1427
|
+
\______|| _| `._____| \__/ \______/ |_______/ |_______/
|
|
1428
|
+
*/
|
|
1429
|
+
export const crvUSDLeverageManagementSubData = {
|
|
1430
|
+
encode: (
|
|
1431
|
+
controllerAddr: EthereumAddress,
|
|
1432
|
+
ratioState: RatioState,
|
|
1433
|
+
targetRatio: number,
|
|
1434
|
+
collTokenAddr: EthereumAddress,
|
|
1435
|
+
crvUSDAddr: EthereumAddress,
|
|
1436
|
+
) => {
|
|
1437
|
+
const controllerAddrEncoded = AbiCoder.encodeParameter('address', controllerAddr);
|
|
1438
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
|
|
1439
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1440
|
+
const collTokenAddrEncoded = AbiCoder.encodeParameter('address', collTokenAddr);
|
|
1441
|
+
const crvUSDAddrEncoded = AbiCoder.encodeParameter('address', crvUSDAddr);
|
|
1442
|
+
return [controllerAddrEncoded, ratioStateEncoded, targetRatioEncoded, collTokenAddrEncoded, crvUSDAddrEncoded];
|
|
1443
|
+
},
|
|
1444
|
+
decode: (subData: SubData) => {
|
|
1445
|
+
const controller = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
1446
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[2]) as any as string;
|
|
1447
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
1448
|
+
|
|
1449
|
+
return { controller, targetRatio };
|
|
1450
|
+
},
|
|
1451
|
+
};
|
|
1452
|
+
export const crvUSDPaybackSubData = {
|
|
1453
|
+
encode: (
|
|
1454
|
+
controllerAddr: EthereumAddress,
|
|
1455
|
+
addressToPullTokensFrom: EthereumAddress,
|
|
1456
|
+
positionOwner: EthereumAddress,
|
|
1457
|
+
paybackAmount: string,
|
|
1458
|
+
crvUSDAddr: EthereumAddress,
|
|
1459
|
+
) => {
|
|
1460
|
+
const controllerAddrEncoded = AbiCoder.encodeParameter('address', controllerAddr);
|
|
1461
|
+
const addressToPullTokensFromEncoded = AbiCoder.encodeParameter('address', addressToPullTokensFrom);
|
|
1462
|
+
const positionOwnerEncoded = AbiCoder.encodeParameter('address', positionOwner);
|
|
1463
|
+
const paybackAmountEncoded = AbiCoder.encodeParameter('uint256', toWei(paybackAmount, 'ether'));
|
|
1464
|
+
const crvUSDAddrEncoded = AbiCoder.encodeParameter('address', crvUSDAddr);
|
|
1465
|
+
return [
|
|
1466
|
+
controllerAddrEncoded,
|
|
1467
|
+
addressToPullTokensFromEncoded,
|
|
1468
|
+
positionOwnerEncoded,
|
|
1469
|
+
paybackAmountEncoded,
|
|
1470
|
+
crvUSDAddrEncoded,
|
|
1471
|
+
];
|
|
1472
|
+
},
|
|
1473
|
+
decode: (subData: SubData) => {
|
|
1474
|
+
const controller = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
1475
|
+
const addressToPullTokensFrom = AbiCoder.decodeParameter('address', subData[1]) as any as EthereumAddress;
|
|
1476
|
+
const positionOwner = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
|
|
1477
|
+
const weiPaybackAmount = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
|
|
1478
|
+
const paybackAmount = fromWei(weiPaybackAmount, 'ether');
|
|
1479
|
+
return {
|
|
1480
|
+
controller,
|
|
1481
|
+
addressToPullTokensFrom,
|
|
1482
|
+
positionOwner,
|
|
1483
|
+
paybackAmount,
|
|
1484
|
+
};
|
|
1485
|
+
},
|
|
1486
|
+
};
|
|
1487
|
+
|
|
1488
|
+
/**
|
|
1489
|
+
.___ ___. ______ .______ .______ __ __ ______
|
|
1490
|
+
| \/ | / __ \ | _ \ | _ \ | | | | / __ \
|
|
1491
|
+
| \ / | | | | | | |_) | | |_) | | |__| | | | | |
|
|
1492
|
+
| |\/| | | | | | | / | ___/ | __ | | | | |
|
|
1493
|
+
| | | | | `--' | | |\ \----.| | | | | | | `--' |
|
|
1494
|
+
|__| |__| \______/ | _| `._____|| _| |__| |__| \______/
|
|
1495
|
+
*/
|
|
1496
|
+
export const morphoBlueLeverageManagementSubData = {
|
|
1497
|
+
encode: (
|
|
1498
|
+
loanToken: EthereumAddress,
|
|
1499
|
+
collToken: EthereumAddress,
|
|
1500
|
+
oracle: EthereumAddress,
|
|
1501
|
+
irm: EthereumAddress,
|
|
1502
|
+
lltv: string,
|
|
1503
|
+
ratioState: RatioState,
|
|
1504
|
+
targetRatio: number,
|
|
1505
|
+
user: EthereumAddress,
|
|
1506
|
+
isEOA: boolean,
|
|
1507
|
+
) => {
|
|
1508
|
+
const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
|
|
1509
|
+
const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
|
|
1510
|
+
const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
|
|
1511
|
+
const irmEncoded = AbiCoder.encodeParameter('address', irm);
|
|
1512
|
+
const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
|
|
1513
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
|
|
1514
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1515
|
+
const userEncoded = AbiCoder.encodeParameter('address', user);
|
|
1516
|
+
const isEOAEncoded = AbiCoder.encodeParameter('bool', isEOA);
|
|
1517
|
+
return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, ratioStateEncoded, targetRatioEncoded, userEncoded, isEOAEncoded];
|
|
1518
|
+
},
|
|
1519
|
+
decode: (subData: SubData) => {
|
|
1520
|
+
const loanToken = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
1521
|
+
const collToken = AbiCoder.decodeParameter('address', subData[1]) as any as EthereumAddress;
|
|
1522
|
+
const oracle = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
|
|
1523
|
+
const irm = AbiCoder.decodeParameter('address', subData[3]) as any as EthereumAddress;
|
|
1524
|
+
const lltv = AbiCoder.decodeParameter('uint256', subData[4]) as any as EthereumAddress;
|
|
1525
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[6]) as any as EthereumAddress;
|
|
1526
|
+
const user = AbiCoder.decodeParameter('address', subData[7]) as any as EthereumAddress;
|
|
1527
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
1528
|
+
|
|
1529
|
+
return {
|
|
1530
|
+
loanToken,
|
|
1531
|
+
collToken,
|
|
1532
|
+
oracle,
|
|
1533
|
+
irm,
|
|
1534
|
+
lltv,
|
|
1535
|
+
user,
|
|
1536
|
+
targetRatio,
|
|
1537
|
+
};
|
|
1538
|
+
},
|
|
1539
|
+
};
|
|
1540
|
+
export const morphoBlueLeverageManagementOnPriceSubData = {
|
|
1541
|
+
encode(
|
|
1542
|
+
loanToken: EthereumAddress,
|
|
1543
|
+
collToken: EthereumAddress,
|
|
1544
|
+
oracle: EthereumAddress,
|
|
1545
|
+
irm: EthereumAddress,
|
|
1546
|
+
lltv: string,
|
|
1547
|
+
targetRatio: number,
|
|
1548
|
+
user: EthereumAddress,
|
|
1549
|
+
): SubData {
|
|
1550
|
+
const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
|
|
1551
|
+
const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
|
|
1552
|
+
const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
|
|
1553
|
+
const irmEncoded = AbiCoder.encodeParameter('address', irm);
|
|
1554
|
+
const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
|
|
1555
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1556
|
+
const userEncoded = AbiCoder.encodeParameter('address', user);
|
|
1557
|
+
return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, targetRatioEncoded, userEncoded];
|
|
1558
|
+
},
|
|
1559
|
+
decode(subData: SubData) {
|
|
1560
|
+
const loanToken = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
1561
|
+
const collToken = AbiCoder.decodeParameter('address', subData[1]) as any as EthereumAddress;
|
|
1562
|
+
const oracle = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
|
|
1563
|
+
const irm = AbiCoder.decodeParameter('address', subData[3]) as any as EthereumAddress;
|
|
1564
|
+
const lltv = AbiCoder.decodeParameter('uint256', subData[4]) as any as EthereumAddress;
|
|
1565
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]) as any as EthereumAddress;
|
|
1566
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
1567
|
+
const user = AbiCoder.decodeParameter('address', subData[6]) as any as EthereumAddress;
|
|
1255
1568
|
|
|
1569
|
+
return {
|
|
1570
|
+
loanToken,
|
|
1571
|
+
collToken,
|
|
1572
|
+
oracle,
|
|
1573
|
+
irm,
|
|
1574
|
+
lltv,
|
|
1575
|
+
targetRatio,
|
|
1576
|
+
user,
|
|
1577
|
+
};
|
|
1578
|
+
},
|
|
1579
|
+
};
|
|
1256
1580
|
export const morphoBlueCloseOnPriceSubData = {
|
|
1257
1581
|
encode(
|
|
1258
1582
|
loanToken: EthereumAddress,
|
|
@@ -1293,41 +1617,53 @@ export const morphoBlueCloseOnPriceSubData = {
|
|
|
1293
1617
|
},
|
|
1294
1618
|
};
|
|
1295
1619
|
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1620
|
+
/**
|
|
1621
|
+
_______ __ __ __ __ _______
|
|
1622
|
+
| ____|| | | | | | | | | \
|
|
1623
|
+
| |__ | | | | | | | | | .--. |
|
|
1624
|
+
| __| | | | | | | | | | | | |
|
|
1625
|
+
| | | `----.| `--' | | | | '--' |
|
|
1626
|
+
|__| |_______| \______/ |__| |_______/
|
|
1627
|
+
*/
|
|
1628
|
+
export const fluidLeverageManagementSubData = {
|
|
1629
|
+
encode: (
|
|
1630
|
+
nftId: string,
|
|
1631
|
+
vault: EthereumAddress,
|
|
1632
|
+
ratioState: RatioState,
|
|
1303
1633
|
targetRatio: number,
|
|
1304
|
-
)
|
|
1305
|
-
const
|
|
1306
|
-
const
|
|
1307
|
-
const
|
|
1308
|
-
const
|
|
1309
|
-
const
|
|
1310
|
-
|
|
1311
|
-
const
|
|
1312
|
-
|
|
1634
|
+
) => {
|
|
1635
|
+
const nftIdEncoded = AbiCoder.encodeParameter('uint256', nftId);
|
|
1636
|
+
const vaultEncoded = AbiCoder.encodeParameter('address', vault);
|
|
1637
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
|
|
1638
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1639
|
+
const wrapEthEncoded = AbiCoder.encodeParameter('bool', true);
|
|
1640
|
+
|
|
1641
|
+
const isRepay = ratioState === RatioState.UNDER;
|
|
1642
|
+
const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
|
|
1643
|
+
const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
|
|
1644
|
+
|
|
1645
|
+
const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
|
|
1646
|
+
const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
|
|
1647
|
+
|
|
1648
|
+
return [
|
|
1649
|
+
nftIdEncoded,
|
|
1650
|
+
vaultEncoded,
|
|
1651
|
+
ratioStateEncoded,
|
|
1652
|
+
targetRatioEncoded,
|
|
1653
|
+
wrapEthEncoded,
|
|
1654
|
+
collActionTypeEncoded,
|
|
1655
|
+
debtActionTypeEncoded,
|
|
1656
|
+
];
|
|
1313
1657
|
},
|
|
1314
|
-
decode(subData: SubData)
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
marketAddr: EthereumAddress,
|
|
1320
|
-
targetRatio: number,
|
|
1321
|
-
} {
|
|
1322
|
-
const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
1323
|
-
const collAssetId = Number(AbiCoder.decodeParameter('uint16', subData[1]));
|
|
1324
|
-
const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
1325
|
-
const debtAssetId = Number(AbiCoder.decodeParameter('uint16', subData[3]));
|
|
1326
|
-
const marketAddr = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
|
|
1327
|
-
const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]) as any as string;
|
|
1658
|
+
decode: (subData: SubData) => {
|
|
1659
|
+
const nftId = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
1660
|
+
const vault = AbiCoder.decodeParameter('address', subData[1]) as unknown as EthereumAddress;
|
|
1661
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[2]) as any as RatioState;
|
|
1662
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
|
|
1328
1663
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
1664
|
+
|
|
1329
1665
|
return {
|
|
1330
|
-
|
|
1666
|
+
nftId, vault, ratioState, targetRatio,
|
|
1331
1667
|
};
|
|
1332
1668
|
},
|
|
1333
1669
|
};
|