@defisaver/automation-sdk 3.3.12 → 3.3.14-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.
- package/cjs/constants/index.js +5 -0
- package/cjs/services/strategiesService.js +41 -17
- package/cjs/services/strategySubService.d.ts +6 -11
- package/cjs/services/strategySubService.js +33 -62
- package/cjs/services/strategySubService.test.js +99 -234
- package/cjs/services/subDataService.d.ts +46 -2
- package/cjs/services/subDataService.js +115 -20
- package/cjs/services/subDataService.test.js +121 -42
- package/cjs/types/enums.d.ts +2 -1
- package/cjs/types/enums.js +1 -0
- package/esm/constants/index.js +5 -0
- package/esm/services/strategiesService.js +41 -17
- package/esm/services/strategySubService.d.ts +6 -11
- package/esm/services/strategySubService.js +32 -58
- package/esm/services/strategySubService.test.js +101 -236
- package/esm/services/subDataService.d.ts +46 -2
- package/esm/services/subDataService.js +113 -19
- package/esm/services/subDataService.test.js +121 -42
- package/esm/types/enums.d.ts +2 -1
- package/esm/types/enums.js +1 -0
- package/package.json +1 -1
- package/src/constants/index.ts +5 -0
- package/src/services/strategiesService.ts +42 -17
- package/src/services/strategySubService.test.ts +117 -279
- package/src/services/strategySubService.ts +81 -111
- package/src/services/subDataService.test.ts +125 -48
- package/src/services/subDataService.ts +156 -28
- package/src/types/enums.ts +1 -0
|
@@ -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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
122
|
-
|
|
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
|
-
|
|
188
|
-
|
|
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
|
-
|
|
193
|
-
|
|
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
|
-
|
|
229
|
-
|
|
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,
|
|
6
|
+
import { Bundles, ChainId, CloseToAssetType, RatioState, Strategies } from '../types/enums';
|
|
7
7
|
import '../configuration';
|
|
8
|
-
import {
|
|
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
|
|
338
|
-
encode(market: EthereumAddress, baseToken: EthereumAddress,
|
|
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
|
/ || _ \ \ \ / / | | | | / || \
|