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