@defisaver/automation-sdk 2.0.2 → 2.0.3
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/.eslintrc.js +1 -0
- package/esm/abis/index.js +27 -15
- package/esm/automation/private/Automation.js +9 -6
- package/esm/automation/private/LegacyAutomation.d.ts +5 -5
- package/esm/automation/private/LegacyAutomation.js +30 -23
- package/esm/automation/private/LegacyProtocol.js +4 -1
- package/esm/automation/private/Protocol.js +4 -1
- package/esm/automation/private/StrategiesAutomation.d.ts +2 -2
- package/esm/automation/private/StrategiesAutomation.js +27 -21
- package/esm/automation/public/ArbitrumStrategies.js +10 -4
- package/esm/automation/public/EthereumStrategies.js +10 -4
- package/esm/automation/public/OptimismStrategies.js +10 -4
- package/esm/automation/public/legacy/LegacyAaveAutomation.js +13 -7
- package/esm/automation/public/legacy/LegacyCompoundAutomation.js +13 -7
- package/esm/automation/public/legacy/LegacyMakerAutomation.js +13 -7
- package/esm/configuration.js +8 -5
- package/esm/constants/index.js +281 -275
- package/esm/index.js +57 -17
- package/esm/services/contractService.js +22 -14
- package/esm/services/ethereumService.js +18 -10
- package/esm/services/strategiesService.js +130 -103
- package/esm/services/strategySubService.js +90 -61
- package/esm/services/subDataService.js +151 -145
- package/esm/services/triggerService.d.ts +5 -5
- package/esm/services/triggerService.js +124 -94
- package/esm/services/utils.js +82 -33
- package/esm/services/utils.test.d.ts +1 -0
- package/esm/services/utils.test.js +362 -0
- package/esm/types/contracts/generated/Erc20.js +2 -1
- package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.js +2 -1
- package/esm/types/contracts/generated/Legacy_AuthCheck.js +2 -1
- package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +2 -1
- package/esm/types/contracts/generated/Legacy_MakerSubscriptions.js +2 -1
- package/esm/types/contracts/generated/SubStorage.js +2 -1
- package/esm/types/contracts/generated/UniMulticall.js +2 -1
- package/esm/types/contracts/generated/index.js +2 -1
- package/esm/types/contracts/generated/types.js +2 -1
- package/esm/types/enums.js +17 -14
- package/esm/types/index.js +2 -1
- package/package.json +11 -7
- package/src/automation/private/LegacyAutomation.ts +11 -10
- package/src/automation/private/StrategiesAutomation.ts +5 -6
- package/src/configuration.ts +0 -3
- package/src/index.ts +0 -1
- package/src/services/ethereumService.ts +6 -6
- package/src/services/subDataService.ts +75 -76
- package/src/services/triggerService.ts +83 -83
- package/src/services/utils.test.ts +414 -0
- package/src/services/utils.ts +6 -7
- package/tsconfig.json +1 -1
- package/umd/index.js +7016 -4105
- package/src/types/typings/process.d.ts +0 -9
- package/yarn-error.log +0 -7233
package/src/configuration.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// [] Check @ts-ignores and PlaceholderType
|
|
3
3
|
// [] Improve typing for subData, trigger and strategySub services
|
|
4
4
|
// [] Make possible to use any provider not only web3 (This requires changes throughout the package)
|
|
5
|
-
// [] Write unit tests
|
|
6
5
|
|
|
7
6
|
import './configuration';
|
|
8
7
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import AbiCoder from 'web3-eth-abi';
|
|
2
|
+
|
|
1
3
|
import type Web3 from 'web3';
|
|
2
4
|
import type { PastEventOptions } from 'web3-eth-contract';
|
|
3
5
|
import type {
|
|
@@ -9,8 +11,6 @@ import { addToObjectIf, isDefined } from './utils';
|
|
|
9
11
|
import type { BaseContract } from '../types/contracts/generated/types';
|
|
10
12
|
import type { ChainId } from '../types/enums';
|
|
11
13
|
|
|
12
|
-
const { mockedWeb3 } = process;
|
|
13
|
-
|
|
14
14
|
export async function multicall(
|
|
15
15
|
web3: Web3,
|
|
16
16
|
chainId: ChainId,
|
|
@@ -20,7 +20,7 @@ export async function multicall(
|
|
|
20
20
|
const multicallContract = makeUniMulticallContract(web3, chainId).contract;
|
|
21
21
|
|
|
22
22
|
const formattedCalls: Multicall.FormattedCalls[] = calls.map((call) => ({
|
|
23
|
-
callData:
|
|
23
|
+
callData: AbiCoder.encodeFunctionCall(call.abiItem, call.params),
|
|
24
24
|
target: call.target || '0x0',
|
|
25
25
|
gasLimit: call.gasLimit || 1e6,
|
|
26
26
|
}));
|
|
@@ -33,12 +33,12 @@ export async function multicall(
|
|
|
33
33
|
|
|
34
34
|
callResult.returnData.forEach(([success, gasUsed, result], i) => {
|
|
35
35
|
const formattedRes = (result !== '0x'
|
|
36
|
-
?
|
|
37
|
-
: undefined)
|
|
36
|
+
? AbiCoder.decodeParameters(calls[i].abiItem.outputs!, result)
|
|
37
|
+
: undefined);
|
|
38
38
|
formattedResult = [...formattedResult, formattedRes];
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
return formattedResult;
|
|
41
|
+
return formattedResult as Multicall.Payload;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
export async function getEventsFromContract<T extends BaseContract>(
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Dec from 'decimal.js';
|
|
2
|
+
import AbiCoder from 'web3-eth-abi';
|
|
2
3
|
import { assetAmountInEth, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
|
|
3
4
|
import { otherAddresses } from '@defisaver/sdk';
|
|
4
5
|
|
|
@@ -9,8 +10,6 @@ import { ZERO_ADDRESS } from '../constants';
|
|
|
9
10
|
|
|
10
11
|
import { compareAddresses, ratioPercentageToWei, weiToRatioPercentage } from './utils';
|
|
11
12
|
|
|
12
|
-
const { mockedWeb3 } = process;
|
|
13
|
-
|
|
14
13
|
export const makerRepayFromSavingsSubData = {
|
|
15
14
|
encode(
|
|
16
15
|
vaultId: number,
|
|
@@ -23,22 +22,22 @@ export const makerRepayFromSavingsSubData = {
|
|
|
23
22
|
// @ts-ignore // TODO - this requires change in @defisaver/tokens
|
|
24
23
|
const _mcdCdpManagerAddr = mcdCdpManagerAddr || otherAddresses(chainId).McdCdpManager;
|
|
25
24
|
|
|
26
|
-
const vaultIdEncoded =
|
|
25
|
+
const vaultIdEncoded = AbiCoder.encodeParameter('uint256', vaultId.toString());
|
|
27
26
|
const targetRatioWei = ratioPercentageToWei(targetRatioPercentage);
|
|
28
|
-
const targetRatioEncoded =
|
|
29
|
-
const daiAddrEncoded =
|
|
30
|
-
const mcdManagerAddrEncoded =
|
|
27
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', targetRatioWei);
|
|
28
|
+
const daiAddrEncoded = AbiCoder.encodeParameter('address', _daiAddr);
|
|
29
|
+
const mcdManagerAddrEncoded = AbiCoder.encodeParameter('address', _mcdCdpManagerAddr);
|
|
31
30
|
|
|
32
31
|
return [vaultIdEncoded, targetRatioEncoded, daiAddrEncoded, mcdManagerAddrEncoded];
|
|
33
32
|
},
|
|
34
33
|
decode(subData: SubData): { vaultId: number, daiAddr: string, mcdManagerAddr: string, targetRatio: number } {
|
|
35
|
-
const vaultId = +
|
|
34
|
+
const vaultId = +AbiCoder.decodeParameter('uint256', subData[0])!.toString();
|
|
36
35
|
|
|
37
|
-
const weiRatio =
|
|
36
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
38
37
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
39
38
|
|
|
40
|
-
const daiAddr =
|
|
41
|
-
const mcdManagerAddr =
|
|
39
|
+
const daiAddr = AbiCoder.decodeParameter('address', subData[2])!.toString();
|
|
40
|
+
const mcdManagerAddr = AbiCoder.decodeParameter('address', subData[3])!.toString();
|
|
42
41
|
|
|
43
42
|
return {
|
|
44
43
|
vaultId, targetRatio, daiAddr, mcdManagerAddr,
|
|
@@ -58,23 +57,23 @@ export const makerCloseSubData = {
|
|
|
58
57
|
// @ts-ignore // TODO - this requires change in @defisaver/tokens
|
|
59
58
|
const _mcdCdpManagerAddr = mcdCdpManagerAddr || otherAddresses(chainId).McdCdpManager;
|
|
60
59
|
|
|
61
|
-
const vaultIdEncoded =
|
|
62
|
-
const daiAddrEncoded =
|
|
63
|
-
const mcdManagerAddrEncoded =
|
|
60
|
+
const vaultIdEncoded = AbiCoder.encodeParameter('uint256', vaultId.toString());
|
|
61
|
+
const daiAddrEncoded = AbiCoder.encodeParameter('address', _daiAddr);
|
|
62
|
+
const mcdManagerAddrEncoded = AbiCoder.encodeParameter('address', _mcdCdpManagerAddr);
|
|
64
63
|
|
|
65
64
|
if (compareAddresses(closeToAssetAddr, _daiAddr)) {
|
|
66
65
|
// Close to DAI strategy
|
|
67
66
|
return [vaultIdEncoded, daiAddrEncoded, mcdManagerAddrEncoded];
|
|
68
67
|
}
|
|
69
68
|
// Close to collateral strategy
|
|
70
|
-
const collAddrEncoded =
|
|
69
|
+
const collAddrEncoded = AbiCoder.encodeParameter('address', closeToAssetAddr);
|
|
71
70
|
return [vaultIdEncoded, collAddrEncoded, daiAddrEncoded, mcdManagerAddrEncoded];
|
|
72
71
|
},
|
|
73
72
|
decode(subData: SubData): { vaultId: number, closeToAssetAddr: EthereumAddress } {
|
|
74
|
-
const vaultId = +
|
|
73
|
+
const vaultId = +AbiCoder.decodeParameter('uint256', subData[0])!;
|
|
75
74
|
// if closing to collateral, asset addr will be 2nd param out of 4
|
|
76
75
|
// if closing to DAI, will return 2nd param out of 3, which will be DAI addr
|
|
77
|
-
const closeToAssetAddr =
|
|
76
|
+
const closeToAssetAddr = AbiCoder.decodeParameter('address', subData[1])!.toString().toLowerCase();
|
|
78
77
|
|
|
79
78
|
return {
|
|
80
79
|
vaultId, closeToAssetAddr,
|
|
@@ -92,15 +91,15 @@ export const makerLeverageManagementSubData = {
|
|
|
92
91
|
// boostEnabled,
|
|
93
92
|
// ],
|
|
94
93
|
decode: (subData:SubData) => {
|
|
95
|
-
const vaultId = +
|
|
96
|
-
const weiRatio =
|
|
94
|
+
const vaultId = +AbiCoder.decodeParameter('uint256', subData[0])!.toString();
|
|
95
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
97
96
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
98
97
|
return { vaultId, targetRatio };
|
|
99
98
|
},
|
|
100
99
|
};
|
|
101
100
|
export const liquityLeverageManagementSubData = {
|
|
102
101
|
decode: (subData:SubData) => {
|
|
103
|
-
const weiRatio =
|
|
102
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
104
103
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
105
104
|
return { targetRatio };
|
|
106
105
|
},
|
|
@@ -115,8 +114,8 @@ export const liquityCloseSubData = {
|
|
|
115
114
|
const _collAddr = collAddr || getAssetInfo('WETH', chainId).address;
|
|
116
115
|
const _debtAddr = debtAddr || getAssetInfo('LUSD', chainId).address;
|
|
117
116
|
|
|
118
|
-
const collAddrEncoded =
|
|
119
|
-
const debtAddrEncoded =
|
|
117
|
+
const collAddrEncoded = AbiCoder.encodeParameter('address', _collAddr);
|
|
118
|
+
const debtAddrEncoded = AbiCoder.encodeParameter('address', _debtAddr);
|
|
120
119
|
// if (compareAddresses(closeToAssetAddr, daiAddr)) { // TODO - Uhm, wth?
|
|
121
120
|
// // close to LUSD strategy
|
|
122
121
|
// return [daiAddrEncoded, mcdManagerAddrEncoded];
|
|
@@ -125,8 +124,8 @@ export const liquityCloseSubData = {
|
|
|
125
124
|
return [collAddrEncoded, debtAddrEncoded];
|
|
126
125
|
},
|
|
127
126
|
decode(subData: SubData): { closeToAssetAddr: EthereumAddress, debtAddr: string } {
|
|
128
|
-
const closeToAssetAddr =
|
|
129
|
-
const debtAddr =
|
|
127
|
+
const closeToAssetAddr = AbiCoder.decodeParameter('address', subData[0])!.toString().toLowerCase();
|
|
128
|
+
const debtAddr = AbiCoder.decodeParameter('address', subData[1])!.toString().toLowerCase();
|
|
130
129
|
|
|
131
130
|
return { closeToAssetAddr, debtAddr };
|
|
132
131
|
},
|
|
@@ -150,7 +149,7 @@ export const aaveV2LeverageManagementSubData = {
|
|
|
150
149
|
];
|
|
151
150
|
},
|
|
152
151
|
decode(subData: SubData): { targetRatio: number } {
|
|
153
|
-
const ratioWei =
|
|
152
|
+
const ratioWei = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
154
153
|
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
155
154
|
|
|
156
155
|
return { targetRatio };
|
|
@@ -159,7 +158,7 @@ export const aaveV2LeverageManagementSubData = {
|
|
|
159
158
|
|
|
160
159
|
export const aaveV3LeverageManagementSubData = { // TODO encode?
|
|
161
160
|
decode(subData: SubData): { targetRatio: number } {
|
|
162
|
-
const ratioWei =
|
|
161
|
+
const ratioWei = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
163
162
|
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
164
163
|
|
|
165
164
|
return { targetRatio };
|
|
@@ -174,22 +173,22 @@ export const aaveV3QuotePriceSubData = {
|
|
|
174
173
|
debtAssetId: number,
|
|
175
174
|
nullAddress: EthereumAddress = ZERO_ADDRESS,
|
|
176
175
|
): SubData {
|
|
177
|
-
const encodedColl =
|
|
178
|
-
const encodedCollId =
|
|
176
|
+
const encodedColl = AbiCoder.encodeParameter('address', collAsset);
|
|
177
|
+
const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
|
|
179
178
|
|
|
180
|
-
const encodedDebt =
|
|
181
|
-
const encodedDebtId =
|
|
179
|
+
const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
|
|
180
|
+
const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
|
|
182
181
|
|
|
183
|
-
const encodedNullAddress =
|
|
182
|
+
const encodedNullAddress = AbiCoder.encodeParameter('address', nullAddress);
|
|
184
183
|
|
|
185
184
|
return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedNullAddress];
|
|
186
185
|
},
|
|
187
186
|
decode(subData: SubData): { collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number } {
|
|
188
|
-
const collAsset =
|
|
189
|
-
const collAssetId = Number(
|
|
187
|
+
const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
188
|
+
const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
|
|
190
189
|
|
|
191
|
-
const debtAsset =
|
|
192
|
-
const debtAssetId = Number(
|
|
190
|
+
const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
191
|
+
const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
|
|
193
192
|
|
|
194
193
|
return {
|
|
195
194
|
collAsset, collAssetId, debtAsset, debtAssetId,
|
|
@@ -215,7 +214,7 @@ export const compoundV2LeverageManagementSubData = {
|
|
|
215
214
|
];
|
|
216
215
|
},
|
|
217
216
|
decode(subData: SubData): { targetRatio: number } {
|
|
218
|
-
const weiRatio =
|
|
217
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
219
218
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
220
219
|
|
|
221
220
|
return { targetRatio };
|
|
@@ -245,7 +244,7 @@ export const compoundV3LeverageManagementSubData = {
|
|
|
245
244
|
];
|
|
246
245
|
},
|
|
247
246
|
decode(subData: SubData): { targetRatio: number } {
|
|
248
|
-
const weiRatio =
|
|
247
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
|
|
249
248
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
250
249
|
|
|
251
250
|
return { targetRatio };
|
|
@@ -270,7 +269,7 @@ export const morphoAaveV2LeverageManagementSubData = {
|
|
|
270
269
|
];
|
|
271
270
|
},
|
|
272
271
|
decode(subData: SubData): { targetRatio: number } {
|
|
273
|
-
const ratioWei =
|
|
272
|
+
const ratioWei = AbiCoder.decodeParameter('uint128', subData[1]) as any as string;
|
|
274
273
|
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
275
274
|
|
|
276
275
|
return { targetRatio };
|
|
@@ -279,11 +278,11 @@ export const morphoAaveV2LeverageManagementSubData = {
|
|
|
279
278
|
|
|
280
279
|
export const cBondsRebondSubData = {
|
|
281
280
|
encode(bondId: number | string): SubData {
|
|
282
|
-
const bondIdEncoded =
|
|
281
|
+
const bondIdEncoded = AbiCoder.encodeParameter('uint256', bondId);
|
|
283
282
|
return [bondIdEncoded];
|
|
284
283
|
},
|
|
285
284
|
decode(subData: SubData): { bondId: string } {
|
|
286
|
-
const bondId =
|
|
285
|
+
const bondId = AbiCoder.decodeParameter('uint256', subData[1])!.toString();
|
|
287
286
|
return { bondId };
|
|
288
287
|
},
|
|
289
288
|
};
|
|
@@ -295,16 +294,16 @@ export const liquityPaybackUsingChickenBondSubData = {
|
|
|
295
294
|
* @param chainId
|
|
296
295
|
*/
|
|
297
296
|
encode: (sourceId: string, sourceType: number, chainId: ChainId = ChainId.Ethereum): SubData => {
|
|
298
|
-
const sourceIdEncoded =
|
|
299
|
-
const sourceTypeEncoded =
|
|
300
|
-
const lusdAddressEncoded =
|
|
301
|
-
const bLusdAddressEncoded =
|
|
297
|
+
const sourceIdEncoded = AbiCoder.encodeParameter('uint256', sourceId);
|
|
298
|
+
const sourceTypeEncoded = AbiCoder.encodeParameter('uint256', sourceType);
|
|
299
|
+
const lusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('LUSD', chainId).address);
|
|
300
|
+
const bLusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('bLUSD', chainId).address);
|
|
302
301
|
|
|
303
302
|
return [sourceIdEncoded, sourceTypeEncoded, lusdAddressEncoded, bLusdAddressEncoded];
|
|
304
303
|
},
|
|
305
304
|
decode: (subData: SubData) => {
|
|
306
|
-
const sourceId =
|
|
307
|
-
const sourceType =
|
|
305
|
+
const sourceId = AbiCoder.decodeParameter('uint256', subData[0])!.toString();
|
|
306
|
+
const sourceType = AbiCoder.decodeParameter('uint256', subData[1])!.toString();
|
|
308
307
|
|
|
309
308
|
return { sourceId, sourceType };
|
|
310
309
|
},
|
|
@@ -312,18 +311,18 @@ export const liquityPaybackUsingChickenBondSubData = {
|
|
|
312
311
|
|
|
313
312
|
export const exchangeDcaSubData = {
|
|
314
313
|
encode: (fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, interval: number) : SubData => {
|
|
315
|
-
const sellTokenEncoded =
|
|
316
|
-
const buyTokenEncoded =
|
|
317
|
-
const amountEncoded =
|
|
318
|
-
const intervalEncoded =
|
|
314
|
+
const sellTokenEncoded = AbiCoder.encodeParameter('address', fromToken);
|
|
315
|
+
const buyTokenEncoded = AbiCoder.encodeParameter('address', toToken);
|
|
316
|
+
const amountEncoded = AbiCoder.encodeParameter('uint256', amount);
|
|
317
|
+
const intervalEncoded = AbiCoder.encodeParameter('uint256', interval);
|
|
319
318
|
|
|
320
319
|
return [sellTokenEncoded, buyTokenEncoded, amountEncoded, intervalEncoded];
|
|
321
320
|
},
|
|
322
321
|
decode: (subData: SubData, chainId: ChainId) => {
|
|
323
|
-
const fromToken =
|
|
324
|
-
const toToken =
|
|
325
|
-
const amount = assetAmountInEth(
|
|
326
|
-
const interval =
|
|
322
|
+
const fromToken = AbiCoder.decodeParameter('address', subData[0])!.toString();
|
|
323
|
+
const toToken = AbiCoder.decodeParameter('address', subData[1])!.toString();
|
|
324
|
+
const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2])!.toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
|
|
325
|
+
const interval = AbiCoder.decodeParameter('uint256', subData[3])!.toString();
|
|
327
326
|
return {
|
|
328
327
|
fromToken,
|
|
329
328
|
toToken,
|
|
@@ -345,16 +344,16 @@ export const exchangeLimitOrderSubData = {
|
|
|
345
344
|
];
|
|
346
345
|
},
|
|
347
346
|
decode: (subData: SubData, chainId: ChainId) => {
|
|
348
|
-
const fromToken =
|
|
349
|
-
const toToken =
|
|
350
|
-
const amount = assetAmountInEth(
|
|
347
|
+
const fromToken = AbiCoder.decodeParameter('address', subData[0])!.toString();
|
|
348
|
+
const toToken = AbiCoder.decodeParameter('address', subData[1])!.toString();
|
|
349
|
+
const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2])!.toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
|
|
351
350
|
return { fromToken, toToken, amount };
|
|
352
351
|
},
|
|
353
352
|
};
|
|
354
353
|
|
|
355
354
|
export const sparkLeverageManagementSubData = { // TODO encode?
|
|
356
355
|
decode(subData: SubData): { targetRatio: number } {
|
|
357
|
-
const ratioWei =
|
|
356
|
+
const ratioWei = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
358
357
|
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
359
358
|
|
|
360
359
|
return { targetRatio };
|
|
@@ -369,22 +368,22 @@ export const sparkQuotePriceSubData = {
|
|
|
369
368
|
debtAssetId: number,
|
|
370
369
|
nullAddress: EthereumAddress = ZERO_ADDRESS,
|
|
371
370
|
): SubData {
|
|
372
|
-
const encodedColl =
|
|
373
|
-
const encodedCollId =
|
|
371
|
+
const encodedColl = AbiCoder.encodeParameter('address', collAsset);
|
|
372
|
+
const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
|
|
374
373
|
|
|
375
|
-
const encodedDebt =
|
|
376
|
-
const encodedDebtId =
|
|
374
|
+
const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
|
|
375
|
+
const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
|
|
377
376
|
|
|
378
|
-
const encodedNullAddress =
|
|
377
|
+
const encodedNullAddress = AbiCoder.encodeParameter('address', nullAddress);
|
|
379
378
|
|
|
380
379
|
return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedNullAddress];
|
|
381
380
|
},
|
|
382
381
|
decode(subData: SubData): { collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number } {
|
|
383
|
-
const collAsset =
|
|
384
|
-
const collAssetId = Number(
|
|
382
|
+
const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
383
|
+
const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
|
|
385
384
|
|
|
386
|
-
const debtAsset =
|
|
387
|
-
const debtAssetId = Number(
|
|
385
|
+
const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
386
|
+
const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
|
|
388
387
|
|
|
389
388
|
return {
|
|
390
389
|
collAsset, collAssetId, debtAsset, debtAssetId,
|
|
@@ -397,15 +396,15 @@ export const liquityDsrPaybackSubData = {
|
|
|
397
396
|
const daiAddress = getAssetInfo('DAI').address;
|
|
398
397
|
const lusdAddress = getAssetInfo('LUSD').address;
|
|
399
398
|
|
|
400
|
-
const ratioStateEncoded =
|
|
401
|
-
const targetRatioEncoded =
|
|
402
|
-
const daiAddressEncoded =
|
|
403
|
-
const lusdAddressEncoded =
|
|
399
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', RatioState.UNDER);
|
|
400
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
401
|
+
const daiAddressEncoded = AbiCoder.encodeParameter('address', daiAddress);
|
|
402
|
+
const lusdAddressEncoded = AbiCoder.encodeParameter('address', lusdAddress);
|
|
404
403
|
|
|
405
404
|
return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, lusdAddressEncoded];
|
|
406
405
|
},
|
|
407
406
|
decode: (subData: SubData) => {
|
|
408
|
-
const weiRatio =
|
|
407
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
409
408
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
410
409
|
return { targetRatio };
|
|
411
410
|
},
|
|
@@ -416,15 +415,15 @@ export const liquityDsrSupplySubData = {
|
|
|
416
415
|
const daiAddress = getAssetInfo('DAI').address;
|
|
417
416
|
const wethAddress = getAssetInfo('WETH').address;
|
|
418
417
|
|
|
419
|
-
const ratioStateEncoded =
|
|
420
|
-
const targetRatioEncoded =
|
|
421
|
-
const daiAddressEncoded =
|
|
422
|
-
const wethAddressEncoded =
|
|
418
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', RatioState.UNDER);
|
|
419
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
420
|
+
const daiAddressEncoded = AbiCoder.encodeParameter('address', daiAddress);
|
|
421
|
+
const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
|
|
423
422
|
|
|
424
423
|
return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, wethAddressEncoded];
|
|
425
424
|
},
|
|
426
425
|
decode: (subData: SubData) => {
|
|
427
|
-
const weiRatio =
|
|
426
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
428
427
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
429
428
|
return { targetRatio };
|
|
430
429
|
},
|