@defisaver/automation-sdk 3.1.4 → 3.1.5

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.
@@ -353,6 +353,11 @@ 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.MORPHO_BLUE_BOOST_ON_PRICE]: {
357
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE,
358
+ strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
359
+ protocol: exports.PROTOCOLS.MorphoBlue,
360
+ },
356
361
  };
357
362
  exports.OPTIMISM_BUNDLES_INFO = {
358
363
  [enums_1.Bundles.OptimismIds.AAVE_V3_REPAY]: {
@@ -437,6 +442,11 @@ exports.BASE_BUNDLES_INFO = {
437
442
  strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
438
443
  protocol: exports.PROTOCOLS.AaveV3,
439
444
  },
445
+ [enums_1.Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
446
+ strategyOrBundleId: enums_1.Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE,
447
+ strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
448
+ protocol: exports.PROTOCOLS.MorphoBlue,
449
+ },
440
450
  };
441
451
  exports.ARBITRUM_BUNDLES_INFO = {
442
452
  [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
  };
@@ -590,6 +595,32 @@ function parseMorphoBlueLeverageManagement(position, parseData) {
590
595
  _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
591
596
  return _position;
592
597
  }
598
+ function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
599
+ const _position = (0, lodash_1.cloneDeep)(position);
600
+ const { subStruct } = parseData.subscriptionEventData;
601
+ const triggerData = triggerService.morphoBluePriceTrigger.decode(subStruct.triggerData);
602
+ const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.decode(subStruct.subData);
603
+ _position.strategyData.decoded.triggerData = triggerData;
604
+ _position.strategyData.decoded.subData = subData;
605
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
606
+ const marketIdEncodedData = web3.eth.abi.encodeParameters(['address', 'address', 'address', 'address', 'uint256'], [
607
+ subData.loanToken,
608
+ subData.collToken,
609
+ subData.oracle,
610
+ subData.irm,
611
+ subData.lltv,
612
+ ]);
613
+ const marketId = web3.utils.keccak256(marketIdEncodedData);
614
+ _position.specific = {
615
+ subHash: _position.subHash,
616
+ marketId,
617
+ collAsset: subData.collToken,
618
+ debtAsset: subData.loanToken,
619
+ price: triggerData.price,
620
+ ratio: subData.targetRatio,
621
+ };
622
+ return _position;
623
+ }
593
624
  function parseAaveV3LeverageManagementOnPrice(position, parseData) {
594
625
  const _position = (0, lodash_1.cloneDeep)(position);
595
626
  const { subStruct } = parseData.subscriptionEventData;
@@ -682,6 +713,7 @@ const parsingMethodsMapping = {
682
713
  [enums_1.Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
683
714
  [enums_1.Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
684
715
  [enums_1.Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
716
+ [enums_1.Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
685
717
  },
686
718
  };
687
719
  function getParsingMethod(id, strategy) {
@@ -97,4 +97,5 @@ 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[])[];
100
101
  };
@@ -264,4 +264,9 @@ 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
+ },
267
272
  };
@@ -190,3 +190,15 @@ export declare const aaveV3LeverageManagementOnPriceSubData: {
190
190
  targetRatio: number;
191
191
  };
192
192
  };
193
+ export declare const morphoBlueLeverageManagementOnPriceSubData: {
194
+ encode(loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, targetRatio: number, user: EthereumAddress): string[];
195
+ decode(subData: string[]): {
196
+ loanToken: string;
197
+ collToken: string;
198
+ oracle: string;
199
+ irm: string;
200
+ lltv: string;
201
+ targetRatio: number;
202
+ user: string;
203
+ };
204
+ };
@@ -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.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.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;
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,3 +473,34 @@ exports.aaveV3LeverageManagementOnPriceSubData = {
473
473
  };
474
474
  },
475
475
  };
476
+ exports.morphoBlueLeverageManagementOnPriceSubData = {
477
+ encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user) {
478
+ const loanTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', loanToken);
479
+ const collTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', collToken);
480
+ const oracleEncoded = web3_eth_abi_1.default.encodeParameter('address', oracle);
481
+ const irmEncoded = web3_eth_abi_1.default.encodeParameter('address', irm);
482
+ const lltvEncoded = web3_eth_abi_1.default.encodeParameter('uint256', lltv);
483
+ const targetRatioEncoded = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
484
+ const userEncoded = web3_eth_abi_1.default.encodeParameter('address', user);
485
+ return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, targetRatioEncoded, userEncoded];
486
+ },
487
+ decode(subData) {
488
+ const loanToken = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
489
+ const collToken = web3_eth_abi_1.default.decodeParameter('address', subData[1]);
490
+ const oracle = web3_eth_abi_1.default.decodeParameter('address', subData[2]);
491
+ const irm = web3_eth_abi_1.default.decodeParameter('address', subData[3]);
492
+ const lltv = web3_eth_abi_1.default.decodeParameter('uint256', subData[4]);
493
+ const weiRatio = web3_eth_abi_1.default.decodeParameter('uint256', subData[5]);
494
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(weiRatio);
495
+ const user = web3_eth_abi_1.default.decodeParameter('address', subData[6]);
496
+ return {
497
+ loanToken,
498
+ collToken,
499
+ oracle,
500
+ irm,
501
+ lltv,
502
+ targetRatio,
503
+ user,
504
+ };
505
+ },
506
+ };
@@ -189,3 +189,13 @@ export declare const morphoBlueRatioTrigger: {
189
189
  ratioState: number;
190
190
  };
191
191
  };
192
+ export declare const morphoBluePriceTrigger: {
193
+ encode(oracle: EthereumAddress, collateralToken: EthereumAddress, loanToken: EthereumAddress, price: number, priceState: RatioState): string[];
194
+ decode(triggerData: string[]): {
195
+ oracle: string;
196
+ collateralToken: string;
197
+ loanToken: string;
198
+ price: string;
199
+ priceState: number;
200
+ };
201
+ };
@@ -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.morphoBlueRatioTrigger = exports.crvUsdHealthRatioTrigger = exports.crvUSDRatioTrigger = exports.curveUsdSoftLiquidationTrigger = exports.curveUsdBorrowRateTrigger = exports.sparkQuotePriceTrigger = exports.sparkRatioTrigger = exports.exchangeOffchainPriceTrigger = exports.exchangeTimestampTrigger = exports.compoundV3RatioTrigger = exports.cBondsRebondTrigger = exports.aaveV2RatioTrigger = exports.liquityDebtInFrontWithLimitTrigger = exports.liquityDebtInFrontTrigger = exports.liquityRatioTrigger = exports.compoundV2RatioTrigger = exports.aaveV3QuotePriceWithMaximumGasPriceTrigger = exports.aaveV3QuotePriceTrigger = exports.morphoAaveV2RatioTrigger = exports.aaveV3RatioTrigger = exports.makerRatioTrigger = exports.trailingStopTrigger = exports.chainlinkPriceTrigger = void 0;
29
+ exports.morphoBluePriceTrigger = exports.morphoBlueRatioTrigger = exports.crvUsdHealthRatioTrigger = exports.crvUSDRatioTrigger = exports.curveUsdSoftLiquidationTrigger = exports.curveUsdBorrowRateTrigger = exports.sparkQuotePriceTrigger = exports.sparkRatioTrigger = exports.exchangeOffchainPriceTrigger = exports.exchangeTimestampTrigger = exports.compoundV3RatioTrigger = exports.cBondsRebondTrigger = exports.aaveV2RatioTrigger = exports.liquityDebtInFrontWithLimitTrigger = exports.liquityDebtInFrontTrigger = exports.liquityRatioTrigger = exports.compoundV2RatioTrigger = exports.aaveV3QuotePriceWithMaximumGasPriceTrigger = exports.aaveV3QuotePriceTrigger = exports.morphoAaveV2RatioTrigger = exports.aaveV3RatioTrigger = exports.makerRatioTrigger = exports.trailingStopTrigger = exports.chainlinkPriceTrigger = void 0;
30
30
  const decimal_js_1 = __importDefault(require("decimal.js"));
31
31
  const tokens_1 = require("@defisaver/tokens");
32
32
  const web3_eth_abi_1 = __importDefault(require("web3-eth-abi"));
@@ -365,3 +365,21 @@ exports.morphoBlueRatioTrigger = {
365
365
  };
366
366
  },
367
367
  };
368
+ exports.morphoBluePriceTrigger = {
369
+ encode(oracle, collateralToken, loanToken, price, priceState) {
370
+ const _price = new decimal_js_1.default(price.toString()).mul(1e8).floor().toString();
371
+ return [
372
+ web3_eth_abi_1.default.encodeParameters(['address', 'address', 'address', 'uint256', 'uint8'], [oracle, collateralToken, loanToken, _price, priceState]),
373
+ ];
374
+ },
375
+ decode(triggerData) {
376
+ const decodedData = web3_eth_abi_1.default.decodeParameters(['address', 'address', 'address', 'uint256', 'uint8'], triggerData[0]);
377
+ return {
378
+ oracle: decodedData[0],
379
+ collateralToken: decodedData[1],
380
+ loanToken: decodedData[2],
381
+ price: new decimal_js_1.default(decodedData[3]).div(1e8).toString(),
382
+ priceState: Number(decodedData[4]),
383
+ };
384
+ },
385
+ };
@@ -98,6 +98,7 @@ export declare namespace Strategies {
98
98
  DebtInFrontRepay = "debt-in-front-repay",
99
99
  OpenOrderFromCollateral = "open-order-from-collateral",
100
100
  OpenOrderFromDebt = "open-order-from-debt",
101
+ BoostOnPrice = "boost-on-price",
101
102
  RepayOnPrice = "repay-on-price"
102
103
  }
103
104
  enum IdOverrides {
@@ -151,7 +152,8 @@ export declare namespace Bundles {
151
152
  MORPHO_BLUE_EOA_REPAY = 34,
152
153
  MORPHO_BLUE_EOA_BOOST = 35,
153
154
  AAVE_V3_OPEN_ORDER_FROM_COLLATERAL = 36,
154
- AAVE_V3_REPAY_ON_PRICE = 37
155
+ AAVE_V3_REPAY_ON_PRICE = 37,
156
+ MORPHO_BLUE_BOOST_ON_PRICE = 38
155
157
  }
156
158
  enum OptimismIds {
157
159
  AAVE_V3_REPAY = 0,
@@ -171,7 +173,8 @@ export declare namespace Bundles {
171
173
  MORPHO_BLUE_REPAY = 8,
172
174
  MORPHO_BLUE_BOOST = 9,
173
175
  AAVE_V3_OPEN_ORDER_FROM_COLLATERAL = 10,
174
- AAVE_V3_REPAY_ON_PRICE = 11
176
+ AAVE_V3_REPAY_ON_PRICE = 11,
177
+ MORPHO_BLUE_BOOST_ON_PRICE = 12
175
178
  }
176
179
  enum ArbitrumIds {
177
180
  AAVE_V3_REPAY = 0,
@@ -114,6 +114,7 @@ var Strategies;
114
114
  Identifiers["DebtInFrontRepay"] = "debt-in-front-repay";
115
115
  Identifiers["OpenOrderFromCollateral"] = "open-order-from-collateral";
116
116
  Identifiers["OpenOrderFromDebt"] = "open-order-from-debt";
117
+ Identifiers["BoostOnPrice"] = "boost-on-price";
117
118
  Identifiers["RepayOnPrice"] = "repay-on-price";
118
119
  })(Identifiers = Strategies.Identifiers || (Strategies.Identifiers = {}));
119
120
  let IdOverrides;
@@ -171,6 +172,7 @@ var Bundles;
171
172
  MainnetIds[MainnetIds["MORPHO_BLUE_EOA_BOOST"] = 35] = "MORPHO_BLUE_EOA_BOOST";
172
173
  MainnetIds[MainnetIds["AAVE_V3_OPEN_ORDER_FROM_COLLATERAL"] = 36] = "AAVE_V3_OPEN_ORDER_FROM_COLLATERAL";
173
174
  MainnetIds[MainnetIds["AAVE_V3_REPAY_ON_PRICE"] = 37] = "AAVE_V3_REPAY_ON_PRICE";
175
+ MainnetIds[MainnetIds["MORPHO_BLUE_BOOST_ON_PRICE"] = 38] = "MORPHO_BLUE_BOOST_ON_PRICE";
174
176
  })(MainnetIds = Bundles.MainnetIds || (Bundles.MainnetIds = {}));
175
177
  let OptimismIds;
176
178
  (function (OptimismIds) {
@@ -193,6 +195,7 @@ var Bundles;
193
195
  BaseIds[BaseIds["MORPHO_BLUE_BOOST"] = 9] = "MORPHO_BLUE_BOOST";
194
196
  BaseIds[BaseIds["AAVE_V3_OPEN_ORDER_FROM_COLLATERAL"] = 10] = "AAVE_V3_OPEN_ORDER_FROM_COLLATERAL";
195
197
  BaseIds[BaseIds["AAVE_V3_REPAY_ON_PRICE"] = 11] = "AAVE_V3_REPAY_ON_PRICE";
198
+ BaseIds[BaseIds["MORPHO_BLUE_BOOST_ON_PRICE"] = 12] = "MORPHO_BLUE_BOOST_ON_PRICE";
196
199
  })(BaseIds = Bundles.BaseIds || (Bundles.BaseIds = {}));
197
200
  let ArbitrumIds;
198
201
  (function (ArbitrumIds) {
@@ -123,6 +123,10 @@ export declare namespace Position {
123
123
  interface BoostOnPriceAave extends CloseOnPriceAave {
124
124
  ratio: number;
125
125
  }
126
+ interface BoostOnPriceMorpho extends Base {
127
+ marketId: string;
128
+ subHash: string;
129
+ }
126
130
  interface CloseOnPriceWithMaximumGasPriceAave extends Base {
127
131
  collAsset: EthereumAddress;
128
132
  collAssetId: number;
@@ -148,7 +152,7 @@ export declare namespace Position {
148
152
  subHashRepay?: string;
149
153
  }
150
154
  }
151
- type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD;
155
+ type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD | Specific.BoostOnPriceMorpho;
152
156
  interface Automated {
153
157
  chainId: ChainId;
154
158
  positionId: string;
@@ -347,6 +347,11 @@ export const MAINNET_BUNDLES_INFO = {
347
347
  strategyId: Strategies.Identifiers.RepayOnPrice,
348
348
  protocol: PROTOCOLS.AaveV3,
349
349
  },
350
+ [Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
351
+ strategyOrBundleId: Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE,
352
+ strategyId: Strategies.Identifiers.BoostOnPrice,
353
+ protocol: PROTOCOLS.MorphoBlue,
354
+ },
350
355
  };
351
356
  export const OPTIMISM_BUNDLES_INFO = {
352
357
  [Bundles.OptimismIds.AAVE_V3_REPAY]: {
@@ -431,6 +436,11 @@ export const BASE_BUNDLES_INFO = {
431
436
  strategyId: Strategies.Identifiers.RepayOnPrice,
432
437
  protocol: PROTOCOLS.AaveV3,
433
438
  },
439
+ [Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
440
+ strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE,
441
+ strategyId: Strategies.Identifiers.BoostOnPrice,
442
+ protocol: PROTOCOLS.MorphoBlue,
443
+ },
434
444
  };
435
445
  export const ARBITRUM_BUNDLES_INFO = {
436
446
  [Bundles.ArbitrumIds.AAVE_V3_REPAY]: {
@@ -1,10 +1,12 @@
1
1
  import { getAssetInfoByAddress } from '@defisaver/tokens';
2
2
  import { cloneDeep } from 'lodash';
3
+ import Web3 from 'web3';
3
4
  import { BUNDLES_INFO, STRATEGIES_INFO } from '../constants';
4
5
  import { ChainId, ProtocolIdentifiers, Strategies } from '../types/enums';
5
6
  import { getPositionId, getRatioStateInfoForAaveCloseStrategy, isRatioStateOver, wethToEthByAddress, } from './utils';
6
7
  import * as subDataService from './subDataService';
7
8
  import * as triggerService from './triggerService';
9
+ const web3 = new Web3();
8
10
  const SPARK_MARKET_ADDRESSES = {
9
11
  [ChainId.Ethereum]: '0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE',
10
12
  };
@@ -564,6 +566,32 @@ function parseMorphoBlueLeverageManagement(position, parseData) {
564
566
  _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLeverageManagement : Strategies.IdOverrides.LeverageManagement;
565
567
  return _position;
566
568
  }
569
+ function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
570
+ const _position = cloneDeep(position);
571
+ const { subStruct } = parseData.subscriptionEventData;
572
+ const triggerData = triggerService.morphoBluePriceTrigger.decode(subStruct.triggerData);
573
+ const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.decode(subStruct.subData);
574
+ _position.strategyData.decoded.triggerData = triggerData;
575
+ _position.strategyData.decoded.subData = subData;
576
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, Math.random());
577
+ const marketIdEncodedData = web3.eth.abi.encodeParameters(['address', 'address', 'address', 'address', 'uint256'], [
578
+ subData.loanToken,
579
+ subData.collToken,
580
+ subData.oracle,
581
+ subData.irm,
582
+ subData.lltv,
583
+ ]);
584
+ const marketId = web3.utils.keccak256(marketIdEncodedData);
585
+ _position.specific = {
586
+ subHash: _position.subHash,
587
+ marketId,
588
+ collAsset: subData.collToken,
589
+ debtAsset: subData.loanToken,
590
+ price: triggerData.price,
591
+ ratio: subData.targetRatio,
592
+ };
593
+ return _position;
594
+ }
567
595
  function parseAaveV3LeverageManagementOnPrice(position, parseData) {
568
596
  const _position = cloneDeep(position);
569
597
  const { subStruct } = parseData.subscriptionEventData;
@@ -656,6 +684,7 @@ const parsingMethodsMapping = {
656
684
  [Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
657
685
  [Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
658
686
  [Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
687
+ [Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
659
688
  },
660
689
  };
661
690
  function getParsingMethod(id, strategy) {
@@ -97,4 +97,5 @@ 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[])[];
100
101
  };
@@ -235,4 +235,9 @@ export const morphoBlueEncode = {
235
235
  const isBundle = true;
236
236
  return [strategyOrBundleId, isBundle, triggerData, subData];
237
237
  },
238
+ leverageManagementOnPrice(strategyOrBundleId, isBundle = true, loanToken, collToken, oracle, irm, lltv, user, targetRatio, price, priceState) {
239
+ const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user);
240
+ const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
241
+ return [strategyOrBundleId, isBundle, triggerData, subData];
242
+ },
238
243
  };
@@ -190,3 +190,15 @@ export declare const aaveV3LeverageManagementOnPriceSubData: {
190
190
  targetRatio: number;
191
191
  };
192
192
  };
193
+ export declare const morphoBlueLeverageManagementOnPriceSubData: {
194
+ encode(loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, targetRatio: number, user: EthereumAddress): string[];
195
+ decode(subData: string[]): {
196
+ loanToken: string;
197
+ collToken: string;
198
+ oracle: string;
199
+ irm: string;
200
+ lltv: string;
201
+ targetRatio: number;
202
+ user: string;
203
+ };
204
+ };
@@ -467,3 +467,34 @@ export const aaveV3LeverageManagementOnPriceSubData = {
467
467
  };
468
468
  },
469
469
  };
470
+ export const morphoBlueLeverageManagementOnPriceSubData = {
471
+ encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user) {
472
+ const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
473
+ const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
474
+ const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
475
+ const irmEncoded = AbiCoder.encodeParameter('address', irm);
476
+ const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
477
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
478
+ const userEncoded = AbiCoder.encodeParameter('address', user);
479
+ return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, targetRatioEncoded, userEncoded];
480
+ },
481
+ decode(subData) {
482
+ const loanToken = AbiCoder.decodeParameter('address', subData[0]);
483
+ const collToken = AbiCoder.decodeParameter('address', subData[1]);
484
+ const oracle = AbiCoder.decodeParameter('address', subData[2]);
485
+ const irm = AbiCoder.decodeParameter('address', subData[3]);
486
+ const lltv = AbiCoder.decodeParameter('uint256', subData[4]);
487
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]);
488
+ const targetRatio = weiToRatioPercentage(weiRatio);
489
+ const user = AbiCoder.decodeParameter('address', subData[6]);
490
+ return {
491
+ loanToken,
492
+ collToken,
493
+ oracle,
494
+ irm,
495
+ lltv,
496
+ targetRatio,
497
+ user,
498
+ };
499
+ },
500
+ };
@@ -189,3 +189,13 @@ export declare const morphoBlueRatioTrigger: {
189
189
  ratioState: number;
190
190
  };
191
191
  };
192
+ export declare const morphoBluePriceTrigger: {
193
+ encode(oracle: EthereumAddress, collateralToken: EthereumAddress, loanToken: EthereumAddress, price: number, priceState: RatioState): string[];
194
+ decode(triggerData: string[]): {
195
+ oracle: string;
196
+ collateralToken: string;
197
+ loanToken: string;
198
+ price: string;
199
+ priceState: number;
200
+ };
201
+ };
@@ -336,3 +336,21 @@ export const morphoBlueRatioTrigger = {
336
336
  };
337
337
  },
338
338
  };
339
+ export const morphoBluePriceTrigger = {
340
+ encode(oracle, collateralToken, loanToken, price, priceState) {
341
+ const _price = new Dec(price.toString()).mul(1e8).floor().toString();
342
+ return [
343
+ AbiCoder.encodeParameters(['address', 'address', 'address', 'uint256', 'uint8'], [oracle, collateralToken, loanToken, _price, priceState]),
344
+ ];
345
+ },
346
+ decode(triggerData) {
347
+ const decodedData = AbiCoder.decodeParameters(['address', 'address', 'address', 'uint256', 'uint8'], triggerData[0]);
348
+ return {
349
+ oracle: decodedData[0],
350
+ collateralToken: decodedData[1],
351
+ loanToken: decodedData[2],
352
+ price: new Dec(decodedData[3]).div(1e8).toString(),
353
+ priceState: Number(decodedData[4]),
354
+ };
355
+ },
356
+ };
@@ -98,6 +98,7 @@ export declare namespace Strategies {
98
98
  DebtInFrontRepay = "debt-in-front-repay",
99
99
  OpenOrderFromCollateral = "open-order-from-collateral",
100
100
  OpenOrderFromDebt = "open-order-from-debt",
101
+ BoostOnPrice = "boost-on-price",
101
102
  RepayOnPrice = "repay-on-price"
102
103
  }
103
104
  enum IdOverrides {
@@ -151,7 +152,8 @@ export declare namespace Bundles {
151
152
  MORPHO_BLUE_EOA_REPAY = 34,
152
153
  MORPHO_BLUE_EOA_BOOST = 35,
153
154
  AAVE_V3_OPEN_ORDER_FROM_COLLATERAL = 36,
154
- AAVE_V3_REPAY_ON_PRICE = 37
155
+ AAVE_V3_REPAY_ON_PRICE = 37,
156
+ MORPHO_BLUE_BOOST_ON_PRICE = 38
155
157
  }
156
158
  enum OptimismIds {
157
159
  AAVE_V3_REPAY = 0,
@@ -171,7 +173,8 @@ export declare namespace Bundles {
171
173
  MORPHO_BLUE_REPAY = 8,
172
174
  MORPHO_BLUE_BOOST = 9,
173
175
  AAVE_V3_OPEN_ORDER_FROM_COLLATERAL = 10,
174
- AAVE_V3_REPAY_ON_PRICE = 11
176
+ AAVE_V3_REPAY_ON_PRICE = 11,
177
+ MORPHO_BLUE_BOOST_ON_PRICE = 12
175
178
  }
176
179
  enum ArbitrumIds {
177
180
  AAVE_V3_REPAY = 0,
@@ -111,6 +111,7 @@ export var Strategies;
111
111
  Identifiers["DebtInFrontRepay"] = "debt-in-front-repay";
112
112
  Identifiers["OpenOrderFromCollateral"] = "open-order-from-collateral";
113
113
  Identifiers["OpenOrderFromDebt"] = "open-order-from-debt";
114
+ Identifiers["BoostOnPrice"] = "boost-on-price";
114
115
  Identifiers["RepayOnPrice"] = "repay-on-price";
115
116
  })(Identifiers = Strategies.Identifiers || (Strategies.Identifiers = {}));
116
117
  let IdOverrides;
@@ -168,6 +169,7 @@ export var Bundles;
168
169
  MainnetIds[MainnetIds["MORPHO_BLUE_EOA_BOOST"] = 35] = "MORPHO_BLUE_EOA_BOOST";
169
170
  MainnetIds[MainnetIds["AAVE_V3_OPEN_ORDER_FROM_COLLATERAL"] = 36] = "AAVE_V3_OPEN_ORDER_FROM_COLLATERAL";
170
171
  MainnetIds[MainnetIds["AAVE_V3_REPAY_ON_PRICE"] = 37] = "AAVE_V3_REPAY_ON_PRICE";
172
+ MainnetIds[MainnetIds["MORPHO_BLUE_BOOST_ON_PRICE"] = 38] = "MORPHO_BLUE_BOOST_ON_PRICE";
171
173
  })(MainnetIds = Bundles.MainnetIds || (Bundles.MainnetIds = {}));
172
174
  let OptimismIds;
173
175
  (function (OptimismIds) {
@@ -190,6 +192,7 @@ export var Bundles;
190
192
  BaseIds[BaseIds["MORPHO_BLUE_BOOST"] = 9] = "MORPHO_BLUE_BOOST";
191
193
  BaseIds[BaseIds["AAVE_V3_OPEN_ORDER_FROM_COLLATERAL"] = 10] = "AAVE_V3_OPEN_ORDER_FROM_COLLATERAL";
192
194
  BaseIds[BaseIds["AAVE_V3_REPAY_ON_PRICE"] = 11] = "AAVE_V3_REPAY_ON_PRICE";
195
+ BaseIds[BaseIds["MORPHO_BLUE_BOOST_ON_PRICE"] = 12] = "MORPHO_BLUE_BOOST_ON_PRICE";
193
196
  })(BaseIds = Bundles.BaseIds || (Bundles.BaseIds = {}));
194
197
  let ArbitrumIds;
195
198
  (function (ArbitrumIds) {
@@ -123,6 +123,10 @@ export declare namespace Position {
123
123
  interface BoostOnPriceAave extends CloseOnPriceAave {
124
124
  ratio: number;
125
125
  }
126
+ interface BoostOnPriceMorpho extends Base {
127
+ marketId: string;
128
+ subHash: string;
129
+ }
126
130
  interface CloseOnPriceWithMaximumGasPriceAave extends Base {
127
131
  collAsset: EthereumAddress;
128
132
  collAssetId: number;
@@ -148,7 +152,7 @@ export declare namespace Position {
148
152
  subHashRepay?: string;
149
153
  }
150
154
  }
151
- type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD;
155
+ type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD | Specific.BoostOnPriceMorpho;
152
156
  interface Automated {
153
157
  chainId: ChainId;
154
158
  positionId: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/automation-sdk",
3
- "version": "3.1.4",
3
+ "version": "3.1.5",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -376,6 +376,11 @@ export const MAINNET_BUNDLES_INFO: MainnetBundleInfo = {
376
376
  strategyId: Strategies.Identifiers.RepayOnPrice,
377
377
  protocol: PROTOCOLS.AaveV3,
378
378
  },
379
+ [Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
380
+ strategyOrBundleId: Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE,
381
+ strategyId: Strategies.Identifiers.BoostOnPrice,
382
+ protocol: PROTOCOLS.MorphoBlue,
383
+ },
379
384
  };
380
385
 
381
386
  export const OPTIMISM_BUNDLES_INFO: OptimismBundleInfo = {
@@ -462,6 +467,11 @@ export const BASE_BUNDLES_INFO: BaseBundleInfo = {
462
467
  strategyId: Strategies.Identifiers.RepayOnPrice,
463
468
  protocol: PROTOCOLS.AaveV3,
464
469
  },
470
+ [Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
471
+ strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE,
472
+ strategyId: Strategies.Identifiers.BoostOnPrice,
473
+ protocol: PROTOCOLS.MorphoBlue,
474
+ },
465
475
  };
466
476
 
467
477
  export const ARBITRUM_BUNDLES_INFO: ArbitrumBundleInfo = {
@@ -1,6 +1,7 @@
1
1
  import { getAssetInfoByAddress } from '@defisaver/tokens';
2
2
  import { cloneDeep } from 'lodash';
3
3
 
4
+ import Web3 from 'web3';
4
5
  import { BUNDLES_INFO, STRATEGIES_INFO } from '../constants';
5
6
  import type {
6
7
  Position, ParseData, StrategiesToProtocolVersionMapping, BundleOrStrategy, StrategyOrBundleIds,
@@ -14,6 +15,8 @@ import {
14
15
  import * as subDataService from './subDataService';
15
16
  import * as triggerService from './triggerService';
16
17
 
18
+ const web3 = new Web3();
19
+
17
20
  const SPARK_MARKET_ADDRESSES = {
18
21
  [ChainId.Ethereum]: '0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE',
19
22
  };
@@ -779,6 +782,42 @@ function parseMorphoBlueLeverageManagement(position: Position.Automated, parseDa
779
782
  return _position;
780
783
  }
781
784
 
785
+ function parseMorphoBlueLeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
786
+ const _position = cloneDeep(position);
787
+
788
+ const { subStruct } = parseData.subscriptionEventData;
789
+ const triggerData = triggerService.morphoBluePriceTrigger.decode(subStruct.triggerData);
790
+ const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.decode(subStruct.subData);
791
+
792
+ _position.strategyData.decoded.triggerData = triggerData;
793
+ _position.strategyData.decoded.subData = subData;
794
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, Math.random());
795
+
796
+ const marketIdEncodedData = web3.eth.abi.encodeParameters(
797
+ ['address', 'address', 'address', 'address', 'uint256'],
798
+ [
799
+ subData.loanToken,
800
+ subData.collToken,
801
+ subData.oracle,
802
+ subData.irm,
803
+ subData.lltv,
804
+ ],
805
+ );
806
+
807
+ const marketId = web3.utils.keccak256(marketIdEncodedData);
808
+
809
+ _position.specific = {
810
+ subHash: _position.subHash,
811
+ marketId,
812
+ collAsset: subData.collToken,
813
+ debtAsset: subData.loanToken,
814
+ price: triggerData.price,
815
+ ratio: subData.targetRatio,
816
+ };
817
+
818
+ return _position;
819
+ }
820
+
782
821
  function parseAaveV3LeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
783
822
  const _position = cloneDeep(position);
784
823
 
@@ -877,6 +916,7 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
877
916
  [Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
878
917
  [Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
879
918
  [Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
919
+ [Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
880
920
  },
881
921
  };
882
922
 
@@ -521,4 +521,21 @@ export const morphoBlueEncode = {
521
521
 
522
522
  return [strategyOrBundleId, isBundle, triggerData, subData];
523
523
  },
524
+ leverageManagementOnPrice(
525
+ strategyOrBundleId: number,
526
+ isBundle: boolean = true,
527
+ loanToken: EthereumAddress,
528
+ collToken: EthereumAddress,
529
+ oracle: EthereumAddress,
530
+ irm: EthereumAddress,
531
+ lltv: string,
532
+ user: EthereumAddress,
533
+ targetRatio: number,
534
+ price: number,
535
+ priceState: RatioState,
536
+ ) {
537
+ const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user);
538
+ const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
539
+ return [strategyOrBundleId, isBundle, triggerData, subData];
540
+ },
524
541
  };
@@ -643,3 +643,44 @@ export const aaveV3LeverageManagementOnPriceSubData = {
643
643
  };
644
644
  },
645
645
  };
646
+
647
+ export const morphoBlueLeverageManagementOnPriceSubData = {
648
+ encode(
649
+ loanToken: EthereumAddress,
650
+ collToken: EthereumAddress,
651
+ oracle: EthereumAddress,
652
+ irm: EthereumAddress,
653
+ lltv: string,
654
+ targetRatio: number,
655
+ user: EthereumAddress,
656
+ ): SubData {
657
+ const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
658
+ const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
659
+ const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
660
+ const irmEncoded = AbiCoder.encodeParameter('address', irm);
661
+ const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
662
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
663
+ const userEncoded = AbiCoder.encodeParameter('address', user);
664
+ return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, targetRatioEncoded, userEncoded];
665
+ },
666
+ decode(subData: SubData) {
667
+ const loanToken = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
668
+ const collToken = AbiCoder.decodeParameter('address', subData[1]) as any as EthereumAddress;
669
+ const oracle = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
670
+ const irm = AbiCoder.decodeParameter('address', subData[3]) as any as EthereumAddress;
671
+ const lltv = AbiCoder.decodeParameter('uint256', subData[4]) as any as EthereumAddress;
672
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[5]) as any as EthereumAddress;
673
+ const targetRatio = weiToRatioPercentage(weiRatio);
674
+ const user = AbiCoder.decodeParameter('address', subData[6]) as any as EthereumAddress;
675
+
676
+ return {
677
+ loanToken,
678
+ collToken,
679
+ oracle,
680
+ irm,
681
+ lltv,
682
+ targetRatio,
683
+ user,
684
+ };
685
+ },
686
+ };
@@ -447,3 +447,32 @@ export const morphoBlueRatioTrigger = {
447
447
  };
448
448
  },
449
449
  };
450
+
451
+ export const morphoBluePriceTrigger = {
452
+ encode(
453
+ oracle: EthereumAddress,
454
+ collateralToken: EthereumAddress,
455
+ loanToken: EthereumAddress,
456
+ price: number,
457
+ priceState: RatioState,
458
+ ) {
459
+ const _price = new Dec(price.toString()).mul(1e8).floor().toString();
460
+ return [
461
+ AbiCoder.encodeParameters(
462
+ ['address', 'address', 'address', 'uint256', 'uint8'],
463
+ [oracle, collateralToken, loanToken, _price, priceState]),
464
+ ];
465
+ },
466
+ decode(
467
+ triggerData: TriggerData,
468
+ ) {
469
+ const decodedData = AbiCoder.decodeParameters(['address', 'address', 'address', 'uint256', 'uint8'], triggerData[0]);
470
+ return {
471
+ oracle: decodedData[0] as EthereumAddress,
472
+ collateralToken: decodedData[1] as EthereumAddress,
473
+ loanToken: decodedData[2] as EthereumAddress,
474
+ price: new Dec(decodedData[3] as string).div(1e8).toString(),
475
+ priceState: Number(decodedData[4]),
476
+ };
477
+ },
478
+ };
@@ -108,6 +108,7 @@ export namespace Strategies {
108
108
  DebtInFrontRepay = 'debt-in-front-repay',
109
109
  OpenOrderFromCollateral = 'open-order-from-collateral',
110
110
  OpenOrderFromDebt = 'open-order-from-debt',
111
+ BoostOnPrice = 'boost-on-price',
111
112
  RepayOnPrice = 'repay-on-price',
112
113
  }
113
114
  export enum IdOverrides {
@@ -163,6 +164,7 @@ export namespace Bundles {
163
164
  MORPHO_BLUE_EOA_BOOST = 35,
164
165
  AAVE_V3_OPEN_ORDER_FROM_COLLATERAL = 36,
165
166
  AAVE_V3_REPAY_ON_PRICE = 37,
167
+ MORPHO_BLUE_BOOST_ON_PRICE = 38,
166
168
  }
167
169
 
168
170
  export enum OptimismIds {
@@ -185,6 +187,7 @@ export namespace Bundles {
185
187
  MORPHO_BLUE_BOOST = 9,
186
188
  AAVE_V3_OPEN_ORDER_FROM_COLLATERAL = 10,
187
189
  AAVE_V3_REPAY_ON_PRICE = 11,
190
+ MORPHO_BLUE_BOOST_ON_PRICE = 12,
188
191
  }
189
192
 
190
193
  export enum ArbitrumIds {
@@ -149,6 +149,11 @@ export declare namespace Position {
149
149
  ratio: number,
150
150
  }
151
151
 
152
+ interface BoostOnPriceMorpho extends Base {
153
+ marketId: string;
154
+ subHash: string;
155
+ }
156
+
152
157
  interface CloseOnPriceWithMaximumGasPriceAave extends Base {
153
158
  collAsset: EthereumAddress,
154
159
  collAssetId: number,
@@ -186,7 +191,8 @@ export declare namespace Position {
186
191
  | Specific.BoostOnPriceAave
187
192
  | Specific.CloseOnPriceWithMaximumGasPriceAave
188
193
  | Specific.DebtInFrontRepay
189
- | Specific.LeverageManagementCrvUSD;
194
+ | Specific.LeverageManagementCrvUSD
195
+ | Specific.BoostOnPriceMorpho;
190
196
 
191
197
  export interface Automated {
192
198
  chainId: ChainId,