@defisaver/automation-sdk 3.1.5 → 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.
Files changed (44) hide show
  1. package/cjs/automation/private/StrategiesAutomation.d.ts +2 -2
  2. package/cjs/automation/public/Strategies.test.d.ts +1 -0
  3. package/cjs/automation/public/Strategies.test.js +61 -0
  4. package/cjs/constants/index.js +35 -0
  5. package/cjs/services/strategiesService.js +123 -0
  6. package/cjs/services/strategySubService.d.ts +9 -1
  7. package/cjs/services/strategySubService.js +30 -1
  8. package/cjs/services/subDataService.d.ts +43 -1
  9. package/cjs/services/subDataService.js +143 -1
  10. package/cjs/services/triggerService.d.ts +33 -0
  11. package/cjs/services/triggerService.js +63 -1
  12. package/cjs/services/utils.d.ts +6 -1
  13. package/cjs/services/utils.js +52 -1
  14. package/cjs/types/enums.d.ts +34 -2
  15. package/cjs/types/enums.js +37 -1
  16. package/cjs/types/index.d.ts +12 -3
  17. package/esm/automation/private/StrategiesAutomation.d.ts +2 -2
  18. package/esm/automation/public/Strategies.test.d.ts +1 -0
  19. package/esm/automation/public/Strategies.test.js +56 -0
  20. package/esm/constants/index.js +35 -0
  21. package/esm/services/strategiesService.js +124 -1
  22. package/esm/services/strategySubService.d.ts +9 -1
  23. package/esm/services/strategySubService.js +31 -2
  24. package/esm/services/subDataService.d.ts +43 -1
  25. package/esm/services/subDataService.js +143 -1
  26. package/esm/services/triggerService.d.ts +33 -0
  27. package/esm/services/triggerService.js +62 -0
  28. package/esm/services/utils.d.ts +6 -1
  29. package/esm/services/utils.js +50 -1
  30. package/esm/types/enums.d.ts +34 -2
  31. package/esm/types/enums.js +36 -0
  32. package/esm/types/index.d.ts +12 -3
  33. package/package.json +3 -3
  34. package/src/automation/private/StrategiesAutomation.ts +2 -2
  35. package/src/automation/public/Strategies.test.ts +49 -0
  36. package/src/constants/index.ts +35 -0
  37. package/src/services/strategiesService.ts +159 -1
  38. package/src/services/strategySubService.ts +80 -1
  39. package/src/services/subDataService.ts +202 -2
  40. package/src/services/triggerService.ts +96 -0
  41. package/src/services/utils.ts +60 -1
  42. package/src/types/enums.ts +36 -0
  43. package/src/types/index.ts +13 -1
  44. 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: Web3;
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: Web3;
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
+ });
@@ -353,11 +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
+ },
356
381
  [enums_1.Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
357
382
  strategyOrBundleId: enums_1.Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE,
358
383
  strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
359
384
  protocol: exports.PROTOCOLS.MorphoBlue,
360
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
+ },
361
396
  };
362
397
  exports.OPTIMISM_BUNDLES_INFO = {
363
398
  [enums_1.Bundles.OptimismIds.AAVE_V3_REPAY]: {
@@ -434,6 +434,39 @@ function parseLiquityLeverageManagement(position, parseData) {
434
434
  _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
435
435
  return _position;
436
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
+ }
437
470
  function parseSparkLeverageManagement(position, parseData) {
438
471
  const _position = (0, lodash_1.cloneDeep)(position);
439
472
  const { subStruct, subId } = parseData.subscriptionEventData;
@@ -642,6 +675,85 @@ function parseAaveV3LeverageManagementOnPrice(position, parseData) {
642
675
  };
643
676
  return _position;
644
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
+ }
645
757
  const parsingMethodsMapping = {
646
758
  [enums_1.ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
647
759
  [enums_1.Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -662,6 +774,13 @@ const parsingMethodsMapping = {
662
774
  [enums_1.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
663
775
  [enums_1.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
664
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
+ },
665
784
  [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
666
785
  [enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
667
786
  [enums_1.Strategies.Identifiers.Boost]: parseAaveV2LeverageManagement,
@@ -715,6 +834,10 @@ const parsingMethodsMapping = {
715
834
  [enums_1.Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
716
835
  [enums_1.Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
717
836
  },
837
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
838
+ [enums_1.Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
839
+ [enums_1.Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
840
+ },
718
841
  };
719
842
  function getParsingMethod(id, strategy) {
720
843
  return parsingMethodsMapping[id][strategy.strategyId];
@@ -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)[];
@@ -99,3 +99,11 @@ 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
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
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[])[];
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");
@@ -270,3 +270,32 @@ exports.morphoBlueEncode = {
270
270
  return [strategyOrBundleId, isBundle, triggerData, subData];
271
271
  },
272
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
+ },
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,6 +190,37 @@ 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
+ };
193
224
  export declare const morphoBlueLeverageManagementOnPriceSubData: {
194
225
  encode(loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, targetRatio: number, user: EthereumAddress): string[];
195
226
  decode(subData: string[]): {
@@ -202,3 +233,14 @@ export declare const morphoBlueLeverageManagementOnPriceSubData: {
202
233
  user: string;
203
234
  };
204
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
+ };
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.morphoBlueLeverageManagementOnPriceSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.sparkQuotePriceSubData = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = exports.compoundV3L2LeverageManagementSubData = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubData = exports.makerLeverageManagementSubData = exports.makerCloseSubData = exports.liquityRepayFromSavingsSubData = exports.makerRepayFromSavingsSubData = void 0;
6
+ exports.fluidLeverageManagementSubData = exports.morphoBlueLeverageManagementOnPriceSubData = exports.liquityV2LeverageManagementOnPriceSubData = exports.liquityV2CloseSubData = exports.liquityV2LeverageManagementSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.sparkQuotePriceSubData = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = exports.compoundV3L2LeverageManagementSubData = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubData = exports.makerLeverageManagementSubData = exports.makerCloseSubData = exports.liquityRepayFromSavingsSubData = exports.makerRepayFromSavingsSubData = void 0;
7
7
  const decimal_js_1 = __importDefault(require("decimal.js"));
8
8
  const web3_eth_abi_1 = __importDefault(require("web3-eth-abi"));
9
9
  const web3_utils_1 = require("web3-utils");
@@ -473,6 +473,109 @@ exports.aaveV3LeverageManagementOnPriceSubData = {
473
473
  };
474
474
  },
475
475
  };
476
+ exports.liquityV2LeverageManagementSubData = {
477
+ encode: (market, troveId, collToken, boldToken, ratioState, targetRatio) => {
478
+ const marketEncoded = web3_eth_abi_1.default.encodeParameter('address', market);
479
+ const troveIdEncoded = web3_eth_abi_1.default.encodeParameter('uint256', troveId);
480
+ const collTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', collToken);
481
+ const boldTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', boldToken);
482
+ const ratioStateEncoded = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
483
+ const targetRatioEncoded = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
484
+ const isRepay = ratioState === enums_1.RatioState.UNDER;
485
+ const collActionType = isRepay ? enums_1.CollActionType.WITHDRAW : enums_1.CollActionType.SUPPLY;
486
+ const debtActionType = isRepay ? enums_1.DebtActionType.PAYBACK : enums_1.DebtActionType.BORROW;
487
+ const collActionTypeEncoded = web3_eth_abi_1.default.encodeParameter('uint8', collActionType);
488
+ const debtActionTypeEncoded = web3_eth_abi_1.default.encodeParameter('uint8', debtActionType);
489
+ return [
490
+ marketEncoded,
491
+ troveIdEncoded,
492
+ collTokenEncoded,
493
+ boldTokenEncoded,
494
+ ratioStateEncoded,
495
+ targetRatioEncoded,
496
+ collActionTypeEncoded,
497
+ debtActionTypeEncoded,
498
+ ];
499
+ },
500
+ decode: (subData) => {
501
+ const market = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
502
+ const troveId = web3_eth_abi_1.default.decodeParameter('uint256', subData[1]);
503
+ const collToken = web3_eth_abi_1.default.decodeParameter('address', subData[2]);
504
+ const boldToken = web3_eth_abi_1.default.decodeParameter('address', subData[3]);
505
+ const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[4]);
506
+ const weiRatio = web3_eth_abi_1.default.decodeParameter('uint256', subData[5]);
507
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(weiRatio);
508
+ return {
509
+ market, troveId, collToken, boldToken, ratioState, targetRatio,
510
+ };
511
+ },
512
+ };
513
+ exports.liquityV2CloseSubData = {
514
+ encode(market, troveId, collToken, boldToken, closeType) {
515
+ const marketEncoded = web3_eth_abi_1.default.encodeParameter('address', market);
516
+ const troveIdEncoded = web3_eth_abi_1.default.encodeParameter('uint256', troveId);
517
+ const collAddrEncoded = web3_eth_abi_1.default.encodeParameter('address', collToken);
518
+ const boldTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', boldToken);
519
+ const wethAddress = (0, tokens_1.getAssetInfo)('WETH').address;
520
+ const wethAddressEncoded = web3_eth_abi_1.default.encodeParameter('address', wethAddress);
521
+ const gasCompensation = new decimal_js_1.default('0.0375').mul(1e18).toString();
522
+ const gasCompensationEncoded = web3_eth_abi_1.default.encodeParameter('uint256', gasCompensation);
523
+ const closeTypeEncoded = web3_eth_abi_1.default.encodeParameter('uint8', closeType);
524
+ return [
525
+ marketEncoded,
526
+ troveIdEncoded,
527
+ collAddrEncoded,
528
+ boldTokenEncoded,
529
+ wethAddressEncoded,
530
+ gasCompensationEncoded,
531
+ closeTypeEncoded,
532
+ ];
533
+ },
534
+ decode(subData) {
535
+ const market = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
536
+ const troveId = web3_eth_abi_1.default.decodeParameter('uint256', subData[1]);
537
+ const collToken = web3_eth_abi_1.default.decodeParameter('address', subData[2]);
538
+ const boldToken = web3_eth_abi_1.default.decodeParameter('address', subData[3]);
539
+ // skip wethAddress and gasCompensation
540
+ const closeType = web3_eth_abi_1.default.decodeParameter('uint8', subData[6]);
541
+ return {
542
+ market, troveId, collToken, boldToken, closeType,
543
+ };
544
+ },
545
+ };
546
+ exports.liquityV2LeverageManagementOnPriceSubData = {
547
+ encode(market, troveId, collToken, boldToken, targetRatio, isRepayOnPrice) {
548
+ const encodedMarket = web3_eth_abi_1.default.encodeParameter('address', market);
549
+ const encodedTroveId = web3_eth_abi_1.default.encodeParameter('uint256', troveId);
550
+ const encodedCollToken = web3_eth_abi_1.default.encodeParameter('address', collToken);
551
+ const encodedBoldToken = web3_eth_abi_1.default.encodeParameter('address', boldToken);
552
+ const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
553
+ const collActionType = isRepayOnPrice ? enums_1.CollActionType.WITHDRAW : enums_1.CollActionType.SUPPLY;
554
+ const debtActionType = isRepayOnPrice ? enums_1.DebtActionType.PAYBACK : enums_1.DebtActionType.BORROW;
555
+ const encodedCollActionType = web3_eth_abi_1.default.encodeParameter('uint8', collActionType);
556
+ const encodedDebtActionType = web3_eth_abi_1.default.encodeParameter('uint8', debtActionType);
557
+ return [
558
+ encodedMarket,
559
+ encodedTroveId,
560
+ encodedCollToken,
561
+ encodedBoldToken,
562
+ encodedTargetRatio,
563
+ encodedCollActionType,
564
+ encodedDebtActionType,
565
+ ];
566
+ },
567
+ decode(subData) {
568
+ const market = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
569
+ const troveId = web3_eth_abi_1.default.decodeParameter('uint256', subData[1]);
570
+ const collToken = web3_eth_abi_1.default.decodeParameter('address', subData[2]);
571
+ const boldToken = web3_eth_abi_1.default.decodeParameter('address', subData[3]);
572
+ const weiRatio = web3_eth_abi_1.default.decodeParameter('uint256', subData[4]);
573
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(weiRatio);
574
+ return {
575
+ market, troveId, collToken, boldToken, targetRatio,
576
+ };
577
+ },
578
+ };
476
579
  exports.morphoBlueLeverageManagementOnPriceSubData = {
477
580
  encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user) {
478
581
  const loanTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', loanToken);
@@ -504,3 +607,42 @@ exports.morphoBlueLeverageManagementOnPriceSubData = {
504
607
  };
505
608
  },
506
609
  };
610
+ exports.fluidLeverageManagementSubData = {
611
+ encode: (nftId, vault, collToken, debtToken, ratioState, targetRatio) => {
612
+ const nftIdEncoded = web3_eth_abi_1.default.encodeParameter('uint256', nftId);
613
+ const vaultEncoded = web3_eth_abi_1.default.encodeParameter('address', vault);
614
+ const collTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', collToken);
615
+ const debtTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', debtToken);
616
+ const ratioStateEncoded = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
617
+ const targetRatioEncoded = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
618
+ const wrapEthEncoded = web3_eth_abi_1.default.encodeParameter('bool', true);
619
+ const isRepay = ratioState === enums_1.RatioState.UNDER;
620
+ const collActionType = isRepay ? enums_1.CollActionType.WITHDRAW : enums_1.CollActionType.SUPPLY;
621
+ const debtActionType = isRepay ? enums_1.DebtActionType.PAYBACK : enums_1.DebtActionType.BORROW;
622
+ const collActionTypeEncoded = web3_eth_abi_1.default.encodeParameter('uint8', collActionType);
623
+ const debtActionTypeEncoded = web3_eth_abi_1.default.encodeParameter('uint8', debtActionType);
624
+ return [
625
+ nftIdEncoded,
626
+ vaultEncoded,
627
+ collTokenEncoded,
628
+ debtTokenEncoded,
629
+ ratioStateEncoded,
630
+ targetRatioEncoded,
631
+ wrapEthEncoded,
632
+ collActionTypeEncoded,
633
+ debtActionTypeEncoded,
634
+ ];
635
+ },
636
+ decode: (subData) => {
637
+ const nftId = web3_eth_abi_1.default.decodeParameter('uint256', subData[0]);
638
+ const vault = web3_eth_abi_1.default.decodeParameter('address', subData[1]);
639
+ const collToken = web3_eth_abi_1.default.decodeParameter('address', subData[2]);
640
+ const debtToken = web3_eth_abi_1.default.decodeParameter('address', subData[3]);
641
+ const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[4]);
642
+ const weiRatio = web3_eth_abi_1.default.decodeParameter('uint256', subData[5]);
643
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(weiRatio);
644
+ return {
645
+ nftId, vault, collToken, debtToken, ratioState, targetRatio,
646
+ };
647
+ },
648
+ };
@@ -189,6 +189,31 @@ export declare const morphoBlueRatioTrigger: {
189
189
  ratioState: number;
190
190
  };
191
191
  };
192
+ export declare const liquityV2RatioTrigger: {
193
+ encode(market: EthereumAddress, troveId: string, ratioPercentage: number, ratioState: RatioState): string[];
194
+ decode(triggerData: string[]): {
195
+ market: string;
196
+ troveId: string;
197
+ ratio: number;
198
+ ratioState: number;
199
+ };
200
+ };
201
+ export declare const liquityV2QuotePriceTrigger: {
202
+ encode(market: EthereumAddress, price: number, ratioState: RatioState): string[];
203
+ decode(triggerData: string[]): {
204
+ market: string;
205
+ price: string;
206
+ ratioState: number;
207
+ };
208
+ };
209
+ export declare const closePriceTrigger: {
210
+ encode(tokenAddr: EthereumAddress, lowerPrice: number, upperPrice: number): string[];
211
+ decode(triggerData: string[]): {
212
+ tokenAddr: EthereumAddress;
213
+ lowerPrice: string;
214
+ upperPrice: string;
215
+ };
216
+ };
192
217
  export declare const morphoBluePriceTrigger: {
193
218
  encode(oracle: EthereumAddress, collateralToken: EthereumAddress, loanToken: EthereumAddress, price: number, priceState: RatioState): string[];
194
219
  decode(triggerData: string[]): {
@@ -199,3 +224,11 @@ export declare const morphoBluePriceTrigger: {
199
224
  priceState: number;
200
225
  };
201
226
  };
227
+ export declare const fluidRatioTrigger: {
228
+ encode(nftId: string, ratioPercentage: number, ratioState: RatioState): string[];
229
+ decode(triggerData: string[]): {
230
+ nftId: string;
231
+ ratio: number;
232
+ ratioState: number;
233
+ };
234
+ };