@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.
Files changed (53) hide show
  1. package/.eslintrc.js +1 -0
  2. package/esm/abis/index.js +27 -15
  3. package/esm/automation/private/Automation.js +9 -6
  4. package/esm/automation/private/LegacyAutomation.d.ts +5 -5
  5. package/esm/automation/private/LegacyAutomation.js +30 -23
  6. package/esm/automation/private/LegacyProtocol.js +4 -1
  7. package/esm/automation/private/Protocol.js +4 -1
  8. package/esm/automation/private/StrategiesAutomation.d.ts +2 -2
  9. package/esm/automation/private/StrategiesAutomation.js +27 -21
  10. package/esm/automation/public/ArbitrumStrategies.js +10 -4
  11. package/esm/automation/public/EthereumStrategies.js +10 -4
  12. package/esm/automation/public/OptimismStrategies.js +10 -4
  13. package/esm/automation/public/legacy/LegacyAaveAutomation.js +13 -7
  14. package/esm/automation/public/legacy/LegacyCompoundAutomation.js +13 -7
  15. package/esm/automation/public/legacy/LegacyMakerAutomation.js +13 -7
  16. package/esm/configuration.js +8 -5
  17. package/esm/constants/index.js +281 -275
  18. package/esm/index.js +57 -17
  19. package/esm/services/contractService.js +22 -14
  20. package/esm/services/ethereumService.js +18 -10
  21. package/esm/services/strategiesService.js +130 -103
  22. package/esm/services/strategySubService.js +90 -61
  23. package/esm/services/subDataService.js +151 -145
  24. package/esm/services/triggerService.d.ts +5 -5
  25. package/esm/services/triggerService.js +124 -94
  26. package/esm/services/utils.js +82 -33
  27. package/esm/services/utils.test.d.ts +1 -0
  28. package/esm/services/utils.test.js +362 -0
  29. package/esm/types/contracts/generated/Erc20.js +2 -1
  30. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.js +2 -1
  31. package/esm/types/contracts/generated/Legacy_AuthCheck.js +2 -1
  32. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +2 -1
  33. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.js +2 -1
  34. package/esm/types/contracts/generated/SubStorage.js +2 -1
  35. package/esm/types/contracts/generated/UniMulticall.js +2 -1
  36. package/esm/types/contracts/generated/index.js +2 -1
  37. package/esm/types/contracts/generated/types.js +2 -1
  38. package/esm/types/enums.js +17 -14
  39. package/esm/types/index.js +2 -1
  40. package/package.json +11 -7
  41. package/src/automation/private/LegacyAutomation.ts +11 -10
  42. package/src/automation/private/StrategiesAutomation.ts +5 -6
  43. package/src/configuration.ts +0 -3
  44. package/src/index.ts +0 -1
  45. package/src/services/ethereumService.ts +6 -6
  46. package/src/services/subDataService.ts +75 -76
  47. package/src/services/triggerService.ts +83 -83
  48. package/src/services/utils.test.ts +414 -0
  49. package/src/services/utils.ts +6 -7
  50. package/tsconfig.json +1 -1
  51. package/umd/index.js +7016 -4105
  52. package/src/types/typings/process.d.ts +0 -9
  53. package/yarn-error.log +0 -7233
@@ -1,8 +1,5 @@
1
- import Web3 from 'web3';
2
1
  import Dec from 'decimal.js';
3
2
 
4
- process.mockedWeb3 = new Web3('');
5
-
6
3
  Dec.set({
7
4
  rounding: Dec.ROUND_DOWN,
8
5
  toExpPos: 9e15,
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: mockedWeb3.eth.abi.encodeFunctionCall(call.abiItem, call.params),
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
- ? mockedWeb3.eth.abi.decodeParameters(calls[i].abiItem.outputs!, result)
37
- : undefined) as Multicall.Payload;
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 = mockedWeb3.eth.abi.encodeParameter('uint256', vaultId.toString());
25
+ const vaultIdEncoded = AbiCoder.encodeParameter('uint256', vaultId.toString());
27
26
  const targetRatioWei = ratioPercentageToWei(targetRatioPercentage);
28
- const targetRatioEncoded = mockedWeb3.eth.abi.encodeParameter('uint256', targetRatioWei);
29
- const daiAddrEncoded = mockedWeb3.eth.abi.encodeParameter('address', _daiAddr);
30
- const mcdManagerAddrEncoded = mockedWeb3.eth.abi.encodeParameter('address', _mcdCdpManagerAddr);
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 = +mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]).toString();
34
+ const vaultId = +AbiCoder.decodeParameter('uint256', subData[0])!.toString();
36
35
 
37
- const weiRatio = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
36
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
38
37
  const targetRatio = weiToRatioPercentage(weiRatio);
39
38
 
40
- const daiAddr = mockedWeb3.eth.abi.decodeParameter('address', subData[2]).toString();
41
- const mcdManagerAddr = mockedWeb3.eth.abi.decodeParameter('address', subData[3]).toString();
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 = mockedWeb3.eth.abi.encodeParameter('uint256', vaultId.toString());
62
- const daiAddrEncoded = mockedWeb3.eth.abi.encodeParameter('address', _daiAddr);
63
- const mcdManagerAddrEncoded = mockedWeb3.eth.abi.encodeParameter('address', _mcdCdpManagerAddr);
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 = mockedWeb3.eth.abi.encodeParameter('address', closeToAssetAddr);
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 = +mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]);
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[1]).toString().toLowerCase();
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 = +mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]).toString();
96
- const weiRatio = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
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 = mockedWeb3.eth.abi.encodeParameter('address', _collAddr);
119
- const debtAddrEncoded = mockedWeb3.eth.abi.encodeParameter('address', _debtAddr);
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[0]).toString().toLowerCase();
129
- const debtAddr = mockedWeb3.eth.abi.decodeParameter('address', subData[1]).toString().toLowerCase();
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]) as any as string;
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 = mockedWeb3.eth.abi.encodeParameter('address', collAsset);
178
- const encodedCollId = mockedWeb3.eth.abi.encodeParameter('uint8', collAssetId);
176
+ const encodedColl = AbiCoder.encodeParameter('address', collAsset);
177
+ const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
179
178
 
180
- const encodedDebt = mockedWeb3.eth.abi.encodeParameter('address', debtAsset);
181
- const encodedDebtId = mockedWeb3.eth.abi.encodeParameter('uint8', debtAssetId);
179
+ const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
180
+ const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
182
181
 
183
- const encodedNullAddress = mockedWeb3.eth.abi.encodeParameter('address', nullAddress);
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
189
- const collAssetId = Number(mockedWeb3.eth.abi.decodeParameter('uint8', subData[1]));
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
192
- const debtAssetId = Number(mockedWeb3.eth.abi.decodeParameter('uint8', subData[3]));
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]) as any as string;
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[3]) as any as string;
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 = mockedWeb3.eth.abi.decodeParameter('uint128', subData[1]) as any as string;
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 = mockedWeb3.eth.abi.encodeParameter('uint256', bondId);
281
+ const bondIdEncoded = AbiCoder.encodeParameter('uint256', bondId);
283
282
  return [bondIdEncoded];
284
283
  },
285
284
  decode(subData: SubData): { bondId: string } {
286
- const bondId = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]).toString();
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 = mockedWeb3.eth.abi.encodeParameter('uint256', sourceId);
299
- const sourceTypeEncoded = mockedWeb3.eth.abi.encodeParameter('uint256', sourceType);
300
- const lusdAddressEncoded = mockedWeb3.eth.abi.encodeParameter('address', getAssetInfo('LUSD', chainId).address);
301
- const bLusdAddressEncoded = mockedWeb3.eth.abi.encodeParameter('address', getAssetInfo('bLUSD', chainId).address);
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]).toString();
307
- const sourceType = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]).toString();
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 = mockedWeb3.eth.abi.encodeParameter('address', fromToken);
316
- const buyTokenEncoded = mockedWeb3.eth.abi.encodeParameter('address', toToken);
317
- const amountEncoded = mockedWeb3.eth.abi.encodeParameter('uint256', amount);
318
- const intervalEncoded = mockedWeb3.eth.abi.encodeParameter('uint256', interval);
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[0]).toString();
324
- const toToken = mockedWeb3.eth.abi.decodeParameter('address', subData[1]).toString();
325
- const amount = assetAmountInEth(mockedWeb3.eth.abi.decodeParameter('uint256', subData[2]).toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
326
- const interval = mockedWeb3.eth.abi.decodeParameter('uint256', subData[3]).toString();
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[0]).toString();
349
- const toToken = mockedWeb3.eth.abi.decodeParameter('address', subData[1]).toString();
350
- const amount = assetAmountInEth(mockedWeb3.eth.abi.decodeParameter('uint256', subData[2]).toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]) as any as string;
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 = mockedWeb3.eth.abi.encodeParameter('address', collAsset);
373
- const encodedCollId = mockedWeb3.eth.abi.encodeParameter('uint8', collAssetId);
371
+ const encodedColl = AbiCoder.encodeParameter('address', collAsset);
372
+ const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
374
373
 
375
- const encodedDebt = mockedWeb3.eth.abi.encodeParameter('address', debtAsset);
376
- const encodedDebtId = mockedWeb3.eth.abi.encodeParameter('uint8', debtAssetId);
374
+ const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
375
+ const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
377
376
 
378
- const encodedNullAddress = mockedWeb3.eth.abi.encodeParameter('address', nullAddress);
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
384
- const collAssetId = Number(mockedWeb3.eth.abi.decodeParameter('uint8', subData[1]));
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
387
- const debtAssetId = Number(mockedWeb3.eth.abi.decodeParameter('uint8', subData[3]));
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 = mockedWeb3.eth.abi.encodeParameter('uint8', RatioState.UNDER);
401
- const targetRatioEncoded = mockedWeb3.eth.abi.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
402
- const daiAddressEncoded = mockedWeb3.eth.abi.encodeParameter('address', daiAddress);
403
- const lusdAddressEncoded = mockedWeb3.eth.abi.encodeParameter('address', lusdAddress);
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
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 = mockedWeb3.eth.abi.encodeParameter('uint8', RatioState.UNDER);
420
- const targetRatioEncoded = mockedWeb3.eth.abi.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
421
- const daiAddressEncoded = mockedWeb3.eth.abi.encodeParameter('address', daiAddress);
422
- const wethAddressEncoded = mockedWeb3.eth.abi.encodeParameter('address', wethAddress);
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
426
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
428
427
  const targetRatio = weiToRatioPercentage(weiRatio);
429
428
  return { targetRatio };
430
429
  },