@defisaver/automation-sdk 3.3.8 → 3.3.9

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.
@@ -6,6 +6,7 @@ export declare const makerEncode: {
6
6
  closeOnPrice(vaultId: number, ratioState: RatioState, price: string, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
7
7
  trailingStop(vaultId: number, triggerPercentage: number, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, roundId: number, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
8
8
  leverageManagement(vaultId: number, triggerRepayRatio: string, triggerBoostRatio: string, targetBoostRatio: string, targetRepayRatio: string, boostEnabled: boolean): (string | number | boolean)[];
9
+ leverageManagementWithoutSubProxy(vaultId: number, triggerRatio: number, targetRatio: number, ratioState: RatioState, isBoost: boolean, daiAddr?: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
9
10
  };
10
11
  export declare const liquityEncode: {
11
12
  closeOnPrice(priceOverOrUnder: RatioState, price: string, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, chainId?: ChainId, collAddr?: EthereumAddress, debtAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
@@ -86,6 +87,7 @@ export declare const exchangeEncode: {
86
87
  export declare const sparkEncode: {
87
88
  leverageManagement(triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean): string;
88
89
  closeOnPriceGeneric(strategyOrBundleId: number, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, user: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
90
+ leverageManagementWithoutSubProxy(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
89
91
  };
90
92
  export declare const crvUSDEncode: {
91
93
  leverageManagement(owner: EthereumAddress, controllerAddr: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, collTokenAddr: EthereumAddress, crvUSDAddr: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
@@ -70,6 +70,17 @@ exports.makerEncode = {
70
70
  boostEnabled,
71
71
  ];
72
72
  },
73
+ leverageManagementWithoutSubProxy(vaultId, triggerRatio, targetRatio, ratioState, isBoost, daiAddr) {
74
+ const bundleId = isBoost ? enums_1.Bundles.MainnetIds.MAKER_BOOST : enums_1.Bundles.MainnetIds.MAKER_REPAY;
75
+ const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
76
+ const subData = subDataService.makerLeverageManagementWithoutSubProxy.encode(vaultId, targetRatio, daiAddr);
77
+ return [
78
+ bundleId,
79
+ true,
80
+ triggerData,
81
+ subData,
82
+ ];
83
+ },
73
84
  };
74
85
  exports.liquityEncode = {
75
86
  closeOnPrice(priceOverOrUnder, price, closeToAssetAddr, chainlinkCollAddress, chainId = enums_1.ChainId.Ethereum, collAddr, debtAddr) {
@@ -268,6 +279,12 @@ exports.sparkEncode = {
268
279
  const triggerDataEncoded = triggerService.sparkQuotePriceRangeTrigger.encode(collAsset, debtAsset, stopLossPrice, takeProfitPrice);
269
280
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
270
281
  },
282
+ leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
283
+ const isBundle = true;
284
+ const subData = subDataService.sparkLeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
285
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
286
+ return [strategyOrBundleId, isBundle, triggerData, subData];
287
+ },
271
288
  };
272
289
  exports.crvUSDEncode = {
273
290
  leverageManagement(owner, controllerAddr, ratioState, targetRatio, triggerRatio, collTokenAddr, crvUSDAddr) {
@@ -146,6 +146,53 @@ describe('Feature: strategySubService.ts', () => {
146
146
  });
147
147
  });
148
148
  });
149
+ describe('leverageManagementWithoutSubProxy()', () => {
150
+ const examples = [
151
+ // Repay scenario (isBoost=false, RatioState.UNDER)
152
+ [
153
+ [
154
+ enums_1.Bundles.MainnetIds.MAKER_REPAY,
155
+ true,
156
+ ['0x00000000000000000000000000000000000000000000000000000000000000de000000000000000000000000000000000000000000000000136dcc951d8c00000000000000000000000000000000000000000000000000000000000000000001'],
157
+ [
158
+ '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
159
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
160
+ ],
161
+ ],
162
+ [
163
+ 222,
164
+ 140,
165
+ 180,
166
+ enums_1.RatioState.UNDER,
167
+ false, // isBoost
168
+ ]
169
+ ],
170
+ // Boost scenario (isBoost=true, RatioState.OVER)
171
+ [
172
+ [
173
+ enums_1.Bundles.MainnetIds.MAKER_BOOST,
174
+ true,
175
+ ['0x000000000000000000000000000000000000000000000000000000000000014d00000000000000000000000000000000000000000000000026db992a3b1800000000000000000000000000000000000000000000000000000000000000000000'],
176
+ [
177
+ '0x000000000000000000000000000000000000000000000000000000000000014d', '0x00000000000000000000000000000000000000000000000022b1c8c1227a0000',
178
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
179
+ ],
180
+ ],
181
+ [
182
+ 333,
183
+ 280,
184
+ 250,
185
+ enums_1.RatioState.OVER,
186
+ true, // isBoost
187
+ ]
188
+ ],
189
+ ];
190
+ examples.forEach(([expected, actual]) => {
191
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
192
+ (0, chai_1.expect)(strategySubService_1.makerEncode.leverageManagementWithoutSubProxy(...actual)).to.eql(expected);
193
+ });
194
+ });
195
+ });
149
196
  });
150
197
  describe('When testing strategySubService.liquityEncode', () => {
151
198
  describe('closeOnPrice()', () => {
@@ -28,6 +28,14 @@ export declare const makerLeverageManagementSubData: {
28
28
  targetRatio: number;
29
29
  };
30
30
  };
31
+ export declare const makerLeverageManagementWithoutSubProxy: {
32
+ encode(vaultId: number, targetRatio: number, daiAddr?: EthereumAddress): string[];
33
+ decode(subData: string[]): {
34
+ vaultId: number;
35
+ targetRatio: number;
36
+ daiAddr: string;
37
+ };
38
+ };
31
39
  export declare const liquityLeverageManagementSubData: {
32
40
  decode: (subData: string[]) => {
33
41
  targetRatio: number;
@@ -166,6 +174,13 @@ export declare const sparkLeverageManagementSubData: {
166
174
  targetRatio: number;
167
175
  };
168
176
  };
177
+ export declare const sparkLeverageManagementSubDataWithoutSubProxy: {
178
+ encode(targetRatio: number, ratioState: RatioState): string[];
179
+ decode(subData: string[]): {
180
+ targetRatio: number;
181
+ ratioState: RatioState;
182
+ };
183
+ };
169
184
  export declare const liquityDsrPaybackSubData: {
170
185
  encode: (targetRatio: number) => string[];
171
186
  decode: (subData: string[]) => {
@@ -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.morphoBlueCloseOnPriceSubData = exports.sparkCloseGenericSubData = exports.compoundV3CloseSubData = exports.compoundV3LeverageManagementOnPriceSubData = exports.fluidLeverageManagementSubData = exports.liquityV2PaybackSubData = exports.morphoBlueLeverageManagementOnPriceSubData = exports.liquityV2LeverageManagementOnPriceSubData = exports.liquityV2CloseSubData = exports.liquityV2LeverageManagementSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = exports.compoundV3L2LeverageManagementSubData = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3CollateralSwitchSubData = exports.aaveV3CloseGenericSubData = exports.aaveV3LeverageManagementOnPriceGeneric = exports.aaveV3LeverageManagementSubDataWithoutSubProxy = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubData = exports.makerLeverageManagementSubData = exports.makerCloseSubData = exports.liquityRepayFromSavingsSubData = exports.makerRepayFromSavingsSubData = void 0;
6
+ exports.morphoBlueCloseOnPriceSubData = exports.sparkCloseGenericSubData = exports.compoundV3CloseSubData = exports.compoundV3LeverageManagementOnPriceSubData = exports.fluidLeverageManagementSubData = exports.liquityV2PaybackSubData = exports.morphoBlueLeverageManagementOnPriceSubData = exports.liquityV2LeverageManagementOnPriceSubData = exports.liquityV2CloseSubData = exports.liquityV2LeverageManagementSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.sparkLeverageManagementSubDataWithoutSubProxy = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = exports.compoundV3L2LeverageManagementSubData = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3CollateralSwitchSubData = exports.aaveV3CloseGenericSubData = exports.aaveV3LeverageManagementOnPriceGeneric = exports.aaveV3LeverageManagementSubDataWithoutSubProxy = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubData = exports.makerLeverageManagementWithoutSubProxy = 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");
@@ -76,6 +76,20 @@ exports.makerLeverageManagementSubData = {
76
76
  return { vaultId, targetRatio };
77
77
  },
78
78
  };
79
+ exports.makerLeverageManagementWithoutSubProxy = {
80
+ encode(vaultId, targetRatio, daiAddr) {
81
+ const encodedVaultId = web3_eth_abi_1.default.encodeParameter('uint256', vaultId);
82
+ const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
83
+ const encodedDaiAddr = web3_eth_abi_1.default.encodeParameter('address', daiAddr || (0, tokens_1.getAssetInfo)('DAI', 1).address);
84
+ return [encodedVaultId, encodedTargetRatio, encodedDaiAddr];
85
+ },
86
+ decode(subData) {
87
+ const vaultId = +web3_eth_abi_1.default.decodeParameter('uint256', subData[0]).toString();
88
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[1]));
89
+ const daiAddr = web3_eth_abi_1.default.decodeParameter('address', subData[2]).toString();
90
+ return { vaultId, targetRatio, daiAddr };
91
+ },
92
+ };
79
93
  exports.liquityLeverageManagementSubData = {
80
94
  decode: (subData) => {
81
95
  const weiRatio = web3_eth_abi_1.default.decodeParameter('uint256', subData[1]);
@@ -417,6 +431,20 @@ exports.sparkLeverageManagementSubData = {
417
431
  return { targetRatio };
418
432
  },
419
433
  };
434
+ exports.sparkLeverageManagementSubDataWithoutSubProxy = {
435
+ encode(targetRatio, ratioState) {
436
+ const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
437
+ const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
438
+ const encodedUseDefaultMarket = web3_eth_abi_1.default.encodeParameter('bool', true);
439
+ const encodedUseOnBehalf = web3_eth_abi_1.default.encodeParameter('bool', false);
440
+ return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
441
+ },
442
+ decode(subData) {
443
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[0]));
444
+ const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[1]);
445
+ return { targetRatio, ratioState };
446
+ },
447
+ };
420
448
  exports.liquityDsrPaybackSubData = {
421
449
  encode: (targetRatio) => {
422
450
  const daiAddress = (0, tokens_1.getAssetInfo)('DAI').address;
@@ -164,6 +164,62 @@ describe('Feature: subDataService.ts', () => {
164
164
  });
165
165
  });
166
166
  });
167
+ describe('When testing subDataService.makerLeverageManagementWithoutSubProxy', () => {
168
+ describe('encode()', () => {
169
+ const examples = [
170
+ [
171
+ [
172
+ '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
173
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
174
+ ],
175
+ [222, 180], // Uses default DAI address
176
+ ],
177
+ [
178
+ [
179
+ '0x000000000000000000000000000000000000000000000000000000000000014d', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
180
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
181
+ ],
182
+ [333, 200, web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WETH', enums_1.ChainId.Ethereum).address)], // Custom address
183
+ ],
184
+ ];
185
+ examples.forEach(([expected, actual]) => {
186
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
187
+ (0, chai_1.expect)(subDataService.makerLeverageManagementWithoutSubProxy.encode(...actual)).to.eql(expected);
188
+ });
189
+ });
190
+ });
191
+ describe('decode()', () => {
192
+ const examples = [
193
+ [
194
+ {
195
+ vaultId: 222,
196
+ targetRatio: 180,
197
+ daiAddr: web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('DAI', enums_1.ChainId.Ethereum).address),
198
+ },
199
+ [
200
+ '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
201
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
202
+ ],
203
+ ],
204
+ [
205
+ {
206
+ vaultId: 333,
207
+ targetRatio: 200,
208
+ daiAddr: web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WETH', enums_1.ChainId.Ethereum).address),
209
+ },
210
+ [
211
+ '0x000000000000000000000000000000000000000000000000000000000000014d', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
212
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
213
+ ],
214
+ ],
215
+ ];
216
+ examples.forEach(([expected, actual]) => {
217
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
218
+ (0, chai_1.expect)(subDataService.makerLeverageManagementWithoutSubProxy.decode(actual)).to.eql(expected);
219
+ });
220
+ });
221
+ });
222
+ });
167
223
  describe('When testing subDataService.liquityLeverageManagementSubData', () => {
168
224
  describe('decode()', () => {
169
225
  const examples = [
@@ -6,6 +6,7 @@ export declare const makerEncode: {
6
6
  closeOnPrice(vaultId: number, ratioState: RatioState, price: string, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
7
7
  trailingStop(vaultId: number, triggerPercentage: number, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, roundId: number, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
8
8
  leverageManagement(vaultId: number, triggerRepayRatio: string, triggerBoostRatio: string, targetBoostRatio: string, targetRepayRatio: string, boostEnabled: boolean): (string | number | boolean)[];
9
+ leverageManagementWithoutSubProxy(vaultId: number, triggerRatio: number, targetRatio: number, ratioState: RatioState, isBoost: boolean, daiAddr?: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
9
10
  };
10
11
  export declare const liquityEncode: {
11
12
  closeOnPrice(priceOverOrUnder: RatioState, price: string, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, chainId?: ChainId, collAddr?: EthereumAddress, debtAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
@@ -86,6 +87,7 @@ export declare const exchangeEncode: {
86
87
  export declare const sparkEncode: {
87
88
  leverageManagement(triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean): string;
88
89
  closeOnPriceGeneric(strategyOrBundleId: number, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, user: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
90
+ leverageManagementWithoutSubProxy(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
89
91
  };
90
92
  export declare const crvUSDEncode: {
91
93
  leverageManagement(owner: EthereumAddress, controllerAddr: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, collTokenAddr: EthereumAddress, crvUSDAddr: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
@@ -41,6 +41,17 @@ export const makerEncode = {
41
41
  boostEnabled,
42
42
  ];
43
43
  },
44
+ leverageManagementWithoutSubProxy(vaultId, triggerRatio, targetRatio, ratioState, isBoost, daiAddr) {
45
+ const bundleId = isBoost ? Bundles.MainnetIds.MAKER_BOOST : Bundles.MainnetIds.MAKER_REPAY;
46
+ const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
47
+ const subData = subDataService.makerLeverageManagementWithoutSubProxy.encode(vaultId, targetRatio, daiAddr);
48
+ return [
49
+ bundleId,
50
+ true,
51
+ triggerData,
52
+ subData,
53
+ ];
54
+ },
44
55
  };
45
56
  export const liquityEncode = {
46
57
  closeOnPrice(priceOverOrUnder, price, closeToAssetAddr, chainlinkCollAddress, chainId = ChainId.Ethereum, collAddr, debtAddr) {
@@ -239,6 +250,12 @@ export const sparkEncode = {
239
250
  const triggerDataEncoded = triggerService.sparkQuotePriceRangeTrigger.encode(collAsset, debtAsset, stopLossPrice, takeProfitPrice);
240
251
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
241
252
  },
253
+ leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
254
+ const isBundle = true;
255
+ const subData = subDataService.sparkLeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
256
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
257
+ return [strategyOrBundleId, isBundle, triggerData, subData];
258
+ },
242
259
  };
243
260
  export const crvUSDEncode = {
244
261
  leverageManagement(owner, controllerAddr, ratioState, targetRatio, triggerRatio, collTokenAddr, crvUSDAddr) {
@@ -118,6 +118,53 @@ describe('Feature: strategySubService.ts', () => {
118
118
  });
119
119
  });
120
120
  });
121
+ describe('leverageManagementWithoutSubProxy()', () => {
122
+ const examples = [
123
+ // Repay scenario (isBoost=false, RatioState.UNDER)
124
+ [
125
+ [
126
+ Bundles.MainnetIds.MAKER_REPAY,
127
+ true,
128
+ ['0x00000000000000000000000000000000000000000000000000000000000000de000000000000000000000000000000000000000000000000136dcc951d8c00000000000000000000000000000000000000000000000000000000000000000001'],
129
+ [
130
+ '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
131
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
132
+ ],
133
+ ],
134
+ [
135
+ 222,
136
+ 140,
137
+ 180,
138
+ RatioState.UNDER,
139
+ false, // isBoost
140
+ ]
141
+ ],
142
+ // Boost scenario (isBoost=true, RatioState.OVER)
143
+ [
144
+ [
145
+ Bundles.MainnetIds.MAKER_BOOST,
146
+ true,
147
+ ['0x000000000000000000000000000000000000000000000000000000000000014d00000000000000000000000000000000000000000000000026db992a3b1800000000000000000000000000000000000000000000000000000000000000000000'],
148
+ [
149
+ '0x000000000000000000000000000000000000000000000000000000000000014d', '0x00000000000000000000000000000000000000000000000022b1c8c1227a0000',
150
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
151
+ ],
152
+ ],
153
+ [
154
+ 333,
155
+ 280,
156
+ 250,
157
+ RatioState.OVER,
158
+ true, // isBoost
159
+ ]
160
+ ],
161
+ ];
162
+ examples.forEach(([expected, actual]) => {
163
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
164
+ expect(makerEncode.leverageManagementWithoutSubProxy(...actual)).to.eql(expected);
165
+ });
166
+ });
167
+ });
121
168
  });
122
169
  describe('When testing strategySubService.liquityEncode', () => {
123
170
  describe('closeOnPrice()', () => {
@@ -28,6 +28,14 @@ export declare const makerLeverageManagementSubData: {
28
28
  targetRatio: number;
29
29
  };
30
30
  };
31
+ export declare const makerLeverageManagementWithoutSubProxy: {
32
+ encode(vaultId: number, targetRatio: number, daiAddr?: EthereumAddress): string[];
33
+ decode(subData: string[]): {
34
+ vaultId: number;
35
+ targetRatio: number;
36
+ daiAddr: string;
37
+ };
38
+ };
31
39
  export declare const liquityLeverageManagementSubData: {
32
40
  decode: (subData: string[]) => {
33
41
  targetRatio: number;
@@ -166,6 +174,13 @@ export declare const sparkLeverageManagementSubData: {
166
174
  targetRatio: number;
167
175
  };
168
176
  };
177
+ export declare const sparkLeverageManagementSubDataWithoutSubProxy: {
178
+ encode(targetRatio: number, ratioState: RatioState): string[];
179
+ decode(subData: string[]): {
180
+ targetRatio: number;
181
+ ratioState: RatioState;
182
+ };
183
+ };
169
184
  export declare const liquityDsrPaybackSubData: {
170
185
  encode: (targetRatio: number) => string[];
171
186
  decode: (subData: string[]) => {
@@ -70,6 +70,20 @@ export const makerLeverageManagementSubData = {
70
70
  return { vaultId, targetRatio };
71
71
  },
72
72
  };
73
+ export const makerLeverageManagementWithoutSubProxy = {
74
+ encode(vaultId, targetRatio, daiAddr) {
75
+ const encodedVaultId = AbiCoder.encodeParameter('uint256', vaultId);
76
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
77
+ const encodedDaiAddr = AbiCoder.encodeParameter('address', daiAddr || getAssetInfo('DAI', 1).address);
78
+ return [encodedVaultId, encodedTargetRatio, encodedDaiAddr];
79
+ },
80
+ decode(subData) {
81
+ const vaultId = +AbiCoder.decodeParameter('uint256', subData[0]).toString();
82
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]));
83
+ const daiAddr = AbiCoder.decodeParameter('address', subData[2]).toString();
84
+ return { vaultId, targetRatio, daiAddr };
85
+ },
86
+ };
73
87
  export const liquityLeverageManagementSubData = {
74
88
  decode: (subData) => {
75
89
  const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]);
@@ -411,6 +425,20 @@ export const sparkLeverageManagementSubData = {
411
425
  return { targetRatio };
412
426
  },
413
427
  };
428
+ export const sparkLeverageManagementSubDataWithoutSubProxy = {
429
+ encode(targetRatio, ratioState) {
430
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
431
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
432
+ const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
433
+ const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
434
+ return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
435
+ },
436
+ decode(subData) {
437
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
438
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
439
+ return { targetRatio, ratioState };
440
+ },
441
+ };
414
442
  export const liquityDsrPaybackSubData = {
415
443
  encode: (targetRatio) => {
416
444
  const daiAddress = getAssetInfo('DAI').address;
@@ -136,6 +136,62 @@ describe('Feature: subDataService.ts', () => {
136
136
  });
137
137
  });
138
138
  });
139
+ describe('When testing subDataService.makerLeverageManagementWithoutSubProxy', () => {
140
+ describe('encode()', () => {
141
+ const examples = [
142
+ [
143
+ [
144
+ '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
145
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
146
+ ],
147
+ [222, 180], // Uses default DAI address
148
+ ],
149
+ [
150
+ [
151
+ '0x000000000000000000000000000000000000000000000000000000000000014d', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
152
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
153
+ ],
154
+ [333, 200, web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address)], // Custom address
155
+ ],
156
+ ];
157
+ examples.forEach(([expected, actual]) => {
158
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
159
+ expect(subDataService.makerLeverageManagementWithoutSubProxy.encode(...actual)).to.eql(expected);
160
+ });
161
+ });
162
+ });
163
+ describe('decode()', () => {
164
+ const examples = [
165
+ [
166
+ {
167
+ vaultId: 222,
168
+ targetRatio: 180,
169
+ daiAddr: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
170
+ },
171
+ [
172
+ '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
173
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
174
+ ],
175
+ ],
176
+ [
177
+ {
178
+ vaultId: 333,
179
+ targetRatio: 200,
180
+ daiAddr: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
181
+ },
182
+ [
183
+ '0x000000000000000000000000000000000000000000000000000000000000014d', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
184
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
185
+ ],
186
+ ],
187
+ ];
188
+ examples.forEach(([expected, actual]) => {
189
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
190
+ expect(subDataService.makerLeverageManagementWithoutSubProxy.decode(actual)).to.eql(expected);
191
+ });
192
+ });
193
+ });
194
+ });
139
195
  describe('When testing subDataService.liquityLeverageManagementSubData', () => {
140
196
  describe('decode()', () => {
141
197
  const examples = [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/automation-sdk",
3
- "version": "3.3.8",
3
+ "version": "3.3.9",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -170,6 +170,61 @@ describe('Feature: strategySubService.ts', () => {
170
170
  });
171
171
  });
172
172
  });
173
+
174
+ describe('leverageManagementWithoutSubProxy()', () => {
175
+ const examples: Array<[
176
+ [StrategyOrBundleIds, boolean, TriggerData, SubData],
177
+ [
178
+ vaultId: number, triggerRatio: number, targetRatio: number, ratioState: RatioState,
179
+ isBoost: boolean, daiAddr?: EthereumAddress,
180
+ ]
181
+ ]> = [
182
+ // Repay scenario (isBoost=false, RatioState.UNDER)
183
+ [
184
+ [
185
+ Bundles.MainnetIds.MAKER_REPAY,
186
+ true,
187
+ ['0x00000000000000000000000000000000000000000000000000000000000000de000000000000000000000000000000000000000000000000136dcc951d8c00000000000000000000000000000000000000000000000000000000000000000001'],
188
+ [
189
+ '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
190
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
191
+ ],
192
+ ],
193
+ [
194
+ 222, // vaultId
195
+ 140, // triggerRatio
196
+ 180, // targetRatio
197
+ RatioState.UNDER, // ratioState
198
+ false, // isBoost
199
+ ]
200
+ ],
201
+ // Boost scenario (isBoost=true, RatioState.OVER)
202
+ [
203
+ [
204
+ Bundles.MainnetIds.MAKER_BOOST,
205
+ true,
206
+ ['0x000000000000000000000000000000000000000000000000000000000000014d00000000000000000000000000000000000000000000000026db992a3b1800000000000000000000000000000000000000000000000000000000000000000000'],
207
+ [
208
+ '0x000000000000000000000000000000000000000000000000000000000000014d', '0x00000000000000000000000000000000000000000000000022b1c8c1227a0000',
209
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
210
+ ],
211
+ ],
212
+ [
213
+ 333, // vaultId
214
+ 280, // triggerRatio
215
+ 250, // targetRatio
216
+ RatioState.OVER, // ratioState
217
+ true, // isBoost
218
+ ]
219
+ ],
220
+ ];
221
+
222
+ examples.forEach(([expected, actual]) => {
223
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
224
+ expect(makerEncode.leverageManagementWithoutSubProxy(...actual)).to.eql(expected);
225
+ });
226
+ });
227
+ });
173
228
  });
174
229
 
175
230
  describe('When testing strategySubService.liquityEncode', () => {
@@ -3,8 +3,11 @@ import { getAssetInfo } from '@defisaver/tokens';
3
3
 
4
4
  import type { OrderType } from '../types/enums';
5
5
  import {
6
- CloseStrategyType, CloseToAssetType,
7
- Bundles, ChainId, RatioState, Strategies,
6
+ CloseToAssetType,
7
+ Bundles,
8
+ ChainId,
9
+ RatioState,
10
+ Strategies,
8
11
  } from '../types/enums';
9
12
  import type { EthereumAddress, StrategyOrBundleIds } from '../types';
10
13
 
@@ -95,6 +98,27 @@ export const makerEncode = {
95
98
  boostEnabled,
96
99
  ];
97
100
  },
101
+ leverageManagementWithoutSubProxy(
102
+ vaultId: number,
103
+ triggerRatio: number,
104
+ targetRatio: number,
105
+ ratioState: RatioState,
106
+ isBoost: boolean,
107
+ daiAddr?: EthereumAddress,
108
+ ) {
109
+ const bundleId = isBoost ? Bundles.MainnetIds.MAKER_BOOST : Bundles.MainnetIds.MAKER_REPAY;
110
+
111
+ const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
112
+
113
+ const subData = subDataService.makerLeverageManagementWithoutSubProxy.encode(vaultId, targetRatio, daiAddr);
114
+
115
+ return [
116
+ bundleId,
117
+ true,
118
+ triggerData,
119
+ subData,
120
+ ];
121
+ },
98
122
  };
99
123
 
100
124
  export const liquityEncode = {
@@ -578,6 +602,24 @@ export const sparkEncode = {
578
602
 
579
603
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
580
604
  },
605
+ leverageManagementWithoutSubProxy(
606
+ strategyOrBundleId: number,
607
+ market: EthereumAddress,
608
+ user: EthereumAddress,
609
+ ratioState: RatioState,
610
+ targetRatio: number,
611
+ triggerRatio: number,
612
+ ) {
613
+ const isBundle = true;
614
+
615
+ const subData = subDataService.sparkLeverageManagementSubDataWithoutSubProxy.encode(
616
+ targetRatio,
617
+ ratioState,
618
+ );
619
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
620
+
621
+ return [strategyOrBundleId, isBundle, triggerData, subData];
622
+ },
581
623
  };
582
624
 
583
625
  export const crvUSDEncode = {
@@ -153,6 +153,66 @@ describe('Feature: subDataService.ts', () => {
153
153
  });
154
154
  });
155
155
 
156
+ describe('When testing subDataService.makerLeverageManagementWithoutSubProxy', () => {
157
+ describe('encode()', () => {
158
+ const examples: Array<[SubData, [vaultId: number, targetRatio: number, daiAddr?: EthereumAddress]]> = [
159
+ [
160
+ [
161
+ '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
162
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
163
+ ],
164
+ [222, 180], // Uses default DAI address
165
+ ],
166
+ [
167
+ [
168
+ '0x000000000000000000000000000000000000000000000000000000000000014d', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
169
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
170
+ ],
171
+ [333, 200, web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address)], // Custom address
172
+ ],
173
+ ];
174
+
175
+ examples.forEach(([expected, actual]) => {
176
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
177
+ expect(subDataService.makerLeverageManagementWithoutSubProxy.encode(...actual)).to.eql(expected);
178
+ });
179
+ });
180
+ });
181
+
182
+ describe('decode()', () => {
183
+ const examples: Array<[{ vaultId: number, targetRatio: number, daiAddr: string }, SubData]> = [
184
+ [
185
+ {
186
+ vaultId: 222,
187
+ targetRatio: 180,
188
+ daiAddr: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
189
+ },
190
+ [
191
+ '0x00000000000000000000000000000000000000000000000000000000000000de', '0x00000000000000000000000000000000000000000000000018fae27693b40000',
192
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
193
+ ],
194
+ ],
195
+ [
196
+ {
197
+ vaultId: 333,
198
+ targetRatio: 200,
199
+ daiAddr: web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
200
+ },
201
+ [
202
+ '0x000000000000000000000000000000000000000000000000000000000000014d', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
203
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
204
+ ],
205
+ ],
206
+ ];
207
+
208
+ examples.forEach(([expected, actual]) => {
209
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
210
+ expect(subDataService.makerLeverageManagementWithoutSubProxy.decode(actual)).to.eql(expected);
211
+ });
212
+ });
213
+ });
214
+ });
215
+
156
216
  describe('When testing subDataService.liquityLeverageManagementSubData', () => {
157
217
  describe('decode()', () => {
158
218
  const examples: Array<[{ targetRatio: number }, SubData]> = [
@@ -104,6 +104,26 @@ export const makerLeverageManagementSubData = {
104
104
  },
105
105
  };
106
106
 
107
+ export const makerLeverageManagementWithoutSubProxy = {
108
+ encode(
109
+ vaultId: number,
110
+ targetRatio: number,
111
+ daiAddr?: EthereumAddress,
112
+ ): SubData {
113
+ const encodedVaultId = AbiCoder.encodeParameter('uint256', vaultId);
114
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
115
+ const encodedDaiAddr = AbiCoder.encodeParameter('address', daiAddr || getAssetInfo('DAI', 1).address);
116
+ return [encodedVaultId, encodedTargetRatio, encodedDaiAddr];
117
+ },
118
+ decode(subData: SubData): { vaultId: number, targetRatio: number, daiAddr: string } {
119
+ const vaultId = +AbiCoder.decodeParameter('uint256', subData[0])!.toString();
120
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]) as any as string);
121
+ const daiAddr = AbiCoder.decodeParameter('address', subData[2])!.toString();
122
+
123
+ return { vaultId, targetRatio, daiAddr };
124
+ },
125
+ };
126
+
107
127
  export const liquityLeverageManagementSubData = {
108
128
  decode: (subData:SubData) => {
109
129
  const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
@@ -592,6 +612,26 @@ export const sparkLeverageManagementSubData = { // TODO encode?
592
612
  return { targetRatio };
593
613
  },
594
614
  };
615
+ export const sparkLeverageManagementSubDataWithoutSubProxy = {
616
+ encode(
617
+ targetRatio: number,
618
+ ratioState: RatioState,
619
+ ): SubData {
620
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
621
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
622
+
623
+ const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
624
+ const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
625
+ return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
626
+ },
627
+ decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
628
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
629
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
630
+
631
+ return { targetRatio, ratioState };
632
+ },
633
+ };
634
+
595
635
 
596
636
  export const liquityDsrPaybackSubData = {
597
637
  encode: (targetRatio: number) => {