@defisaver/automation-sdk 3.3.7 → 3.3.8-lev-management-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/constants/index.js +15 -0
- package/cjs/services/ethereumService.test.js +1 -0
- package/cjs/services/strategiesService.js +30 -0
- package/cjs/services/strategiesService.test.js +1 -0
- package/cjs/services/strategySubService.d.ts +3 -0
- package/cjs/services/strategySubService.js +24 -0
- package/cjs/services/strategySubService.test.js +40 -2
- package/cjs/services/subDataService.d.ts +26 -0
- package/cjs/services/subDataService.js +58 -1
- package/cjs/services/subDataService.test.js +62 -10
- package/cjs/services/triggerService.d.ts +10 -0
- package/cjs/services/triggerService.js +21 -1
- package/cjs/services/triggerService.test.js +48 -0
- package/cjs/types/enums.d.ts +6 -3
- package/cjs/types/enums.js +3 -0
- package/esm/constants/index.js +15 -0
- package/esm/services/ethereumService.test.js +1 -0
- package/esm/services/strategiesService.js +30 -0
- package/esm/services/strategiesService.test.js +1 -0
- package/esm/services/strategySubService.d.ts +3 -0
- package/esm/services/strategySubService.js +24 -0
- package/esm/services/strategySubService.test.js +40 -2
- package/esm/services/subDataService.d.ts +26 -0
- package/esm/services/subDataService.js +57 -0
- package/esm/services/subDataService.test.js +62 -10
- package/esm/services/triggerService.d.ts +10 -0
- package/esm/services/triggerService.js +20 -0
- package/esm/services/triggerService.test.js +49 -1
- package/esm/types/enums.d.ts +6 -3
- package/esm/types/enums.js +3 -0
- package/package.json +2 -2
- package/src/constants/index.ts +15 -0
- package/src/services/ethereumService.test.ts +1 -0
- package/src/services/strategiesService.test.ts +1 -0
- package/src/services/strategiesService.ts +43 -0
- package/src/services/strategySubService.test.ts +57 -2
- package/src/services/strategySubService.ts +64 -2
- package/src/services/subDataService.test.ts +73 -14
- package/src/services/subDataService.ts +79 -0
- package/src/services/triggerService.test.ts +53 -0
- package/src/services/triggerService.ts +32 -0
- package/src/types/enums.ts +3 -0
|
@@ -104,6 +104,25 @@ export const makerLeverageManagementSubData = {
|
|
|
104
104
|
},
|
|
105
105
|
};
|
|
106
106
|
|
|
107
|
+
export const makerLeverageManagementWithoutSubProxy = {
|
|
108
|
+
encode(
|
|
109
|
+
cdpId: number,
|
|
110
|
+
targetRatio: number,
|
|
111
|
+
ratioState: RatioState,
|
|
112
|
+
): SubData {
|
|
113
|
+
const encodedCdpId = AbiCoder.encodeParameter('uint256', cdpId);
|
|
114
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
115
|
+
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
116
|
+
return [encodedTargetRatio, encodedRatioState, encodedCdpId];
|
|
117
|
+
},
|
|
118
|
+
decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
|
|
119
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
|
|
120
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
|
|
121
|
+
|
|
122
|
+
return { targetRatio, ratioState };
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
|
|
107
126
|
export const liquityLeverageManagementSubData = {
|
|
108
127
|
decode: (subData:SubData) => {
|
|
109
128
|
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
@@ -592,6 +611,26 @@ export const sparkLeverageManagementSubData = { // TODO encode?
|
|
|
592
611
|
return { targetRatio };
|
|
593
612
|
},
|
|
594
613
|
};
|
|
614
|
+
export const sparkLeverageManagementSubDataWithoutSubProxy = {
|
|
615
|
+
encode(
|
|
616
|
+
targetRatio: number,
|
|
617
|
+
ratioState: RatioState,
|
|
618
|
+
): SubData {
|
|
619
|
+
const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
620
|
+
const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
|
|
621
|
+
|
|
622
|
+
const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
|
|
623
|
+
const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
|
|
624
|
+
return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
|
|
625
|
+
},
|
|
626
|
+
decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
|
|
627
|
+
const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
|
|
628
|
+
const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
|
|
629
|
+
|
|
630
|
+
return { targetRatio, ratioState };
|
|
631
|
+
},
|
|
632
|
+
};
|
|
633
|
+
|
|
595
634
|
|
|
596
635
|
export const liquityDsrPaybackSubData = {
|
|
597
636
|
encode: (targetRatio: number) => {
|
|
@@ -1212,3 +1251,43 @@ export const sparkCloseGenericSubData = {
|
|
|
1212
1251
|
};
|
|
1213
1252
|
},
|
|
1214
1253
|
};
|
|
1254
|
+
|
|
1255
|
+
export const morphoBlueCloseOnPriceSubData = {
|
|
1256
|
+
encode(
|
|
1257
|
+
loanToken: EthereumAddress,
|
|
1258
|
+
collToken: EthereumAddress,
|
|
1259
|
+
oracle: EthereumAddress,
|
|
1260
|
+
irm: EthereumAddress,
|
|
1261
|
+
lltv: string,
|
|
1262
|
+
user: EthereumAddress,
|
|
1263
|
+
closeType: CloseStrategyType,
|
|
1264
|
+
): SubData {
|
|
1265
|
+
const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
|
|
1266
|
+
const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
|
|
1267
|
+
const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
|
|
1268
|
+
const irmEncoded = AbiCoder.encodeParameter('address', irm);
|
|
1269
|
+
const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
|
|
1270
|
+
const userEncoded = AbiCoder.encodeParameter('address', user);
|
|
1271
|
+
const closeTypeEncoded = AbiCoder.encodeParameter('uint8', closeType);
|
|
1272
|
+
return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, userEncoded, closeTypeEncoded];
|
|
1273
|
+
},
|
|
1274
|
+
decode(subData: SubData) {
|
|
1275
|
+
const loanToken = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
1276
|
+
const collToken = AbiCoder.decodeParameter('address', subData[1]) as any as EthereumAddress;
|
|
1277
|
+
const oracle = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
|
|
1278
|
+
const irm = AbiCoder.decodeParameter('address', subData[3]) as any as EthereumAddress;
|
|
1279
|
+
const lltv = AbiCoder.decodeParameter('uint256', subData[4]) as any as EthereumAddress;
|
|
1280
|
+
const user = AbiCoder.decodeParameter('address', subData[5]) as any as EthereumAddress;
|
|
1281
|
+
const closeType = Number(AbiCoder.decodeParameter('uint8', subData[6])) as CloseStrategyType;
|
|
1282
|
+
|
|
1283
|
+
return {
|
|
1284
|
+
loanToken,
|
|
1285
|
+
collToken,
|
|
1286
|
+
oracle,
|
|
1287
|
+
irm,
|
|
1288
|
+
lltv,
|
|
1289
|
+
user,
|
|
1290
|
+
closeType,
|
|
1291
|
+
};
|
|
1292
|
+
},
|
|
1293
|
+
};
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
crvUsdHealthRatioTrigger, liquityV2DebtInFrontTrigger, liquityV2AdjustTimeTrigger,
|
|
32
32
|
compoundV3PriceRangeTrigger,
|
|
33
33
|
aaveV3QuotePriceRangeTrigger,
|
|
34
|
+
morphoBluePriceRangeTrigger,
|
|
34
35
|
} from './triggerService';
|
|
35
36
|
|
|
36
37
|
describe('Feature: triggerService.ts', () => {
|
|
@@ -1230,4 +1231,56 @@ describe('Feature: triggerService.ts', () => {
|
|
|
1230
1231
|
});
|
|
1231
1232
|
});
|
|
1232
1233
|
});
|
|
1234
|
+
|
|
1235
|
+
describe('When testing triggerService.morphoBluePriceRangeTrigger', () => {
|
|
1236
|
+
describe('encode()', () => {
|
|
1237
|
+
const examples: Array<[[string], [oracle: EthereumAddress, collateralToken: EthereumAddress, loanToken: EthereumAddress, lowerPrice: number, upperPrice: number]]> = [
|
|
1238
|
+
[
|
|
1239
|
+
['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000022ecb25c000000000000000000000000000000000000000000000000000000005d21dba000'],
|
|
1240
|
+
[web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'), 1500, 4000]
|
|
1241
|
+
],
|
|
1242
|
+
[
|
|
1243
|
+
['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746a528800'],
|
|
1244
|
+
[web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'), 0, 5000]
|
|
1245
|
+
],
|
|
1246
|
+
];
|
|
1247
|
+
|
|
1248
|
+
examples.forEach(([expected, actual]) => {
|
|
1249
|
+
it(`Given ${actual} should return expected value: ${expected}`, () => {
|
|
1250
|
+
expect(morphoBluePriceRangeTrigger.encode(...actual)).to.eql(expected);
|
|
1251
|
+
});
|
|
1252
|
+
});
|
|
1253
|
+
});
|
|
1254
|
+
|
|
1255
|
+
describe('decode()', () => {
|
|
1256
|
+
const examples: Array<[{ oracle: EthereumAddress, collateralToken: EthereumAddress, loanToken: EthereumAddress, lowerPrice: string, upperPrice: string }, TriggerData]> = [
|
|
1257
|
+
[
|
|
1258
|
+
{
|
|
1259
|
+
oracle: web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
|
|
1260
|
+
collateralToken: web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
|
|
1261
|
+
loanToken: web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),
|
|
1262
|
+
lowerPrice: '1500',
|
|
1263
|
+
upperPrice: '4000',
|
|
1264
|
+
},
|
|
1265
|
+
['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000022ecb25c000000000000000000000000000000000000000000000000000000005d21dba000'],
|
|
1266
|
+
],
|
|
1267
|
+
[
|
|
1268
|
+
{
|
|
1269
|
+
oracle: web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
|
|
1270
|
+
collateralToken: web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
|
|
1271
|
+
loanToken: web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),
|
|
1272
|
+
lowerPrice: '0',
|
|
1273
|
+
upperPrice: '5000',
|
|
1274
|
+
},
|
|
1275
|
+
['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8dA6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746a528800'],
|
|
1276
|
+
],
|
|
1277
|
+
];
|
|
1278
|
+
|
|
1279
|
+
examples.forEach(([expected, actual]) => {
|
|
1280
|
+
it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
|
|
1281
|
+
expect(morphoBluePriceRangeTrigger.decode(actual)).to.eql(expected);
|
|
1282
|
+
});
|
|
1283
|
+
});
|
|
1284
|
+
});
|
|
1285
|
+
});
|
|
1233
1286
|
});
|
|
@@ -688,4 +688,36 @@ export const sparkQuotePriceRangeTrigger = {
|
|
|
688
688
|
upperPrice: new Dec(decodedData[3] as string).div(1e8).toString(),
|
|
689
689
|
};
|
|
690
690
|
},
|
|
691
|
+
};
|
|
692
|
+
|
|
693
|
+
export const morphoBluePriceRangeTrigger = {
|
|
694
|
+
encode(
|
|
695
|
+
oracle: EthereumAddress,
|
|
696
|
+
collateralToken: EthereumAddress,
|
|
697
|
+
loanToken: EthereumAddress,
|
|
698
|
+
lowerPrice: number,
|
|
699
|
+
upperPrice: number,
|
|
700
|
+
) {
|
|
701
|
+
// Price is scaled to 1e8
|
|
702
|
+
const lowerPriceFormatted = new Dec(lowerPrice).mul(1e8).floor().toString();
|
|
703
|
+
const upperPriceFormatted = new Dec(upperPrice).mul(1e8).floor().toString();
|
|
704
|
+
return [
|
|
705
|
+
AbiCoder.encodeParameters(
|
|
706
|
+
['address', 'address', 'address', 'uint256', 'uint256'],
|
|
707
|
+
[oracle, collateralToken, loanToken, lowerPriceFormatted, upperPriceFormatted],
|
|
708
|
+
),
|
|
709
|
+
];
|
|
710
|
+
},
|
|
711
|
+
decode(
|
|
712
|
+
triggerData: TriggerData,
|
|
713
|
+
) {
|
|
714
|
+
const decodedData = AbiCoder.decodeParameters(['address', 'address', 'address', 'uint256', 'uint256'], triggerData[0]);
|
|
715
|
+
return {
|
|
716
|
+
oracle: decodedData[0] as EthereumAddress,
|
|
717
|
+
collateralToken: decodedData[1] as EthereumAddress,
|
|
718
|
+
loanToken: decodedData[2] as EthereumAddress,
|
|
719
|
+
lowerPrice: new Dec(decodedData[3] as string).div(1e8).toString(),
|
|
720
|
+
upperPrice: new Dec(decodedData[4] as string).div(1e8).toString(),
|
|
721
|
+
};
|
|
722
|
+
},
|
|
691
723
|
};
|
package/src/types/enums.ts
CHANGED
|
@@ -222,6 +222,7 @@ export namespace Bundles {
|
|
|
222
222
|
AAVE_V3_EOA_BOOST_ON_PRICE = 55,
|
|
223
223
|
AAVE_V3_EOA_CLOSE = 56,
|
|
224
224
|
SPARK_CLOSE = 57,
|
|
225
|
+
MORPHO_BLUE_CLOSE = 58,
|
|
225
226
|
}
|
|
226
227
|
|
|
227
228
|
export enum OptimismIds {
|
|
@@ -265,6 +266,7 @@ export namespace Bundles {
|
|
|
265
266
|
AAVE_V3_EOA_REPAY_ON_PRICE = 25,
|
|
266
267
|
AAVE_V3_EOA_BOOST_ON_PRICE = 26,
|
|
267
268
|
AAVE_V3_EOA_CLOSE = 27,
|
|
269
|
+
MORPHO_BLUE_CLOSE = 28,
|
|
268
270
|
}
|
|
269
271
|
|
|
270
272
|
export enum ArbitrumIds {
|
|
@@ -296,6 +298,7 @@ export namespace Bundles {
|
|
|
296
298
|
MORPHO_BLUE_BOOST_ON_PRICE = 25,
|
|
297
299
|
MORPHO_BLUE_EOA_REPAY = 26,
|
|
298
300
|
MORPHO_BLUE_EOA_BOOST = 27,
|
|
301
|
+
MORPHO_BLUE_CLOSE = 28,
|
|
299
302
|
}
|
|
300
303
|
}
|
|
301
304
|
|