@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.
Files changed (55) 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 +132 -105
  22. package/esm/services/strategySubService.js +90 -61
  23. package/esm/services/subDataService.d.ts +5 -0
  24. package/esm/services/subDataService.js +158 -145
  25. package/esm/services/triggerService.d.ts +5 -5
  26. package/esm/services/triggerService.js +124 -94
  27. package/esm/services/utils.js +82 -33
  28. package/esm/services/utils.test.d.ts +1 -0
  29. package/esm/services/utils.test.js +362 -0
  30. package/esm/types/contracts/generated/Erc20.js +2 -1
  31. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.js +2 -1
  32. package/esm/types/contracts/generated/Legacy_AuthCheck.js +2 -1
  33. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +2 -1
  34. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.js +2 -1
  35. package/esm/types/contracts/generated/SubStorage.js +2 -1
  36. package/esm/types/contracts/generated/UniMulticall.js +2 -1
  37. package/esm/types/contracts/generated/index.js +2 -1
  38. package/esm/types/contracts/generated/types.js +2 -1
  39. package/esm/types/enums.js +17 -14
  40. package/esm/types/index.js +2 -1
  41. package/package.json +11 -7
  42. package/src/automation/private/LegacyAutomation.ts +11 -10
  43. package/src/automation/private/StrategiesAutomation.ts +5 -6
  44. package/src/configuration.ts +0 -3
  45. package/src/index.ts +0 -1
  46. package/src/services/ethereumService.ts +6 -6
  47. package/src/services/strategiesService.ts +2 -2
  48. package/src/services/subDataService.ts +84 -76
  49. package/src/services/triggerService.ts +83 -83
  50. package/src/services/utils.test.ts +414 -0
  51. package/src/services/utils.ts +6 -7
  52. package/tsconfig.json +1 -1
  53. package/umd/index.js +7045 -4124
  54. package/src/types/typings/process.d.ts +0 -9
  55. 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>(
@@ -535,8 +535,8 @@ function parseLiquitySavingsLiqProtection(position: Position.Automated, parseDat
535
535
 
536
536
  const { subStruct } = parseData.subscriptionEventData;
537
537
 
538
- const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
539
- const subData = subDataService.makerRepayFromSavingsSubData.decode(subStruct.subData);
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 = 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,
@@ -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 = 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);
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 = mockedWeb3.eth.abi.encodeParameter('address', closeToAssetAddr);
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 = +mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]);
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[1]).toString().toLowerCase();
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 = +mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]).toString();
96
- const weiRatio = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
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 = mockedWeb3.eth.abi.encodeParameter('address', _collAddr);
119
- const debtAddrEncoded = mockedWeb3.eth.abi.encodeParameter('address', _debtAddr);
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[0]).toString().toLowerCase();
129
- const debtAddr = mockedWeb3.eth.abi.decodeParameter('address', subData[1]).toString().toLowerCase();
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]) as any as string;
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 = mockedWeb3.eth.abi.encodeParameter('address', collAsset);
178
- const encodedCollId = mockedWeb3.eth.abi.encodeParameter('uint8', collAssetId);
185
+ const encodedColl = AbiCoder.encodeParameter('address', collAsset);
186
+ const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
179
187
 
180
- const encodedDebt = mockedWeb3.eth.abi.encodeParameter('address', debtAsset);
181
- const encodedDebtId = mockedWeb3.eth.abi.encodeParameter('uint8', debtAssetId);
188
+ const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
189
+ const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
182
190
 
183
- const encodedNullAddress = mockedWeb3.eth.abi.encodeParameter('address', nullAddress);
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
189
- const collAssetId = Number(mockedWeb3.eth.abi.decodeParameter('uint8', subData[1]));
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
192
- const debtAssetId = Number(mockedWeb3.eth.abi.decodeParameter('uint8', subData[3]));
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]) as any as string;
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[3]) as any as string;
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 = mockedWeb3.eth.abi.decodeParameter('uint128', subData[1]) as any as string;
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 = mockedWeb3.eth.abi.encodeParameter('uint256', bondId);
290
+ const bondIdEncoded = AbiCoder.encodeParameter('uint256', bondId);
283
291
  return [bondIdEncoded];
284
292
  },
285
293
  decode(subData: SubData): { bondId: string } {
286
- const bondId = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]).toString();
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 = 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);
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]).toString();
307
- const sourceType = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]).toString();
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 = 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);
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 = 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();
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 = 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);
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[0]) as any as string;
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 = mockedWeb3.eth.abi.encodeParameter('address', collAsset);
373
- const encodedCollId = mockedWeb3.eth.abi.encodeParameter('uint8', collAssetId);
380
+ const encodedColl = AbiCoder.encodeParameter('address', collAsset);
381
+ const encodedCollId = AbiCoder.encodeParameter('uint8', collAssetId);
374
382
 
375
- const encodedDebt = mockedWeb3.eth.abi.encodeParameter('address', debtAsset);
376
- const encodedDebtId = mockedWeb3.eth.abi.encodeParameter('uint8', debtAssetId);
383
+ const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
384
+ const encodedDebtId = AbiCoder.encodeParameter('uint8', debtAssetId);
377
385
 
378
- const encodedNullAddress = mockedWeb3.eth.abi.encodeParameter('address', nullAddress);
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
384
- const collAssetId = Number(mockedWeb3.eth.abi.decodeParameter('uint8', subData[1]));
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 = mockedWeb3.eth.abi.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
387
- const debtAssetId = Number(mockedWeb3.eth.abi.decodeParameter('uint8', subData[3]));
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 = 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);
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
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 = 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);
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 = mockedWeb3.eth.abi.decodeParameter('uint256', subData[1]) as any as string;
435
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
428
436
  const targetRatio = weiToRatioPercentage(weiRatio);
429
437
  return { targetRatio };
430
438
  },