@defisaver/automation-sdk 3.3.12-strategies-refactor-2-dev → 3.3.12-strategies-refactor-4-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/services/strategiesService.js +1 -0
- package/cjs/services/strategySubService.d.ts +0 -3
- package/cjs/services/strategySubService.js +2 -7
- package/cjs/services/strategySubService.test.js +0 -31
- package/cjs/services/subDataService.d.ts +2 -7
- package/cjs/services/subDataService.js +31 -38
- package/cjs/services/subDataService.test.js +0 -42
- package/esm/services/strategiesService.js +1 -0
- package/esm/services/strategySubService.d.ts +0 -3
- package/esm/services/strategySubService.js +1 -6
- package/esm/services/strategySubService.test.js +1 -32
- package/esm/services/subDataService.d.ts +2 -7
- package/esm/services/subDataService.js +30 -36
- package/esm/services/subDataService.test.js +0 -42
- package/package.json +1 -1
- package/src/services/strategiesService.ts +1 -0
- package/src/services/strategySubService.test.ts +0 -33
- package/src/services/strategySubService.ts +1 -16
- package/src/services/subDataService.test.ts +0 -48
- package/src/services/subDataService.ts +40 -48
|
@@ -78,9 +78,6 @@ export declare const compoundV3Encode: {
|
|
|
78
78
|
leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, price: number, priceState: RatioState, ratioState: RatioState, user: EthereumAddress): (number | boolean | string[])[];
|
|
79
79
|
closeOnPrice(strategyOrBundleId: number, market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, stopLossPrice: number | undefined, stopLossType: CloseToAssetType | undefined, takeProfitPrice: number | undefined, takeProfitType: CloseToAssetType | undefined, user: EthereumAddress): (number | boolean | string[])[];
|
|
80
80
|
};
|
|
81
|
-
export declare const compoundV3L2Encode: {
|
|
82
|
-
leverageManagement(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA?: boolean): string;
|
|
83
|
-
};
|
|
84
81
|
export declare const morphoAaveV2Encode: {
|
|
85
82
|
leverageManagement(triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean): string[];
|
|
86
83
|
};
|
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.aaveV4Encode = exports.fluidEncode = exports.liquityV2Encode = exports.morphoBlueEncode = exports.crvUSDEncode = exports.sparkEncode = exports.exchangeEncode = exports.morphoAaveV2Encode = exports.
|
|
29
|
+
exports.aaveV4Encode = exports.fluidEncode = exports.liquityV2Encode = exports.morphoBlueEncode = exports.crvUSDEncode = exports.sparkEncode = exports.exchangeEncode = exports.morphoAaveV2Encode = exports.compoundV3Encode = exports.compoundV2Encode = exports.aaveV3Encode = exports.aaveV2Encode = exports.chickenBondsEncode = exports.liquityEncode = exports.makerEncode = void 0;
|
|
30
30
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
31
31
|
const tokens_1 = require("@defisaver/tokens");
|
|
32
32
|
const enums_1 = require("../types/enums");
|
|
@@ -158,7 +158,7 @@ exports.aaveV2Encode = {
|
|
|
158
158
|
},
|
|
159
159
|
leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
|
|
160
160
|
const isBundle = true;
|
|
161
|
-
const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
|
|
161
|
+
const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
|
|
162
162
|
const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
163
163
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
164
164
|
},
|
|
@@ -260,11 +260,6 @@ exports.compoundV3Encode = {
|
|
|
260
260
|
return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
|
|
261
261
|
},
|
|
262
262
|
};
|
|
263
|
-
exports.compoundV3L2Encode = {
|
|
264
|
-
leverageManagement(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA = false) {
|
|
265
|
-
return subDataService.compoundV3L2LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
|
|
266
|
-
},
|
|
267
|
-
};
|
|
268
263
|
exports.morphoAaveV2Encode = {
|
|
269
264
|
leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
|
|
270
265
|
return subDataService.morphoAaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
|
|
@@ -1450,37 +1450,6 @@ describe('Feature: strategySubService.ts', () => {
|
|
|
1450
1450
|
});
|
|
1451
1451
|
});
|
|
1452
1452
|
});
|
|
1453
|
-
describe('When testing strategySubService.compoundV3L2Encode', () => {
|
|
1454
|
-
describe('leverageManagement()', () => {
|
|
1455
|
-
const examples = [
|
|
1456
|
-
[
|
|
1457
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
|
|
1458
|
-
[
|
|
1459
|
-
web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
|
|
1460
|
-
web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'),
|
|
1461
|
-
160, 220, 180, 190,
|
|
1462
|
-
true,
|
|
1463
|
-
false,
|
|
1464
|
-
],
|
|
1465
|
-
],
|
|
1466
|
-
[
|
|
1467
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
|
|
1468
|
-
[
|
|
1469
|
-
web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
|
|
1470
|
-
web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'),
|
|
1471
|
-
160, 220, 180, 110,
|
|
1472
|
-
false,
|
|
1473
|
-
false,
|
|
1474
|
-
],
|
|
1475
|
-
],
|
|
1476
|
-
];
|
|
1477
|
-
examples.forEach(([expected, actual]) => {
|
|
1478
|
-
it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
|
|
1479
|
-
(0, chai_1.expect)(strategySubService_1.compoundV3L2Encode.leverageManagement(...actual)).to.eql(expected);
|
|
1480
|
-
});
|
|
1481
|
-
});
|
|
1482
|
-
});
|
|
1483
|
-
});
|
|
1484
1453
|
describe('When testing strategySubService.sparkEncode', () => {
|
|
1485
1454
|
describe('leverageManagement()', () => {
|
|
1486
1455
|
const examples = [
|
|
@@ -185,8 +185,9 @@ export declare const aaveV2LeverageManagementSubData: {
|
|
|
185
185
|
};
|
|
186
186
|
};
|
|
187
187
|
export declare const aaveV2LeverageManagementSubDataWithoutSubProxy: {
|
|
188
|
-
encode(targetRatio: number, ratioState: RatioState): string[];
|
|
188
|
+
encode(market: EthereumAddress, targetRatio: number, ratioState: RatioState): string[];
|
|
189
189
|
decode(subData: string[]): {
|
|
190
|
+
market: EthereumAddress;
|
|
190
191
|
targetRatio: number;
|
|
191
192
|
ratioState: RatioState;
|
|
192
193
|
};
|
|
@@ -364,12 +365,6 @@ export declare const compoundV3LeverageManagementSubDataWithoutSubProxy: {
|
|
|
364
365
|
ratioState: RatioState;
|
|
365
366
|
};
|
|
366
367
|
};
|
|
367
|
-
export declare const compoundV3L2LeverageManagementSubData: {
|
|
368
|
-
encode(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean): string;
|
|
369
|
-
decode(subData: string[]): {
|
|
370
|
-
targetRatio: number;
|
|
371
|
-
};
|
|
372
|
-
};
|
|
373
368
|
export declare const compoundV3LeverageManagementOnPriceSubData: {
|
|
374
369
|
encode(market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, ratioState: RatioState, user: EthereumAddress): string[];
|
|
375
370
|
decode(subData: string[]): {
|
|
@@ -3,8 +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.morphoBlueLeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.sparkLeverageManagementOnPriceSubData = exports.sparkCloseGenericSubData = exports.sparkLeverageManagementSubDataWithoutSubProxy = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubDataWithoutSubProxy = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.compoundV3CloseSubData = exports.compoundV3LeverageManagementOnPriceSubData = exports.
|
|
7
|
-
exports.fluidLeverageManagementSubData = void 0;
|
|
6
|
+
exports.fluidLeverageManagementSubData = exports.morphoBlueCloseOnPriceSubData = exports.morphoBlueLeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.sparkLeverageManagementOnPriceSubData = exports.sparkCloseGenericSubData = exports.sparkLeverageManagementSubDataWithoutSubProxy = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubDataWithoutSubProxy = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.compoundV3CloseSubData = exports.compoundV3LeverageManagementOnPriceSubData = exports.compoundV3LeverageManagementSubDataWithoutSubProxy = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubDataWithoutSubProxy = exports.compoundV2LeverageManagementSubData = exports.aaveV4CollateralSwitchSubData = exports.aaveV4CloseSubData = exports.aaveV4LeverageManagementOnPriceSubData = exports.aaveV4LeverageManagementSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3CollateralSwitchSubData = exports.aaveV3CloseGenericSubData = exports.aaveV3LeverageManagementOnPriceGeneric = exports.aaveV3LeverageManagementSubDataWithoutSubProxy = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubDataWithoutSubProxy = exports.aaveV2LeverageManagementSubData = exports.liquityV2PaybackSubData = exports.liquityV2LeverageManagementOnPriceSubData = exports.liquityV2CloseSubData = exports.liquityV2LeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubDataWithoutSubProxy = exports.liquityLeverageManagementSubData = exports.liquityRepayFromSavingsSubData = exports.makerLeverageManagementWithoutSubProxy = exports.makerLeverageManagementSubData = exports.makerCloseSubData = exports.makerRepayFromSavingsSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = void 0;
|
|
8
7
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
9
8
|
const web3_eth_abi_1 = __importDefault(require("web3-eth-abi"));
|
|
10
9
|
const web3_utils_1 = require("web3-utils");
|
|
@@ -170,13 +169,18 @@ exports.liquityLeverageManagementSubData = {
|
|
|
170
169
|
};
|
|
171
170
|
exports.liquityLeverageManagementSubDataWithoutSubProxy = {
|
|
172
171
|
encode(targetRatio, ratioState) {
|
|
173
|
-
const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
|
|
174
172
|
const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
|
|
175
|
-
|
|
173
|
+
const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
|
|
174
|
+
const isRepay = ratioState === enums_1.RatioState.UNDER;
|
|
175
|
+
const collActionType = isRepay ? enums_1.CollActionType.WITHDRAW : enums_1.CollActionType.SUPPLY;
|
|
176
|
+
const debtActionType = isRepay ? enums_1.DebtActionType.PAYBACK : enums_1.DebtActionType.BORROW;
|
|
177
|
+
const collActionTypeEncoded = web3_eth_abi_1.default.encodeParameter('uint8', collActionType);
|
|
178
|
+
const debtActionTypeEncoded = web3_eth_abi_1.default.encodeParameter('uint8', debtActionType);
|
|
179
|
+
return [encodedRatioState, encodedTargetRatio, collActionTypeEncoded, debtActionTypeEncoded];
|
|
176
180
|
},
|
|
177
181
|
decode(subData) {
|
|
178
|
-
const
|
|
179
|
-
const
|
|
182
|
+
const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[0]);
|
|
183
|
+
const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[1]));
|
|
180
184
|
return { targetRatio, ratioState };
|
|
181
185
|
},
|
|
182
186
|
};
|
|
@@ -412,15 +416,22 @@ exports.aaveV2LeverageManagementSubData = {
|
|
|
412
416
|
},
|
|
413
417
|
};
|
|
414
418
|
exports.aaveV2LeverageManagementSubDataWithoutSubProxy = {
|
|
415
|
-
encode(targetRatio, ratioState) {
|
|
419
|
+
encode(market, targetRatio, ratioState) {
|
|
420
|
+
const encodedMarket = web3_eth_abi_1.default.encodeParameter('address', market);
|
|
416
421
|
const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
|
|
417
422
|
const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
|
|
418
|
-
|
|
423
|
+
const isBoost = ratioState === enums_1.RatioState.OVER;
|
|
424
|
+
if (isBoost) {
|
|
425
|
+
const enableAsCollEncoded = web3_eth_abi_1.default.encodeParameter('uint256', 1);
|
|
426
|
+
return [encodedMarket, encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
|
|
427
|
+
}
|
|
428
|
+
return [encodedMarket, encodedTargetRatio, encodedRatioState];
|
|
419
429
|
},
|
|
420
430
|
decode(subData) {
|
|
421
|
-
const
|
|
422
|
-
const
|
|
423
|
-
|
|
431
|
+
const market = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
|
|
432
|
+
const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[1]));
|
|
433
|
+
const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[2]);
|
|
434
|
+
return { market, targetRatio, ratioState };
|
|
424
435
|
},
|
|
425
436
|
};
|
|
426
437
|
/**
|
|
@@ -781,6 +792,11 @@ exports.compoundV2LeverageManagementSubDataWithoutSubProxy = {
|
|
|
781
792
|
encode(targetRatio, ratioState) {
|
|
782
793
|
const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
|
|
783
794
|
const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
|
|
795
|
+
const isBoost = ratioState === enums_1.RatioState.OVER;
|
|
796
|
+
if (isBoost) {
|
|
797
|
+
const enableAsCollEncoded = web3_eth_abi_1.default.encodeParameter('uint256', 1);
|
|
798
|
+
return [encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
|
|
799
|
+
}
|
|
784
800
|
return [encodedTargetRatio, encodedRatioState];
|
|
785
801
|
},
|
|
786
802
|
decode(subData) {
|
|
@@ -820,43 +836,20 @@ exports.compoundV3LeverageManagementSubDataWithoutSubProxy = {
|
|
|
820
836
|
encode(market, baseToken, targetRatio, ratioState) {
|
|
821
837
|
const encodedMarket = web3_eth_abi_1.default.encodeParameter('address', market);
|
|
822
838
|
const encodedBaseToken = web3_eth_abi_1.default.encodeParameter('address', baseToken);
|
|
823
|
-
const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
|
|
824
839
|
const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
|
|
825
|
-
|
|
840
|
+
const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
|
|
841
|
+
return [encodedMarket, encodedBaseToken, encodedRatioState, encodedTargetRatio];
|
|
826
842
|
},
|
|
827
843
|
decode(subData) {
|
|
828
844
|
const market = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
|
|
829
845
|
const baseToken = web3_eth_abi_1.default.decodeParameter('address', subData[1]);
|
|
830
|
-
const
|
|
831
|
-
const
|
|
846
|
+
const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[2]);
|
|
847
|
+
const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[3]));
|
|
832
848
|
return {
|
|
833
849
|
market, baseToken, targetRatio, ratioState,
|
|
834
850
|
};
|
|
835
851
|
},
|
|
836
852
|
};
|
|
837
|
-
exports.compoundV3L2LeverageManagementSubData = {
|
|
838
|
-
encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
|
|
839
|
-
let subInput = '0x';
|
|
840
|
-
subInput = subInput.concat(market.slice(2));
|
|
841
|
-
subInput = subInput.concat(baseToken.slice(2));
|
|
842
|
-
subInput = subInput.concat(new decimal_js_1.default(triggerRepayRatio).mul(1e16).toHex().slice(2)
|
|
843
|
-
.padStart(32, '0'));
|
|
844
|
-
subInput = subInput.concat(new decimal_js_1.default(triggerBoostRatio).mul(1e16).toHex().slice(2)
|
|
845
|
-
.padStart(32, '0'));
|
|
846
|
-
subInput = subInput.concat(new decimal_js_1.default(targetBoostRatio).mul(1e16).toHex().slice(2)
|
|
847
|
-
.padStart(32, '0'));
|
|
848
|
-
subInput = subInput.concat(new decimal_js_1.default(targetRepayRatio).mul(1e16).toHex().slice(2)
|
|
849
|
-
.padStart(32, '0'));
|
|
850
|
-
subInput = subInput.concat(boostEnabled ? '01' : '00');
|
|
851
|
-
subInput = subInput.concat(isEOA ? '01' : '00');
|
|
852
|
-
return subInput;
|
|
853
|
-
},
|
|
854
|
-
decode(subData) {
|
|
855
|
-
const ratioWei = web3_eth_abi_1.default.decodeParameter('uint256', subData[3]);
|
|
856
|
-
const targetRatio = (0, utils_1.weiToRatioPercentage)(ratioWei);
|
|
857
|
-
return { targetRatio };
|
|
858
|
-
},
|
|
859
|
-
};
|
|
860
853
|
exports.compoundV3LeverageManagementOnPriceSubData = {
|
|
861
854
|
encode(market, collToken, baseToken, targetRatio, ratioState, user) {
|
|
862
855
|
const marketEncoded = web3_eth_abi_1.default.encodeParameter('address', market);
|
|
@@ -1216,48 +1216,6 @@ describe('Feature: subDataService.ts', () => {
|
|
|
1216
1216
|
});
|
|
1217
1217
|
});
|
|
1218
1218
|
});
|
|
1219
|
-
describe('When testing subDataService.compoundV3L2LeverageManagementSubData', () => {
|
|
1220
|
-
describe('encode()', () => {
|
|
1221
|
-
const examples = [
|
|
1222
|
-
[
|
|
1223
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
|
|
1224
|
-
[web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 190, true, false]
|
|
1225
|
-
],
|
|
1226
|
-
[
|
|
1227
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
|
|
1228
|
-
[web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 110, false, false]
|
|
1229
|
-
],
|
|
1230
|
-
];
|
|
1231
|
-
examples.forEach(([expected, actual]) => {
|
|
1232
|
-
it(`Given ${actual} should return expected value: ${expected}`, () => {
|
|
1233
|
-
(0, chai_1.expect)(subDataService.compoundV3L2LeverageManagementSubData.encode(...actual)).to.eql(expected);
|
|
1234
|
-
});
|
|
1235
|
-
});
|
|
1236
|
-
});
|
|
1237
|
-
describe('decode()', () => {
|
|
1238
|
-
const examples = [
|
|
1239
|
-
[
|
|
1240
|
-
{ targetRatio: 200 },
|
|
1241
|
-
[
|
|
1242
|
-
'0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000213d212133AFaB8F2B829B1066c7E43cAd94E2c',
|
|
1243
|
-
'0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
|
|
1244
|
-
],
|
|
1245
|
-
],
|
|
1246
|
-
[
|
|
1247
|
-
{ targetRatio: 123 },
|
|
1248
|
-
[
|
|
1249
|
-
'0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000413d212133AFaB8F2B829B1066c7E43cAd94E2c',
|
|
1250
|
-
'0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
|
|
1251
|
-
],
|
|
1252
|
-
],
|
|
1253
|
-
];
|
|
1254
|
-
examples.forEach(([expected, actual]) => {
|
|
1255
|
-
it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
|
|
1256
|
-
(0, chai_1.expect)(subDataService.compoundV3L2LeverageManagementSubData.decode(actual)).to.eql(expected);
|
|
1257
|
-
});
|
|
1258
|
-
});
|
|
1259
|
-
});
|
|
1260
|
-
});
|
|
1261
1219
|
describe('When testing subDataService.morphoBlueLeverageManagementSubData', () => {
|
|
1262
1220
|
describe('encode()', () => {
|
|
1263
1221
|
const examples = [
|
|
@@ -78,9 +78,6 @@ export declare const compoundV3Encode: {
|
|
|
78
78
|
leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, price: number, priceState: RatioState, ratioState: RatioState, user: EthereumAddress): (number | boolean | string[])[];
|
|
79
79
|
closeOnPrice(strategyOrBundleId: number, market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, stopLossPrice: number | undefined, stopLossType: CloseToAssetType | undefined, takeProfitPrice: number | undefined, takeProfitType: CloseToAssetType | undefined, user: EthereumAddress): (number | boolean | string[])[];
|
|
80
80
|
};
|
|
81
|
-
export declare const compoundV3L2Encode: {
|
|
82
|
-
leverageManagement(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA?: boolean): string;
|
|
83
|
-
};
|
|
84
81
|
export declare const morphoAaveV2Encode: {
|
|
85
82
|
leverageManagement(triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean): string[];
|
|
86
83
|
};
|
|
@@ -129,7 +129,7 @@ export const aaveV2Encode = {
|
|
|
129
129
|
},
|
|
130
130
|
leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
|
|
131
131
|
const isBundle = true;
|
|
132
|
-
const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
|
|
132
|
+
const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
|
|
133
133
|
const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
134
134
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
135
135
|
},
|
|
@@ -231,11 +231,6 @@ export const compoundV3Encode = {
|
|
|
231
231
|
return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
|
|
232
232
|
},
|
|
233
233
|
};
|
|
234
|
-
export const compoundV3L2Encode = {
|
|
235
|
-
leverageManagement(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA = false) {
|
|
236
|
-
return subDataService.compoundV3L2LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
|
|
237
|
-
},
|
|
238
|
-
};
|
|
239
234
|
export const morphoAaveV2Encode = {
|
|
240
235
|
leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
|
|
241
236
|
return subDataService.morphoAaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
|
|
@@ -5,7 +5,7 @@ import { getAssetInfo, MAXUINT } from '@defisaver/tokens';
|
|
|
5
5
|
import * as web3Utils from 'web3-utils';
|
|
6
6
|
import { Bundles, ChainId, CloseToAssetType, OrderType, RatioState, Strategies } from '../types/enums';
|
|
7
7
|
import '../configuration';
|
|
8
|
-
import { aaveV2Encode, chickenBondsEncode, liquityEncode, makerEncode, aaveV3Encode, compoundV2Encode, compoundV3Encode, morphoAaveV2Encode, exchangeEncode, crvUSDEncode,
|
|
8
|
+
import { aaveV2Encode, chickenBondsEncode, liquityEncode, makerEncode, aaveV3Encode, compoundV2Encode, 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
|
|
@@ -1422,37 +1422,6 @@ describe('Feature: strategySubService.ts', () => {
|
|
|
1422
1422
|
});
|
|
1423
1423
|
});
|
|
1424
1424
|
});
|
|
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
1425
|
describe('When testing strategySubService.sparkEncode', () => {
|
|
1457
1426
|
describe('leverageManagement()', () => {
|
|
1458
1427
|
const examples = [
|
|
@@ -185,8 +185,9 @@ export declare const aaveV2LeverageManagementSubData: {
|
|
|
185
185
|
};
|
|
186
186
|
};
|
|
187
187
|
export declare const aaveV2LeverageManagementSubDataWithoutSubProxy: {
|
|
188
|
-
encode(targetRatio: number, ratioState: RatioState): string[];
|
|
188
|
+
encode(market: EthereumAddress, targetRatio: number, ratioState: RatioState): string[];
|
|
189
189
|
decode(subData: string[]): {
|
|
190
|
+
market: EthereumAddress;
|
|
190
191
|
targetRatio: number;
|
|
191
192
|
ratioState: RatioState;
|
|
192
193
|
};
|
|
@@ -364,12 +365,6 @@ export declare const compoundV3LeverageManagementSubDataWithoutSubProxy: {
|
|
|
364
365
|
ratioState: RatioState;
|
|
365
366
|
};
|
|
366
367
|
};
|
|
367
|
-
export declare const compoundV3L2LeverageManagementSubData: {
|
|
368
|
-
encode(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean): string;
|
|
369
|
-
decode(subData: string[]): {
|
|
370
|
-
targetRatio: number;
|
|
371
|
-
};
|
|
372
|
-
};
|
|
373
368
|
export declare const compoundV3LeverageManagementOnPriceSubData: {
|
|
374
369
|
encode(market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, ratioState: RatioState, user: EthereumAddress): string[];
|
|
375
370
|
decode(subData: string[]): {
|
|
@@ -163,13 +163,18 @@ export const liquityLeverageManagementSubData = {
|
|
|
163
163
|
};
|
|
164
164
|
export const liquityLeverageManagementSubDataWithoutSubProxy = {
|
|
165
165
|
encode(targetRatio, ratioState) {
|
|
166
|
-
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
167
166
|
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
168
|
-
|
|
167
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
168
|
+
const isRepay = ratioState === RatioState.UNDER;
|
|
169
|
+
const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
|
|
170
|
+
const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
|
|
171
|
+
const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
|
|
172
|
+
const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
|
|
173
|
+
return [encodedRatioState, encodedTargetRatio, collActionTypeEncoded, debtActionTypeEncoded];
|
|
169
174
|
},
|
|
170
175
|
decode(subData) {
|
|
171
|
-
const
|
|
172
|
-
const
|
|
176
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[0]);
|
|
177
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]));
|
|
173
178
|
return { targetRatio, ratioState };
|
|
174
179
|
},
|
|
175
180
|
};
|
|
@@ -405,15 +410,22 @@ export const aaveV2LeverageManagementSubData = {
|
|
|
405
410
|
},
|
|
406
411
|
};
|
|
407
412
|
export const aaveV2LeverageManagementSubDataWithoutSubProxy = {
|
|
408
|
-
encode(targetRatio, ratioState) {
|
|
413
|
+
encode(market, targetRatio, ratioState) {
|
|
414
|
+
const encodedMarket = AbiCoder.encodeParameter('address', market);
|
|
409
415
|
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
410
416
|
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
411
|
-
|
|
417
|
+
const isBoost = ratioState === RatioState.OVER;
|
|
418
|
+
if (isBoost) {
|
|
419
|
+
const enableAsCollEncoded = AbiCoder.encodeParameter('uint256', 1);
|
|
420
|
+
return [encodedMarket, encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
|
|
421
|
+
}
|
|
422
|
+
return [encodedMarket, encodedTargetRatio, encodedRatioState];
|
|
412
423
|
},
|
|
413
424
|
decode(subData) {
|
|
414
|
-
const
|
|
415
|
-
const
|
|
416
|
-
|
|
425
|
+
const market = AbiCoder.decodeParameter('address', subData[0]);
|
|
426
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]));
|
|
427
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[2]);
|
|
428
|
+
return { market, targetRatio, ratioState };
|
|
417
429
|
},
|
|
418
430
|
};
|
|
419
431
|
/**
|
|
@@ -774,6 +786,11 @@ export const compoundV2LeverageManagementSubDataWithoutSubProxy = {
|
|
|
774
786
|
encode(targetRatio, ratioState) {
|
|
775
787
|
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
776
788
|
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
789
|
+
const isBoost = ratioState === RatioState.OVER;
|
|
790
|
+
if (isBoost) {
|
|
791
|
+
const enableAsCollEncoded = AbiCoder.encodeParameter('uint256', 1);
|
|
792
|
+
return [encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
|
|
793
|
+
}
|
|
777
794
|
return [encodedTargetRatio, encodedRatioState];
|
|
778
795
|
},
|
|
779
796
|
decode(subData) {
|
|
@@ -813,43 +830,20 @@ export const compoundV3LeverageManagementSubDataWithoutSubProxy = {
|
|
|
813
830
|
encode(market, baseToken, targetRatio, ratioState) {
|
|
814
831
|
const encodedMarket = AbiCoder.encodeParameter('address', market);
|
|
815
832
|
const encodedBaseToken = AbiCoder.encodeParameter('address', baseToken);
|
|
816
|
-
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
817
833
|
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
818
|
-
|
|
834
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
835
|
+
return [encodedMarket, encodedBaseToken, encodedRatioState, encodedTargetRatio];
|
|
819
836
|
},
|
|
820
837
|
decode(subData) {
|
|
821
838
|
const market = AbiCoder.decodeParameter('address', subData[0]);
|
|
822
839
|
const baseToken = AbiCoder.decodeParameter('address', subData[1]);
|
|
823
|
-
const
|
|
824
|
-
const
|
|
840
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[2]);
|
|
841
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[3]));
|
|
825
842
|
return {
|
|
826
843
|
market, baseToken, targetRatio, ratioState,
|
|
827
844
|
};
|
|
828
845
|
},
|
|
829
846
|
};
|
|
830
|
-
export const compoundV3L2LeverageManagementSubData = {
|
|
831
|
-
encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
|
|
832
|
-
let subInput = '0x';
|
|
833
|
-
subInput = subInput.concat(market.slice(2));
|
|
834
|
-
subInput = subInput.concat(baseToken.slice(2));
|
|
835
|
-
subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
|
|
836
|
-
.padStart(32, '0'));
|
|
837
|
-
subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
|
|
838
|
-
.padStart(32, '0'));
|
|
839
|
-
subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
|
|
840
|
-
.padStart(32, '0'));
|
|
841
|
-
subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
|
|
842
|
-
.padStart(32, '0'));
|
|
843
|
-
subInput = subInput.concat(boostEnabled ? '01' : '00');
|
|
844
|
-
subInput = subInput.concat(isEOA ? '01' : '00');
|
|
845
|
-
return subInput;
|
|
846
|
-
},
|
|
847
|
-
decode(subData) {
|
|
848
|
-
const ratioWei = AbiCoder.decodeParameter('uint256', subData[3]);
|
|
849
|
-
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
850
|
-
return { targetRatio };
|
|
851
|
-
},
|
|
852
|
-
};
|
|
853
847
|
export const compoundV3LeverageManagementOnPriceSubData = {
|
|
854
848
|
encode(market, collToken, baseToken, targetRatio, ratioState, user) {
|
|
855
849
|
const marketEncoded = AbiCoder.encodeParameter('address', market);
|
|
@@ -1188,48 +1188,6 @@ describe('Feature: subDataService.ts', () => {
|
|
|
1188
1188
|
});
|
|
1189
1189
|
});
|
|
1190
1190
|
});
|
|
1191
|
-
describe('When testing subDataService.compoundV3L2LeverageManagementSubData', () => {
|
|
1192
|
-
describe('encode()', () => {
|
|
1193
|
-
const examples = [
|
|
1194
|
-
[
|
|
1195
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
|
|
1196
|
-
[web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 190, true, false]
|
|
1197
|
-
],
|
|
1198
|
-
[
|
|
1199
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
|
|
1200
|
-
[web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 110, false, false]
|
|
1201
|
-
],
|
|
1202
|
-
];
|
|
1203
|
-
examples.forEach(([expected, actual]) => {
|
|
1204
|
-
it(`Given ${actual} should return expected value: ${expected}`, () => {
|
|
1205
|
-
expect(subDataService.compoundV3L2LeverageManagementSubData.encode(...actual)).to.eql(expected);
|
|
1206
|
-
});
|
|
1207
|
-
});
|
|
1208
|
-
});
|
|
1209
|
-
describe('decode()', () => {
|
|
1210
|
-
const examples = [
|
|
1211
|
-
[
|
|
1212
|
-
{ targetRatio: 200 },
|
|
1213
|
-
[
|
|
1214
|
-
'0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000213d212133AFaB8F2B829B1066c7E43cAd94E2c',
|
|
1215
|
-
'0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
|
|
1216
|
-
],
|
|
1217
|
-
],
|
|
1218
|
-
[
|
|
1219
|
-
{ targetRatio: 123 },
|
|
1220
|
-
[
|
|
1221
|
-
'0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000413d212133AFaB8F2B829B1066c7E43cAd94E2c',
|
|
1222
|
-
'0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
|
|
1223
|
-
],
|
|
1224
|
-
],
|
|
1225
|
-
];
|
|
1226
|
-
examples.forEach(([expected, actual]) => {
|
|
1227
|
-
it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
|
|
1228
|
-
expect(subDataService.compoundV3L2LeverageManagementSubData.decode(actual)).to.eql(expected);
|
|
1229
|
-
});
|
|
1230
|
-
});
|
|
1231
|
-
});
|
|
1232
|
-
});
|
|
1233
1191
|
describe('When testing subDataService.morphoBlueLeverageManagementSubData', () => {
|
|
1234
1192
|
describe('encode()', () => {
|
|
1235
1193
|
const examples = [
|
package/package.json
CHANGED
|
@@ -1129,6 +1129,7 @@ function parseMorphoBlueLeverageManagementOnPrice(position: Position.Automated,
|
|
|
1129
1129
|
debtAsset: subData.loanToken,
|
|
1130
1130
|
price: triggerData.price,
|
|
1131
1131
|
ratio: subData.targetRatio,
|
|
1132
|
+
ratioState: triggerData.priceState,
|
|
1132
1133
|
};
|
|
1133
1134
|
|
|
1134
1135
|
return _position;
|
|
@@ -19,7 +19,6 @@ import {
|
|
|
19
19
|
morphoAaveV2Encode,
|
|
20
20
|
exchangeEncode,
|
|
21
21
|
crvUSDEncode,
|
|
22
|
-
compoundV3L2Encode,
|
|
23
22
|
morphoBlueEncode,
|
|
24
23
|
sparkEncode,
|
|
25
24
|
aaveV4Encode,
|
|
@@ -1701,38 +1700,6 @@ describe('Feature: strategySubService.ts', () => {
|
|
|
1701
1700
|
});
|
|
1702
1701
|
});
|
|
1703
1702
|
|
|
1704
|
-
describe('When testing strategySubService.compoundV3L2Encode', () => {
|
|
1705
|
-
describe('leverageManagement()', () => {
|
|
1706
|
-
const examples: Array<[string, [EthereumAddress, EthereumAddress, number, number, number, number, boolean, boolean]]> = [
|
|
1707
|
-
[
|
|
1708
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
|
|
1709
|
-
[
|
|
1710
|
-
web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
|
|
1711
|
-
web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'),
|
|
1712
|
-
160, 220, 180, 190,
|
|
1713
|
-
true,
|
|
1714
|
-
false,
|
|
1715
|
-
],
|
|
1716
|
-
],
|
|
1717
|
-
[
|
|
1718
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
|
|
1719
|
-
[
|
|
1720
|
-
web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
|
|
1721
|
-
web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'),
|
|
1722
|
-
160, 220, 180, 110,
|
|
1723
|
-
false,
|
|
1724
|
-
false,
|
|
1725
|
-
],
|
|
1726
|
-
],
|
|
1727
|
-
];
|
|
1728
|
-
examples.forEach(([expected, actual]) => {
|
|
1729
|
-
it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
|
|
1730
|
-
expect(compoundV3L2Encode.leverageManagement(...actual)).to.eql(expected);
|
|
1731
|
-
});
|
|
1732
|
-
});
|
|
1733
|
-
});
|
|
1734
|
-
});
|
|
1735
|
-
|
|
1736
1703
|
describe('When testing strategySubService.sparkEncode', () => {
|
|
1737
1704
|
describe('leverageManagement()', () => {
|
|
1738
1705
|
const examples: Array<[string, [number, number, number, number, boolean]]> = [
|
|
@@ -281,7 +281,7 @@ export const aaveV2Encode = {
|
|
|
281
281
|
) {
|
|
282
282
|
const isBundle = true;
|
|
283
283
|
|
|
284
|
-
const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
|
|
284
|
+
const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
|
|
285
285
|
const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
286
286
|
|
|
287
287
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
@@ -562,21 +562,6 @@ export const compoundV3Encode = {
|
|
|
562
562
|
},
|
|
563
563
|
};
|
|
564
564
|
|
|
565
|
-
export const compoundV3L2Encode = {
|
|
566
|
-
leverageManagement(
|
|
567
|
-
market: EthereumAddress,
|
|
568
|
-
baseToken: EthereumAddress,
|
|
569
|
-
triggerRepayRatio: number,
|
|
570
|
-
triggerBoostRatio: number,
|
|
571
|
-
targetBoostRatio: number,
|
|
572
|
-
targetRepayRatio: number,
|
|
573
|
-
boostEnabled: boolean,
|
|
574
|
-
isEOA: boolean = false,
|
|
575
|
-
) {
|
|
576
|
-
return subDataService.compoundV3L2LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
|
|
577
|
-
},
|
|
578
|
-
};
|
|
579
|
-
|
|
580
565
|
export const morphoAaveV2Encode = {
|
|
581
566
|
leverageManagement(
|
|
582
567
|
triggerRepayRatio: number,
|
|
@@ -1283,54 +1283,6 @@ describe('Feature: subDataService.ts', () => {
|
|
|
1283
1283
|
});
|
|
1284
1284
|
});
|
|
1285
1285
|
|
|
1286
|
-
describe('When testing subDataService.compoundV3L2LeverageManagementSubData', () => {
|
|
1287
|
-
describe('encode()', () => {
|
|
1288
|
-
const examples: Array<[
|
|
1289
|
-
string,
|
|
1290
|
-
[market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean],
|
|
1291
|
-
]> = [
|
|
1292
|
-
[
|
|
1293
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
|
|
1294
|
-
[web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 190, true, false]
|
|
1295
|
-
],
|
|
1296
|
-
[
|
|
1297
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
|
|
1298
|
-
[web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 110, false, false]
|
|
1299
|
-
],
|
|
1300
|
-
];
|
|
1301
|
-
|
|
1302
|
-
examples.forEach(([expected, actual]) => {
|
|
1303
|
-
it(`Given ${actual} should return expected value: ${expected}`, () => {
|
|
1304
|
-
expect(subDataService.compoundV3L2LeverageManagementSubData.encode(...actual)).to.eql(expected);
|
|
1305
|
-
});
|
|
1306
|
-
});
|
|
1307
|
-
});
|
|
1308
|
-
describe('decode()', () => {
|
|
1309
|
-
const examples: Array<[{ targetRatio: number }, SubData]> = [
|
|
1310
|
-
[
|
|
1311
|
-
{ targetRatio: 200 },
|
|
1312
|
-
[
|
|
1313
|
-
'0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000213d212133AFaB8F2B829B1066c7E43cAd94E2c',
|
|
1314
|
-
'0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
|
|
1315
|
-
],
|
|
1316
|
-
],
|
|
1317
|
-
[
|
|
1318
|
-
{ targetRatio: 123 },
|
|
1319
|
-
[
|
|
1320
|
-
'0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000413d212133AFaB8F2B829B1066c7E43cAd94E2c',
|
|
1321
|
-
'0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
|
|
1322
|
-
],
|
|
1323
|
-
],
|
|
1324
|
-
];
|
|
1325
|
-
|
|
1326
|
-
examples.forEach(([expected, actual]) => {
|
|
1327
|
-
it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
|
|
1328
|
-
expect(subDataService.compoundV3L2LeverageManagementSubData.decode(actual)).to.eql(expected);
|
|
1329
|
-
});
|
|
1330
|
-
});
|
|
1331
|
-
});
|
|
1332
|
-
});
|
|
1333
|
-
|
|
1334
1286
|
describe('When testing subDataService.morphoBlueLeverageManagementSubData', () => {
|
|
1335
1287
|
describe('encode()', () => {
|
|
1336
1288
|
const examples: Array<[
|
|
@@ -212,13 +212,21 @@ export const liquityLeverageManagementSubDataWithoutSubProxy = {
|
|
|
212
212
|
targetRatio: number,
|
|
213
213
|
ratioState: RatioState,
|
|
214
214
|
): SubData {
|
|
215
|
-
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
216
215
|
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
217
|
-
|
|
216
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
217
|
+
|
|
218
|
+
const isRepay = ratioState === RatioState.UNDER;
|
|
219
|
+
const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
|
|
220
|
+
const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
|
|
221
|
+
|
|
222
|
+
const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
|
|
223
|
+
const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
|
|
224
|
+
|
|
225
|
+
return [encodedRatioState, encodedTargetRatio, collActionTypeEncoded, debtActionTypeEncoded];
|
|
218
226
|
},
|
|
219
227
|
decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
|
|
220
|
-
const
|
|
221
|
-
const
|
|
228
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[0]) as any as RatioState;
|
|
229
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]) as any as string);
|
|
222
230
|
|
|
223
231
|
return { targetRatio, ratioState };
|
|
224
232
|
},
|
|
@@ -528,18 +536,29 @@ export const aaveV2LeverageManagementSubData = {
|
|
|
528
536
|
};
|
|
529
537
|
export const aaveV2LeverageManagementSubDataWithoutSubProxy = {
|
|
530
538
|
encode(
|
|
539
|
+
market: EthereumAddress,
|
|
531
540
|
targetRatio: number,
|
|
532
541
|
ratioState: RatioState,
|
|
533
542
|
): SubData {
|
|
543
|
+
const encodedMarket = AbiCoder.encodeParameter('address', market);
|
|
534
544
|
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
535
545
|
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
536
|
-
|
|
546
|
+
|
|
547
|
+
const isBoost = ratioState === RatioState.OVER;
|
|
548
|
+
|
|
549
|
+
if (isBoost) {
|
|
550
|
+
const enableAsCollEncoded = AbiCoder.encodeParameter('uint256', 1);
|
|
551
|
+
return [encodedMarket, encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
return [encodedMarket, encodedTargetRatio, encodedRatioState];
|
|
537
555
|
},
|
|
538
|
-
decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
|
|
539
|
-
const
|
|
540
|
-
const
|
|
556
|
+
decode(subData: SubData): { market: EthereumAddress, targetRatio: number, ratioState: RatioState } {
|
|
557
|
+
const market = AbiCoder.decodeParameter('address', subData[0]) as any as EthereumAddress;
|
|
558
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]) as any as string);
|
|
559
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[2]) as any as RatioState;
|
|
541
560
|
|
|
542
|
-
return { targetRatio, ratioState };
|
|
561
|
+
return { market, targetRatio, ratioState };
|
|
543
562
|
},
|
|
544
563
|
};
|
|
545
564
|
|
|
@@ -1036,6 +1055,14 @@ export const compoundV2LeverageManagementSubDataWithoutSubProxy = {
|
|
|
1036
1055
|
): SubData {
|
|
1037
1056
|
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1038
1057
|
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
1058
|
+
|
|
1059
|
+
const isBoost = ratioState === RatioState.OVER;
|
|
1060
|
+
|
|
1061
|
+
if (isBoost) {
|
|
1062
|
+
const enableAsCollEncoded = AbiCoder.encodeParameter('uint256', 1);
|
|
1063
|
+
return [encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1039
1066
|
return [encodedTargetRatio, encodedRatioState];
|
|
1040
1067
|
},
|
|
1041
1068
|
decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
|
|
@@ -1092,56 +1119,21 @@ export const compoundV3LeverageManagementSubDataWithoutSubProxy = {
|
|
|
1092
1119
|
): SubData {
|
|
1093
1120
|
const encodedMarket = AbiCoder.encodeParameter('address', market);
|
|
1094
1121
|
const encodedBaseToken = AbiCoder.encodeParameter('address', baseToken);
|
|
1095
|
-
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1096
1122
|
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
1097
|
-
|
|
1123
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
1124
|
+
return [encodedMarket, encodedBaseToken, encodedRatioState, encodedTargetRatio];
|
|
1098
1125
|
},
|
|
1099
1126
|
decode(subData: SubData): { market: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, ratioState: RatioState } {
|
|
1100
1127
|
const market = AbiCoder.decodeParameter('address', subData[0]) as any as EthereumAddress;
|
|
1101
1128
|
const baseToken = AbiCoder.decodeParameter('address', subData[1]) as any as EthereumAddress;
|
|
1102
|
-
const
|
|
1103
|
-
const
|
|
1129
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[2]) as any as RatioState;
|
|
1130
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[3]) as any as string);
|
|
1104
1131
|
|
|
1105
1132
|
return {
|
|
1106
1133
|
market, baseToken, targetRatio, ratioState,
|
|
1107
1134
|
};
|
|
1108
1135
|
},
|
|
1109
1136
|
};
|
|
1110
|
-
export const compoundV3L2LeverageManagementSubData = {
|
|
1111
|
-
encode(
|
|
1112
|
-
market: EthereumAddress,
|
|
1113
|
-
baseToken: EthereumAddress,
|
|
1114
|
-
triggerRepayRatio: number,
|
|
1115
|
-
triggerBoostRatio: number,
|
|
1116
|
-
targetBoostRatio: number,
|
|
1117
|
-
targetRepayRatio: number,
|
|
1118
|
-
boostEnabled: boolean,
|
|
1119
|
-
isEOA: boolean,
|
|
1120
|
-
): string {
|
|
1121
|
-
let subInput = '0x';
|
|
1122
|
-
|
|
1123
|
-
subInput = subInput.concat(market.slice(2));
|
|
1124
|
-
subInput = subInput.concat(baseToken.slice(2));
|
|
1125
|
-
subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
|
|
1126
|
-
.padStart(32, '0'));
|
|
1127
|
-
subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
|
|
1128
|
-
.padStart(32, '0'));
|
|
1129
|
-
subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
|
|
1130
|
-
.padStart(32, '0'));
|
|
1131
|
-
subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
|
|
1132
|
-
.padStart(32, '0'));
|
|
1133
|
-
subInput = subInput.concat(boostEnabled ? '01' : '00');
|
|
1134
|
-
subInput = subInput.concat(isEOA ? '01' : '00');
|
|
1135
|
-
|
|
1136
|
-
return subInput;
|
|
1137
|
-
},
|
|
1138
|
-
decode(subData: SubData): { targetRatio: number } {
|
|
1139
|
-
const ratioWei = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
|
|
1140
|
-
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
1141
|
-
|
|
1142
|
-
return { targetRatio };
|
|
1143
|
-
},
|
|
1144
|
-
};
|
|
1145
1137
|
export const compoundV3LeverageManagementOnPriceSubData = {
|
|
1146
1138
|
encode(
|
|
1147
1139
|
market: EthereumAddress,
|