@defisaver/automation-sdk 2.0.2 → 2.0.4
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 +132 -105
- package/esm/services/strategySubService.js +90 -61
- package/esm/services/subDataService.d.ts +5 -0
- package/esm/services/subDataService.js +158 -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/strategiesService.ts +2 -2
- package/src/services/subDataService.ts +84 -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 +7045 -4124
- 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>(
|
|
@@ -535,8 +535,8 @@ function parseLiquitySavingsLiqProtection(position: Position.Automated, parseDat
|
|
|
535
535
|
|
|
536
536
|
const { subStruct } = parseData.subscriptionEventData;
|
|
537
537
|
|
|
538
|
-
const triggerData = triggerService.
|
|
539
|
-
const subData = subDataService.
|
|
538
|
+
const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
|
|
539
|
+
const subData = subDataService.liquityRepayFromSavingsSubData.decode(subStruct.subData);
|
|
540
540
|
|
|
541
541
|
_position.strategyData.decoded.triggerData = triggerData;
|
|
542
542
|
_position.strategyData.decoded.subData = subData;
|
|
@@ -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,
|
|
@@ -46,6 +45,15 @@ export const makerRepayFromSavingsSubData = {
|
|
|
46
45
|
},
|
|
47
46
|
};
|
|
48
47
|
|
|
48
|
+
export const liquityRepayFromSavingsSubData = {
|
|
49
|
+
decode(subData: SubData): { targetRatio: number } {
|
|
50
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
51
|
+
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
52
|
+
|
|
53
|
+
return { targetRatio };
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
49
57
|
export const makerCloseSubData = {
|
|
50
58
|
encode(
|
|
51
59
|
vaultId: number,
|
|
@@ -58,23 +66,23 @@ export const makerCloseSubData = {
|
|
|
58
66
|
// @ts-ignore // TODO - this requires change in @defisaver/tokens
|
|
59
67
|
const _mcdCdpManagerAddr = mcdCdpManagerAddr || otherAddresses(chainId).McdCdpManager;
|
|
60
68
|
|
|
61
|
-
const vaultIdEncoded =
|
|
62
|
-
const daiAddrEncoded =
|
|
63
|
-
const mcdManagerAddrEncoded =
|
|
69
|
+
const vaultIdEncoded = AbiCoder.encodeParameter('uint256', vaultId.toString());
|
|
70
|
+
const daiAddrEncoded = AbiCoder.encodeParameter('address', _daiAddr);
|
|
71
|
+
const mcdManagerAddrEncoded = AbiCoder.encodeParameter('address', _mcdCdpManagerAddr);
|
|
64
72
|
|
|
65
73
|
if (compareAddresses(closeToAssetAddr, _daiAddr)) {
|
|
66
74
|
// Close to DAI strategy
|
|
67
75
|
return [vaultIdEncoded, daiAddrEncoded, mcdManagerAddrEncoded];
|
|
68
76
|
}
|
|
69
77
|
// Close to collateral strategy
|
|
70
|
-
const collAddrEncoded =
|
|
78
|
+
const collAddrEncoded = AbiCoder.encodeParameter('address', closeToAssetAddr);
|
|
71
79
|
return [vaultIdEncoded, collAddrEncoded, daiAddrEncoded, mcdManagerAddrEncoded];
|
|
72
80
|
},
|
|
73
81
|
decode(subData: SubData): { vaultId: number, closeToAssetAddr: EthereumAddress } {
|
|
74
|
-
const vaultId = +
|
|
82
|
+
const vaultId = +AbiCoder.decodeParameter('uint256', subData[0])!;
|
|
75
83
|
// if closing to collateral, asset addr will be 2nd param out of 4
|
|
76
84
|
// if closing to DAI, will return 2nd param out of 3, which will be DAI addr
|
|
77
|
-
const closeToAssetAddr =
|
|
85
|
+
const closeToAssetAddr = AbiCoder.decodeParameter('address', subData[1])!.toString().toLowerCase();
|
|
78
86
|
|
|
79
87
|
return {
|
|
80
88
|
vaultId, closeToAssetAddr,
|
|
@@ -92,15 +100,15 @@ export const makerLeverageManagementSubData = {
|
|
|
92
100
|
// boostEnabled,
|
|
93
101
|
// ],
|
|
94
102
|
decode: (subData:SubData) => {
|
|
95
|
-
const vaultId = +
|
|
96
|
-
const weiRatio =
|
|
103
|
+
const vaultId = +AbiCoder.decodeParameter('uint256', subData[0])!.toString();
|
|
104
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
97
105
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
98
106
|
return { vaultId, targetRatio };
|
|
99
107
|
},
|
|
100
108
|
};
|
|
101
109
|
export const liquityLeverageManagementSubData = {
|
|
102
110
|
decode: (subData:SubData) => {
|
|
103
|
-
const weiRatio =
|
|
111
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
104
112
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
105
113
|
return { targetRatio };
|
|
106
114
|
},
|
|
@@ -115,8 +123,8 @@ export const liquityCloseSubData = {
|
|
|
115
123
|
const _collAddr = collAddr || getAssetInfo('WETH', chainId).address;
|
|
116
124
|
const _debtAddr = debtAddr || getAssetInfo('LUSD', chainId).address;
|
|
117
125
|
|
|
118
|
-
const collAddrEncoded =
|
|
119
|
-
const debtAddrEncoded =
|
|
126
|
+
const collAddrEncoded = AbiCoder.encodeParameter('address', _collAddr);
|
|
127
|
+
const debtAddrEncoded = AbiCoder.encodeParameter('address', _debtAddr);
|
|
120
128
|
// if (compareAddresses(closeToAssetAddr, daiAddr)) { // TODO - Uhm, wth?
|
|
121
129
|
// // close to LUSD strategy
|
|
122
130
|
// return [daiAddrEncoded, mcdManagerAddrEncoded];
|
|
@@ -125,8 +133,8 @@ export const liquityCloseSubData = {
|
|
|
125
133
|
return [collAddrEncoded, debtAddrEncoded];
|
|
126
134
|
},
|
|
127
135
|
decode(subData: SubData): { closeToAssetAddr: EthereumAddress, debtAddr: string } {
|
|
128
|
-
const closeToAssetAddr =
|
|
129
|
-
const debtAddr =
|
|
136
|
+
const closeToAssetAddr = AbiCoder.decodeParameter('address', subData[0])!.toString().toLowerCase();
|
|
137
|
+
const debtAddr = AbiCoder.decodeParameter('address', subData[1])!.toString().toLowerCase();
|
|
130
138
|
|
|
131
139
|
return { closeToAssetAddr, debtAddr };
|
|
132
140
|
},
|
|
@@ -150,7 +158,7 @@ export const aaveV2LeverageManagementSubData = {
|
|
|
150
158
|
];
|
|
151
159
|
},
|
|
152
160
|
decode(subData: SubData): { targetRatio: number } {
|
|
153
|
-
const ratioWei =
|
|
161
|
+
const ratioWei = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
154
162
|
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
155
163
|
|
|
156
164
|
return { targetRatio };
|
|
@@ -159,7 +167,7 @@ export const aaveV2LeverageManagementSubData = {
|
|
|
159
167
|
|
|
160
168
|
export const aaveV3LeverageManagementSubData = { // TODO encode?
|
|
161
169
|
decode(subData: SubData): { targetRatio: number } {
|
|
162
|
-
const ratioWei =
|
|
170
|
+
const ratioWei = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
163
171
|
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
164
172
|
|
|
165
173
|
return { targetRatio };
|
|
@@ -174,22 +182,22 @@ export const aaveV3QuotePriceSubData = {
|
|
|
174
182
|
debtAssetId: number,
|
|
175
183
|
nullAddress: EthereumAddress = ZERO_ADDRESS,
|
|
176
184
|
): SubData {
|
|
177
|
-
const encodedColl =
|
|
178
|
-
const encodedCollId =
|
|
185
|
+
const encodedColl = AbiCoder.encodeParameter('address', collAsset);
|
|
186
|
+
const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
|
|
179
187
|
|
|
180
|
-
const encodedDebt =
|
|
181
|
-
const encodedDebtId =
|
|
188
|
+
const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
|
|
189
|
+
const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
|
|
182
190
|
|
|
183
|
-
const encodedNullAddress =
|
|
191
|
+
const encodedNullAddress = AbiCoder.encodeParameter('address', nullAddress);
|
|
184
192
|
|
|
185
193
|
return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedNullAddress];
|
|
186
194
|
},
|
|
187
195
|
decode(subData: SubData): { collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number } {
|
|
188
|
-
const collAsset =
|
|
189
|
-
const collAssetId = Number(
|
|
196
|
+
const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
197
|
+
const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
|
|
190
198
|
|
|
191
|
-
const debtAsset =
|
|
192
|
-
const debtAssetId = Number(
|
|
199
|
+
const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
200
|
+
const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
|
|
193
201
|
|
|
194
202
|
return {
|
|
195
203
|
collAsset, collAssetId, debtAsset, debtAssetId,
|
|
@@ -215,7 +223,7 @@ export const compoundV2LeverageManagementSubData = {
|
|
|
215
223
|
];
|
|
216
224
|
},
|
|
217
225
|
decode(subData: SubData): { targetRatio: number } {
|
|
218
|
-
const weiRatio =
|
|
226
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
219
227
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
220
228
|
|
|
221
229
|
return { targetRatio };
|
|
@@ -245,7 +253,7 @@ export const compoundV3LeverageManagementSubData = {
|
|
|
245
253
|
];
|
|
246
254
|
},
|
|
247
255
|
decode(subData: SubData): { targetRatio: number } {
|
|
248
|
-
const weiRatio =
|
|
256
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
|
|
249
257
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
250
258
|
|
|
251
259
|
return { targetRatio };
|
|
@@ -270,7 +278,7 @@ export const morphoAaveV2LeverageManagementSubData = {
|
|
|
270
278
|
];
|
|
271
279
|
},
|
|
272
280
|
decode(subData: SubData): { targetRatio: number } {
|
|
273
|
-
const ratioWei =
|
|
281
|
+
const ratioWei = AbiCoder.decodeParameter('uint128', subData[1]) as any as string;
|
|
274
282
|
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
275
283
|
|
|
276
284
|
return { targetRatio };
|
|
@@ -279,11 +287,11 @@ export const morphoAaveV2LeverageManagementSubData = {
|
|
|
279
287
|
|
|
280
288
|
export const cBondsRebondSubData = {
|
|
281
289
|
encode(bondId: number | string): SubData {
|
|
282
|
-
const bondIdEncoded =
|
|
290
|
+
const bondIdEncoded = AbiCoder.encodeParameter('uint256', bondId);
|
|
283
291
|
return [bondIdEncoded];
|
|
284
292
|
},
|
|
285
293
|
decode(subData: SubData): { bondId: string } {
|
|
286
|
-
const bondId =
|
|
294
|
+
const bondId = AbiCoder.decodeParameter('uint256', subData[1])!.toString();
|
|
287
295
|
return { bondId };
|
|
288
296
|
},
|
|
289
297
|
};
|
|
@@ -295,16 +303,16 @@ export const liquityPaybackUsingChickenBondSubData = {
|
|
|
295
303
|
* @param chainId
|
|
296
304
|
*/
|
|
297
305
|
encode: (sourceId: string, sourceType: number, chainId: ChainId = ChainId.Ethereum): SubData => {
|
|
298
|
-
const sourceIdEncoded =
|
|
299
|
-
const sourceTypeEncoded =
|
|
300
|
-
const lusdAddressEncoded =
|
|
301
|
-
const bLusdAddressEncoded =
|
|
306
|
+
const sourceIdEncoded = AbiCoder.encodeParameter('uint256', sourceId);
|
|
307
|
+
const sourceTypeEncoded = AbiCoder.encodeParameter('uint256', sourceType);
|
|
308
|
+
const lusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('LUSD', chainId).address);
|
|
309
|
+
const bLusdAddressEncoded = AbiCoder.encodeParameter('address', getAssetInfo('bLUSD', chainId).address);
|
|
302
310
|
|
|
303
311
|
return [sourceIdEncoded, sourceTypeEncoded, lusdAddressEncoded, bLusdAddressEncoded];
|
|
304
312
|
},
|
|
305
313
|
decode: (subData: SubData) => {
|
|
306
|
-
const sourceId =
|
|
307
|
-
const sourceType =
|
|
314
|
+
const sourceId = AbiCoder.decodeParameter('uint256', subData[0])!.toString();
|
|
315
|
+
const sourceType = AbiCoder.decodeParameter('uint256', subData[1])!.toString();
|
|
308
316
|
|
|
309
317
|
return { sourceId, sourceType };
|
|
310
318
|
},
|
|
@@ -312,18 +320,18 @@ export const liquityPaybackUsingChickenBondSubData = {
|
|
|
312
320
|
|
|
313
321
|
export const exchangeDcaSubData = {
|
|
314
322
|
encode: (fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, interval: number) : SubData => {
|
|
315
|
-
const sellTokenEncoded =
|
|
316
|
-
const buyTokenEncoded =
|
|
317
|
-
const amountEncoded =
|
|
318
|
-
const intervalEncoded =
|
|
323
|
+
const sellTokenEncoded = AbiCoder.encodeParameter('address', fromToken);
|
|
324
|
+
const buyTokenEncoded = AbiCoder.encodeParameter('address', toToken);
|
|
325
|
+
const amountEncoded = AbiCoder.encodeParameter('uint256', amount);
|
|
326
|
+
const intervalEncoded = AbiCoder.encodeParameter('uint256', interval);
|
|
319
327
|
|
|
320
328
|
return [sellTokenEncoded, buyTokenEncoded, amountEncoded, intervalEncoded];
|
|
321
329
|
},
|
|
322
330
|
decode: (subData: SubData, chainId: ChainId) => {
|
|
323
|
-
const fromToken =
|
|
324
|
-
const toToken =
|
|
325
|
-
const amount = assetAmountInEth(
|
|
326
|
-
const interval =
|
|
331
|
+
const fromToken = AbiCoder.decodeParameter('address', subData[0])!.toString();
|
|
332
|
+
const toToken = AbiCoder.decodeParameter('address', subData[1])!.toString();
|
|
333
|
+
const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2])!.toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
|
|
334
|
+
const interval = AbiCoder.decodeParameter('uint256', subData[3])!.toString();
|
|
327
335
|
return {
|
|
328
336
|
fromToken,
|
|
329
337
|
toToken,
|
|
@@ -345,16 +353,16 @@ export const exchangeLimitOrderSubData = {
|
|
|
345
353
|
];
|
|
346
354
|
},
|
|
347
355
|
decode: (subData: SubData, chainId: ChainId) => {
|
|
348
|
-
const fromToken =
|
|
349
|
-
const toToken =
|
|
350
|
-
const amount = assetAmountInEth(
|
|
356
|
+
const fromToken = AbiCoder.decodeParameter('address', subData[0])!.toString();
|
|
357
|
+
const toToken = AbiCoder.decodeParameter('address', subData[1])!.toString();
|
|
358
|
+
const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2])!.toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
|
|
351
359
|
return { fromToken, toToken, amount };
|
|
352
360
|
},
|
|
353
361
|
};
|
|
354
362
|
|
|
355
363
|
export const sparkLeverageManagementSubData = { // TODO encode?
|
|
356
364
|
decode(subData: SubData): { targetRatio: number } {
|
|
357
|
-
const ratioWei =
|
|
365
|
+
const ratioWei = AbiCoder.decodeParameter('uint256', subData[0]) as any as string;
|
|
358
366
|
const targetRatio = weiToRatioPercentage(ratioWei);
|
|
359
367
|
|
|
360
368
|
return { targetRatio };
|
|
@@ -369,22 +377,22 @@ export const sparkQuotePriceSubData = {
|
|
|
369
377
|
debtAssetId: number,
|
|
370
378
|
nullAddress: EthereumAddress = ZERO_ADDRESS,
|
|
371
379
|
): SubData {
|
|
372
|
-
const encodedColl =
|
|
373
|
-
const encodedCollId =
|
|
380
|
+
const encodedColl = AbiCoder.encodeParameter('address', collAsset);
|
|
381
|
+
const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
|
|
374
382
|
|
|
375
|
-
const encodedDebt =
|
|
376
|
-
const encodedDebtId =
|
|
383
|
+
const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
|
|
384
|
+
const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
|
|
377
385
|
|
|
378
|
-
const encodedNullAddress =
|
|
386
|
+
const encodedNullAddress = AbiCoder.encodeParameter('address', nullAddress);
|
|
379
387
|
|
|
380
388
|
return [encodedColl, encodedCollId, encodedDebt, encodedDebtId, encodedNullAddress];
|
|
381
389
|
},
|
|
382
390
|
decode(subData: SubData): { collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number } {
|
|
383
|
-
const collAsset =
|
|
384
|
-
const collAssetId = Number(
|
|
391
|
+
const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
|
|
392
|
+
const collAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
|
|
385
393
|
|
|
386
|
-
const debtAsset =
|
|
387
|
-
const debtAssetId = Number(
|
|
394
|
+
const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
|
|
395
|
+
const debtAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
|
|
388
396
|
|
|
389
397
|
return {
|
|
390
398
|
collAsset, collAssetId, debtAsset, debtAssetId,
|
|
@@ -397,15 +405,15 @@ export const liquityDsrPaybackSubData = {
|
|
|
397
405
|
const daiAddress = getAssetInfo('DAI').address;
|
|
398
406
|
const lusdAddress = getAssetInfo('LUSD').address;
|
|
399
407
|
|
|
400
|
-
const ratioStateEncoded =
|
|
401
|
-
const targetRatioEncoded =
|
|
402
|
-
const daiAddressEncoded =
|
|
403
|
-
const lusdAddressEncoded =
|
|
408
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', RatioState.UNDER);
|
|
409
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
410
|
+
const daiAddressEncoded = AbiCoder.encodeParameter('address', daiAddress);
|
|
411
|
+
const lusdAddressEncoded = AbiCoder.encodeParameter('address', lusdAddress);
|
|
404
412
|
|
|
405
413
|
return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, lusdAddressEncoded];
|
|
406
414
|
},
|
|
407
415
|
decode: (subData: SubData) => {
|
|
408
|
-
const weiRatio =
|
|
416
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
409
417
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
410
418
|
return { targetRatio };
|
|
411
419
|
},
|
|
@@ -416,15 +424,15 @@ export const liquityDsrSupplySubData = {
|
|
|
416
424
|
const daiAddress = getAssetInfo('DAI').address;
|
|
417
425
|
const wethAddress = getAssetInfo('WETH').address;
|
|
418
426
|
|
|
419
|
-
const ratioStateEncoded =
|
|
420
|
-
const targetRatioEncoded =
|
|
421
|
-
const daiAddressEncoded =
|
|
422
|
-
const wethAddressEncoded =
|
|
427
|
+
const ratioStateEncoded = AbiCoder.encodeParameter('uint8', RatioState.UNDER);
|
|
428
|
+
const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
|
|
429
|
+
const daiAddressEncoded = AbiCoder.encodeParameter('address', daiAddress);
|
|
430
|
+
const wethAddressEncoded = AbiCoder.encodeParameter('address', wethAddress);
|
|
423
431
|
|
|
424
432
|
return [ratioStateEncoded, targetRatioEncoded, daiAddressEncoded, wethAddressEncoded];
|
|
425
433
|
},
|
|
426
434
|
decode: (subData: SubData) => {
|
|
427
|
-
const weiRatio =
|
|
435
|
+
const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
|
|
428
436
|
const targetRatio = weiToRatioPercentage(weiRatio);
|
|
429
437
|
return { targetRatio };
|
|
430
438
|
},
|