@instadapp/interop-x 0.0.0-dev.20e87fa → 0.0.0-dev.2187d72

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 (86) hide show
  1. package/dist/package.json +8 -1
  2. package/dist/src/abi/aaveV2Resolver.json +832 -0
  3. package/dist/src/abi/balanceResolver.json +211 -0
  4. package/dist/src/abi/index.js +4 -0
  5. package/dist/src/api/index.js +7 -0
  6. package/dist/src/constants/addresses.js +5 -1
  7. package/dist/src/constants/capPerChain.js +8 -0
  8. package/dist/src/constants/index.js +2 -0
  9. package/dist/src/constants/tokens.js +44 -44
  10. package/dist/src/constants/wrappedNativeToken.js +8 -0
  11. package/dist/src/crons/index.js +3 -0
  12. package/dist/src/crons/prices.js +16 -0
  13. package/dist/src/db/models/transaction.js +4 -0
  14. package/dist/src/errors/index.js +30 -0
  15. package/dist/src/gnosis/actions/aaveV2/source.js +2 -1
  16. package/dist/src/gnosis/actions/aaveV2/target.js +3 -2
  17. package/dist/src/index.js +2 -1
  18. package/dist/src/providers/index.js +17 -0
  19. package/dist/src/providers/retry-provider.js +45 -0
  20. package/dist/src/services/Prices.js +74 -0
  21. package/dist/src/services/index.js +8 -0
  22. package/dist/src/tasks/InteropX/{ProcessSubmitSubmitEvents.js → ProcessSubmitEvents.js} +95 -8
  23. package/dist/src/tasks/InteropX/ProcessValidateEvents.js +27 -4
  24. package/dist/src/tasks/InteropX/SyncLogExecuteEvents.js +113 -0
  25. package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +2 -1
  26. package/dist/src/tasks/InteropX/SyncLogValidateEvents.js +5 -4
  27. package/dist/src/tasks/index.js +7 -5
  28. package/dist/src/typechain/AaveV2Resolver.js +2 -0
  29. package/dist/src/typechain/BalanceResolver.js +2 -0
  30. package/dist/src/typechain/factories/AaveV2Resolver__factory.js +1191 -0
  31. package/dist/src/typechain/factories/BalanceResolver__factory.js +228 -0
  32. package/dist/src/typechain/factories/index.js +5 -1
  33. package/dist/src/typechain/index.js +5 -1
  34. package/dist/src/utils/async.js +18 -0
  35. package/dist/src/utils/dsa.js +24 -0
  36. package/dist/src/utils/formatting.js +67 -0
  37. package/dist/src/utils/gnosis.js +77 -0
  38. package/dist/src/utils/http.js +10 -0
  39. package/dist/src/utils/index.js +22 -220
  40. package/dist/src/utils/interop.js +16 -0
  41. package/dist/src/utils/tokens.js +22 -0
  42. package/dist/src/utils/validate.js +111 -0
  43. package/dist/src/utils/web3.js +93 -0
  44. package/package.json +8 -1
  45. package/src/abi/aaveV2Resolver.json +832 -0
  46. package/src/abi/balanceResolver.json +211 -0
  47. package/src/abi/index.ts +4 -0
  48. package/src/api/index.ts +8 -0
  49. package/src/constants/addresses.ts +16 -2
  50. package/src/constants/capPerChain.ts +5 -0
  51. package/src/constants/index.ts +2 -0
  52. package/src/constants/tokens.ts +44 -44
  53. package/src/constants/wrappedNativeToken.ts +5 -0
  54. package/src/crons/index.ts +1 -0
  55. package/src/crons/prices.ts +12 -0
  56. package/src/db/models/transaction.ts +21 -0
  57. package/src/errors/index.ts +26 -0
  58. package/src/gnosis/actions/aaveV2/source.ts +2 -1
  59. package/src/gnosis/actions/aaveV2/target.ts +4 -2
  60. package/src/index.ts +1 -0
  61. package/src/providers/index.ts +1 -0
  62. package/src/providers/retry-provider.ts +51 -0
  63. package/src/services/Prices.ts +89 -0
  64. package/src/services/index.ts +1 -0
  65. package/src/tasks/InteropX/{ProcessSubmitSubmitEvents.ts → ProcessSubmitEvents.ts} +120 -14
  66. package/src/tasks/InteropX/ProcessValidateEvents.ts +38 -12
  67. package/src/tasks/InteropX/SyncLogExecuteEvents.ts +161 -0
  68. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +5 -6
  69. package/src/tasks/InteropX/SyncLogValidateEvents.ts +8 -9
  70. package/src/tasks/index.ts +8 -5
  71. package/src/typechain/AaveV2Resolver.ts +1017 -0
  72. package/src/typechain/BalanceResolver.ts +266 -0
  73. package/src/typechain/factories/AaveV2Resolver__factory.ts +1198 -0
  74. package/src/typechain/factories/BalanceResolver__factory.ts +235 -0
  75. package/src/typechain/factories/index.ts +2 -0
  76. package/src/typechain/index.ts +4 -0
  77. package/src/utils/async.ts +22 -0
  78. package/src/utils/dsa.ts +30 -0
  79. package/src/utils/formatting.ts +68 -0
  80. package/src/utils/gnosis.ts +155 -0
  81. package/src/utils/http.ts +6 -0
  82. package/src/utils/index.ts +9 -365
  83. package/src/utils/interop.ts +28 -0
  84. package/src/utils/tokens.ts +21 -0
  85. package/src/utils/validate.ts +174 -0
  86. package/src/utils/web3.ts +132 -0
@@ -5,12 +5,18 @@ import abi from "@/abi";
5
5
  import { Transaction } from "@/db";
6
6
  import {
7
7
  buildSignatureBytes,
8
+ chainIdToName,
9
+ generateGnosisSignatureMessage,
8
10
  generateGnosisTransaction,
9
- generateInteropTransactionHash,
11
+ getChainIdNativeSymbol,
10
12
  getContract,
13
+ getExplorerUrl,
11
14
  getRpcProviderUrl,
12
- LiquidityError,
13
15
  Signature,
16
+ validateChains,
17
+ validateLiquidityCap,
18
+ validateSourceLiquidity,
19
+ getGnosisSignatureAddress,
14
20
  } from "@/utils";
15
21
  import { addresses, blockConfirmations } from "@/constants";
16
22
  import { ChainId } from "@/types";
@@ -22,9 +28,13 @@ import { buildGnosisAction } from "@/gnosis";
22
28
  import { peerPool, protocol } from "@/net";
23
29
  import { LogDescription } from "ethers/lib/utils";
24
30
  import wait from "waait";
31
+ import { LiquidityError, UnsupportedChaindIdError } from "@/errors";
32
+ import { BigNumber } from "bignumber.js";
33
+ import dedent from "dedent";
34
+ import { JsonRpcRetryProvider } from "@/providers";
25
35
 
26
- class ProcessSubmitSubmitEvents extends BaseTask {
27
- sourceProvider: ethers.providers.JsonRpcProvider;
36
+ export default class ProcessSubmitEvents extends BaseTask {
37
+ sourceProvider: JsonRpcRetryProvider;
28
38
  sourceGnosisContract: GnosisSafe;
29
39
  sourceWallet: Wallet;
30
40
  chainId: ChainId;
@@ -33,7 +43,7 @@ class ProcessSubmitSubmitEvents extends BaseTask {
33
43
 
34
44
  constructor({ chainId }: { chainId: ChainId }) {
35
45
  super({
36
- logger: new Logger("InteropX::ProcessSubmitSubmitEvents"),
46
+ logger: new Logger("InteropX::ProcessSubmitEvents"),
37
47
  });
38
48
  this.chainId = chainId;
39
49
  }
@@ -73,6 +83,76 @@ class ProcessSubmitSubmitEvents extends BaseTask {
73
83
  transaction.sourceStatus = "proccessing";
74
84
  await transaction.save();
75
85
 
86
+ const { submitEvent: { position, sourceChainId, targetChainId } } = transaction;
87
+ try {
88
+ validateChains({ sourceChainId, targetChainId });
89
+ } catch (error) {
90
+ transaction.sourceErrors = [error.message];
91
+ transaction.sourceStatus = "failed";
92
+ transaction.targetStatus = "failed";
93
+ transaction.status = "failed";
94
+ await transaction.save();
95
+ return;
96
+ }
97
+
98
+ const walletBalance = (await this.sourceWallet.getBalance()).toString();
99
+ const currentGasPrice = (await this.sourceWallet.getGasPrice()).toString()
100
+
101
+ const minBalanceRequired = new BigNumber(currentGasPrice)
102
+ .multipliedBy(4_000_000)
103
+ .multipliedBy(2) // 2x balance
104
+
105
+ if (
106
+ new BigNumber(walletBalance).isLessThan(minBalanceRequired)
107
+ ) {
108
+ console.log(
109
+ dedent`Not enough balance in wallet ${getExplorerUrl(sourceChainId, '/address/' + this.sourceWallet.address)} on ${chainIdToName(sourceChainId)}
110
+ Balance: ${ethers.utils.parseEther(walletBalance)} ${getChainIdNativeSymbol(sourceChainId)}
111
+ Required Balance: ${ethers.utils.parseEther(minBalanceRequired.toString())}
112
+ Require more: ${ethers.utils.parseEther(minBalanceRequired.minus(walletBalance).toString())}`
113
+ );
114
+ transaction.sourceDelayUntil = moment().add({ minutes: 5 }).toDate();
115
+ transaction.sourceStatus = "pending";
116
+ await transaction.save();
117
+ return;
118
+ }
119
+
120
+ try {
121
+ await validateLiquidityCap(position, sourceChainId, targetChainId);
122
+ } catch (error) {
123
+ transaction.sourceErrors = [error.message];
124
+ transaction.sourceStatus = "failed";
125
+ transaction.targetStatus = "failed";
126
+ transaction.status = "failed";
127
+ await transaction.save();
128
+ return;
129
+ }
130
+
131
+ try {
132
+ await validateSourceLiquidity({
133
+ position,
134
+ sourceChainId,
135
+ sourceProvider: this.sourceProvider,
136
+ });
137
+ } catch (error) {
138
+ if (error instanceof UnsupportedChaindIdError) {
139
+ console.log(`Dropping transaction ${transaction.transactionHash}`);
140
+
141
+ transaction.sourceErrors = [error.message];
142
+ transaction.sourceStatus = "failed";
143
+ transaction.targetStatus = "failed";
144
+ transaction.status = "failed";
145
+ await transaction.save();
146
+ } else {
147
+ transaction.sourceStatus = "pending";
148
+ transaction.sourceDelayUntil = moment().add({ minutes: 5 }).toDate();
149
+ await transaction.save();
150
+
151
+ console.log("[validateSourceLiquidity][Warning]", error.message);
152
+ return;
153
+ }
154
+ }
155
+
76
156
  const ownersThreshold = await this.sourceGnosisContract.getThreshold();
77
157
  await wait(10000);
78
158
 
@@ -126,6 +206,8 @@ class ProcessSubmitSubmitEvents extends BaseTask {
126
206
  this.sourceGnosisContract
127
207
  );
128
208
 
209
+
210
+
129
211
  const owners = await this.sourceGnosisContract
130
212
  .getOwners()
131
213
  .then((owners) => owners.map((owner) => owner.toLowerCase()));
@@ -135,7 +217,7 @@ class ProcessSubmitSubmitEvents extends BaseTask {
135
217
  .map((peer) => peer.id);
136
218
 
137
219
  console.log(
138
- `Collecting signatures for execution ${transaction.transactionHash}`
220
+ `Collecting signatures for execution ${transaction.transactionHash} `
139
221
  );
140
222
 
141
223
  console.log(ownerPeerIds);
@@ -151,9 +233,35 @@ class ProcessSubmitSubmitEvents extends BaseTask {
151
233
  ownerPeerIds
152
234
  );
153
235
 
154
- const validSignatures = signatures.filter(
155
- (s) => !!s.data && s.data !== "0x"
156
- ) as Signature[];
236
+ const message = generateGnosisSignatureMessage({
237
+ to: addresses[data.chainId].multisend,
238
+ data,
239
+ chainId: this.chainId,
240
+ safeTxGas: gnosisTx.safeTxGas,
241
+ nonce: gnosisTx.safeNonce,
242
+ });
243
+
244
+ const validSignatures = signatures
245
+ .filter(
246
+ (s) => !!s.data && s.data !== "0x"
247
+ )
248
+ .filter((s) => {
249
+
250
+ try {
251
+
252
+ const address = getGnosisSignatureAddress({
253
+ message,
254
+ signature: s.data!,
255
+ chainId: this.chainId,
256
+ })
257
+
258
+ return address?.toLowerCase() === s.signer.toLowerCase();
259
+
260
+ } catch (error) {
261
+ return false
262
+ }
263
+
264
+ }) as Signature[];
157
265
 
158
266
  console.log({
159
267
  signatures,
@@ -172,7 +280,7 @@ class ProcessSubmitSubmitEvents extends BaseTask {
172
280
  await transaction.save();
173
281
  const errorMessage = signatures.find((s) => !!s.error)?.error;
174
282
  throw new Error(
175
- `Not enough signatures` + (errorMessage ? `: ${errorMessage}` : "")
283
+ `Not enough signatures` + (errorMessage ? `: ${errorMessage} ` : "")
176
284
  );
177
285
  }
178
286
 
@@ -220,7 +328,7 @@ class ProcessSubmitSubmitEvents extends BaseTask {
220
328
  receipt.logs.forEach((log) => {
221
329
  try {
222
330
  parsedLogs.push(this.sourceGnosisContract.interface.parseLog(log));
223
- } catch (e) {}
331
+ } catch (e) { }
224
332
  });
225
333
 
226
334
  if (parsedLogs.find((e) => e.name === "ExecutionSuccess")) {
@@ -247,7 +355,7 @@ class ProcessSubmitSubmitEvents extends BaseTask {
247
355
  async start(): Promise<void> {
248
356
  this.blockConfirmationsCount = blockConfirmations[this.chainId] + 1;
249
357
 
250
- this.sourceProvider = new ethers.providers.JsonRpcProvider(
358
+ this.sourceProvider = new JsonRpcRetryProvider(
251
359
  getRpcProviderUrl(this.chainId)
252
360
  );
253
361
 
@@ -265,5 +373,3 @@ class ProcessSubmitSubmitEvents extends BaseTask {
265
373
  await super.start();
266
374
  }
267
375
  }
268
-
269
- export default ProcessSubmitSubmitEvents;
@@ -5,11 +5,11 @@ import abi from "@/abi";
5
5
  import { Transaction } from "@/db";
6
6
  import {
7
7
  buildSignatureBytes,
8
+ generateGnosisSignatureMessage,
8
9
  generateGnosisTransaction,
9
- generateInteropTransactionHash,
10
10
  getContract,
11
+ getGnosisSignatureAddress,
11
12
  getRpcProviderUrl,
12
- LiquidityError,
13
13
  Signature,
14
14
  } from "@/utils";
15
15
  import { addresses, blockConfirmations } from "@/constants";
@@ -22,9 +22,11 @@ import { buildGnosisAction } from "@/gnosis";
22
22
  import { peerPool, protocol } from "@/net";
23
23
  import { LogDescription } from "ethers/lib/utils";
24
24
  import wait from "waait";
25
+ import { LiquidityError } from "@/errors";
26
+ import { JsonRpcRetryProvider } from "@/providers";
25
27
 
26
- class ProcessValidateEvents extends BaseTask {
27
- sourceProvider: ethers.providers.JsonRpcProvider;
28
+ export default class ProcessValidateEvents extends BaseTask {
29
+ sourceProvider: JsonRpcRetryProvider;
28
30
  chainId: ChainId;
29
31
  leadNodeOnly: boolean = true;
30
32
  blockConfirmationsCount: number = 12;
@@ -75,7 +77,7 @@ class ProcessValidateEvents extends BaseTask {
75
77
 
76
78
  const { sourceChainId, targetChainId } = transaction.validateEvent
77
79
 
78
- const targetProvider = new ethers.providers.JsonRpcProvider(
80
+ const targetProvider = new JsonRpcRetryProvider(
79
81
  getRpcProviderUrl(targetChainId as ChainId)
80
82
  );
81
83
 
@@ -166,9 +168,35 @@ class ProcessValidateEvents extends BaseTask {
166
168
  ownerPeerIds
167
169
  );
168
170
 
169
- const validSignatures = signatures.filter(
170
- (s) => !!s.data && s.data !== "0x"
171
- ) as Signature[];
171
+ const message = generateGnosisSignatureMessage({
172
+ to: addresses[data.chainId].multisend,
173
+ data,
174
+ chainId: this.chainId,
175
+ safeTxGas: gnosisTx.safeTxGas,
176
+ nonce: gnosisTx.safeNonce,
177
+ });
178
+
179
+ const validSignatures = signatures
180
+ .filter(
181
+ (s) => !!s.data && s.data !== "0x"
182
+ )
183
+ .filter((s) => {
184
+
185
+ try {
186
+
187
+ const address = getGnosisSignatureAddress({
188
+ message,
189
+ signature: s.data!,
190
+ chainId: this.chainId,
191
+ })
192
+
193
+ return address?.toLowerCase() === s.signer.toLowerCase();
194
+
195
+ } catch (error) {
196
+ return false
197
+ }
198
+
199
+ }) as Signature[];
172
200
 
173
201
  console.log({
174
202
  signatures,
@@ -263,12 +291,10 @@ class ProcessValidateEvents extends BaseTask {
263
291
  async start(): Promise<void> {
264
292
  this.blockConfirmationsCount = blockConfirmations[this.chainId] + 1;
265
293
 
266
- this.sourceProvider = new ethers.providers.JsonRpcProvider(
294
+ this.sourceProvider = new JsonRpcRetryProvider(
267
295
  getRpcProviderUrl(this.chainId)
268
296
  );
269
297
 
270
298
  await super.start();
271
299
  }
272
- }
273
-
274
- export default ProcessValidateEvents;
300
+ }
@@ -0,0 +1,161 @@
1
+ import { BaseTask } from "../BaseTask";
2
+ import Logger from "@/logger";
3
+ import { ethers } from "ethers";
4
+ import abi from "@/abi";
5
+ import { Transaction } from "@/db";
6
+ import {
7
+ generateInteropTransactionHash,
8
+ getContract,
9
+ getRpcProviderUrl,
10
+ } from "@/utils";
11
+ import { addresses } from "@/constants";
12
+ import { ChainId } from "@/types";
13
+ import config from "@/config";
14
+ import { InteropX } from "@/typechain";
15
+ import { Op } from "sequelize";
16
+ import { JsonRpcRetryProvider } from "@/providers";
17
+
18
+ export default class SyncLogExecuteEvents extends BaseTask {
19
+ contractAddress: string;
20
+ provider: JsonRpcRetryProvider;
21
+ contract: InteropX;
22
+ targetChainId: ChainId;
23
+
24
+ constructor({ targetChainId }: { targetChainId: ChainId }) {
25
+ super({
26
+ logger: new Logger("InteropX::SyncLogExecuteEvents"),
27
+ });
28
+ this.targetChainId = targetChainId;
29
+ }
30
+
31
+ async pollHandler() {
32
+ const currentBlock = await this.provider.getBlockNumber();
33
+
34
+ const events = await this.contract.queryFilter(
35
+ this.contract.filters.LogExecute(),
36
+ currentBlock - 2000,
37
+ currentBlock
38
+ );
39
+
40
+ let processedEvents = 0;
41
+
42
+ for (const event of events) {
43
+ try {
44
+ if (!event.args) {
45
+ continue;
46
+ }
47
+
48
+ const {
49
+ sourceSpells,
50
+ targetSpells,
51
+ position,
52
+ actionId,
53
+ actionIdHash,
54
+ sourceSender,
55
+ sourceDsaId,
56
+ targetDsaId,
57
+ sourceChainId,
58
+ targetChainId,
59
+ vnonce,
60
+ metadata,
61
+ } = event.args;
62
+
63
+ const uniqueIdentifier = {
64
+ actionId,
65
+ vnonce: vnonce.toString(),
66
+ sourceSender: sourceSender.toString(),
67
+ sourceChainId: sourceChainId.toNumber(),
68
+ targetChainId: targetChainId.toNumber(),
69
+ sourceDsaId: sourceDsaId.toString(),
70
+ targetDsaId: targetDsaId.toString(),
71
+ };
72
+
73
+ let transactionHash = generateInteropTransactionHash(uniqueIdentifier);
74
+
75
+ const transaction = await Transaction.findOne({
76
+ where: {
77
+ transactionHash,
78
+ executeEvent: { [Op.eq]: null },
79
+ },
80
+ });
81
+
82
+ if (!transaction) {
83
+ continue;
84
+ }
85
+
86
+ if (transaction.targetStatus != "success") {
87
+ transaction.targetStatus = "success";
88
+ }
89
+
90
+ if (transaction.status != "success") {
91
+ transaction.status = "success";
92
+ }
93
+
94
+ if (!transaction.targetCreatedAt) {
95
+ transaction.targetCreatedAt = new Date();
96
+ }
97
+
98
+ transaction.targetTransactionHash = event.transactionHash;
99
+ transaction.targetBlockNumber = event.blockNumber;
100
+ transaction.targetLogs = [];
101
+ transaction.executeEvent = {
102
+ actionId,
103
+ actionIdHashHash: actionIdHash,
104
+ actionIdHash,
105
+ vnonce: vnonce.toString(),
106
+ sourceSpells: sourceSpells.map(({ connector, data }) => ({
107
+ connector,
108
+ data,
109
+ })),
110
+ targetSpells: targetSpells.map(({ connector, data }) => ({
111
+ connector,
112
+ data,
113
+ })),
114
+ position: {
115
+ withdraw: position.withdraw.map((v) => ({
116
+ sourceToken: v.sourceToken,
117
+ targetToken: v.targetToken,
118
+ amount: v.amount.toString(),
119
+ })),
120
+ supply: position.supply.map((v) => ({
121
+ sourceToken: v.sourceToken,
122
+ targetToken: v.targetToken,
123
+ amount: v.amount.toString(),
124
+ })),
125
+ },
126
+ sourceChainId: sourceChainId.toNumber(),
127
+ targetChainId: targetChainId.toNumber(),
128
+ sourceSender,
129
+ sourceDsaId: sourceDsaId.toString(),
130
+ targetDsaId: targetDsaId.toString(),
131
+ metadata,
132
+ };
133
+
134
+ await transaction.save();
135
+
136
+ this.logger.info(`New InteropX tranaction: ${transactionHash} `);
137
+ } catch (error) {
138
+ this.logger.error(error);
139
+ }
140
+ }
141
+
142
+ if (processedEvents > 0)
143
+ this.logger.info(`${processedEvents} events processed`);
144
+ }
145
+
146
+ async start(): Promise<void> {
147
+ this.contractAddress = addresses[this.targetChainId].interopX;
148
+
149
+ this.provider = new JsonRpcRetryProvider(
150
+ getRpcProviderUrl(this.targetChainId)
151
+ );
152
+
153
+ this.contract = getContract<InteropX>(
154
+ this.contractAddress,
155
+ abi.interopX,
156
+ new ethers.Wallet(config.privateKey!, this.provider)
157
+ );
158
+
159
+ await super.start();
160
+ }
161
+ }
@@ -12,10 +12,11 @@ import { addresses } from "@/constants";
12
12
  import { ChainId } from "@/types";
13
13
  import config from "@/config";
14
14
  import { InteropX } from "@/typechain";
15
+ import { JsonRpcRetryProvider } from "@/providers";
15
16
 
16
- class SyncLogSubmitEvents extends BaseTask {
17
+ export default class SyncLogSubmitEvents extends BaseTask {
17
18
  contractAddress: string;
18
- provider: ethers.providers.JsonRpcProvider;
19
+ provider: JsonRpcRetryProvider;
19
20
  contract: InteropX;
20
21
  chainId: ChainId;
21
22
 
@@ -122,7 +123,7 @@ class SyncLogSubmitEvents extends BaseTask {
122
123
  async start(): Promise<void> {
123
124
  this.contractAddress = addresses[this.chainId].interopX;
124
125
 
125
- this.provider = new ethers.providers.JsonRpcProvider(
126
+ this.provider = new JsonRpcRetryProvider(
126
127
  getRpcProviderUrl(this.chainId)
127
128
  );
128
129
 
@@ -134,6 +135,4 @@ class SyncLogSubmitEvents extends BaseTask {
134
135
 
135
136
  await super.start();
136
137
  }
137
- }
138
-
139
- export default SyncLogSubmitEvents;
138
+ }
@@ -13,10 +13,11 @@ import { ChainId } from "@/types";
13
13
  import config from "@/config";
14
14
  import { InteropX } from "@/typechain";
15
15
  import { Op } from "sequelize";
16
+ import { JsonRpcRetryProvider } from "@/providers";
16
17
 
17
- class SyncLogValidateEvents extends BaseTask {
18
+ export default class SyncLogValidateEvents extends BaseTask {
18
19
  contractAddress: string;
19
- provider: ethers.providers.JsonRpcProvider;
20
+ provider: JsonRpcRetryProvider;
20
21
  contract: InteropX;
21
22
  chainId: ChainId;
22
23
 
@@ -92,7 +93,7 @@ class SyncLogValidateEvents extends BaseTask {
92
93
  transaction.sourceTransactionHash = event.transactionHash;
93
94
  transaction.sourceBlockNumber = event.blockNumber;
94
95
  transaction.sourceLogs = [];
95
- (transaction.validateEvent = {
96
+ transaction.validateEvent = {
96
97
  actionId,
97
98
  actionIdHashHash: actionIdHash,
98
99
  actionIdHash,
@@ -119,8 +120,8 @@ class SyncLogValidateEvents extends BaseTask {
119
120
  sourceDsaId: sourceDsaId.toString(),
120
121
  targetDsaId: targetDsaId.toString(),
121
122
  metadata,
122
- }),
123
- await transaction.save();
123
+ }
124
+ await transaction.save();
124
125
 
125
126
  this.logger.info(`New InteropX tranaction: ${transactionHash} `);
126
127
  } catch (error) {
@@ -135,7 +136,7 @@ class SyncLogValidateEvents extends BaseTask {
135
136
  async start(): Promise<void> {
136
137
  this.contractAddress = addresses[this.chainId].interopX;
137
138
 
138
- this.provider = new ethers.providers.JsonRpcProvider(
139
+ this.provider = new JsonRpcRetryProvider(
139
140
  getRpcProviderUrl(this.chainId)
140
141
  );
141
142
 
@@ -147,6 +148,4 @@ class SyncLogValidateEvents extends BaseTask {
147
148
 
148
149
  await super.start();
149
150
  }
150
- }
151
-
152
- export default SyncLogValidateEvents;
151
+ }
@@ -6,22 +6,22 @@ import SyncTransactionStatusTask from "./Transactions/SyncTransactionStatusTask"
6
6
  import AutoUpdateTask from "./AutoUpdateTask";
7
7
 
8
8
  import SyncLogSubmitEvents from "./InteropX/SyncLogSubmitEvents";
9
- import ProcessSubmitSubmitEvents from "./InteropX/ProcessSubmitSubmitEvents";
9
+ import ProcessSubmitEvents from "./InteropX/ProcessSubmitEvents";
10
10
  import SyncLogValidateEvents from "./InteropX/SyncLogValidateEvents";
11
11
  import ProcessValidateEvents from "./InteropX/ProcessValidateEvents";
12
+ import SyncLogExecuteEvents from "./InteropX/SyncLogExecuteEvents";
12
13
 
13
14
  export class Tasks {
14
15
 
15
16
  tasks: BaseTask[] = [
16
- // new SyncTransactionStatusTask(),
17
17
  new AutoUpdateTask(),
18
18
 
19
19
  // InteropX
20
20
  new SyncLogSubmitEvents({ chainId: 137 }),
21
21
  new SyncLogSubmitEvents({ chainId: 43114 }),
22
22
 
23
- new ProcessSubmitSubmitEvents({ chainId: 137 }),
24
- new ProcessSubmitSubmitEvents({ chainId: 43114 }),
23
+ new ProcessSubmitEvents({ chainId: 137 }),
24
+ new ProcessSubmitEvents({ chainId: 43114 }),
25
25
 
26
26
  new SyncLogValidateEvents({ chainId: 137 }),
27
27
  new SyncLogValidateEvents({ chainId: 43114 }),
@@ -29,6 +29,9 @@ export class Tasks {
29
29
  new ProcessValidateEvents({ chainId: 137 }),
30
30
  new ProcessValidateEvents({ chainId: 43114 }),
31
31
 
32
+ new SyncLogExecuteEvents({ targetChainId: 137 }),
33
+ new SyncLogExecuteEvents({ targetChainId: 43114 }),
34
+
32
35
  new SyncTransactionStatusTask(),
33
36
  ];
34
37
 
@@ -36,7 +39,7 @@ export class Tasks {
36
39
  for (const task of this.tasks) {
37
40
  try {
38
41
  task.start();
39
- await wait(1000)
42
+ await wait(300)
40
43
  } catch (error) {
41
44
  console.error(`Error starting task: ${task.constructor.name}`);
42
45
  }