@defisaver/automation-sdk 2.0.9 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/services/strategiesService.js +37 -6
- package/esm/services/strategiesService.test.js +3 -2
- package/esm/services/utils.d.ts +1 -0
- package/esm/services/utils.js +5 -1
- package/esm/services/utils.test.js +13 -0
- package/esm/types/index.d.ts +1 -0
- package/package.json +4 -4
- package/src/services/strategiesService.test.ts +3 -2
- package/src/services/strategiesService.ts +67 -9
- package/src/services/utils.test.ts +17 -1
- package/src/services/utils.ts +4 -0
- package/src/types/index.ts +1 -0
- package/umd/index.js +52 -12
|
@@ -31,6 +31,14 @@ const enums_1 = require("../types/enums");
|
|
|
31
31
|
const utils_1 = require("./utils");
|
|
32
32
|
const subDataService = __importStar(require("./subDataService"));
|
|
33
33
|
const triggerService = __importStar(require("./triggerService"));
|
|
34
|
+
const SPARK_MARKET_ADDRESSES = {
|
|
35
|
+
[enums_1.ChainId.Ethereum]: '0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE',
|
|
36
|
+
};
|
|
37
|
+
const AAVE_V3_MARKET_ADDRESSES = {
|
|
38
|
+
[enums_1.ChainId.Ethereum]: '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e',
|
|
39
|
+
[enums_1.ChainId.Optimism]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
|
|
40
|
+
[enums_1.ChainId.Arbitrum]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
|
|
41
|
+
};
|
|
34
42
|
function parseMakerSavingsLiqProtection(position, parseData) {
|
|
35
43
|
const _position = (0, lodash_1.cloneDeep)(position);
|
|
36
44
|
const { subStruct } = parseData.subscriptionEventData;
|
|
@@ -38,6 +46,7 @@ function parseMakerSavingsLiqProtection(position, parseData) {
|
|
|
38
46
|
const subData = subDataService.makerRepayFromSavingsSubData.decode(subStruct.subData);
|
|
39
47
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
40
48
|
_position.strategyData.decoded.subData = subData;
|
|
49
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
41
50
|
_position.specific = {
|
|
42
51
|
triggerRepayRatio: Number(triggerData.ratio),
|
|
43
52
|
targetRepayRatio: Number(subData.targetRatio),
|
|
@@ -53,6 +62,7 @@ function parseMakerCloseOnPrice(position, parseData) {
|
|
|
53
62
|
const subData = subDataService.makerCloseSubData.decode(subStruct.subData);
|
|
54
63
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
55
64
|
_position.strategyData.decoded.subData = subData;
|
|
65
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
56
66
|
const isTakeProfit = (0, utils_1.isRatioStateOver)(Number(triggerData.state));
|
|
57
67
|
_position.strategy.strategyId = isTakeProfit ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
|
|
58
68
|
_position.specific = {
|
|
@@ -68,6 +78,7 @@ function parseMakerTrailingStop(position, parseData) {
|
|
|
68
78
|
const subData = subDataService.makerCloseSubData.decode(subStruct.subData);
|
|
69
79
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
70
80
|
_position.strategyData.decoded.subData = subData;
|
|
81
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
71
82
|
_position.strategy.strategyId = enums_1.Strategies.IdOverrides.TrailingStop;
|
|
72
83
|
_position.specific = {
|
|
73
84
|
triggerPercentage: Number(triggerData.triggerPercentage),
|
|
@@ -84,6 +95,7 @@ function parseMakerLeverageManagement(position, parseData) {
|
|
|
84
95
|
const subData = subDataService.makerLeverageManagementSubData.decode(subStruct.subData);
|
|
85
96
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
86
97
|
_position.strategyData.decoded.subData = subData;
|
|
98
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
87
99
|
const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
|
|
88
100
|
if (isRepay) {
|
|
89
101
|
_position.specific = {
|
|
@@ -112,6 +124,7 @@ function parseLiquityCloseOnPrice(position, parseData) {
|
|
|
112
124
|
const subData = subDataService.liquityCloseSubData.decode(subStruct.subData);
|
|
113
125
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
114
126
|
_position.strategyData.decoded.subData = subData;
|
|
127
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
115
128
|
const isTakeProfit = (0, utils_1.isRatioStateOver)(Number(triggerData.state));
|
|
116
129
|
_position.strategy.strategyId = isTakeProfit ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
|
|
117
130
|
_position.specific = {
|
|
@@ -127,6 +140,7 @@ function parseLiquityTrailingStop(position, parseData) {
|
|
|
127
140
|
const subData = subDataService.liquityCloseSubData.decode(subStruct.subData);
|
|
128
141
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
129
142
|
_position.strategyData.decoded.subData = subData;
|
|
143
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
130
144
|
_position.strategy.strategyId = enums_1.Strategies.IdOverrides.TrailingStop;
|
|
131
145
|
_position.specific = {
|
|
132
146
|
triggerPercentage: Number(triggerData.triggerPercentage),
|
|
@@ -143,6 +157,7 @@ function parseAaveV2LeverageManagement(position, parseData) {
|
|
|
143
157
|
const subData = subDataService.aaveV2LeverageManagementSubData.decode(subStruct.subData);
|
|
144
158
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
145
159
|
_position.strategyData.decoded.subData = subData;
|
|
160
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
146
161
|
const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
|
|
147
162
|
if (isRepay) {
|
|
148
163
|
_position.specific = {
|
|
@@ -172,6 +187,7 @@ function parseAaveV3LeverageManagement(position, parseData) {
|
|
|
172
187
|
const subData = subDataService.aaveV3LeverageManagementSubData.decode(subStruct.subData);
|
|
173
188
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
174
189
|
_position.strategyData.decoded.subData = subData;
|
|
190
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
175
191
|
const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
|
|
176
192
|
if (isRepay) {
|
|
177
193
|
_position.specific = {
|
|
@@ -201,6 +217,7 @@ function parseMorphoAaveV2LeverageManagement(position, parseData) {
|
|
|
201
217
|
const subData = subDataService.morphoAaveV2LeverageManagementSubData.decode(subStruct.subData);
|
|
202
218
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
203
219
|
_position.strategyData.decoded.subData = subData;
|
|
220
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
204
221
|
const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
|
|
205
222
|
if (isRepay) {
|
|
206
223
|
_position.specific = {
|
|
@@ -229,6 +246,7 @@ function parseAaveV3CloseOnPrice(position, parseData) {
|
|
|
229
246
|
const subData = subDataService.aaveV3QuotePriceSubData.decode(subStruct.subData);
|
|
230
247
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
231
248
|
_position.strategyData.decoded.subData = subData;
|
|
249
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
|
|
232
250
|
_position.specific = {
|
|
233
251
|
collAsset: subData.collAsset,
|
|
234
252
|
collAssetId: subData.collAssetId,
|
|
@@ -250,6 +268,7 @@ function parseAaveV3CloseOnPriceWithMaximumGasPrice(position, parseData) {
|
|
|
250
268
|
const subData = subDataService.aaveV3QuotePriceSubData.decode(subStruct.subData);
|
|
251
269
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
252
270
|
_position.strategyData.decoded.subData = subData;
|
|
271
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
|
|
253
272
|
_position.specific = {
|
|
254
273
|
collAsset: subData.collAsset,
|
|
255
274
|
collAssetId: subData.collAssetId,
|
|
@@ -275,7 +294,8 @@ function parseCompoundV2LeverageManagement(position, parseData) {
|
|
|
275
294
|
const subData = subDataService.compoundV2LeverageManagementSubData.decode(subStruct.subData);
|
|
276
295
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
277
296
|
_position.strategyData.decoded.subData = subData;
|
|
278
|
-
_position.owner = triggerData.owner;
|
|
297
|
+
_position.owner = triggerData.owner.toLowerCase();
|
|
298
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
279
299
|
const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
|
|
280
300
|
if (isRepay) {
|
|
281
301
|
_position.specific = {
|
|
@@ -305,7 +325,8 @@ function parseCompoundV3LeverageManagement(position, parseData) {
|
|
|
305
325
|
const subData = subDataService.compoundV3LeverageManagementSubData.decode(subStruct.subData);
|
|
306
326
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
307
327
|
_position.strategyData.decoded.subData = subData;
|
|
308
|
-
_position.owner = triggerData.owner;
|
|
328
|
+
_position.owner = triggerData.owner.toLowerCase();
|
|
329
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
309
330
|
const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
|
|
310
331
|
if (isRepay) {
|
|
311
332
|
_position.specific = {
|
|
@@ -333,14 +354,16 @@ function parseChickenBondsRebond(position, parseData) {
|
|
|
333
354
|
const { subStruct } = parseData.subscriptionEventData;
|
|
334
355
|
_position.strategyData.decoded.triggerData = triggerService.cBondsRebondTrigger.decode(subStruct.triggerData);
|
|
335
356
|
_position.strategyData.decoded.subData = subDataService.cBondsRebondSubData.decode(subStruct.subData);
|
|
357
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.strategyData.decoded.triggerData.bondId);
|
|
336
358
|
return _position;
|
|
337
359
|
}
|
|
338
360
|
function parseLiquityBondProtection(position, parseData) {
|
|
339
361
|
const _position = (0, lodash_1.cloneDeep)(position);
|
|
340
362
|
const { subStruct } = parseData.subscriptionEventData;
|
|
341
363
|
const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
|
|
342
|
-
_position.strategyData.decoded.subData = subDataService.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
|
|
343
364
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
365
|
+
_position.strategyData.decoded.subData = subDataService.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
|
|
366
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
344
367
|
_position.specific = {
|
|
345
368
|
triggerRepayRatio: Number(triggerData.ratio),
|
|
346
369
|
targetRepayRatio: Infinity,
|
|
@@ -353,6 +376,7 @@ function parseExchangeDca(position, parseData, chainId) {
|
|
|
353
376
|
const { subStruct } = parseData.subscriptionEventData;
|
|
354
377
|
_position.strategyData.decoded.triggerData = triggerService.exchangeTimestampTrigger.decode(subStruct.triggerData);
|
|
355
378
|
_position.strategyData.decoded.subData = subDataService.exchangeDcaSubData.decode(subStruct.subData, chainId);
|
|
379
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
|
|
356
380
|
return _position;
|
|
357
381
|
}
|
|
358
382
|
function parseExchangeLimitOrder(position, parseData, chainId) {
|
|
@@ -362,6 +386,7 @@ function parseExchangeLimitOrder(position, parseData, chainId) {
|
|
|
362
386
|
const fromTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
|
|
363
387
|
const toTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.toToken, chainId).decimals;
|
|
364
388
|
_position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
|
|
389
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
|
|
365
390
|
return _position;
|
|
366
391
|
}
|
|
367
392
|
function parseLiquityLeverageManagement(position, parseData) {
|
|
@@ -372,6 +397,7 @@ function parseLiquityLeverageManagement(position, parseData) {
|
|
|
372
397
|
const subData = subDataService.liquityLeverageManagementSubData.decode(subStruct.subData);
|
|
373
398
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
374
399
|
_position.strategyData.decoded.subData = subData;
|
|
400
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
375
401
|
const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
|
|
376
402
|
if (isRepay) {
|
|
377
403
|
_position.specific = {
|
|
@@ -401,6 +427,7 @@ function parseSparkLeverageManagement(position, parseData) {
|
|
|
401
427
|
const subData = subDataService.sparkLeverageManagementSubData.decode(subStruct.subData);
|
|
402
428
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
403
429
|
_position.strategyData.decoded.subData = subData;
|
|
430
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
404
431
|
const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
|
|
405
432
|
if (isRepay) {
|
|
406
433
|
_position.specific = {
|
|
@@ -429,6 +456,7 @@ function parseSparkCloseOnPrice(position, parseData) {
|
|
|
429
456
|
const subData = subDataService.sparkQuotePriceSubData.decode(subStruct.subData);
|
|
430
457
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
431
458
|
_position.strategyData.decoded.subData = subData;
|
|
459
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, SPARK_MARKET_ADDRESSES[_position.chainId]);
|
|
432
460
|
_position.specific = {
|
|
433
461
|
collAsset: subData.collAsset,
|
|
434
462
|
collAssetId: subData.collAssetId,
|
|
@@ -450,6 +478,7 @@ function parseLiquitySavingsLiqProtection(position, parseData) {
|
|
|
450
478
|
const subData = subDataService.liquityRepayFromSavingsSubData.decode(subStruct.subData);
|
|
451
479
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
452
480
|
_position.strategyData.decoded.subData = subData;
|
|
481
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
453
482
|
_position.specific = {
|
|
454
483
|
triggerRepayRatio: triggerData.ratio,
|
|
455
484
|
targetRepayRatio: subData.targetRatio,
|
|
@@ -458,13 +487,14 @@ function parseLiquitySavingsLiqProtection(position, parseData) {
|
|
|
458
487
|
};
|
|
459
488
|
return _position;
|
|
460
489
|
}
|
|
461
|
-
function
|
|
490
|
+
function parseLiquityDebtInFrontRepay(position, parseData) {
|
|
462
491
|
const _position = (0, lodash_1.cloneDeep)(position);
|
|
463
492
|
const { subStruct } = parseData.subscriptionEventData;
|
|
464
493
|
const triggerData = triggerService.liquityDebtInFrontWithLimitTrigger.decode(subStruct.triggerData);
|
|
465
494
|
const subData = subDataService.liquityDebtInFrontRepaySubData.decode(subStruct.subData);
|
|
466
495
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
467
496
|
_position.strategyData.decoded.subData = subData;
|
|
497
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
468
498
|
_position.specific = {
|
|
469
499
|
debtInFrontMin: triggerData.debtInFrontMin,
|
|
470
500
|
targetRepayRatioIncrease: subData.targetRatioIncrease,
|
|
@@ -489,7 +519,7 @@ const parsingMethodsMapping = {
|
|
|
489
519
|
[enums_1.Strategies.Identifiers.Boost]: parseLiquityLeverageManagement,
|
|
490
520
|
[enums_1.Strategies.Identifiers.SavingsDsrPayback]: parseLiquitySavingsLiqProtection,
|
|
491
521
|
[enums_1.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
|
|
492
|
-
[enums_1.Strategies.Identifiers.DebtInFrontRepay]:
|
|
522
|
+
[enums_1.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
|
|
493
523
|
},
|
|
494
524
|
[enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
|
|
495
525
|
[enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
|
|
@@ -549,8 +579,9 @@ function parseStrategiesAutomatedPosition(parseData) {
|
|
|
549
579
|
chainId,
|
|
550
580
|
subHash,
|
|
551
581
|
blockNumber,
|
|
582
|
+
positionId: 'positionId parsing not implemented.',
|
|
552
583
|
subId: Number(subId),
|
|
553
|
-
owner: proxy,
|
|
584
|
+
owner: proxy.toLowerCase(),
|
|
554
585
|
protocol: Object.assign({}, strategyOrBundleInfo.protocol),
|
|
555
586
|
strategy: Object.assign({ isBundle: subStruct.isBundle }, strategyOrBundleInfo),
|
|
556
587
|
strategyData: {
|
|
@@ -20,10 +20,11 @@ describe('Feature: strategiesService.ts', () => {
|
|
|
20
20
|
{
|
|
21
21
|
isEnabled: true,
|
|
22
22
|
chainId: 1,
|
|
23
|
+
positionId: '1-aave__v3-0x9cb7e19861665366011899d74e75d4f2a419aeed-0x2f39d218133afab8f2b819b1066c7e434ad94e9e',
|
|
23
24
|
subHash: '0xafa4d200be62f171b57b1ae0f4e8348d1ac3f6d0812ad6da74a2adae8037dde1',
|
|
24
25
|
blockNumber: 18015756,
|
|
25
26
|
subId: 379,
|
|
26
|
-
owner: '
|
|
27
|
+
owner: '0x9cb7e19861665366011899d74e75d4f2a419aeed',
|
|
27
28
|
protocol: {
|
|
28
29
|
id: enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV3,
|
|
29
30
|
name: 'Aave',
|
|
@@ -78,7 +79,7 @@ describe('Feature: strategiesService.ts', () => {
|
|
|
78
79
|
blockNumber: 18015756,
|
|
79
80
|
subscriptionEventData: {
|
|
80
81
|
subId: '379',
|
|
81
|
-
proxy: '
|
|
82
|
+
proxy: '0x9cb7e19861665366011899d74e75d4f2a419aeed',
|
|
82
83
|
subHash: '0xafa4d200be62f171b57b1ae0f4e8348d1ac3f6d0812ad6da74a2adae8037dde1',
|
|
83
84
|
// @ts-ignore
|
|
84
85
|
subStruct: {
|
package/esm/services/utils.d.ts
CHANGED
package/esm/services/utils.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.getRatioStateInfoForAaveCloseStrategy = exports.requireAddresses = exports.requireAddress = exports.isEmptyBytes = exports.isRatioStateUnder = exports.isRatioStateOver = exports.weiToRatioPercentage = exports.ratioPercentageToWei = exports.encodeSubId = exports.compareSubHashes = exports.wethToEthByAddress = exports.wethToEth = exports.ethToWeth = exports.addToObjectIf = exports.addToArrayIf = exports.isAddress = exports.compareAddresses = exports.isUndefined = exports.isDefined = void 0;
|
|
29
|
+
exports.getPositionId = exports.getRatioStateInfoForAaveCloseStrategy = exports.requireAddresses = exports.requireAddress = exports.isEmptyBytes = exports.isRatioStateUnder = exports.isRatioStateOver = exports.weiToRatioPercentage = exports.ratioPercentageToWei = exports.encodeSubId = exports.compareSubHashes = exports.wethToEthByAddress = exports.wethToEth = exports.ethToWeth = exports.addToObjectIf = exports.addToArrayIf = exports.isAddress = exports.compareAddresses = exports.isUndefined = exports.isDefined = void 0;
|
|
30
30
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
31
31
|
const web3Utils = __importStar(require("web3-utils"));
|
|
32
32
|
const web3_eth_abi_1 = __importDefault(require("web3-eth-abi"));
|
|
@@ -125,3 +125,7 @@ function getRatioStateInfoForAaveCloseStrategy(currentRatioState, collAsset, deb
|
|
|
125
125
|
return { shouldFlip, ratioState };
|
|
126
126
|
}
|
|
127
127
|
exports.getRatioStateInfoForAaveCloseStrategy = getRatioStateInfoForAaveCloseStrategy;
|
|
128
|
+
function getPositionId(...args) {
|
|
129
|
+
return args.map(arg => arg.toString().toLowerCase().split(' ').join('_')).join('-');
|
|
130
|
+
}
|
|
131
|
+
exports.getPositionId = getPositionId;
|
|
@@ -359,4 +359,17 @@ describe('Feature: utils.ts', () => {
|
|
|
359
359
|
});
|
|
360
360
|
});
|
|
361
361
|
});
|
|
362
|
+
describe('When testing utils.getPositionId()', () => {
|
|
363
|
+
const examples = [
|
|
364
|
+
[
|
|
365
|
+
'1-aave__v3-0x9cb7e19861665366011899d74e75d4f2a419aeed-0x2f39d218133afab8f2b819b1066c7e434ad94e9e',
|
|
366
|
+
[1, enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV3, '0x9cB7E19861665366011899d74E75d4F2A419aEeD', '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e']
|
|
367
|
+
],
|
|
368
|
+
];
|
|
369
|
+
examples.forEach(([expected, actual]) => {
|
|
370
|
+
it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
|
|
371
|
+
(0, chai_1.expect)((0, utils_1.getPositionId)(...actual)).to.eql(expected);
|
|
372
|
+
});
|
|
373
|
+
});
|
|
374
|
+
});
|
|
362
375
|
});
|
package/esm/types/index.d.ts
CHANGED
|
@@ -143,6 +143,7 @@ export declare namespace Position {
|
|
|
143
143
|
type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay;
|
|
144
144
|
interface Automated {
|
|
145
145
|
chainId: ChainId;
|
|
146
|
+
positionId: string;
|
|
146
147
|
owner: EthereumAddress;
|
|
147
148
|
subId: number;
|
|
148
149
|
subIds?: number[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defisaver/automation-sdk",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./umd/index.js",
|
|
6
6
|
"module": "./esm/index.js",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"repository": "https://github.com/defisaver/automation-sdk",
|
|
22
22
|
"license": "ISC",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@defisaver/eslint-config": "^1.0.
|
|
25
|
-
"@defisaver/sdk": "^1.0.
|
|
26
|
-
"@defisaver/tokens": "^1.5.
|
|
24
|
+
"@defisaver/eslint-config": "^1.0.1",
|
|
25
|
+
"@defisaver/sdk": "^1.0.55",
|
|
26
|
+
"@defisaver/tokens": "^1.5.3",
|
|
27
27
|
"@ethersproject/address": "^5.0.10",
|
|
28
28
|
"@ethersproject/solidity": "^5.0.9",
|
|
29
29
|
"decimal.js": "^10.4.3",
|
|
@@ -13,10 +13,11 @@ describe('Feature: strategiesService.ts', () => {
|
|
|
13
13
|
{
|
|
14
14
|
isEnabled: true,
|
|
15
15
|
chainId: 1,
|
|
16
|
+
positionId: '1-aave__v3-0x9cb7e19861665366011899d74e75d4f2a419aeed-0x2f39d218133afab8f2b819b1066c7e434ad94e9e',
|
|
16
17
|
subHash: '0xafa4d200be62f171b57b1ae0f4e8348d1ac3f6d0812ad6da74a2adae8037dde1',
|
|
17
18
|
blockNumber: 18015756,
|
|
18
19
|
subId: 379,
|
|
19
|
-
owner: '
|
|
20
|
+
owner: '0x9cb7e19861665366011899d74e75d4f2a419aeed',
|
|
20
21
|
protocol: {
|
|
21
22
|
id: ProtocolIdentifiers.StrategiesAutomation.AaveV3,
|
|
22
23
|
name: 'Aave',
|
|
@@ -71,7 +72,7 @@ describe('Feature: strategiesService.ts', () => {
|
|
|
71
72
|
blockNumber: 18015756,
|
|
72
73
|
subscriptionEventData: {
|
|
73
74
|
subId: '379',
|
|
74
|
-
proxy: '
|
|
75
|
+
proxy: '0x9cb7e19861665366011899d74e75d4f2a419aeed',
|
|
75
76
|
subHash: '0xafa4d200be62f171b57b1ae0f4e8348d1ac3f6d0812ad6da74a2adae8037dde1',
|
|
76
77
|
// @ts-ignore
|
|
77
78
|
subStruct:
|
|
@@ -6,13 +6,24 @@ import type {
|
|
|
6
6
|
Position, ParseData, StrategiesToProtocolVersionMapping, BundleOrStrategy, StrategyOrBundleIds,
|
|
7
7
|
BundleInfoUnion, StrategyInfoUnion,
|
|
8
8
|
} from '../types';
|
|
9
|
-
import
|
|
10
|
-
import { ProtocolIdentifiers, Strategies } from '../types/enums';
|
|
9
|
+
import { ChainId, ProtocolIdentifiers, Strategies } from '../types/enums';
|
|
11
10
|
|
|
12
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
getPositionId, getRatioStateInfoForAaveCloseStrategy, isRatioStateOver, wethToEthByAddress,
|
|
13
|
+
} from './utils';
|
|
13
14
|
import * as subDataService from './subDataService';
|
|
14
15
|
import * as triggerService from './triggerService';
|
|
15
16
|
|
|
17
|
+
const SPARK_MARKET_ADDRESSES = {
|
|
18
|
+
[ChainId.Ethereum]: '0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const AAVE_V3_MARKET_ADDRESSES = {
|
|
22
|
+
[ChainId.Ethereum]: '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e',
|
|
23
|
+
[ChainId.Optimism]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
|
|
24
|
+
[ChainId.Arbitrum]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
|
|
25
|
+
};
|
|
26
|
+
|
|
16
27
|
function parseMakerSavingsLiqProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
|
|
17
28
|
const _position = cloneDeep(position);
|
|
18
29
|
|
|
@@ -24,6 +35,8 @@ function parseMakerSavingsLiqProtection(position: Position.Automated, parseData:
|
|
|
24
35
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
25
36
|
_position.strategyData.decoded.subData = subData;
|
|
26
37
|
|
|
38
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
39
|
+
|
|
27
40
|
_position.specific = {
|
|
28
41
|
triggerRepayRatio: Number(triggerData.ratio),
|
|
29
42
|
targetRepayRatio: Number(subData.targetRatio),
|
|
@@ -45,6 +58,8 @@ function parseMakerCloseOnPrice(position: Position.Automated, parseData: ParseDa
|
|
|
45
58
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
46
59
|
_position.strategyData.decoded.subData = subData;
|
|
47
60
|
|
|
61
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
62
|
+
|
|
48
63
|
const isTakeProfit = isRatioStateOver(Number(triggerData.state));
|
|
49
64
|
|
|
50
65
|
_position.strategy.strategyId = isTakeProfit ? Strategies.IdOverrides.TakeProfit : Strategies.IdOverrides.StopLoss;
|
|
@@ -68,6 +83,8 @@ function parseMakerTrailingStop(position: Position.Automated, parseData: ParseDa
|
|
|
68
83
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
69
84
|
_position.strategyData.decoded.subData = subData;
|
|
70
85
|
|
|
86
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
87
|
+
|
|
71
88
|
_position.strategy.strategyId = Strategies.IdOverrides.TrailingStop;
|
|
72
89
|
|
|
73
90
|
_position.specific = {
|
|
@@ -91,6 +108,8 @@ function parseMakerLeverageManagement(position: Position.Automated, parseData: P
|
|
|
91
108
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
92
109
|
_position.strategyData.decoded.subData = subData;
|
|
93
110
|
|
|
111
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
112
|
+
|
|
94
113
|
const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
|
|
95
114
|
|
|
96
115
|
if (isRepay) {
|
|
@@ -126,6 +145,8 @@ function parseLiquityCloseOnPrice(position: Position.Automated, parseData: Parse
|
|
|
126
145
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
127
146
|
_position.strategyData.decoded.subData = subData;
|
|
128
147
|
|
|
148
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
|
|
149
|
+
|
|
129
150
|
const isTakeProfit = isRatioStateOver(Number(triggerData.state));
|
|
130
151
|
|
|
131
152
|
_position.strategy.strategyId = isTakeProfit ? Strategies.IdOverrides.TakeProfit : Strategies.IdOverrides.StopLoss;
|
|
@@ -149,6 +170,8 @@ function parseLiquityTrailingStop(position: Position.Automated, parseData: Parse
|
|
|
149
170
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
150
171
|
_position.strategyData.decoded.subData = subData;
|
|
151
172
|
|
|
173
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
|
|
174
|
+
|
|
152
175
|
_position.strategy.strategyId = Strategies.IdOverrides.TrailingStop;
|
|
153
176
|
|
|
154
177
|
_position.specific = {
|
|
@@ -172,6 +195,8 @@ function parseAaveV2LeverageManagement(position: Position.Automated, parseData:
|
|
|
172
195
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
173
196
|
_position.strategyData.decoded.subData = subData;
|
|
174
197
|
|
|
198
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
199
|
+
|
|
175
200
|
const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
|
|
176
201
|
|
|
177
202
|
if (isRepay) {
|
|
@@ -208,6 +233,8 @@ function parseAaveV3LeverageManagement(position: Position.Automated, parseData:
|
|
|
208
233
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
209
234
|
_position.strategyData.decoded.subData = subData;
|
|
210
235
|
|
|
236
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
237
|
+
|
|
211
238
|
const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
|
|
212
239
|
|
|
213
240
|
if (isRepay) {
|
|
@@ -244,6 +271,8 @@ function parseMorphoAaveV2LeverageManagement(position: Position.Automated, parse
|
|
|
244
271
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
245
272
|
_position.strategyData.decoded.subData = subData;
|
|
246
273
|
|
|
274
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
|
|
275
|
+
|
|
247
276
|
const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
|
|
248
277
|
|
|
249
278
|
if (isRepay) {
|
|
@@ -279,6 +308,8 @@ function parseAaveV3CloseOnPrice(position: Position.Automated, parseData: ParseD
|
|
|
279
308
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
280
309
|
_position.strategyData.decoded.subData = subData;
|
|
281
310
|
|
|
311
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
|
|
312
|
+
|
|
282
313
|
_position.specific = {
|
|
283
314
|
collAsset: subData.collAsset,
|
|
284
315
|
collAssetId: subData.collAssetId,
|
|
@@ -313,6 +344,8 @@ function parseAaveV3CloseOnPriceWithMaximumGasPrice(position: Position.Automated
|
|
|
313
344
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
314
345
|
_position.strategyData.decoded.subData = subData;
|
|
315
346
|
|
|
347
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
|
|
348
|
+
|
|
316
349
|
_position.specific = {
|
|
317
350
|
collAsset: subData.collAsset,
|
|
318
351
|
collAssetId: subData.collAssetId,
|
|
@@ -350,7 +383,10 @@ function parseCompoundV2LeverageManagement(position: Position.Automated, parseDa
|
|
|
350
383
|
|
|
351
384
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
352
385
|
_position.strategyData.decoded.subData = subData;
|
|
353
|
-
_position.owner = triggerData.owner;
|
|
386
|
+
_position.owner = triggerData.owner.toLowerCase();
|
|
387
|
+
|
|
388
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
|
|
389
|
+
|
|
354
390
|
const isRepay = [Strategies.Identifiers.Repay, Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId as Strategies.Identifiers);
|
|
355
391
|
|
|
356
392
|
if (isRepay) {
|
|
@@ -386,7 +422,10 @@ function parseCompoundV3LeverageManagement(position: Position.Automated, parseDa
|
|
|
386
422
|
|
|
387
423
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
388
424
|
_position.strategyData.decoded.subData = subData;
|
|
389
|
-
_position.owner = triggerData.owner;
|
|
425
|
+
_position.owner = triggerData.owner.toLowerCase();
|
|
426
|
+
|
|
427
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
428
|
+
|
|
390
429
|
const isRepay = [Strategies.Identifiers.Repay, Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId as Strategies.Identifiers);
|
|
391
430
|
|
|
392
431
|
if (isRepay) {
|
|
@@ -421,6 +460,8 @@ function parseChickenBondsRebond(position: Position.Automated, parseData: ParseD
|
|
|
421
460
|
_position.strategyData.decoded.triggerData = triggerService.cBondsRebondTrigger.decode(subStruct.triggerData);
|
|
422
461
|
_position.strategyData.decoded.subData = subDataService.cBondsRebondSubData.decode(subStruct.subData);
|
|
423
462
|
|
|
463
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.strategyData.decoded.triggerData.bondId);
|
|
464
|
+
|
|
424
465
|
return _position;
|
|
425
466
|
}
|
|
426
467
|
|
|
@@ -430,9 +471,11 @@ function parseLiquityBondProtection(position: Position.Automated, parseData: Par
|
|
|
430
471
|
const { subStruct } = parseData.subscriptionEventData;
|
|
431
472
|
|
|
432
473
|
const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
|
|
433
|
-
_position.strategyData.decoded.subData = subDataService.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
|
|
434
474
|
|
|
435
475
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
476
|
+
_position.strategyData.decoded.subData = subDataService.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
|
|
477
|
+
|
|
478
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
|
|
436
479
|
|
|
437
480
|
_position.specific = {
|
|
438
481
|
triggerRepayRatio: Number(triggerData.ratio),
|
|
@@ -450,6 +493,8 @@ function parseExchangeDca(position: Position.Automated, parseData: ParseData, ch
|
|
|
450
493
|
_position.strategyData.decoded.triggerData = triggerService.exchangeTimestampTrigger.decode(subStruct.triggerData);
|
|
451
494
|
_position.strategyData.decoded.subData = subDataService.exchangeDcaSubData.decode(subStruct.subData, chainId);
|
|
452
495
|
|
|
496
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, Math.random());
|
|
497
|
+
|
|
453
498
|
return _position;
|
|
454
499
|
}
|
|
455
500
|
|
|
@@ -463,6 +508,8 @@ function parseExchangeLimitOrder(position: Position.Automated, parseData: ParseD
|
|
|
463
508
|
const toTokenDecimals = getAssetInfoByAddress(_position.strategyData.decoded.subData.toToken, chainId).decimals;
|
|
464
509
|
_position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
|
|
465
510
|
|
|
511
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, Math.random());
|
|
512
|
+
|
|
466
513
|
return _position;
|
|
467
514
|
}
|
|
468
515
|
|
|
@@ -478,6 +525,8 @@ function parseLiquityLeverageManagement(position: Position.Automated, parseData:
|
|
|
478
525
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
479
526
|
_position.strategyData.decoded.subData = subData;
|
|
480
527
|
|
|
528
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
|
|
529
|
+
|
|
481
530
|
const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
|
|
482
531
|
|
|
483
532
|
if (isRepay) {
|
|
@@ -514,6 +563,8 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
|
|
|
514
563
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
515
564
|
_position.strategyData.decoded.subData = subData;
|
|
516
565
|
|
|
566
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
567
|
+
|
|
517
568
|
const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
|
|
518
569
|
|
|
519
570
|
if (isRepay) {
|
|
@@ -549,6 +600,8 @@ function parseSparkCloseOnPrice(position: Position.Automated, parseData: ParseDa
|
|
|
549
600
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
550
601
|
_position.strategyData.decoded.subData = subData;
|
|
551
602
|
|
|
603
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, SPARK_MARKET_ADDRESSES[_position.chainId as ChainId.Ethereum]);
|
|
604
|
+
|
|
552
605
|
_position.specific = {
|
|
553
606
|
collAsset: subData.collAsset,
|
|
554
607
|
collAssetId: subData.collAssetId,
|
|
@@ -583,6 +636,8 @@ function parseLiquitySavingsLiqProtection(position: Position.Automated, parseDat
|
|
|
583
636
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
584
637
|
_position.strategyData.decoded.subData = subData;
|
|
585
638
|
|
|
639
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
|
|
640
|
+
|
|
586
641
|
_position.specific = {
|
|
587
642
|
triggerRepayRatio: triggerData.ratio,
|
|
588
643
|
targetRepayRatio: subData.targetRatio,
|
|
@@ -593,7 +648,7 @@ function parseLiquitySavingsLiqProtection(position: Position.Automated, parseDat
|
|
|
593
648
|
return _position;
|
|
594
649
|
}
|
|
595
650
|
|
|
596
|
-
function
|
|
651
|
+
function parseLiquityDebtInFrontRepay(position: Position.Automated, parseData: ParseData): Position.Automated {
|
|
597
652
|
const _position = cloneDeep(position);
|
|
598
653
|
|
|
599
654
|
const { subStruct } = parseData.subscriptionEventData;
|
|
@@ -604,6 +659,8 @@ function parseDebtInFrontRepay(position: Position.Automated, parseData: ParseDat
|
|
|
604
659
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
605
660
|
_position.strategyData.decoded.subData = subData;
|
|
606
661
|
|
|
662
|
+
_position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
|
|
663
|
+
|
|
607
664
|
_position.specific = {
|
|
608
665
|
debtInFrontMin: triggerData.debtInFrontMin,
|
|
609
666
|
targetRepayRatioIncrease: subData.targetRatioIncrease,
|
|
@@ -630,7 +687,7 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
|
|
|
630
687
|
[Strategies.Identifiers.Boost]: parseLiquityLeverageManagement,
|
|
631
688
|
[Strategies.Identifiers.SavingsDsrPayback]: parseLiquitySavingsLiqProtection,
|
|
632
689
|
[Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
|
|
633
|
-
[Strategies.Identifiers.DebtInFrontRepay]:
|
|
690
|
+
[Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
|
|
634
691
|
},
|
|
635
692
|
[ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
|
|
636
693
|
[Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
|
|
@@ -701,8 +758,9 @@ export function parseStrategiesAutomatedPosition(parseData: ParseData): Position
|
|
|
701
758
|
chainId,
|
|
702
759
|
subHash,
|
|
703
760
|
blockNumber,
|
|
761
|
+
positionId: 'positionId parsing not implemented.',
|
|
704
762
|
subId: Number(subId),
|
|
705
|
-
owner: proxy,
|
|
763
|
+
owner: proxy.toLowerCase(),
|
|
706
764
|
protocol: {
|
|
707
765
|
...strategyOrBundleInfo.protocol,
|
|
708
766
|
},
|
|
@@ -4,7 +4,7 @@ import AbiCoder from 'web3-eth-abi';
|
|
|
4
4
|
import { getAssetInfo } from '@defisaver/tokens';
|
|
5
5
|
|
|
6
6
|
import type { EthereumAddress } from '../types';
|
|
7
|
-
import { ChainId, RatioState } from '../types/enums';
|
|
7
|
+
import { ChainId, ProtocolIdentifiers, RatioState } from '../types/enums';
|
|
8
8
|
|
|
9
9
|
import { sparkEncode } from './strategySubService';
|
|
10
10
|
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
weiToRatioPercentage,
|
|
29
29
|
wethToEth,
|
|
30
30
|
wethToEthByAddress,
|
|
31
|
+
getPositionId,
|
|
31
32
|
} from './utils';
|
|
32
33
|
|
|
33
34
|
describe('Feature: utils.ts', () => {
|
|
@@ -411,4 +412,19 @@ describe('Feature: utils.ts', () => {
|
|
|
411
412
|
});
|
|
412
413
|
});
|
|
413
414
|
});
|
|
415
|
+
|
|
416
|
+
describe('When testing utils.getPositionId()', () => {
|
|
417
|
+
const examples: Array<[string, (number | string)[]]> = [
|
|
418
|
+
[
|
|
419
|
+
'1-aave__v3-0x9cb7e19861665366011899d74e75d4f2a419aeed-0x2f39d218133afab8f2b819b1066c7e434ad94e9e',
|
|
420
|
+
[1, ProtocolIdentifiers.StrategiesAutomation.AaveV3, '0x9cB7E19861665366011899d74E75d4F2A419aEeD', '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e']
|
|
421
|
+
],
|
|
422
|
+
];
|
|
423
|
+
|
|
424
|
+
examples.forEach(([expected, actual]) => {
|
|
425
|
+
it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
|
|
426
|
+
expect(getPositionId(...actual)).to.eql(expected);
|
|
427
|
+
});
|
|
428
|
+
});
|
|
429
|
+
});
|
|
414
430
|
});
|
package/src/services/utils.ts
CHANGED
|
@@ -97,4 +97,8 @@ export function getRatioStateInfoForAaveCloseStrategy(
|
|
|
97
97
|
: ratioState = RatioState.OVER;
|
|
98
98
|
}
|
|
99
99
|
return { shouldFlip, ratioState };
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function getPositionId(...args: (number | string)[]) {
|
|
103
|
+
return args.map(arg => arg.toString().toLowerCase().split(' ').join('_')).join('-');
|
|
100
104
|
}
|
package/src/types/index.ts
CHANGED
|
@@ -173,6 +173,7 @@ export declare namespace Position {
|
|
|
173
173
|
|
|
174
174
|
export interface Automated {
|
|
175
175
|
chainId: ChainId,
|
|
176
|
+
positionId: string, // Helps to unify all strategies connected to a specific position
|
|
176
177
|
owner: EthereumAddress,
|
|
177
178
|
subId: number,
|
|
178
179
|
subIds?: number[],
|
package/umd/index.js
CHANGED
|
@@ -905,6 +905,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
905
905
|
/* harmony export */ compareSubHashes: () => (/* binding */ compareSubHashes),
|
|
906
906
|
/* harmony export */ encodeSubId: () => (/* binding */ encodeSubId),
|
|
907
907
|
/* harmony export */ ethToWeth: () => (/* binding */ ethToWeth),
|
|
908
|
+
/* harmony export */ getPositionId: () => (/* binding */ getPositionId),
|
|
908
909
|
/* harmony export */ getRatioStateInfoForAaveCloseStrategy: () => (/* binding */ getRatioStateInfoForAaveCloseStrategy),
|
|
909
910
|
/* harmony export */ isAddress: () => (/* binding */ isAddress),
|
|
910
911
|
/* harmony export */ isDefined: () => (/* binding */ isDefined),
|
|
@@ -1008,6 +1009,12 @@ function getRatioStateInfoForAaveCloseStrategy(currentRatioState, collAsset, deb
|
|
|
1008
1009
|
ratioState
|
|
1009
1010
|
};
|
|
1010
1011
|
}
|
|
1012
|
+
function getPositionId() {
|
|
1013
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
1014
|
+
args[_key2] = arguments[_key2];
|
|
1015
|
+
}
|
|
1016
|
+
return args.map(arg => arg.toString().toLowerCase().split(' ').join('_')).join('-');
|
|
1017
|
+
}
|
|
1011
1018
|
|
|
1012
1019
|
/***/ }),
|
|
1013
1020
|
/* 18 */
|
|
@@ -1609,6 +1616,14 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
|
|
|
1609
1616
|
|
|
1610
1617
|
|
|
1611
1618
|
|
|
1619
|
+
var SPARK_MARKET_ADDRESSES = {
|
|
1620
|
+
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.ChainId.Ethereum]: '0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'
|
|
1621
|
+
};
|
|
1622
|
+
var AAVE_V3_MARKET_ADDRESSES = {
|
|
1623
|
+
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.ChainId.Ethereum]: '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e',
|
|
1624
|
+
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.ChainId.Optimism]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
|
|
1625
|
+
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.ChainId.Arbitrum]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb'
|
|
1626
|
+
};
|
|
1612
1627
|
function parseMakerSavingsLiqProtection(position, parseData) {
|
|
1613
1628
|
var _position = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(position);
|
|
1614
1629
|
var {
|
|
@@ -1618,6 +1633,7 @@ function parseMakerSavingsLiqProtection(position, parseData) {
|
|
|
1618
1633
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.makerRepayFromSavingsSubData.decode(subStruct.subData);
|
|
1619
1634
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1620
1635
|
_position.strategyData.decoded.subData = subData;
|
|
1636
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
1621
1637
|
_position.specific = {
|
|
1622
1638
|
triggerRepayRatio: Number(triggerData.ratio),
|
|
1623
1639
|
targetRepayRatio: Number(subData.targetRatio),
|
|
@@ -1635,6 +1651,7 @@ function parseMakerCloseOnPrice(position, parseData) {
|
|
|
1635
1651
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.makerCloseSubData.decode(subStruct.subData);
|
|
1636
1652
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1637
1653
|
_position.strategyData.decoded.subData = subData;
|
|
1654
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
1638
1655
|
var isTakeProfit = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.isRatioStateOver)(Number(triggerData.state));
|
|
1639
1656
|
_position.strategy.strategyId = isTakeProfit ? _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.IdOverrides.TakeProfit : _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.IdOverrides.StopLoss;
|
|
1640
1657
|
_position.specific = {
|
|
@@ -1652,6 +1669,7 @@ function parseMakerTrailingStop(position, parseData) {
|
|
|
1652
1669
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.makerCloseSubData.decode(subStruct.subData);
|
|
1653
1670
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1654
1671
|
_position.strategyData.decoded.subData = subData;
|
|
1672
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
1655
1673
|
_position.strategy.strategyId = _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.IdOverrides.TrailingStop;
|
|
1656
1674
|
_position.specific = {
|
|
1657
1675
|
triggerPercentage: Number(triggerData.triggerPercentage),
|
|
@@ -1673,6 +1691,7 @@ function parseMakerLeverageManagement(position, parseData) {
|
|
|
1673
1691
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.makerLeverageManagementSubData.decode(subStruct.subData);
|
|
1674
1692
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1675
1693
|
_position.strategyData.decoded.subData = subData;
|
|
1694
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
|
|
1676
1695
|
var isRepay = _position.strategy.strategyId === _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.Repay;
|
|
1677
1696
|
if (isRepay) {
|
|
1678
1697
|
_position.specific = {
|
|
@@ -1702,6 +1721,7 @@ function parseLiquityCloseOnPrice(position, parseData) {
|
|
|
1702
1721
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.liquityCloseSubData.decode(subStruct.subData);
|
|
1703
1722
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1704
1723
|
_position.strategyData.decoded.subData = subData;
|
|
1724
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
1705
1725
|
var isTakeProfit = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.isRatioStateOver)(Number(triggerData.state));
|
|
1706
1726
|
_position.strategy.strategyId = isTakeProfit ? _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.IdOverrides.TakeProfit : _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.IdOverrides.StopLoss;
|
|
1707
1727
|
_position.specific = {
|
|
@@ -1719,6 +1739,7 @@ function parseLiquityTrailingStop(position, parseData) {
|
|
|
1719
1739
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.liquityCloseSubData.decode(subStruct.subData);
|
|
1720
1740
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1721
1741
|
_position.strategyData.decoded.subData = subData;
|
|
1742
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
1722
1743
|
_position.strategy.strategyId = _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.IdOverrides.TrailingStop;
|
|
1723
1744
|
_position.specific = {
|
|
1724
1745
|
triggerPercentage: Number(triggerData.triggerPercentage),
|
|
@@ -1740,6 +1761,7 @@ function parseAaveV2LeverageManagement(position, parseData) {
|
|
|
1740
1761
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.aaveV2LeverageManagementSubData.decode(subStruct.subData);
|
|
1741
1762
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1742
1763
|
_position.strategyData.decoded.subData = subData;
|
|
1764
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
1743
1765
|
var isRepay = _position.strategy.strategyId === _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.Repay;
|
|
1744
1766
|
if (isRepay) {
|
|
1745
1767
|
_position.specific = {
|
|
@@ -1773,6 +1795,7 @@ function parseAaveV3LeverageManagement(position, parseData) {
|
|
|
1773
1795
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.aaveV3LeverageManagementSubData.decode(subStruct.subData);
|
|
1774
1796
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1775
1797
|
_position.strategyData.decoded.subData = subData;
|
|
1798
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
1776
1799
|
var isRepay = _position.strategy.strategyId === _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.Repay;
|
|
1777
1800
|
if (isRepay) {
|
|
1778
1801
|
_position.specific = {
|
|
@@ -1806,6 +1829,7 @@ function parseMorphoAaveV2LeverageManagement(position, parseData) {
|
|
|
1806
1829
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.morphoAaveV2LeverageManagementSubData.decode(subStruct.subData);
|
|
1807
1830
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1808
1831
|
_position.strategyData.decoded.subData = subData;
|
|
1832
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
1809
1833
|
var isRepay = _position.strategy.strategyId === _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.Repay;
|
|
1810
1834
|
if (isRepay) {
|
|
1811
1835
|
_position.specific = {
|
|
@@ -1835,6 +1859,7 @@ function parseAaveV3CloseOnPrice(position, parseData) {
|
|
|
1835
1859
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.aaveV3QuotePriceSubData.decode(subStruct.subData);
|
|
1836
1860
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1837
1861
|
_position.strategyData.decoded.subData = subData;
|
|
1862
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
|
|
1838
1863
|
_position.specific = {
|
|
1839
1864
|
collAsset: subData.collAsset,
|
|
1840
1865
|
collAssetId: subData.collAssetId,
|
|
@@ -1860,6 +1885,7 @@ function parseAaveV3CloseOnPriceWithMaximumGasPrice(position, parseData) {
|
|
|
1860
1885
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.aaveV3QuotePriceSubData.decode(subStruct.subData);
|
|
1861
1886
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1862
1887
|
_position.strategyData.decoded.subData = subData;
|
|
1888
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
|
|
1863
1889
|
_position.specific = {
|
|
1864
1890
|
collAsset: subData.collAsset,
|
|
1865
1891
|
collAssetId: subData.collAssetId,
|
|
@@ -1890,7 +1916,8 @@ function parseCompoundV2LeverageManagement(position, parseData) {
|
|
|
1890
1916
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.compoundV2LeverageManagementSubData.decode(subStruct.subData);
|
|
1891
1917
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1892
1918
|
_position.strategyData.decoded.subData = subData;
|
|
1893
|
-
_position.owner = triggerData.owner;
|
|
1919
|
+
_position.owner = triggerData.owner.toLowerCase();
|
|
1920
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
1894
1921
|
var isRepay = [_types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.Repay, _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
|
|
1895
1922
|
if (isRepay) {
|
|
1896
1923
|
_position.specific = {
|
|
@@ -1924,7 +1951,8 @@ function parseCompoundV3LeverageManagement(position, parseData) {
|
|
|
1924
1951
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.compoundV3LeverageManagementSubData.decode(subStruct.subData);
|
|
1925
1952
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1926
1953
|
_position.strategyData.decoded.subData = subData;
|
|
1927
|
-
_position.owner = triggerData.owner;
|
|
1954
|
+
_position.owner = triggerData.owner.toLowerCase();
|
|
1955
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
1928
1956
|
var isRepay = [_types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.Repay, _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
|
|
1929
1957
|
if (isRepay) {
|
|
1930
1958
|
_position.specific = {
|
|
@@ -1953,6 +1981,7 @@ function parseChickenBondsRebond(position, parseData) {
|
|
|
1953
1981
|
} = parseData.subscriptionEventData;
|
|
1954
1982
|
_position.strategyData.decoded.triggerData = _triggerService__WEBPACK_IMPORTED_MODULE_6__.cBondsRebondTrigger.decode(subStruct.triggerData);
|
|
1955
1983
|
_position.strategyData.decoded.subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.cBondsRebondSubData.decode(subStruct.subData);
|
|
1984
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.strategyData.decoded.triggerData.bondId);
|
|
1956
1985
|
return _position;
|
|
1957
1986
|
}
|
|
1958
1987
|
function parseLiquityBondProtection(position, parseData) {
|
|
@@ -1961,8 +1990,9 @@ function parseLiquityBondProtection(position, parseData) {
|
|
|
1961
1990
|
subStruct
|
|
1962
1991
|
} = parseData.subscriptionEventData;
|
|
1963
1992
|
var triggerData = _triggerService__WEBPACK_IMPORTED_MODULE_6__.liquityRatioTrigger.decode(subStruct.triggerData);
|
|
1964
|
-
_position.strategyData.decoded.subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
|
|
1965
1993
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
1994
|
+
_position.strategyData.decoded.subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
|
|
1995
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
1966
1996
|
_position.specific = {
|
|
1967
1997
|
triggerRepayRatio: Number(triggerData.ratio),
|
|
1968
1998
|
targetRepayRatio: Infinity,
|
|
@@ -1978,6 +2008,7 @@ function parseExchangeDca(position, parseData, chainId) {
|
|
|
1978
2008
|
} = parseData.subscriptionEventData;
|
|
1979
2009
|
_position.strategyData.decoded.triggerData = _triggerService__WEBPACK_IMPORTED_MODULE_6__.exchangeTimestampTrigger.decode(subStruct.triggerData);
|
|
1980
2010
|
_position.strategyData.decoded.subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.exchangeDcaSubData.decode(subStruct.subData, chainId);
|
|
2011
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
|
|
1981
2012
|
return _position;
|
|
1982
2013
|
}
|
|
1983
2014
|
function parseExchangeLimitOrder(position, parseData, chainId) {
|
|
@@ -1989,6 +2020,7 @@ function parseExchangeLimitOrder(position, parseData, chainId) {
|
|
|
1989
2020
|
var fromTokenDecimals = (0,_defisaver_tokens__WEBPACK_IMPORTED_MODULE_0__.getAssetInfoByAddress)(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
|
|
1990
2021
|
var toTokenDecimals = (0,_defisaver_tokens__WEBPACK_IMPORTED_MODULE_0__.getAssetInfoByAddress)(_position.strategyData.decoded.subData.toToken, chainId).decimals;
|
|
1991
2022
|
_position.strategyData.decoded.triggerData = _triggerService__WEBPACK_IMPORTED_MODULE_6__.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
|
|
2023
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
|
|
1992
2024
|
return _position;
|
|
1993
2025
|
}
|
|
1994
2026
|
function parseLiquityLeverageManagement(position, parseData) {
|
|
@@ -2004,6 +2036,7 @@ function parseLiquityLeverageManagement(position, parseData) {
|
|
|
2004
2036
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.liquityLeverageManagementSubData.decode(subStruct.subData);
|
|
2005
2037
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
2006
2038
|
_position.strategyData.decoded.subData = subData;
|
|
2039
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
2007
2040
|
var isRepay = _position.strategy.strategyId === _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.Repay;
|
|
2008
2041
|
if (isRepay) {
|
|
2009
2042
|
_position.specific = {
|
|
@@ -2037,6 +2070,7 @@ function parseSparkLeverageManagement(position, parseData) {
|
|
|
2037
2070
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.sparkLeverageManagementSubData.decode(subStruct.subData);
|
|
2038
2071
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
2039
2072
|
_position.strategyData.decoded.subData = subData;
|
|
2073
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
|
|
2040
2074
|
var isRepay = _position.strategy.strategyId === _types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.Repay;
|
|
2041
2075
|
if (isRepay) {
|
|
2042
2076
|
_position.specific = {
|
|
@@ -2066,6 +2100,7 @@ function parseSparkCloseOnPrice(position, parseData) {
|
|
|
2066
2100
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.sparkQuotePriceSubData.decode(subStruct.subData);
|
|
2067
2101
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
2068
2102
|
_position.strategyData.decoded.subData = subData;
|
|
2103
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, SPARK_MARKET_ADDRESSES[_position.chainId]);
|
|
2069
2104
|
_position.specific = {
|
|
2070
2105
|
collAsset: subData.collAsset,
|
|
2071
2106
|
collAssetId: subData.collAssetId,
|
|
@@ -2091,6 +2126,7 @@ function parseLiquitySavingsLiqProtection(position, parseData) {
|
|
|
2091
2126
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.liquityRepayFromSavingsSubData.decode(subStruct.subData);
|
|
2092
2127
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
2093
2128
|
_position.strategyData.decoded.subData = subData;
|
|
2129
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
2094
2130
|
_position.specific = {
|
|
2095
2131
|
triggerRepayRatio: triggerData.ratio,
|
|
2096
2132
|
targetRepayRatio: subData.targetRatio,
|
|
@@ -2099,7 +2135,7 @@ function parseLiquitySavingsLiqProtection(position, parseData) {
|
|
|
2099
2135
|
};
|
|
2100
2136
|
return _position;
|
|
2101
2137
|
}
|
|
2102
|
-
function
|
|
2138
|
+
function parseLiquityDebtInFrontRepay(position, parseData) {
|
|
2103
2139
|
var _position = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(position);
|
|
2104
2140
|
var {
|
|
2105
2141
|
subStruct
|
|
@@ -2108,6 +2144,7 @@ function parseDebtInFrontRepay(position, parseData) {
|
|
|
2108
2144
|
var subData = _subDataService__WEBPACK_IMPORTED_MODULE_5__.liquityDebtInFrontRepaySubData.decode(subStruct.subData);
|
|
2109
2145
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
2110
2146
|
_position.strategyData.decoded.subData = subData;
|
|
2147
|
+
_position.positionId = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
|
|
2111
2148
|
_position.specific = {
|
|
2112
2149
|
debtInFrontMin: triggerData.debtInFrontMin,
|
|
2113
2150
|
targetRepayRatioIncrease: subData.targetRatioIncrease
|
|
@@ -2132,7 +2169,7 @@ var parsingMethodsMapping = {
|
|
|
2132
2169
|
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.Boost]: parseLiquityLeverageManagement,
|
|
2133
2170
|
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.SavingsDsrPayback]: parseLiquitySavingsLiqProtection,
|
|
2134
2171
|
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
|
|
2135
|
-
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.DebtInFrontRepay]:
|
|
2172
|
+
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay
|
|
2136
2173
|
},
|
|
2137
2174
|
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
|
|
2138
2175
|
[_types_enums__WEBPACK_IMPORTED_MODULE_3__.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
|
|
@@ -2201,8 +2238,9 @@ function parseStrategiesAutomatedPosition(parseData) {
|
|
|
2201
2238
|
chainId,
|
|
2202
2239
|
subHash,
|
|
2203
2240
|
blockNumber,
|
|
2241
|
+
positionId: 'positionId parsing not implemented.',
|
|
2204
2242
|
subId: Number(subId),
|
|
2205
|
-
owner: proxy,
|
|
2243
|
+
owner: proxy.toLowerCase(),
|
|
2206
2244
|
protocol: _objectSpread({}, strategyOrBundleInfo.protocol),
|
|
2207
2245
|
strategy: _objectSpread({
|
|
2208
2246
|
isBundle: subStruct.isBundle
|
|
@@ -21088,6 +21126,7 @@ const actionAddresses = {
|
|
|
21088
21126
|
AaveCollateralSwitch: '0xFf5dfF1B90bd5Aa6E12768AB497dB90cc9DE6F5d',
|
|
21089
21127
|
AaveUnstake: '0x2FE4024e350cD2c64D2fd0Db5d16F5cE54Ca0E09',
|
|
21090
21128
|
AaveClaimAAVE: '0xd52855bD011F3D87565f9040DdE2A59fB1b27b15',
|
|
21129
|
+
AaveClaimStkAave: '0x5Dcd9Dc0185a6Ab07a31e5284D16Ce9f0A79Ce99',
|
|
21091
21130
|
// aave v3
|
|
21092
21131
|
AaveV3Withdraw: '0x9D4e4b26A5E2e6Dad30C5d95F5cE78A8310F04C2',
|
|
21093
21132
|
AaveV3SwapBorrowRateMode: '0x630F530Ac523C935cf2528E62D0A06F8900C5b1B',
|
|
@@ -21317,6 +21356,7 @@ const actionAddresses = {
|
|
|
21317
21356
|
UnwrapEth: '0xcF91546046F16B3c38b890CC508E280BEffa66b9',
|
|
21318
21357
|
SendToken: '0x1420f4977E7B71AFddccBFc6F6e1505CefdF99F0',
|
|
21319
21358
|
PullToken: '0x5B0B7E38C2a8e46CfAe13c360BC5927570BeEe94',
|
|
21359
|
+
TokenBalance: '0xc44bcE580B1b3339fE9272D3bC3d6566083ea59C',
|
|
21320
21360
|
// Flashloan
|
|
21321
21361
|
FLAaveV3: '0x04ce4b2a9F524d976a8eD8a49B9313C5a2C3ccAD',
|
|
21322
21362
|
FLBalancer: '0x862E533198C9656B75bB6A5dDF0953F7ED5E8507',
|
|
@@ -22224,9 +22264,9 @@ class MakerBoostCompositeAction extends _Action__WEBPACK_IMPORTED_MODULE_0__.Act
|
|
|
22224
22264
|
this.args[0],
|
|
22225
22265
|
this.args[1],
|
|
22226
22266
|
this.args[4],
|
|
22227
|
-
this.args[
|
|
22228
|
-
this.args[
|
|
22229
|
-
this.args[
|
|
22267
|
+
this.args[7][0],
|
|
22268
|
+
this.args[7][1],
|
|
22269
|
+
this.args[7][2],
|
|
22230
22270
|
];
|
|
22231
22271
|
}
|
|
22232
22272
|
}
|
|
@@ -22285,9 +22325,9 @@ class MakerRepayCompositeAction extends _Action__WEBPACK_IMPORTED_MODULE_0__.Act
|
|
|
22285
22325
|
this.args[0],
|
|
22286
22326
|
this.args[1],
|
|
22287
22327
|
this.args[4],
|
|
22288
|
-
this.args[
|
|
22289
|
-
this.args[
|
|
22290
|
-
this.args[
|
|
22328
|
+
this.args[7][0],
|
|
22329
|
+
this.args[7][1],
|
|
22330
|
+
this.args[7][2],
|
|
22291
22331
|
];
|
|
22292
22332
|
}
|
|
22293
22333
|
}
|