@defisaver/automation-sdk 3.2.0 → 3.2.2
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/.env +4 -5
- package/cjs/automation/private/StrategiesAutomation.js +5 -6
- package/cjs/constants/index.js +70 -0
- package/cjs/services/strategiesService.js +174 -0
- package/cjs/services/strategySubService.d.ts +11 -1
- package/cjs/services/strategySubService.js +42 -1
- package/cjs/services/subDataService.d.ts +63 -1
- package/cjs/services/subDataService.js +195 -1
- package/cjs/services/triggerService.d.ts +43 -0
- package/cjs/services/triggerService.js +81 -1
- package/cjs/services/utils.d.ts +6 -1
- package/cjs/services/utils.js +52 -1
- package/cjs/types/contracts/generated/SubStorage.d.ts +4 -0
- package/cjs/types/enums.d.ts +45 -5
- package/cjs/types/enums.js +45 -1
- package/cjs/types/index.d.ts +26 -2
- package/esm/automation/private/StrategiesAutomation.js +5 -6
- package/esm/constants/index.js +70 -0
- package/esm/services/strategiesService.js +172 -1
- package/esm/services/strategySubService.d.ts +11 -1
- package/esm/services/strategySubService.js +43 -2
- package/esm/services/subDataService.d.ts +63 -1
- package/esm/services/subDataService.js +195 -1
- package/esm/services/triggerService.d.ts +43 -0
- package/esm/services/triggerService.js +80 -0
- package/esm/services/utils.d.ts +6 -1
- package/esm/services/utils.js +50 -1
- package/esm/types/contracts/generated/SubStorage.d.ts +4 -0
- package/esm/types/enums.d.ts +45 -5
- package/esm/types/enums.js +44 -0
- package/esm/types/index.d.ts +26 -2
- package/package.json +3 -5
- package/src/automation/private/StrategiesAutomation.ts +5 -5
- package/src/constants/index.ts +70 -0
- package/src/services/strategiesService.ts +224 -1
- package/src/services/strategySubService.ts +111 -1
- package/src/services/subDataService.ts +271 -2
- package/src/services/triggerService.ts +125 -0
- package/src/services/utils.ts +60 -1
- package/src/types/enums.ts +44 -0
- package/src/types/index.ts +34 -1
package/.env
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
RPC_42161=https://
|
|
5
|
-
RPC_8453=https://base-mainnet.g.alchemy.com/v2/4jm0fn2xvapd3pDpmdE8Y1rZKEp71U0Y
|
|
1
|
+
RPC_1 = https://eth-mainnet.alchemyapi.io/v2/Pwh-hdbsP7Bf0CP_UMw4_Pw-NfHhSpIA
|
|
2
|
+
RPC_10 = https://base-mainnet.g.alchemy.com/v2/TERsAaPNcA7sgCVHHAMBvd95UtT4wCEf
|
|
3
|
+
RPC_8453 = https://arb-mainnet.alchemyapi.io/v2/Pwh-hdbsP7Bf0CP_UMw4_Pw-NfHhSpIA
|
|
4
|
+
RPC_42161 = https://opt-mainnet.g.alchemy.com/v2/Pwh-hdbsP7Bf0CP_UMw4_Pw-NfHhSpIA
|
|
@@ -126,7 +126,6 @@ class StrategiesAutomation extends Automation_1.default {
|
|
|
126
126
|
}
|
|
127
127
|
});
|
|
128
128
|
if (mergeExtension.length > 0) {
|
|
129
|
-
console.error('Not all merge-able extensions were used', mergeExtension);
|
|
130
129
|
subscriptions = [...subscriptions, ...mergeExtension.map((s) => (Object.assign(Object.assign({}, s), { subIds: [s.subId] })))];
|
|
131
130
|
}
|
|
132
131
|
return subscriptions;
|
|
@@ -150,10 +149,10 @@ class StrategiesAutomation extends Automation_1.default {
|
|
|
150
149
|
const replaceSubWithUpdate = (index) => __awaiter(this, void 0, void 0, function* () {
|
|
151
150
|
var _a;
|
|
152
151
|
const sub = strategiesSubs[index];
|
|
153
|
-
let latestUpdate = subscriptionEvents[index].returnValues;
|
|
152
|
+
let latestUpdate = Object.assign({}, subscriptionEvents[index].returnValues);
|
|
154
153
|
if (latestUpdate.subHash !== (sub === null || sub === void 0 ? void 0 : sub.strategySubHash)) {
|
|
155
154
|
const updates = yield this.getUpdateDataEventsFromSubStorage(Object.assign(Object.assign({}, (0, utils_1.addToObjectIf)(!!_options, _options)), { filter: { subId: latestUpdate.subId } }));
|
|
156
|
-
latestUpdate = Object.assign(Object.assign({}, latestUpdate), (_a = updates === null || updates === void 0 ? void 0 : updates[updates.length - 1]) === null || _a === void 0 ? void 0 : _a.returnValues);
|
|
155
|
+
latestUpdate = Object.assign(Object.assign(Object.assign({}, latestUpdate), (_a = updates === null || updates === void 0 ? void 0 : updates[updates.length - 1]) === null || _a === void 0 ? void 0 : _a.returnValues), { 2: latestUpdate[2] });
|
|
157
156
|
}
|
|
158
157
|
subscriptions.push(this.getParsedSubscriptions({
|
|
159
158
|
chainId: this.chainId,
|
|
@@ -162,12 +161,12 @@ class StrategiesAutomation extends Automation_1.default {
|
|
|
162
161
|
strategiesSubsData: sub,
|
|
163
162
|
}));
|
|
164
163
|
});
|
|
165
|
-
|
|
164
|
+
// eslint-disable-next-line func-names
|
|
165
|
+
const pool = new es6_promise_pool_1.default(function* () {
|
|
166
166
|
for (let index = 0; index < strategiesSubs.length; index++) {
|
|
167
167
|
yield replaceSubWithUpdate(index);
|
|
168
168
|
}
|
|
169
|
-
};
|
|
170
|
-
const pool = new es6_promise_pool_1.default(generatePromises, 50);
|
|
169
|
+
}, 50);
|
|
171
170
|
yield pool.start();
|
|
172
171
|
if (options === null || options === void 0 ? void 0 : options.mergeSubs) {
|
|
173
172
|
subscriptions = this.mergeSubs(subscriptions);
|
package/cjs/constants/index.js
CHANGED
|
@@ -96,6 +96,11 @@ exports.MAINNET_STRATEGIES_INFO = {
|
|
|
96
96
|
strategyId: enums_1.Strategies.Identifiers.Payback,
|
|
97
97
|
protocol: exports.PROTOCOLS.CrvUSD,
|
|
98
98
|
},
|
|
99
|
+
[enums_1.Strategies.MainnetIds.LIQUITY_V2_PAYBACK]: {
|
|
100
|
+
strategyOrBundleId: enums_1.Strategies.MainnetIds.LIQUITY_V2_PAYBACK,
|
|
101
|
+
strategyId: enums_1.Strategies.Identifiers.Payback,
|
|
102
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
103
|
+
},
|
|
99
104
|
};
|
|
100
105
|
exports.OPTIMISM_STRATEGIES_INFO = {
|
|
101
106
|
[enums_1.Strategies.OptimismIds.EXCHANGE_DCA]: {
|
|
@@ -353,6 +358,46 @@ exports.MAINNET_BUNDLES_INFO = {
|
|
|
353
358
|
strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
|
|
354
359
|
protocol: exports.PROTOCOLS.AaveV3,
|
|
355
360
|
},
|
|
361
|
+
[enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY]: {
|
|
362
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY,
|
|
363
|
+
strategyId: enums_1.Strategies.Identifiers.Repay,
|
|
364
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
365
|
+
},
|
|
366
|
+
[enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST]: {
|
|
367
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST,
|
|
368
|
+
strategyId: enums_1.Strategies.Identifiers.Boost,
|
|
369
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
370
|
+
},
|
|
371
|
+
[enums_1.Bundles.MainnetIds.LIQUITY_V2_CLOSE]: {
|
|
372
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_CLOSE,
|
|
373
|
+
strategyId: enums_1.Strategies.Identifiers.CloseOnPrice,
|
|
374
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
375
|
+
},
|
|
376
|
+
[enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY_ON_PRICE]: {
|
|
377
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY_ON_PRICE,
|
|
378
|
+
strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
|
|
379
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
380
|
+
},
|
|
381
|
+
[enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST_ON_PRICE]: {
|
|
382
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST_ON_PRICE,
|
|
383
|
+
strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
|
|
384
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
385
|
+
},
|
|
386
|
+
[enums_1.Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
|
|
387
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE,
|
|
388
|
+
strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
|
|
389
|
+
protocol: exports.PROTOCOLS.MorphoBlue,
|
|
390
|
+
},
|
|
391
|
+
[enums_1.Bundles.MainnetIds.FLUID_T1_REPAY]: {
|
|
392
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.FLUID_T1_REPAY,
|
|
393
|
+
strategyId: enums_1.Strategies.Identifiers.Repay,
|
|
394
|
+
protocol: exports.PROTOCOLS.FluidT1,
|
|
395
|
+
},
|
|
396
|
+
[enums_1.Bundles.MainnetIds.FLUID_T1_BOOST]: {
|
|
397
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.FLUID_T1_BOOST,
|
|
398
|
+
strategyId: enums_1.Strategies.Identifiers.Boost,
|
|
399
|
+
protocol: exports.PROTOCOLS.FluidT1,
|
|
400
|
+
},
|
|
356
401
|
};
|
|
357
402
|
exports.OPTIMISM_BUNDLES_INFO = {
|
|
358
403
|
[enums_1.Bundles.OptimismIds.AAVE_V3_REPAY]: {
|
|
@@ -437,6 +482,21 @@ exports.BASE_BUNDLES_INFO = {
|
|
|
437
482
|
strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
|
|
438
483
|
protocol: exports.PROTOCOLS.AaveV3,
|
|
439
484
|
},
|
|
485
|
+
[enums_1.Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
|
|
486
|
+
strategyOrBundleId: enums_1.Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE,
|
|
487
|
+
strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
|
|
488
|
+
protocol: exports.PROTOCOLS.MorphoBlue,
|
|
489
|
+
},
|
|
490
|
+
[enums_1.Bundles.BaseIds.FLUID_T1_REPAY]: {
|
|
491
|
+
strategyOrBundleId: enums_1.Bundles.BaseIds.FLUID_T1_REPAY,
|
|
492
|
+
strategyId: enums_1.Strategies.Identifiers.Repay,
|
|
493
|
+
protocol: exports.PROTOCOLS.FluidT1,
|
|
494
|
+
},
|
|
495
|
+
[enums_1.Bundles.BaseIds.FLUID_T1_BOOST]: {
|
|
496
|
+
strategyOrBundleId: enums_1.Bundles.BaseIds.FLUID_T1_BOOST,
|
|
497
|
+
strategyId: enums_1.Strategies.Identifiers.Boost,
|
|
498
|
+
protocol: exports.PROTOCOLS.FluidT1,
|
|
499
|
+
},
|
|
440
500
|
};
|
|
441
501
|
exports.ARBITRUM_BUNDLES_INFO = {
|
|
442
502
|
[enums_1.Bundles.ArbitrumIds.AAVE_V3_REPAY]: {
|
|
@@ -479,6 +539,16 @@ exports.ARBITRUM_BUNDLES_INFO = {
|
|
|
479
539
|
strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
|
|
480
540
|
protocol: exports.PROTOCOLS.AaveV3,
|
|
481
541
|
},
|
|
542
|
+
[enums_1.Bundles.ArbitrumIds.FLUID_T1_REPAY]: {
|
|
543
|
+
strategyOrBundleId: enums_1.Bundles.ArbitrumIds.FLUID_T1_REPAY,
|
|
544
|
+
strategyId: enums_1.Strategies.Identifiers.Repay,
|
|
545
|
+
protocol: exports.PROTOCOLS.FluidT1,
|
|
546
|
+
},
|
|
547
|
+
[enums_1.Bundles.ArbitrumIds.FLUID_T1_BOOST]: {
|
|
548
|
+
strategyOrBundleId: enums_1.Bundles.ArbitrumIds.FLUID_T1_BOOST,
|
|
549
|
+
strategyId: enums_1.Strategies.Identifiers.Boost,
|
|
550
|
+
protocol: exports.PROTOCOLS.FluidT1,
|
|
551
|
+
},
|
|
482
552
|
};
|
|
483
553
|
exports.BUNDLES_INFO = {
|
|
484
554
|
[enums_1.ChainId.Ethereum]: exports.MAINNET_BUNDLES_INFO,
|
|
@@ -22,15 +22,20 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
29
|
exports.parseStrategiesAutomatedPosition = void 0;
|
|
27
30
|
const tokens_1 = require("@defisaver/tokens");
|
|
28
31
|
const lodash_1 = require("lodash");
|
|
32
|
+
const web3_1 = __importDefault(require("web3"));
|
|
29
33
|
const constants_1 = require("../constants");
|
|
30
34
|
const enums_1 = require("../types/enums");
|
|
31
35
|
const utils_1 = require("./utils");
|
|
32
36
|
const subDataService = __importStar(require("./subDataService"));
|
|
33
37
|
const triggerService = __importStar(require("./triggerService"));
|
|
38
|
+
const web3 = new web3_1.default();
|
|
34
39
|
const SPARK_MARKET_ADDRESSES = {
|
|
35
40
|
[enums_1.ChainId.Ethereum]: '0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE',
|
|
36
41
|
};
|
|
@@ -429,6 +434,39 @@ function parseLiquityLeverageManagement(position, parseData) {
|
|
|
429
434
|
_position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
|
|
430
435
|
return _position;
|
|
431
436
|
}
|
|
437
|
+
function parseLiquityV2LeverageManagement(position, parseData) {
|
|
438
|
+
const _position = (0, lodash_1.cloneDeep)(position);
|
|
439
|
+
const { subStruct, subId, subHash } = parseData.subscriptionEventData;
|
|
440
|
+
const { isEnabled } = parseData.strategiesSubsData;
|
|
441
|
+
const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
|
|
442
|
+
const subData = subDataService.liquityV2LeverageManagementSubData.decode(subStruct.subData);
|
|
443
|
+
_position.strategyData.decoded.triggerData = triggerData;
|
|
444
|
+
_position.strategyData.decoded.subData = subData;
|
|
445
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
|
|
446
|
+
const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
|
|
447
|
+
if (isRepay) {
|
|
448
|
+
_position.specific = {
|
|
449
|
+
triggerRepayRatio: triggerData.ratio,
|
|
450
|
+
targetRepayRatio: subData.targetRatio,
|
|
451
|
+
repayEnabled: isEnabled,
|
|
452
|
+
subId1: Number(subId),
|
|
453
|
+
subHashRepay: subHash,
|
|
454
|
+
mergeWithId: enums_1.Strategies.Identifiers.Boost,
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
_position.specific = {
|
|
459
|
+
triggerBoostRatio: triggerData.ratio,
|
|
460
|
+
targetBoostRatio: subData.targetRatio,
|
|
461
|
+
boostEnabled: isEnabled,
|
|
462
|
+
subId2: Number(subId),
|
|
463
|
+
subHashBoost: subHash,
|
|
464
|
+
mergeId: enums_1.Strategies.Identifiers.Boost,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
_position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
|
|
468
|
+
return _position;
|
|
469
|
+
}
|
|
432
470
|
function parseSparkLeverageManagement(position, parseData) {
|
|
433
471
|
const _position = (0, lodash_1.cloneDeep)(position);
|
|
434
472
|
const { subStruct, subId } = parseData.subscriptionEventData;
|
|
@@ -590,6 +628,32 @@ function parseMorphoBlueLeverageManagement(position, parseData) {
|
|
|
590
628
|
_position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
|
|
591
629
|
return _position;
|
|
592
630
|
}
|
|
631
|
+
function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
|
|
632
|
+
const _position = (0, lodash_1.cloneDeep)(position);
|
|
633
|
+
const { subStruct } = parseData.subscriptionEventData;
|
|
634
|
+
const triggerData = triggerService.morphoBluePriceTrigger.decode(subStruct.triggerData);
|
|
635
|
+
const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.decode(subStruct.subData);
|
|
636
|
+
_position.strategyData.decoded.triggerData = triggerData;
|
|
637
|
+
_position.strategyData.decoded.subData = subData;
|
|
638
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
|
|
639
|
+
const marketIdEncodedData = web3.eth.abi.encodeParameters(['address', 'address', 'address', 'address', 'uint256'], [
|
|
640
|
+
subData.loanToken,
|
|
641
|
+
subData.collToken,
|
|
642
|
+
subData.oracle,
|
|
643
|
+
subData.irm,
|
|
644
|
+
subData.lltv,
|
|
645
|
+
]);
|
|
646
|
+
const marketId = web3.utils.keccak256(marketIdEncodedData);
|
|
647
|
+
_position.specific = {
|
|
648
|
+
subHash: _position.subHash,
|
|
649
|
+
marketId,
|
|
650
|
+
collAsset: subData.collToken,
|
|
651
|
+
debtAsset: subData.loanToken,
|
|
652
|
+
price: triggerData.price,
|
|
653
|
+
ratio: subData.targetRatio,
|
|
654
|
+
};
|
|
655
|
+
return _position;
|
|
656
|
+
}
|
|
593
657
|
function parseAaveV3LeverageManagementOnPrice(position, parseData) {
|
|
594
658
|
const _position = (0, lodash_1.cloneDeep)(position);
|
|
595
659
|
const { subStruct } = parseData.subscriptionEventData;
|
|
@@ -611,6 +675,103 @@ function parseAaveV3LeverageManagementOnPrice(position, parseData) {
|
|
|
611
675
|
};
|
|
612
676
|
return _position;
|
|
613
677
|
}
|
|
678
|
+
function parseLiquityV2CloseOnPrice(position, parseData) {
|
|
679
|
+
const _position = (0, lodash_1.cloneDeep)(position);
|
|
680
|
+
const { subStruct } = parseData.subscriptionEventData;
|
|
681
|
+
const triggerData = triggerService.closePriceTrigger.decode(subStruct.triggerData);
|
|
682
|
+
const subData = subDataService.liquityV2CloseSubData.decode(subStruct.subData);
|
|
683
|
+
_position.strategyData.decoded.triggerData = triggerData;
|
|
684
|
+
_position.strategyData.decoded.subData = subData;
|
|
685
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.troveId, subData.market);
|
|
686
|
+
const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
|
|
687
|
+
// User can have:
|
|
688
|
+
// - Only TakeProfit
|
|
689
|
+
// - Only StopLoss
|
|
690
|
+
// - Both
|
|
691
|
+
// TODO: see on frontend what specific data we need here because stop-loss and take-profit is one bundle now
|
|
692
|
+
_position.strategy.strategyId = enums_1.Strategies.Identifiers.CloseOnPrice;
|
|
693
|
+
_position.specific = {
|
|
694
|
+
market: subData.market,
|
|
695
|
+
troveId: subData.troveId,
|
|
696
|
+
stopLossPrice: triggerData.lowerPrice,
|
|
697
|
+
takeProfitPrice: triggerData.upperPrice,
|
|
698
|
+
closeToAssetAddr: triggerData.tokenAddr,
|
|
699
|
+
takeProfitType,
|
|
700
|
+
stopLossType,
|
|
701
|
+
};
|
|
702
|
+
return _position;
|
|
703
|
+
}
|
|
704
|
+
function parseLiquityV2LeverageManagementOnPrice(position, parseData) {
|
|
705
|
+
const _position = (0, lodash_1.cloneDeep)(position);
|
|
706
|
+
const { subStruct } = parseData.subscriptionEventData;
|
|
707
|
+
const triggerData = triggerService.liquityV2QuotePriceTrigger.decode(subStruct.triggerData);
|
|
708
|
+
const subData = subDataService.liquityV2LeverageManagementOnPriceSubData.decode(subStruct.subData);
|
|
709
|
+
_position.strategyData.decoded.triggerData = triggerData;
|
|
710
|
+
_position.strategyData.decoded.subData = subData;
|
|
711
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
|
|
712
|
+
_position.specific = {
|
|
713
|
+
subHash: _position.subHash,
|
|
714
|
+
market: subData.market,
|
|
715
|
+
troveId: subData.troveId,
|
|
716
|
+
collAsset: subData.collToken,
|
|
717
|
+
debtAsset: subData.boldToken,
|
|
718
|
+
price: triggerData.price,
|
|
719
|
+
ratio: subData.targetRatio,
|
|
720
|
+
ratioState: triggerData.ratioState,
|
|
721
|
+
};
|
|
722
|
+
return _position;
|
|
723
|
+
}
|
|
724
|
+
function parseLiquityV2Payback(position, parseData) {
|
|
725
|
+
const _position = (0, lodash_1.cloneDeep)(position);
|
|
726
|
+
const { subStruct } = parseData.subscriptionEventData;
|
|
727
|
+
const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
|
|
728
|
+
const subData = subDataService.liquityV2PaybackSubData.decode(subStruct.subData);
|
|
729
|
+
_position.strategyData.decoded.triggerData = triggerData;
|
|
730
|
+
_position.strategyData.decoded.subData = subData;
|
|
731
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
|
|
732
|
+
_position.strategy.strategyId = enums_1.Strategies.Identifiers.Payback;
|
|
733
|
+
_position.specific = {
|
|
734
|
+
subHash: _position.subHash,
|
|
735
|
+
market: subData.market,
|
|
736
|
+
troveId: subData.troveId,
|
|
737
|
+
targetRatio: subData.targetRatio,
|
|
738
|
+
triggerRatio: triggerData.ratio,
|
|
739
|
+
};
|
|
740
|
+
return _position;
|
|
741
|
+
}
|
|
742
|
+
function parseFluidT1LeverageManagement(position, parseData) {
|
|
743
|
+
const _position = (0, lodash_1.cloneDeep)(position);
|
|
744
|
+
const { subStruct, subId, subHash } = parseData.subscriptionEventData;
|
|
745
|
+
const { isEnabled } = parseData.strategiesSubsData;
|
|
746
|
+
const triggerData = triggerService.fluidRatioTrigger.decode(subStruct.triggerData);
|
|
747
|
+
const subData = subDataService.fluidLeverageManagementSubData.decode(subStruct.subData);
|
|
748
|
+
_position.strategyData.decoded.triggerData = triggerData;
|
|
749
|
+
_position.strategyData.decoded.subData = subData;
|
|
750
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.nftId, subData.vault);
|
|
751
|
+
const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
|
|
752
|
+
if (isRepay) {
|
|
753
|
+
_position.specific = {
|
|
754
|
+
triggerRepayRatio: triggerData.ratio,
|
|
755
|
+
targetRepayRatio: subData.targetRatio,
|
|
756
|
+
repayEnabled: isEnabled,
|
|
757
|
+
subId1: Number(subId),
|
|
758
|
+
subHashRepay: subHash,
|
|
759
|
+
mergeWithId: enums_1.Strategies.Identifiers.Boost,
|
|
760
|
+
};
|
|
761
|
+
}
|
|
762
|
+
else {
|
|
763
|
+
_position.specific = {
|
|
764
|
+
triggerBoostRatio: triggerData.ratio,
|
|
765
|
+
targetBoostRatio: subData.targetRatio,
|
|
766
|
+
boostEnabled: isEnabled,
|
|
767
|
+
subId2: Number(subId),
|
|
768
|
+
subHashBoost: subHash,
|
|
769
|
+
mergeId: enums_1.Strategies.Identifiers.Boost,
|
|
770
|
+
};
|
|
771
|
+
}
|
|
772
|
+
_position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
|
|
773
|
+
return _position;
|
|
774
|
+
}
|
|
614
775
|
const parsingMethodsMapping = {
|
|
615
776
|
[enums_1.ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
|
|
616
777
|
[enums_1.Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
|
|
@@ -631,6 +792,14 @@ const parsingMethodsMapping = {
|
|
|
631
792
|
[enums_1.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
|
|
632
793
|
[enums_1.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
|
|
633
794
|
},
|
|
795
|
+
[enums_1.ProtocolIdentifiers.StrategiesAutomation.LiquityV2]: {
|
|
796
|
+
[enums_1.Strategies.Identifiers.Repay]: parseLiquityV2LeverageManagement,
|
|
797
|
+
[enums_1.Strategies.Identifiers.Boost]: parseLiquityV2LeverageManagement,
|
|
798
|
+
[enums_1.Strategies.Identifiers.CloseOnPrice]: parseLiquityV2CloseOnPrice,
|
|
799
|
+
[enums_1.Strategies.Identifiers.BoostOnPrice]: parseLiquityV2LeverageManagementOnPrice,
|
|
800
|
+
[enums_1.Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
|
|
801
|
+
[enums_1.Strategies.Identifiers.Payback]: parseLiquityV2Payback,
|
|
802
|
+
},
|
|
634
803
|
[enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
|
|
635
804
|
[enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
|
|
636
805
|
[enums_1.Strategies.Identifiers.Boost]: parseAaveV2LeverageManagement,
|
|
@@ -682,6 +851,11 @@ const parsingMethodsMapping = {
|
|
|
682
851
|
[enums_1.Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
|
|
683
852
|
[enums_1.Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
|
|
684
853
|
[enums_1.Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
|
|
854
|
+
[enums_1.Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
|
|
855
|
+
},
|
|
856
|
+
[enums_1.ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
|
|
857
|
+
[enums_1.Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
|
|
858
|
+
[enums_1.Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
|
|
685
859
|
},
|
|
686
860
|
};
|
|
687
861
|
function getParsingMethod(id, strategy) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { OrderType } from '../types/enums';
|
|
2
|
-
import { Bundles, ChainId, RatioState, Strategies } from '../types/enums';
|
|
2
|
+
import { CloseToAssetType, Bundles, ChainId, RatioState, Strategies } from '../types/enums';
|
|
3
3
|
import type { EthereumAddress, StrategyOrBundleIds } from '../types';
|
|
4
4
|
export declare const makerEncode: {
|
|
5
5
|
repayFromSavings(bundleId: StrategyOrBundleIds, vaultId: number, triggerRepayRatio: number, targetRepayRatio: number, isBundle?: boolean, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds | Strategies.OptimismIds | Strategies.ArbitrumIds | Strategies.BaseIds | Bundles.MainnetIds | Bundles.OptimismIds | Bundles.ArbitrumIds | Bundles.BaseIds)[];
|
|
@@ -97,4 +97,14 @@ export declare const crvUSDEncode: {
|
|
|
97
97
|
};
|
|
98
98
|
export declare const morphoBlueEncode: {
|
|
99
99
|
leverageManagement(marketId: string, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, ratioState: RatioState, targetRatio: number, triggerRatio: number, user: EthereumAddress, isEOA: boolean, network: ChainId): (boolean | string[] | Bundles.MainnetIds)[] | (boolean | string[] | Bundles.BaseIds)[];
|
|
100
|
+
leverageManagementOnPrice(strategyOrBundleId: number, isBundle: boolean | undefined, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, user: EthereumAddress, targetRatio: number, price: number, priceState: RatioState): (number | boolean | string[])[];
|
|
101
|
+
};
|
|
102
|
+
export declare const liquityV2Encode: {
|
|
103
|
+
leverageManagement(market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
|
|
104
|
+
closeOnPrice(strategyOrBundleId: number, market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
|
|
105
|
+
leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, price: number, state: RatioState, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, targetRatio: number, isRepayOnPrice: boolean): (number | boolean | string[])[];
|
|
106
|
+
payback(market: EthereumAddress, troveId: string, boldToken: EthereumAddress, targetRatio: number, ratioState: RatioState, triggerRatio: number): (boolean | string[] | Strategies.MainnetIds)[];
|
|
107
|
+
};
|
|
108
|
+
export declare const fluidEncode: {
|
|
109
|
+
leverageManagement(nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
|
|
100
110
|
};
|
|
@@ -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.morphoBlueEncode = exports.crvUSDEncode = exports.sparkEncode = exports.exchangeEncode = exports.morphoAaveV2Encode = exports.compoundV3L2Encode = exports.compoundV3Encode = exports.compoundV2Encode = exports.aaveV3Encode = exports.aaveV2Encode = exports.chickenBondsEncode = exports.liquityEncode = exports.makerEncode = void 0;
|
|
29
|
+
exports.fluidEncode = exports.liquityV2Encode = exports.morphoBlueEncode = exports.crvUSDEncode = exports.sparkEncode = exports.exchangeEncode = exports.morphoAaveV2Encode = exports.compoundV3L2Encode = exports.compoundV3Encode = exports.compoundV2Encode = exports.aaveV3Encode = exports.aaveV2Encode = exports.chickenBondsEncode = exports.liquityEncode = exports.makerEncode = void 0;
|
|
30
30
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
31
31
|
const tokens_1 = require("@defisaver/tokens");
|
|
32
32
|
const enums_1 = require("../types/enums");
|
|
@@ -264,4 +264,45 @@ exports.morphoBlueEncode = {
|
|
|
264
264
|
const isBundle = true;
|
|
265
265
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
266
266
|
},
|
|
267
|
+
leverageManagementOnPrice(strategyOrBundleId, isBundle = true, loanToken, collToken, oracle, irm, lltv, user, targetRatio, price, priceState) {
|
|
268
|
+
const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user);
|
|
269
|
+
const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
|
|
270
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
exports.liquityV2Encode = {
|
|
274
|
+
leverageManagement(market, troveId, collToken, boldToken, ratioState, targetRatio, triggerRatio, strategyOrBundleId) {
|
|
275
|
+
const isBundle = true;
|
|
276
|
+
const subData = subDataService.liquityV2LeverageManagementSubData.encode(market, troveId, collToken, boldToken, ratioState, targetRatio);
|
|
277
|
+
const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
|
|
278
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
279
|
+
},
|
|
280
|
+
closeOnPrice(strategyOrBundleId, market, troveId, collToken, boldToken, stopLossPrice = 0, stopLossType = enums_1.CloseToAssetType.DEBT, takeProfitPrice = 0, takeProfitType = enums_1.CloseToAssetType.COLLATERAL) {
|
|
281
|
+
const isBundle = true;
|
|
282
|
+
const closeType = (0, utils_1.getCloseStrategyType)(stopLossPrice, stopLossType, takeProfitPrice, takeProfitType);
|
|
283
|
+
const subData = subDataService.liquityV2CloseSubData.encode(market, troveId, collToken, boldToken, closeType);
|
|
284
|
+
const triggerData = triggerService.closePriceTrigger.encode(collToken, stopLossPrice, takeProfitPrice);
|
|
285
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
286
|
+
},
|
|
287
|
+
leverageManagementOnPrice(strategyOrBundleId, market, price, state, troveId, collToken, boldToken, targetRatio, isRepayOnPrice) {
|
|
288
|
+
const subDataEncoded = subDataService.liquityV2LeverageManagementOnPriceSubData.encode(market, troveId, collToken, boldToken, targetRatio, isRepayOnPrice);
|
|
289
|
+
const triggerDataEncoded = triggerService.liquityV2QuotePriceTrigger.encode(market, price, state);
|
|
290
|
+
const isBundle = true;
|
|
291
|
+
return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
|
|
292
|
+
},
|
|
293
|
+
payback(market, troveId, boldToken, targetRatio, ratioState, triggerRatio) {
|
|
294
|
+
const strategyId = enums_1.Strategies.MainnetIds.LIQUITY_V2_PAYBACK;
|
|
295
|
+
const isBundle = false;
|
|
296
|
+
const subData = subDataService.liquityV2PaybackSubData.encode(market, troveId, boldToken, targetRatio, ratioState);
|
|
297
|
+
const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
|
|
298
|
+
return [strategyId, isBundle, triggerData, subData];
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
exports.fluidEncode = {
|
|
302
|
+
leverageManagement(nftId, vault, ratioState, targetRatio, triggerRatio, strategyOrBundleId) {
|
|
303
|
+
const isBundle = true;
|
|
304
|
+
const subData = subDataService.fluidLeverageManagementSubData.encode(nftId, vault, ratioState, targetRatio);
|
|
305
|
+
const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
|
|
306
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
307
|
+
},
|
|
267
308
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EthereumAddress } from '../types';
|
|
2
|
-
import type { OrderType } from '../types/enums';
|
|
2
|
+
import type { CloseStrategyType, OrderType } from '../types/enums';
|
|
3
3
|
import { ChainId, RatioState } from '../types/enums';
|
|
4
4
|
export declare const makerRepayFromSavingsSubData: {
|
|
5
5
|
encode(vaultId: number, targetRatioPercentage: number, chainId: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): string[];
|
|
@@ -190,3 +190,65 @@ export declare const aaveV3LeverageManagementOnPriceSubData: {
|
|
|
190
190
|
targetRatio: number;
|
|
191
191
|
};
|
|
192
192
|
};
|
|
193
|
+
export declare const liquityV2LeverageManagementSubData: {
|
|
194
|
+
encode: (market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, ratioState: RatioState, targetRatio: number) => string[];
|
|
195
|
+
decode: (subData: string[]) => {
|
|
196
|
+
market: string;
|
|
197
|
+
troveId: string;
|
|
198
|
+
collToken: string;
|
|
199
|
+
boldToken: string;
|
|
200
|
+
ratioState: RatioState;
|
|
201
|
+
targetRatio: number;
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
export declare const liquityV2CloseSubData: {
|
|
205
|
+
encode(market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, closeType: CloseStrategyType): string[];
|
|
206
|
+
decode(subData: string[]): {
|
|
207
|
+
market: EthereumAddress;
|
|
208
|
+
troveId: string;
|
|
209
|
+
collToken: EthereumAddress;
|
|
210
|
+
boldToken: EthereumAddress;
|
|
211
|
+
closeType: CloseStrategyType;
|
|
212
|
+
};
|
|
213
|
+
};
|
|
214
|
+
export declare const liquityV2LeverageManagementOnPriceSubData: {
|
|
215
|
+
encode(market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, targetRatio: number, isRepayOnPrice: boolean): string[];
|
|
216
|
+
decode(subData: string[]): {
|
|
217
|
+
market: EthereumAddress;
|
|
218
|
+
troveId: string;
|
|
219
|
+
collToken: EthereumAddress;
|
|
220
|
+
boldToken: EthereumAddress;
|
|
221
|
+
targetRatio: number;
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
export declare const morphoBlueLeverageManagementOnPriceSubData: {
|
|
225
|
+
encode(loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, targetRatio: number, user: EthereumAddress): string[];
|
|
226
|
+
decode(subData: string[]): {
|
|
227
|
+
loanToken: string;
|
|
228
|
+
collToken: string;
|
|
229
|
+
oracle: string;
|
|
230
|
+
irm: string;
|
|
231
|
+
lltv: string;
|
|
232
|
+
targetRatio: number;
|
|
233
|
+
user: string;
|
|
234
|
+
};
|
|
235
|
+
};
|
|
236
|
+
export declare const liquityV2PaybackSubData: {
|
|
237
|
+
encode: (market: EthereumAddress, troveId: string, boldToken: EthereumAddress, targetRatio: number, ratioState: RatioState) => string[];
|
|
238
|
+
decode: (subData: string[]) => {
|
|
239
|
+
market: string;
|
|
240
|
+
troveId: string;
|
|
241
|
+
boldToken: string;
|
|
242
|
+
ratioState: RatioState;
|
|
243
|
+
targetRatio: number;
|
|
244
|
+
};
|
|
245
|
+
};
|
|
246
|
+
export declare const fluidLeverageManagementSubData: {
|
|
247
|
+
encode: (nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number) => string[];
|
|
248
|
+
decode: (subData: string[]) => {
|
|
249
|
+
nftId: string;
|
|
250
|
+
vault: string;
|
|
251
|
+
ratioState: RatioState;
|
|
252
|
+
targetRatio: number;
|
|
253
|
+
};
|
|
254
|
+
};
|