@defisaver/automation-sdk 3.1.4 → 3.1.6-fluid-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/automation/private/StrategiesAutomation.d.ts +2 -2
- package/cjs/automation/public/Strategies.test.d.ts +1 -0
- package/cjs/automation/public/Strategies.test.js +61 -0
- package/cjs/constants/index.js +45 -0
- package/cjs/services/strategiesService.js +155 -0
- package/cjs/services/strategySubService.d.ts +10 -1
- package/cjs/services/strategySubService.js +35 -1
- package/cjs/services/subDataService.d.ts +55 -1
- package/cjs/services/subDataService.js +174 -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/enums.d.ts +38 -3
- package/cjs/types/enums.js +40 -1
- package/cjs/types/index.d.ts +16 -3
- package/esm/automation/private/StrategiesAutomation.d.ts +2 -2
- package/esm/automation/public/Strategies.test.d.ts +1 -0
- package/esm/automation/public/Strategies.test.js +56 -0
- package/esm/constants/index.js +45 -0
- package/esm/services/strategiesService.js +153 -1
- package/esm/services/strategySubService.d.ts +10 -1
- package/esm/services/strategySubService.js +36 -2
- package/esm/services/subDataService.d.ts +55 -1
- package/esm/services/subDataService.js +174 -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/enums.d.ts +38 -3
- package/esm/types/enums.js +39 -0
- package/esm/types/index.d.ts +16 -3
- package/package.json +3 -3
- package/src/automation/private/StrategiesAutomation.ts +2 -2
- package/src/automation/public/Strategies.test.ts +49 -0
- package/src/constants/index.ts +45 -0
- package/src/services/strategiesService.ts +199 -1
- package/src/services/strategySubService.ts +97 -1
- package/src/services/subDataService.ts +243 -2
- package/src/services/triggerService.ts +125 -0
- package/src/services/utils.ts +60 -1
- package/src/types/enums.ts +39 -0
- package/src/types/index.ts +20 -2
- package/umd/index.js +34219 -0
|
@@ -6,12 +6,12 @@ import type { ChainId } from '../../types/enums';
|
|
|
6
6
|
import Automation from './Automation';
|
|
7
7
|
interface IStrategiesAutomation extends Interfaces.Automation {
|
|
8
8
|
chainId: ChainId;
|
|
9
|
-
providerFork
|
|
9
|
+
providerFork?: Web3;
|
|
10
10
|
}
|
|
11
11
|
export default class StrategiesAutomation extends Automation {
|
|
12
12
|
protected chainId: ChainId;
|
|
13
13
|
protected web3: Web3;
|
|
14
|
-
protected web3Fork
|
|
14
|
+
protected web3Fork?: Web3;
|
|
15
15
|
protected subStorageContract: Contract.WithMeta<SubStorage>;
|
|
16
16
|
protected subStorageContractFork: Contract.WithMeta<SubStorage> | null;
|
|
17
17
|
constructor(args: IStrategiesAutomation);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '../../configuration';
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const web3_1 = __importDefault(require("web3"));
|
|
16
|
+
require("../../configuration");
|
|
17
|
+
const EthereumStrategies_1 = __importDefault(require("./EthereumStrategies"));
|
|
18
|
+
const ArbitrumStrategies_1 = __importDefault(require("./ArbitrumStrategies"));
|
|
19
|
+
const OptimismStrategies_1 = __importDefault(require("./OptimismStrategies"));
|
|
20
|
+
const BaseStrategies_1 = __importDefault(require("./BaseStrategies"));
|
|
21
|
+
require('dotenv').config({ path: '.env' });
|
|
22
|
+
const Web3_1 = new web3_1.default(process.env.RPC_1);
|
|
23
|
+
const Web3_42161 = new web3_1.default(process.env.RPC_42161);
|
|
24
|
+
const Web3_10 = new web3_1.default(process.env.RPC_10);
|
|
25
|
+
const Web3_8453 = new web3_1.default(process.env.RPC_8453);
|
|
26
|
+
describe('Feature: StrategiesAutomation.ts', () => {
|
|
27
|
+
describe('Fetching subscriptions', () => {
|
|
28
|
+
it('can fetch subscriptions on Mainnet', function () {
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
this.timeout(120000);
|
|
31
|
+
const ethStrategies = new EthereumStrategies_1.default({ provider: Web3_1 });
|
|
32
|
+
const subs = yield ethStrategies.getSubscriptions({ mergeSubs: true });
|
|
33
|
+
console.log(subs.length);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
it('can fetch subscriptions on Arbitrum', function () {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
this.timeout(120000);
|
|
39
|
+
const arbiStrategies = new ArbitrumStrategies_1.default({ provider: Web3_42161 });
|
|
40
|
+
const subs = yield arbiStrategies.getSubscriptions({ mergeSubs: true });
|
|
41
|
+
console.log(subs.length);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
it('can fetch subscriptions on Optimism', function () {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
this.timeout(120000);
|
|
47
|
+
const optimismStrategies = new OptimismStrategies_1.default({ provider: Web3_10 });
|
|
48
|
+
const subs = yield optimismStrategies.getSubscriptions({ mergeSubs: true });
|
|
49
|
+
console.log(subs.length);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
it('can fetch subscriptions on Base', function () {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
this.timeout(120000);
|
|
55
|
+
const baseStrategies = new BaseStrategies_1.default({ provider: Web3_8453 });
|
|
56
|
+
const subs = yield baseStrategies.getSubscriptions({ mergeSubs: true });
|
|
57
|
+
console.log(subs.length);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
});
|
package/cjs/constants/index.js
CHANGED
|
@@ -353,6 +353,46 @@ exports.MAINNET_BUNDLES_INFO = {
|
|
|
353
353
|
strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
|
|
354
354
|
protocol: exports.PROTOCOLS.AaveV3,
|
|
355
355
|
},
|
|
356
|
+
[enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY]: {
|
|
357
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY,
|
|
358
|
+
strategyId: enums_1.Strategies.Identifiers.Repay,
|
|
359
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
360
|
+
},
|
|
361
|
+
[enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST]: {
|
|
362
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST,
|
|
363
|
+
strategyId: enums_1.Strategies.Identifiers.Boost,
|
|
364
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
365
|
+
},
|
|
366
|
+
[enums_1.Bundles.MainnetIds.LIQUITY_V2_CLOSE]: {
|
|
367
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_CLOSE,
|
|
368
|
+
strategyId: enums_1.Strategies.Identifiers.CloseOnPrice,
|
|
369
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
370
|
+
},
|
|
371
|
+
[enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY_ON_PRICE]: {
|
|
372
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY_ON_PRICE,
|
|
373
|
+
strategyId: enums_1.Strategies.Identifiers.OpenOrderFromCollateral,
|
|
374
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
375
|
+
},
|
|
376
|
+
[enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST_ON_PRICE]: {
|
|
377
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST_ON_PRICE,
|
|
378
|
+
strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
|
|
379
|
+
protocol: exports.PROTOCOLS.LiquityV2,
|
|
380
|
+
},
|
|
381
|
+
[enums_1.Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
|
|
382
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE,
|
|
383
|
+
strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
|
|
384
|
+
protocol: exports.PROTOCOLS.MorphoBlue,
|
|
385
|
+
},
|
|
386
|
+
[enums_1.Bundles.MainnetIds.FLUID_T1_REPAY]: {
|
|
387
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.FLUID_T1_REPAY,
|
|
388
|
+
strategyId: enums_1.Strategies.Identifiers.Repay,
|
|
389
|
+
protocol: exports.PROTOCOLS.FluidT1,
|
|
390
|
+
},
|
|
391
|
+
[enums_1.Bundles.MainnetIds.FLUID_T2_BOOST]: {
|
|
392
|
+
strategyOrBundleId: enums_1.Bundles.MainnetIds.FLUID_T2_BOOST,
|
|
393
|
+
strategyId: enums_1.Strategies.Identifiers.Boost,
|
|
394
|
+
protocol: exports.PROTOCOLS.FluidT1,
|
|
395
|
+
},
|
|
356
396
|
};
|
|
357
397
|
exports.OPTIMISM_BUNDLES_INFO = {
|
|
358
398
|
[enums_1.Bundles.OptimismIds.AAVE_V3_REPAY]: {
|
|
@@ -437,6 +477,11 @@ exports.BASE_BUNDLES_INFO = {
|
|
|
437
477
|
strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
|
|
438
478
|
protocol: exports.PROTOCOLS.AaveV3,
|
|
439
479
|
},
|
|
480
|
+
[enums_1.Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
|
|
481
|
+
strategyOrBundleId: enums_1.Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE,
|
|
482
|
+
strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
|
|
483
|
+
protocol: exports.PROTOCOLS.MorphoBlue,
|
|
484
|
+
},
|
|
440
485
|
};
|
|
441
486
|
exports.ARBITRUM_BUNDLES_INFO = {
|
|
442
487
|
[enums_1.Bundles.ArbitrumIds.AAVE_V3_REPAY]: {
|
|
@@ -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,85 @@ 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
|
+
/// @TODO: what does even go here
|
|
713
|
+
/*
|
|
714
|
+
_position.specific = {
|
|
715
|
+
market: subData.market,
|
|
716
|
+
troveId: subData.troveId,
|
|
717
|
+
ratio: subData.targetRatio,
|
|
718
|
+
price: triggerData.price,
|
|
719
|
+
ratioState: triggerData.ratioState,
|
|
720
|
+
};
|
|
721
|
+
*/
|
|
722
|
+
return _position;
|
|
723
|
+
}
|
|
724
|
+
function parseFluidT1LeverageManagement(position, parseData) {
|
|
725
|
+
const _position = (0, lodash_1.cloneDeep)(position);
|
|
726
|
+
const { subStruct, subId, subHash } = parseData.subscriptionEventData;
|
|
727
|
+
const { isEnabled } = parseData.strategiesSubsData;
|
|
728
|
+
const triggerData = triggerService.fluidRatioTrigger.decode(subStruct.triggerData);
|
|
729
|
+
const subData = subDataService.fluidLeverageManagementSubData.decode(subStruct.subData);
|
|
730
|
+
_position.strategyData.decoded.triggerData = triggerData;
|
|
731
|
+
_position.strategyData.decoded.subData = subData;
|
|
732
|
+
_position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.nftId, subData.vault);
|
|
733
|
+
const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
|
|
734
|
+
if (isRepay) {
|
|
735
|
+
_position.specific = {
|
|
736
|
+
triggerRepayRatio: triggerData.ratio,
|
|
737
|
+
targetRepayRatio: subData.targetRatio,
|
|
738
|
+
repayEnabled: isEnabled,
|
|
739
|
+
subId1: Number(subId),
|
|
740
|
+
subHashRepay: subHash,
|
|
741
|
+
mergeWithId: enums_1.Strategies.Identifiers.Boost,
|
|
742
|
+
};
|
|
743
|
+
}
|
|
744
|
+
else {
|
|
745
|
+
_position.specific = {
|
|
746
|
+
triggerBoostRatio: triggerData.ratio,
|
|
747
|
+
targetBoostRatio: subData.targetRatio,
|
|
748
|
+
boostEnabled: isEnabled,
|
|
749
|
+
subId2: Number(subId),
|
|
750
|
+
subHashBoost: subHash,
|
|
751
|
+
mergeId: enums_1.Strategies.Identifiers.Boost,
|
|
752
|
+
};
|
|
753
|
+
}
|
|
754
|
+
_position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
|
|
755
|
+
return _position;
|
|
756
|
+
}
|
|
614
757
|
const parsingMethodsMapping = {
|
|
615
758
|
[enums_1.ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
|
|
616
759
|
[enums_1.Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
|
|
@@ -631,6 +774,13 @@ const parsingMethodsMapping = {
|
|
|
631
774
|
[enums_1.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
|
|
632
775
|
[enums_1.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
|
|
633
776
|
},
|
|
777
|
+
[enums_1.ProtocolIdentifiers.StrategiesAutomation.LiquityV2]: {
|
|
778
|
+
[enums_1.Strategies.Identifiers.Repay]: parseLiquityV2LeverageManagement,
|
|
779
|
+
[enums_1.Strategies.Identifiers.Boost]: parseLiquityV2LeverageManagement,
|
|
780
|
+
[enums_1.Strategies.Identifiers.CloseOnPrice]: parseLiquityV2CloseOnPrice,
|
|
781
|
+
[enums_1.Strategies.Identifiers.OpenOrderFromCollateral]: parseLiquityV2LeverageManagementOnPrice,
|
|
782
|
+
[enums_1.Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
|
|
783
|
+
},
|
|
634
784
|
[enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
|
|
635
785
|
[enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
|
|
636
786
|
[enums_1.Strategies.Identifiers.Boost]: parseAaveV2LeverageManagement,
|
|
@@ -682,6 +832,11 @@ const parsingMethodsMapping = {
|
|
|
682
832
|
[enums_1.Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
|
|
683
833
|
[enums_1.Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
|
|
684
834
|
[enums_1.Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
|
|
835
|
+
[enums_1.Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
|
|
836
|
+
},
|
|
837
|
+
[enums_1.ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
|
|
838
|
+
[enums_1.Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
|
|
839
|
+
[enums_1.Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
|
|
685
840
|
},
|
|
686
841
|
};
|
|
687
842
|
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,13 @@ 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
|
+
};
|
|
107
|
+
export declare const fluidEncode: {
|
|
108
|
+
leverageManagement(nftId: string, vault: EthereumAddress, collToken: EthereumAddress, debtToken: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
|
|
100
109
|
};
|
|
@@ -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,38 @@ 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
|
+
};
|
|
294
|
+
exports.fluidEncode = {
|
|
295
|
+
leverageManagement(nftId, vault, collToken, debtToken, ratioState, targetRatio, triggerRatio, strategyOrBundleId) {
|
|
296
|
+
const isBundle = true;
|
|
297
|
+
const subData = subDataService.fluidLeverageManagementSubData.encode(nftId, vault, collToken, debtToken, ratioState, targetRatio);
|
|
298
|
+
const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
|
|
299
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
300
|
+
},
|
|
267
301
|
};
|
|
@@ -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,57 @@ 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 fluidLeverageManagementSubData: {
|
|
237
|
+
encode: (nftId: string, vault: EthereumAddress, collToken: EthereumAddress, debtToken: EthereumAddress, ratioState: RatioState, targetRatio: number) => string[];
|
|
238
|
+
decode: (subData: string[]) => {
|
|
239
|
+
nftId: string;
|
|
240
|
+
vault: string;
|
|
241
|
+
collToken: string;
|
|
242
|
+
debtToken: string;
|
|
243
|
+
ratioState: RatioState;
|
|
244
|
+
targetRatio: number;
|
|
245
|
+
};
|
|
246
|
+
};
|