@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.
@@ -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 parseDebtInFrontRepay(position, parseData) {
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]: parseDebtInFrontRepay,
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: '0x9cB7E19861665366011899d74E75d4F2A419aEeD',
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: '0x9cB7E19861665366011899d74E75d4F2A419aEeD',
82
+ proxy: '0x9cb7e19861665366011899d74e75d4f2a419aeed',
82
83
  subHash: '0xafa4d200be62f171b57b1ae0f4e8348d1ac3f6d0812ad6da74a2adae8037dde1',
83
84
  // @ts-ignore
84
85
  subStruct: {
@@ -22,3 +22,4 @@ export declare function getRatioStateInfoForAaveCloseStrategy(currentRatioState:
22
22
  shouldFlip: boolean;
23
23
  ratioState: RatioState;
24
24
  };
25
+ export declare function getPositionId(...args: (number | string)[]): string;
@@ -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
  });
@@ -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.9",
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.0",
25
- "@defisaver/sdk": "^1.0.53",
26
- "@defisaver/tokens": "^1.5.1",
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: '0x9cB7E19861665366011899d74E75d4F2A419aEeD',
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: '0x9cB7E19861665366011899d74E75d4F2A419aEeD',
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 type { ChainId } from '../types/enums';
10
- import { ProtocolIdentifiers, Strategies } from '../types/enums';
9
+ import { ChainId, ProtocolIdentifiers, Strategies } from '../types/enums';
11
10
 
12
- import { getRatioStateInfoForAaveCloseStrategy, isRatioStateOver, wethToEthByAddress } from './utils';
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 parseDebtInFrontRepay(position: Position.Automated, parseData: ParseData): Position.Automated {
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]: parseDebtInFrontRepay,
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
  });
@@ -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
  }
@@ -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 parseDebtInFrontRepay(position, parseData) {
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]: parseDebtInFrontRepay
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[5][0],
22228
- this.args[5][1],
22229
- this.args[5][2],
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[5][0],
22289
- this.args[5][1],
22290
- this.args[5][2],
22328
+ this.args[7][0],
22329
+ this.args[7][1],
22330
+ this.args[7][2],
22291
22331
  ];
22292
22332
  }
22293
22333
  }