@defisaver/automation-sdk 3.3.12 → 3.3.13-strategies-refactor-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.
@@ -1,4 +1,3 @@
1
- import Dec from 'decimal.js';
2
1
  import { getAssetInfo } from '@defisaver/tokens';
3
2
  import { CloseToAssetType, Bundles, ChainId, RatioState, Strategies, } from '../types/enums';
4
3
  import { STRATEGY_IDS } from '../constants';
@@ -31,16 +30,6 @@ export const makerEncode = {
31
30
  const isBundle = false;
32
31
  return [strategyOrBundleId, isBundle, triggerData, subData];
33
32
  },
34
- leverageManagement(vaultId, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
35
- return [
36
- vaultId,
37
- new Dec(triggerRepayRatio).mul(1e16).toString(),
38
- new Dec(triggerBoostRatio).mul(1e16).toString(),
39
- new Dec(targetBoostRatio).mul(1e16).toString(),
40
- new Dec(targetRepayRatio).mul(1e16).toString(),
41
- boostEnabled,
42
- ];
43
- },
44
33
  leverageManagementWithoutSubProxy(vaultId, triggerRatio, targetRatio, ratioState, isBoost, daiAddr) {
45
34
  const bundleId = isBoost ? Bundles.MainnetIds.MAKER_BOOST : Bundles.MainnetIds.MAKER_REPAY;
46
35
  const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
@@ -78,14 +67,11 @@ export const liquityEncode = {
78
67
  const isBundle = true;
79
68
  return [strategyId, isBundle, triggerData, subData];
80
69
  },
81
- leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
82
- return [
83
- new Dec(triggerRepayRatio).mul(1e16).toString(),
84
- new Dec(triggerBoostRatio).mul(1e16).toString(),
85
- new Dec(targetBoostRatio).mul(1e16).toString(),
86
- new Dec(targetRepayRatio).mul(1e16).toString(),
87
- boostEnabled,
88
- ];
70
+ leverageManagementWithoutSubProxy(strategyOrBundleId, user, ratioState, targetRatio, triggerRatio) {
71
+ const isBundle = true;
72
+ const subData = subDataService.liquityLeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
73
+ const triggerData = triggerService.liquityRatioTrigger.encode(user, triggerRatio, ratioState);
74
+ return [strategyOrBundleId, isBundle, triggerData, subData];
89
75
  },
90
76
  dsrPayback(proxyAddress, triggerRatio, targetRatio) {
91
77
  requireAddress(proxyAddress);
@@ -118,24 +104,14 @@ export const chickenBondsEncode = {
118
104
  },
119
105
  };
120
106
  export const aaveV2Encode = {
121
- leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
122
- return subDataService.aaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
107
+ leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
108
+ const isBundle = true;
109
+ const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
110
+ const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
111
+ return [strategyOrBundleId, isBundle, triggerData, subData];
123
112
  },
124
113
  };
125
114
  export const aaveV3Encode = {
126
- leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
127
- let subInput = '0x';
128
- subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
129
- .padStart(32, '0'));
130
- subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
131
- .padStart(32, '0'));
132
- subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
133
- .padStart(32, '0'));
134
- subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
135
- .padStart(32, '0'));
136
- subInput = subInput.concat(boostEnabled ? '01' : '00');
137
- return subInput;
138
- },
139
115
  closeToAsset(strategyOrBundleId, isBundle = true, triggerData, subData) {
140
116
  const { collAsset, collAssetId, debtAsset, debtAssetId, } = subData;
141
117
  const subDataEncoded = subDataService.aaveV3QuotePriceSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId);
@@ -184,13 +160,19 @@ export const aaveV3Encode = {
184
160
  },
185
161
  };
186
162
  export const compoundV2Encode = {
187
- leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
188
- return subDataService.compoundV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
163
+ leverageManagementWithoutSubProxy(strategyOrBundleId, user, ratioState, targetRatio, triggerRatio) {
164
+ const isBundle = true;
165
+ const subData = subDataService.compoundV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
166
+ const triggerData = triggerService.compoundV2RatioTrigger.encode(user, triggerRatio, ratioState);
167
+ return [strategyOrBundleId, isBundle, triggerData, subData];
189
168
  },
190
169
  };
191
170
  export const compoundV3Encode = {
192
- leverageManagement(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
193
- return subDataService.compoundV3LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
171
+ leverageManagementWithoutSubProxy(strategyOrBundleId, market, baseToken, user, ratioState, targetRatio, triggerRatio) {
172
+ const isBundle = true;
173
+ const subData = subDataService.compoundV3LeverageManagementSubDataWithoutSubProxy.encode(market, baseToken, targetRatio, ratioState);
174
+ const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
175
+ return [strategyOrBundleId, isBundle, triggerData, subData];
194
176
  },
195
177
  leverageManagementOnPrice(strategyOrBundleId, market, collToken, baseToken, targetRatio, price, priceState, ratioState, // REPAY for repay on price, BOOST for boost on price
196
178
  user) {
@@ -207,11 +189,6 @@ export const compoundV3Encode = {
207
189
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
208
190
  },
209
191
  };
210
- export const compoundV3L2Encode = {
211
- leverageManagement(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA = false) {
212
- return subDataService.compoundV3L2LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
213
- },
214
- };
215
192
  export const morphoAaveV2Encode = {
216
193
  leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
217
194
  return subDataService.morphoAaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
@@ -225,24 +202,15 @@ export const exchangeEncode = {
225
202
  const strategyId = STRATEGY_IDS[network].EXCHANGE_DCA;
226
203
  return [strategyId, false, triggerData, subData];
227
204
  },
228
- limitOrder(fromToken, toToken, amount, targetPrice, goodUntil, orderType) {
229
- return subDataService.exchangeLimitOrderSubData.encode(fromToken, toToken, amount, targetPrice, goodUntil, orderType);
205
+ limitOrderWithoutSubProxy(fromToken, toToken, amount, targetPrice, goodUntil, orderType, fromTokenDecimals, toTokenDecimals, network) {
206
+ requireAddresses([fromToken, toToken]);
207
+ const subData = subDataService.exchangeLimitOrderSubDataWithoutSubProxy.encode(fromToken, toToken, amount);
208
+ const triggerData = triggerService.exchangeOffchainPriceTrigger.encode(targetPrice, Number(goodUntil), orderType, fromTokenDecimals, toTokenDecimals);
209
+ const strategyId = STRATEGY_IDS[network].EXCHANGE_LIMIT_ORDER;
210
+ return [strategyId, false, triggerData, subData];
230
211
  },
231
212
  };
232
213
  export const sparkEncode = {
233
- leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
234
- let subInput = '0x';
235
- subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
236
- .padStart(32, '0'));
237
- subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
238
- .padStart(32, '0'));
239
- subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
240
- .padStart(32, '0'));
241
- subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
242
- .padStart(32, '0'));
243
- subInput = subInput.concat(boostEnabled ? '01' : '00');
244
- return subInput;
245
- },
246
214
  leverageManagementOnPrice(strategyOrBundleId, isBundle = true, triggerData, subData) {
247
215
  const { collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio, } = subData;
248
216
  const subDataEncoded = subDataService.sparkLeverageManagementOnPriceSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio);
@@ -263,6 +231,12 @@ export const sparkEncode = {
263
231
  const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
264
232
  return [strategyOrBundleId, isBundle, triggerData, subData];
265
233
  },
234
+ collateralSwitch(strategyOrBundleId, fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, baseTokenAddress, quoteTokenAddress, price, state) {
235
+ const isBundle = false;
236
+ const subDataEncoded = subDataService.sparkCollateralSwitchSubData.encode(fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch);
237
+ const triggerDataEncoded = triggerService.sparkQuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, state);
238
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
239
+ },
266
240
  };
267
241
  export const crvUSDEncode = {
268
242
  leverageManagement(owner, controllerAddr, ratioState, targetRatio, triggerRatio, collTokenAddr, crvUSDAddr) {
@@ -3,9 +3,9 @@ import Dec from 'decimal.js';
3
3
  import { otherAddresses } from '@defisaver/sdk';
4
4
  import { getAssetInfo, MAXUINT } from '@defisaver/tokens';
5
5
  import * as web3Utils from 'web3-utils';
6
- import { Bundles, ChainId, CloseToAssetType, OrderType, RatioState, Strategies } from '../types/enums';
6
+ import { Bundles, ChainId, CloseToAssetType, RatioState, Strategies } from '../types/enums';
7
7
  import '../configuration';
8
- import { aaveV2Encode, chickenBondsEncode, liquityEncode, makerEncode, aaveV3Encode, compoundV2Encode, compoundV3Encode, morphoAaveV2Encode, exchangeEncode, crvUSDEncode, compoundV3L2Encode, morphoBlueEncode, sparkEncode, aaveV4Encode, } from './strategySubService';
8
+ import { chickenBondsEncode, liquityEncode, makerEncode, aaveV3Encode, compoundV3Encode, morphoAaveV2Encode, exchangeEncode, crvUSDEncode, morphoBlueEncode, sparkEncode, aaveV4Encode, } from './strategySubService';
9
9
  describe('Feature: strategySubService.ts', () => {
10
10
  describe('When testing strategySubService.makerEncode', () => {
11
11
  // @ts-ignore // TODO - this requires change in @defisaver/tokens
@@ -96,28 +96,6 @@ describe('Feature: strategySubService.ts', () => {
96
96
  });
97
97
  });
98
98
  });
99
- describe('leverageManagement()', () => {
100
- const examples = [
101
- [
102
- [
103
- 5791,
104
- new Dec('210').mul(1e16).toString(),
105
- new Dec('290').mul(1e16).toString(),
106
- new Dec('240').mul(1e16).toString(),
107
- new Dec('240').mul(1e16).toString(),
108
- true,
109
- ],
110
- [
111
- 5791, '210', '290', '240', '240', true,
112
- ]
113
- ]
114
- ];
115
- examples.forEach(([expected, actual]) => {
116
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
117
- expect(makerEncode.leverageManagement(...actual)).to.eql(expected);
118
- });
119
- });
120
- });
121
99
  describe('leverageManagementWithoutSubProxy()', () => {
122
100
  const examples = [
123
101
  // Repay scenario (isBoost=false, RatioState.UNDER)
@@ -217,27 +195,6 @@ describe('Feature: strategySubService.ts', () => {
217
195
  });
218
196
  });
219
197
  });
220
- describe('leverageManagement()', () => {
221
- const examples = [
222
- [
223
- [
224
- new Dec('210').mul(1e16).toString(),
225
- new Dec('290').mul(1e16).toString(),
226
- new Dec('240').mul(1e16).toString(),
227
- new Dec('240').mul(1e16).toString(),
228
- false,
229
- ],
230
- [
231
- '210', '290', '240', '240', false,
232
- ]
233
- ]
234
- ];
235
- examples.forEach(([expected, actual]) => {
236
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
237
- expect(liquityEncode.leverageManagement(...actual)).to.eql(expected);
238
- });
239
- });
240
- });
241
198
  describe('paybackFromChickenBondStrategySub()', () => {
242
199
  const examples = [
243
200
  [
@@ -324,43 +281,7 @@ describe('Feature: strategySubService.ts', () => {
324
281
  });
325
282
  });
326
283
  });
327
- describe('When testing strategySubService.aaveV2Encode', () => {
328
- describe('leverageManagement()', () => {
329
- const examples = [
330
- [
331
- [new Dec(160).mul(1e16).toString(), new Dec(220).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), true],
332
- [160, 220, 180, 190, true]
333
- ],
334
- [
335
- [new Dec(160).mul(1e16).toString(), new Dec(200).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), false],
336
- [160, 200, 180, 190, false]
337
- ],
338
- ];
339
- examples.forEach(([expected, actual]) => {
340
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
341
- expect(aaveV2Encode.leverageManagement(...actual)).to.eql(expected);
342
- });
343
- });
344
- });
345
- });
346
284
  describe('When testing strategySubService.aaveV3Encode', () => {
347
- describe('leverageManagement()', () => {
348
- const examples = [
349
- [
350
- '0x000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e000001',
351
- [160, 220, 180, 190, true]
352
- ],
353
- [
354
- '0x000000000000000016345785d8a0000000000000000000001bc16d674ec80000000000000000000018fae27693b4000000000000000000001a5e27eef13e000000',
355
- [160, 200, 180, 190, false]
356
- ],
357
- ];
358
- examples.forEach(([expected, actual]) => {
359
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
360
- expect(aaveV3Encode.leverageManagement(...actual)).to.eql(expected);
361
- });
362
- });
363
- });
364
285
  describe('closeToAsset()', () => {
365
286
  const examples = [
366
287
  [
@@ -927,69 +848,7 @@ describe('Feature: strategySubService.ts', () => {
927
848
  });
928
849
  });
929
850
  });
930
- describe('When testing strategySubService.compoundV2Encode', () => {
931
- describe('leverageManagement()', () => {
932
- const examples = [
933
- [
934
- [new Dec(160).mul(1e16).toString(), new Dec(220).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), true],
935
- [160, 220, 180, 190, true]
936
- ],
937
- [
938
- [new Dec(160).mul(1e16).toString(), new Dec(200).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), false],
939
- [160, 200, 180, 190, false]
940
- ],
941
- ];
942
- examples.forEach(([expected, actual]) => {
943
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
944
- expect(compoundV2Encode.leverageManagement(...actual)).to.eql(expected);
945
- });
946
- });
947
- });
948
- });
949
851
  describe('When testing strategySubService.compoundV3Encode', () => {
950
- describe('leverageManagement()', () => {
951
- const examples = [
952
- [
953
- [
954
- web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
955
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
956
- new Dec(160).mul(1e16).toString(),
957
- new Dec(220).mul(1e16).toString(),
958
- new Dec(180).mul(1e16).toString(),
959
- new Dec(190).mul(1e16).toString(),
960
- true, false,
961
- ],
962
- [
963
- web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
964
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
965
- 160, 220, 180, 190,
966
- true, false,
967
- ]
968
- ],
969
- [
970
- [
971
- web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
972
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
973
- new Dec(160).mul(1e16).toString(),
974
- new Dec(210).mul(1e16).toString(),
975
- new Dec(180).mul(1e16).toString(),
976
- new Dec(190).mul(1e16).toString(),
977
- false, true,
978
- ],
979
- [
980
- web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
981
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
982
- 160, 210, 180, 190,
983
- false, true,
984
- ]
985
- ],
986
- ];
987
- examples.forEach(([expected, actual]) => {
988
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
989
- expect(compoundV3Encode.leverageManagement(...actual)).to.eql(expected);
990
- });
991
- });
992
- });
993
852
  describe('leverageManagementOnPrice()', () => {
994
853
  const examples = [
995
854
  [
@@ -1164,51 +1023,6 @@ describe('Feature: strategySubService.ts', () => {
1164
1023
  });
1165
1024
  });
1166
1025
  });
1167
- describe('limitOrder()', () => {
1168
- const examples = [
1169
- [
1170
- [
1171
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1172
- web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
1173
- '2131',
1174
- '0.53123',
1175
- '1696590921159',
1176
- `${OrderType.STOP_LOSS}`
1177
- ],
1178
- [
1179
- web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1180
- web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
1181
- '2131',
1182
- '0.53123',
1183
- 1696590921159,
1184
- OrderType.STOP_LOSS
1185
- ]
1186
- ],
1187
- [
1188
- [
1189
- web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
1190
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
1191
- '2131',
1192
- '0.43123',
1193
- '1646590921159',
1194
- `${OrderType.TAKE_PROFIT}`
1195
- ],
1196
- [
1197
- web3Utils.toChecksumAddress(getAssetInfo('LINK', ChainId.Arbitrum).address),
1198
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Arbitrum).address),
1199
- '2131',
1200
- '0.43123',
1201
- 1646590921159,
1202
- OrderType.TAKE_PROFIT
1203
- ]
1204
- ],
1205
- ];
1206
- examples.forEach(([expected, actual]) => {
1207
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1208
- expect(exchangeEncode.limitOrder(...actual)).to.eql(expected);
1209
- });
1210
- });
1211
- });
1212
1026
  });
1213
1027
  describe('When testing strategySubService.crvUSDEncode', () => {
1214
1028
  describe('leverageManagement()', () => {
@@ -1422,55 +1236,7 @@ describe('Feature: strategySubService.ts', () => {
1422
1236
  });
1423
1237
  });
1424
1238
  });
1425
- describe('When testing strategySubService.compoundV3L2Encode', () => {
1426
- describe('leverageManagement()', () => {
1427
- const examples = [
1428
- [
1429
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
1430
- [
1431
- web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1432
- web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1433
- 160, 220, 180, 190,
1434
- true,
1435
- false,
1436
- ],
1437
- ],
1438
- [
1439
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
1440
- [
1441
- web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1442
- web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1443
- 160, 220, 180, 110,
1444
- false,
1445
- false,
1446
- ],
1447
- ],
1448
- ];
1449
- examples.forEach(([expected, actual]) => {
1450
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1451
- expect(compoundV3L2Encode.leverageManagement(...actual)).to.eql(expected);
1452
- });
1453
- });
1454
- });
1455
- });
1456
1239
  describe('When testing strategySubService.sparkEncode', () => {
1457
- describe('leverageManagement()', () => {
1458
- const examples = [
1459
- [
1460
- '0x0000000000000000136dcc951d8c00000000000000000000214e8348c4f0000000000000000000001d24b2dfac52000000000000000000001a5e27eef13e000001',
1461
- [140, 240, 210, 190, true]
1462
- ],
1463
- [
1464
- '0x0000000000000000130337bdce49000000000000000000001988fe4052b800000000000000000000281b57b028e1000000000000000000002223acf76376000000',
1465
- [137, 184, 289, 246, false]
1466
- ]
1467
- ];
1468
- examples.forEach(([expected, actual]) => {
1469
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1470
- expect(sparkEncode.leverageManagement(...actual)).to.eql(expected);
1471
- });
1472
- });
1473
- });
1474
1240
  describe('leverageManagementOnPrice()', () => {
1475
1241
  const examples = [
1476
1242
  [
@@ -1585,6 +1351,105 @@ describe('Feature: strategySubService.ts', () => {
1585
1351
  });
1586
1352
  });
1587
1353
  });
1354
+ describe('collateralSwitch()', () => {
1355
+ const examples = [
1356
+ // WETH -> cbBTC, price 0.025 WETH/cbBTC, state UNDER
1357
+ [
1358
+ [
1359
+ Strategies.MainnetIds.SPARK_COLLATERAL_SWITCH,
1360
+ false,
1361
+ ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf00000000000000000000000000000000000000000000000000000000002625a00000000000000000000000000000000000000000000000000000000000000001'],
1362
+ [
1363
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1364
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1365
+ '0x000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf',
1366
+ '0x0000000000000000000000000000000000000000000000000000000000000007',
1367
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1368
+ '0x0000000000000000000000000000000000000000000000008ac7230489e80000',
1369
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1370
+ ],
1371
+ ],
1372
+ [
1373
+ Strategies.MainnetIds.SPARK_COLLATERAL_SWITCH,
1374
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1375
+ 0,
1376
+ web3Utils.toChecksumAddress(getAssetInfo('cbBTC', ChainId.Ethereum).address),
1377
+ 7,
1378
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1379
+ '10000000000000000000',
1380
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1381
+ web3Utils.toChecksumAddress(getAssetInfo('cbBTC', ChainId.Ethereum).address),
1382
+ 0.025,
1383
+ RatioState.UNDER,
1384
+ ]
1385
+ ],
1386
+ // cbBTC -> WETH, price 25 cbBTC/WETH, state UNDER
1387
+ [
1388
+ [
1389
+ Strategies.MainnetIds.SPARK_COLLATERAL_SWITCH,
1390
+ false,
1391
+ ['0x000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000009502f9000000000000000000000000000000000000000000000000000000000000000001'],
1392
+ [
1393
+ '0x000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf',
1394
+ '0x0000000000000000000000000000000000000000000000000000000000000007',
1395
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1396
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1397
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1398
+ '0x0000000000000000000000000000000000000000000000000000000005f5e100',
1399
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1400
+ ],
1401
+ ],
1402
+ [
1403
+ Strategies.MainnetIds.SPARK_COLLATERAL_SWITCH,
1404
+ web3Utils.toChecksumAddress(getAssetInfo('cbBTC', ChainId.Ethereum).address),
1405
+ 7,
1406
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1407
+ 0,
1408
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1409
+ '100000000',
1410
+ web3Utils.toChecksumAddress(getAssetInfo('cbBTC', ChainId.Ethereum).address),
1411
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1412
+ 25,
1413
+ RatioState.UNDER,
1414
+ ]
1415
+ ],
1416
+ // cbBTC -> WETH, price 40 cbBTC/WETH, state OVER
1417
+ [
1418
+ [
1419
+ Strategies.MainnetIds.SPARK_COLLATERAL_SWITCH,
1420
+ false,
1421
+ ['0x000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000ee6b28000000000000000000000000000000000000000000000000000000000000000000'],
1422
+ [
1423
+ '0x000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf',
1424
+ '0x0000000000000000000000000000000000000000000000000000000000000007',
1425
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1426
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1427
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1428
+ '0x0000000000000000000000000000000000000000000000000000000005f5e100',
1429
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1430
+ ],
1431
+ ],
1432
+ [
1433
+ Strategies.MainnetIds.SPARK_COLLATERAL_SWITCH,
1434
+ web3Utils.toChecksumAddress(getAssetInfo('cbBTC', ChainId.Ethereum).address),
1435
+ 7,
1436
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1437
+ 0,
1438
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1439
+ '100000000',
1440
+ web3Utils.toChecksumAddress(getAssetInfo('cbBTC', ChainId.Ethereum).address),
1441
+ web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
1442
+ 40,
1443
+ RatioState.OVER,
1444
+ ]
1445
+ ],
1446
+ ];
1447
+ examples.forEach(([expected, actual]) => {
1448
+ it(`Given ${JSON.stringify(actual)} should return expected value: ${JSON.stringify(expected)}`, () => {
1449
+ expect(sparkEncode.collateralSwitch(...actual)).to.eql(expected);
1450
+ });
1451
+ });
1452
+ });
1588
1453
  });
1589
1454
  describe('When testing strategySubService.aaveV4Encode', () => {
1590
1455
  describe('leverageManagement()', () => {
@@ -89,6 +89,13 @@ export declare const liquityLeverageManagementSubData: {
89
89
  targetRatio: number;
90
90
  };
91
91
  };
92
+ export declare const liquityLeverageManagementSubDataWithoutSubProxy: {
93
+ encode(targetRatio: number, ratioState: RatioState): string[];
94
+ decode(subData: string[]): {
95
+ targetRatio: number;
96
+ ratioState: RatioState;
97
+ };
98
+ };
92
99
  export declare const liquityCloseSubData: {
93
100
  encode(closeToAssetAddr: EthereumAddress, chainId?: ChainId, collAddr?: EthereumAddress, debtAddr?: EthereumAddress): string[];
94
101
  decode(subData: string[]): {
@@ -177,6 +184,14 @@ export declare const aaveV2LeverageManagementSubData: {
177
184
  targetRatio: number;
178
185
  };
179
186
  };
187
+ export declare const aaveV2LeverageManagementSubDataWithoutSubProxy: {
188
+ encode(market: EthereumAddress, targetRatio: number, ratioState: RatioState): string[];
189
+ decode(subData: string[]): {
190
+ market: EthereumAddress;
191
+ targetRatio: number;
192
+ ratioState: RatioState;
193
+ };
194
+ };
180
195
  /**
181
196
  ___ ___ ____ ____ _______ ____ ____ ____
182
197
  / \ / \ \ \ / / | ____| \ \ / / |___ \
@@ -320,6 +335,13 @@ export declare const compoundV2LeverageManagementSubData: {
320
335
  targetRatio: number;
321
336
  };
322
337
  };
338
+ export declare const compoundV2LeverageManagementSubDataWithoutSubProxy: {
339
+ encode(targetRatio: number, ratioState: RatioState): string[];
340
+ decode(subData: string[]): {
341
+ targetRatio: number;
342
+ ratioState: RatioState;
343
+ };
344
+ };
323
345
  /**
324
346
  ______ ______ .___ ___. .______ ____ ____ ____
325
347
  / | / __ \ | \/ | | _ \ \ \ / / |___ \
@@ -334,10 +356,13 @@ export declare const compoundV3LeverageManagementSubData: {
334
356
  targetRatio: number;
335
357
  };
336
358
  };
337
- export declare const compoundV3L2LeverageManagementSubData: {
338
- encode(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean): string;
359
+ export declare const compoundV3LeverageManagementSubDataWithoutSubProxy: {
360
+ encode(market: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, ratioState: RatioState): string[];
339
361
  decode(subData: string[]): {
362
+ market: EthereumAddress;
363
+ baseToken: EthereumAddress;
340
364
  targetRatio: number;
365
+ ratioState: RatioState;
341
366
  };
342
367
  };
343
368
  export declare const compoundV3LeverageManagementOnPriceSubData: {
@@ -386,6 +411,14 @@ export declare const exchangeLimitOrderSubData: {
386
411
  amount: string;
387
412
  };
388
413
  };
414
+ export declare const exchangeLimitOrderSubDataWithoutSubProxy: {
415
+ encode(fromToken: EthereumAddress, toToken: EthereumAddress, amount: string): string[];
416
+ decode: (subData: string[], chainId: ChainId) => {
417
+ fromToken: string;
418
+ toToken: string;
419
+ amount: string;
420
+ };
421
+ };
389
422
  /**
390
423
  _______..______ ___ .______ __ ___
391
424
  / || _ \ / \ | _ \ | |/ /
@@ -429,6 +462,17 @@ export declare const sparkLeverageManagementOnPriceSubData: {
429
462
  targetRatio: number;
430
463
  };
431
464
  };
465
+ export declare const sparkCollateralSwitchSubData: {
466
+ encode(fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, marketAddr: EthereumAddress, amountToSwitch: string, useOnBehalf?: boolean): string[];
467
+ decode(subData: string[]): {
468
+ fromAsset: EthereumAddress;
469
+ fromAssetId: number;
470
+ toAsset: EthereumAddress;
471
+ toAssetId: number;
472
+ marketAddr: EthereumAddress;
473
+ amountToSwitch: string;
474
+ };
475
+ };
432
476
  /**
433
477
  ______ .______ ____ ____ __ __ _______. _______
434
478
  / || _ \ \ \ / / | | | | / || \