@instadapp/interop-x 0.0.0-dev.dc4f10a → 0.0.0-dev.de23e71

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 (67) hide show
  1. package/dist/package.json +6 -5
  2. package/dist/src/abi/interopBridgeToken.json +21 -9
  3. package/dist/src/abi/interopXGateway.json +11 -11
  4. package/dist/src/alias.js +10 -0
  5. package/dist/src/api/index.js +6 -3
  6. package/dist/src/config/index.js +11 -1
  7. package/dist/src/constants/addresses.js +1 -1
  8. package/dist/src/constants/itokens.js +1 -1
  9. package/dist/src/db/models/transaction.js +8 -0
  10. package/dist/src/gnosis/actions/deposit.js +48 -0
  11. package/dist/src/gnosis/actions/index.js +11 -0
  12. package/dist/src/gnosis/actions/withdraw.js +50 -0
  13. package/dist/src/gnosis/index.js +20 -0
  14. package/dist/src/index.js +72 -23
  15. package/dist/src/net/peer/index.js +2 -1
  16. package/dist/src/net/pool/index.js +18 -2
  17. package/dist/src/net/protocol/dial/SignatureDialProtocol.js +3 -8
  18. package/dist/src/net/protocol/dial/TransactionStatusDialProtocol.js +30 -0
  19. package/dist/src/net/protocol/index.js +51 -1
  20. package/dist/src/tasks/AutoUpdateTask.js +70 -0
  21. package/dist/src/tasks/BaseTask.js +11 -3
  22. package/dist/src/tasks/InteropBridge/ProcessWithdrawEvents.js +19 -4
  23. package/dist/src/tasks/InteropBridge/{SyncWithdrawEvents.js → SyncBurnEvents.js} +10 -9
  24. package/dist/src/tasks/InteropBridge/SyncMintEvents.js +67 -0
  25. package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +19 -2
  26. package/dist/src/tasks/InteropXGateway/SyncDepositEvents.js +2 -3
  27. package/dist/src/tasks/InteropXGateway/SyncWithdrawtEvents.js +72 -0
  28. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +55 -0
  29. package/dist/src/tasks/index.js +19 -4
  30. package/dist/src/typechain/factories/InteropBridgeToken__factory.js +23 -11
  31. package/dist/src/typechain/factories/InteropXGateway__factory.js +14 -14
  32. package/dist/src/utils/index.js +19 -85
  33. package/package.json +6 -5
  34. package/src/abi/interopBridgeToken.json +21 -9
  35. package/src/abi/interopXGateway.json +11 -11
  36. package/src/alias.ts +6 -0
  37. package/src/api/index.ts +5 -2
  38. package/src/config/index.ts +11 -1
  39. package/src/constants/addresses.ts +1 -1
  40. package/src/constants/itokens.ts +1 -1
  41. package/src/db/models/transaction.ts +10 -0
  42. package/src/gnosis/actions/deposit.ts +63 -0
  43. package/src/gnosis/actions/index.ts +7 -0
  44. package/src/gnosis/actions/withdraw.ts +67 -0
  45. package/src/gnosis/index.ts +19 -0
  46. package/src/index.ts +93 -25
  47. package/src/net/peer/index.ts +2 -1
  48. package/src/net/pool/index.ts +25 -5
  49. package/src/net/protocol/dial/SignatureDialProtocol.ts +5 -11
  50. package/src/net/protocol/dial/TransactionStatusDialProtocol.ts +33 -0
  51. package/src/net/protocol/index.ts +67 -1
  52. package/src/tasks/AutoUpdateTask.ts +82 -0
  53. package/src/tasks/BaseTask.ts +13 -3
  54. package/src/tasks/InteropBridge/ProcessWithdrawEvents.ts +26 -18
  55. package/src/tasks/InteropBridge/{SyncWithdrawEvents.ts → SyncBurnEvents.ts} +13 -15
  56. package/src/tasks/InteropBridge/SyncMintEvents.ts +99 -0
  57. package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +26 -7
  58. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +2 -4
  59. package/src/tasks/InteropXGateway/SyncWithdrawtEvents.ts +105 -0
  60. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +67 -0
  61. package/src/tasks/index.ts +28 -4
  62. package/src/typechain/InteropBridgeToken.ts +23 -17
  63. package/src/typechain/InteropXGateway.ts +13 -13
  64. package/src/typechain/factories/InteropBridgeToken__factory.ts +23 -11
  65. package/src/typechain/factories/InteropXGateway__factory.ts +14 -14
  66. package/src/utils/index.ts +22 -125
  67. package/tsconfig.json +7 -2
@@ -3,19 +3,20 @@ import Logger from '@/logger';
3
3
  import { BigNumber, ethers } from "ethers";
4
4
  import abi from "@/abi";
5
5
  import { Transaction } from "@/db";
6
- import { buildDataForTransaction, buildSignatureBytes, getContract, getRpcProviderUrl, Signature } from "@/utils";
6
+ import { buildSignatureBytes, getContract, getRpcProviderUrl, Signature } from "@/utils";
7
7
  import { addresses } from "@/constants";
8
8
  import { ChainId } from "@/types";
9
9
  import config from "@/config";
10
- import { GnosisSafe, InteropXGateway } from "@/typechain";
10
+ import { GnosisSafe } from "@/typechain";
11
11
  import { Op } from "sequelize";
12
12
  import wait from "waait";
13
13
  import { peerPool, protocol } from "@/net";
14
14
  import { LogDescription } from "ethers/lib/utils";
15
+ import { buildGnosisAction } from "@/gnosis";
15
16
 
16
17
  const generateGnosisTransaction = async (transactionData: any, safeContract: GnosisSafe) => {
17
18
  console.log(transactionData);
18
-
19
+
19
20
  let isExecuted = await safeContract.dataHashes(
20
21
  await safeContract.getTransactionHash(
21
22
  transactionData.to,
@@ -54,9 +55,7 @@ const generateGnosisTransaction = async (transactionData: any, safeContract: Gno
54
55
  }
55
56
 
56
57
  class ProcessWithdrawEvents extends BaseTask {
57
- contractAddress: string;
58
58
  provider: ethers.providers.JsonRpcProvider;
59
- contract: InteropXGateway;
60
59
  chainId: ChainId;
61
60
  leadNodeOnly = true
62
61
 
@@ -97,7 +96,7 @@ class ProcessWithdrawEvents extends BaseTask {
97
96
  }
98
97
 
99
98
  console.log(`Processing transaction ${transaction.transactionHash}`);
100
-
99
+
101
100
  transaction.targetStatus = 'pending';
102
101
  await transaction.save();
103
102
 
@@ -121,9 +120,23 @@ class ProcessWithdrawEvents extends BaseTask {
121
120
  const ownersThreshold = await safeContract.getThreshold();
122
121
  await wait(10000);
123
122
 
123
+ let data, logs = [];
124
+
125
+ try {
126
+ ({ data, logs } = await buildGnosisAction(transaction));
127
+ } catch (error) {
128
+ console.log(error);
129
+ transaction.targetStatus = 'failed';
130
+ transaction.targetErrors = [error.message];
131
+ transaction.status = 'failed'
132
+ await transaction.save();
133
+ protocol.sendTransaction(transaction)
134
+ return;
135
+ }
136
+
124
137
  let gnosisTx = await generateGnosisTransaction({
125
138
  baseGas: "0",
126
- data: await buildDataForTransaction(transaction),
139
+ data,
127
140
  gasPrice: "0",
128
141
  gasToken: "0x0000000000000000000000000000000000000000",
129
142
  nonce: '0',
@@ -142,7 +155,7 @@ class ProcessWithdrawEvents extends BaseTask {
142
155
  console.log(`Collecting signatures for execution ${transaction.transactionHash}`)
143
156
 
144
157
  console.log(ownerPeerIds);
145
-
158
+
146
159
  const signatures = await protocol.requestSignatures({
147
160
  type: 'source',
148
161
  transactionHash: transaction.transactionHash,
@@ -209,31 +222,26 @@ class ProcessWithdrawEvents extends BaseTask {
209
222
  if (parsedLogs.find(e => e.name === 'ExecutionSuccess')) {
210
223
  console.log('ExecutionSuccess')
211
224
  transaction.targetStatus = 'success'
225
+ transaction.targetTransactionHash = txSent.hash
226
+ transaction.targetLogs = logs
212
227
  transaction.status = 'success'
213
228
  await transaction.save();
214
229
  } else {
215
230
  console.log('ExecutionFailure')
216
231
  transaction.targetStatus = 'failed'
232
+ transaction.targetTransactionHash = txSent.hash
217
233
  transaction.status = 'failed'
218
234
  await transaction.save();
219
235
  }
236
+
237
+ protocol.sendTransaction(transaction)
220
238
  }
221
239
 
222
240
  async start(): Promise<void> {
223
- this.logger.info(`Starting execution watcher on interop chain`);
224
-
225
- this.contractAddress = addresses[this.chainId].interopXGateway;
226
-
227
241
  this.provider = new ethers.providers.JsonRpcProvider(
228
242
  getRpcProviderUrl(this.chainId)
229
243
  );
230
244
 
231
- this.contract = getContract<InteropXGateway>(
232
- this.contractAddress,
233
- abi.interopXGateway,
234
- new ethers.Wallet(config.privateKey!, this.provider)
235
- );
236
-
237
245
  await super.start()
238
246
  }
239
247
  }
@@ -8,7 +8,7 @@ import { ChainId } from "@/types";
8
8
  import config from "@/config";
9
9
  import { InteropBridgeToken } from "@/typechain";
10
10
 
11
- class SyncWithdrawEvents extends BaseTask {
11
+ class SyncBurnEvents extends BaseTask {
12
12
  contractAddress: string;
13
13
  provider: ethers.providers.JsonRpcProvider;
14
14
  contract: InteropBridgeToken;
@@ -17,7 +17,7 @@ class SyncWithdrawEvents extends BaseTask {
17
17
 
18
18
  constructor({ chainId, itokenAddress }: { chainId: ChainId, itokenAddress: string }) {
19
19
  super({
20
- logger: new Logger("InteropBridgeToken::SyncWithdrawEvents"),
20
+ logger: new Logger("InteropBridgeToken::SyncBurnEvents"),
21
21
  })
22
22
  this.chainId = chainId;
23
23
  this.itokenAddress = itokenAddress;
@@ -41,13 +41,13 @@ class SyncWithdrawEvents extends BaseTask {
41
41
  continue;
42
42
  }
43
43
 
44
- const { to, amount, chainId } = event.args;
44
+ const { to, amount, sourceChainId, targetChainId } = event.args;
45
45
 
46
46
  const uniqueIdentifier = {
47
47
  action: 'withdraw',
48
48
  submitTransactionHash: event.transactionHash,
49
- sourceChainId:this.chainId,
50
- targetChainId: chainId.toNumber(),
49
+ sourceChainId: sourceChainId,
50
+ targetChainId: targetChainId,
51
51
  }
52
52
 
53
53
  if (await Transaction.findOne({ where: uniqueIdentifier })) {
@@ -62,7 +62,6 @@ class SyncWithdrawEvents extends BaseTask {
62
62
  from: tx.from,
63
63
  to,
64
64
 
65
-
66
65
  submitTransactionHash: event.transactionHash,
67
66
  submitBlockNumber: event.blockNumber,
68
67
 
@@ -70,21 +69,22 @@ class SyncWithdrawEvents extends BaseTask {
70
69
  sourceTransactionHash: event.transactionHash,
71
70
  sourceBlockNumber: event.blockNumber,
72
71
  sourceStatus: "success",
73
-
74
72
  targetStatus: "uninitialised",
75
73
 
76
74
  submitEvent: {
77
- to,
75
+ to,
78
76
  amount: amount.toString(),
79
77
  itoken: this.itokenAddress,
80
- chainId: chainId.toString()
78
+ sourceChainId: sourceChainId,
79
+ targetChainId: targetChainId,
81
80
  },
82
81
 
83
82
  sourceEvent: {
84
- to,
85
- amount: amount.toString(),
83
+ to,
84
+ amount: amount.toString(),
86
85
  itoken: this.itokenAddress,
87
- chainId: chainId.toString(),
86
+ sourceChainId: sourceChainId,
87
+ targetChainId: targetChainId,
88
88
  },
89
89
  status: "pending",
90
90
  })
@@ -102,8 +102,6 @@ class SyncWithdrawEvents extends BaseTask {
102
102
  }
103
103
 
104
104
  async start(): Promise<void> {
105
- this.logger.info(`Starting execution watcher on interop chain`);
106
-
107
105
  this.provider = new ethers.providers.JsonRpcProvider(
108
106
  getRpcProviderUrl(this.chainId)
109
107
  );
@@ -118,4 +116,4 @@ class SyncWithdrawEvents extends BaseTask {
118
116
  }
119
117
  }
120
118
 
121
- export default SyncWithdrawEvents;
119
+ export default SyncBurnEvents;
@@ -0,0 +1,99 @@
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 { getContract, getRpcProviderUrl } from "@/utils";
7
+ import { ChainId } from "@/types";
8
+ import config from "@/config";
9
+ import { InteropBridgeToken } from "@/typechain";
10
+
11
+ class SyncMintEvents extends BaseTask {
12
+ contractAddress: string;
13
+ provider: ethers.providers.JsonRpcProvider;
14
+ contract: InteropBridgeToken;
15
+ chainId: ChainId;
16
+ itokenAddress: string;
17
+
18
+ constructor({ chainId, itokenAddress }: { chainId: ChainId, itokenAddress: string }) {
19
+ super({
20
+ logger: new Logger("InteropBridgeToken::SyncMintEvents"),
21
+ })
22
+ this.chainId = chainId;
23
+ this.itokenAddress = itokenAddress;
24
+ }
25
+
26
+ async pollHandler() {
27
+ const currentBlock = await this.provider.getBlockNumber();
28
+
29
+ const events = await this.contract.queryFilter(
30
+ this.contract.filters.Mint(),
31
+ currentBlock - 500,
32
+ currentBlock,
33
+ );
34
+
35
+ for (const event of events) {
36
+
37
+ try {
38
+ if (!event.args) {
39
+ continue;
40
+ }
41
+
42
+ const { sourceChainId, targetChainId, amount, to, submitTransactionHash } = event.args;
43
+
44
+ const uniqueIdentifier = {
45
+ action: 'deposit',
46
+ submitTransactionHash: submitTransactionHash,
47
+ sourceChainId: sourceChainId,
48
+ targetChainId: targetChainId,
49
+
50
+ targetEvent: null
51
+ }
52
+
53
+ const transaction = await Transaction.findOne({ where: uniqueIdentifier });
54
+
55
+ if(! transaction){
56
+ return;
57
+ }
58
+
59
+ const tx = await event.getTransaction()
60
+
61
+ transaction.targetStatus = 'success'
62
+ transaction.targetErrors = []
63
+ transaction.targetTransactionHash = tx.hash
64
+ transaction.targetEvent = {
65
+ sourceChainId,
66
+ targetChainId,
67
+ amount: amount.toString(),
68
+ to,
69
+ submitTransactionHash
70
+ }
71
+ transaction.status = 'success'
72
+
73
+ await transaction.save()
74
+
75
+ this.logger.info(
76
+ `Mint confirmation received: ${transaction.transactionHash} `
77
+ );
78
+ } catch (error) {
79
+ this.logger.error(error);
80
+ }
81
+ }
82
+ }
83
+
84
+ async start(): Promise<void> {
85
+ this.provider = new ethers.providers.JsonRpcProvider(
86
+ getRpcProviderUrl(this.chainId)
87
+ );
88
+
89
+ this.contract = getContract<InteropBridgeToken>(
90
+ this.itokenAddress,
91
+ abi.interopBridgeToken,
92
+ new ethers.Wallet(config.privateKey!, this.provider)
93
+ );
94
+
95
+ await super.start()
96
+ }
97
+ }
98
+
99
+ export default SyncMintEvents;
@@ -3,7 +3,7 @@ import Logger from '@/logger';
3
3
  import { BigNumber, ethers } from "ethers";
4
4
  import abi from "@/abi";
5
5
  import { Transaction } from "@/db";
6
- import { buildDataForTransaction, buildSignatureBytes, getContract, getRpcProviderUrl, Signature } from "@/utils";
6
+ import { buildSignatureBytes, getContract, getRpcProviderUrl, Signature } from "@/utils";
7
7
  import { addresses } from "@/constants";
8
8
  import { ChainId } from "@/types";
9
9
  import config from "@/config";
@@ -12,10 +12,11 @@ import { Op } from "sequelize";
12
12
  import wait from "waait";
13
13
  import { peerPool, protocol } from "@/net";
14
14
  import { LogDescription } from "ethers/lib/utils";
15
+ import { buildGnosisAction } from "@/gnosis";
15
16
 
16
17
  const generateGnosisTransaction = async (transactionData: any, safeContract: GnosisSafe) => {
17
18
  console.log(transactionData);
18
-
19
+
19
20
  let isExecuted = await safeContract.dataHashes(
20
21
  await safeContract.getTransactionHash(
21
22
  transactionData.to,
@@ -97,7 +98,7 @@ class ProcessDepositEvents extends BaseTask {
97
98
  }
98
99
 
99
100
  console.log(`Processing transaction ${transaction.transactionHash}`);
100
-
101
+
101
102
  transaction.targetStatus = 'pending';
102
103
  await transaction.save();
103
104
 
@@ -121,9 +122,24 @@ class ProcessDepositEvents extends BaseTask {
121
122
  const ownersThreshold = await safeContract.getThreshold();
122
123
  await wait(10000);
123
124
 
125
+ let data, logs = [];
126
+
127
+ try {
128
+ ({ data, logs } = await buildGnosisAction(transaction));
129
+
130
+ } catch (error) {
131
+ console.log(error);
132
+ transaction.targetStatus = 'failed';
133
+ transaction.targetErrors = [error.message];
134
+ transaction.status = 'failed'
135
+ await transaction.save();
136
+ protocol.sendTransaction(transaction)
137
+ return;
138
+ }
139
+
124
140
  let gnosisTx = await generateGnosisTransaction({
125
141
  baseGas: "0",
126
- data: await buildDataForTransaction(transaction),
142
+ data,
127
143
  gasPrice: "0",
128
144
  gasToken: "0x0000000000000000000000000000000000000000",
129
145
  nonce: '0',
@@ -142,7 +158,7 @@ class ProcessDepositEvents extends BaseTask {
142
158
  console.log(`Collecting signatures for execution ${transaction.transactionHash}`)
143
159
 
144
160
  console.log(ownerPeerIds);
145
-
161
+
146
162
  const signatures = await protocol.requestSignatures({
147
163
  type: 'source',
148
164
  transactionHash: transaction.transactionHash,
@@ -209,19 +225,22 @@ class ProcessDepositEvents extends BaseTask {
209
225
  if (parsedLogs.find(e => e.name === 'ExecutionSuccess')) {
210
226
  console.log('ExecutionSuccess')
211
227
  transaction.targetStatus = 'success'
228
+ transaction.targetTransactionHash = txSent.hash
229
+ transaction.targetLogs = logs;
212
230
  transaction.status = 'success'
213
231
  await transaction.save();
214
232
  } else {
215
233
  console.log('ExecutionFailure')
216
234
  transaction.targetStatus = 'failed'
235
+ transaction.targetTransactionHash = txSent.hash
217
236
  transaction.status = 'failed'
218
237
  await transaction.save();
219
238
  }
239
+
240
+ protocol.sendTransaction(transaction)
220
241
  }
221
242
 
222
243
  async start(): Promise<void> {
223
- this.logger.info(`Starting execution watcher on interop chain`);
224
-
225
244
  this.contractAddress = addresses[this.chainId].interopXGateway;
226
245
 
227
246
  this.provider = new ethers.providers.JsonRpcProvider(
@@ -45,8 +45,8 @@ class SyncDepositEvents extends BaseTask {
45
45
  const uniqueIdentifier = {
46
46
  action: 'deposit',
47
47
  submitTransactionHash: event.transactionHash,
48
- sourceChainId: sourceChainId.toNumber(),
49
- targetChainId: targetChainId.toNumber(),
48
+ sourceChainId: sourceChainId,
49
+ targetChainId: targetChainId,
50
50
  }
51
51
 
52
52
  if (await Transaction.findOne({ where: uniqueIdentifier })) {
@@ -105,8 +105,6 @@ class SyncDepositEvents extends BaseTask {
105
105
  }
106
106
 
107
107
  async start(): Promise<void> {
108
- this.logger.info(`Starting execution watcher on interop chain`);
109
-
110
108
  this.contractAddress = addresses[this.chainId].interopXGateway;
111
109
 
112
110
  this.provider = new ethers.providers.JsonRpcProvider(
@@ -0,0 +1,105 @@
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 { getContract, getRpcProviderUrl } from "@/utils";
7
+ import { addresses } from "@/constants";
8
+ import { ChainId } from "@/types";
9
+ import config from "@/config";
10
+ import { InteropXGateway } from "@/typechain";
11
+
12
+ class SyncWithdrawEvents extends BaseTask {
13
+ contractAddress: string;
14
+ provider: ethers.providers.JsonRpcProvider;
15
+ contract: InteropXGateway;
16
+ chainId: ChainId;
17
+
18
+ constructor({ chainId }: { chainId: ChainId }) {
19
+ super({
20
+ logger: new Logger("InteropXGateway::SyncWithdrawEvents"),
21
+ })
22
+ this.chainId = chainId;
23
+ }
24
+
25
+ async pollHandler() {
26
+ const currentBlock = await this.provider.getBlockNumber();
27
+
28
+ const events = await this.contract.queryFilter(
29
+ this.contract.filters.LogGatewayWithdraw(),
30
+ currentBlock - 500,
31
+ currentBlock,
32
+ );
33
+
34
+ let processedEvents = 0;
35
+
36
+ for (const event of events) {
37
+
38
+ try {
39
+ if (!event.args) {
40
+ continue;
41
+ }
42
+
43
+ const { user, token, amount, sourceChainId, targetChainId, transactionHash } = event.args;
44
+
45
+ const uniqueIdentifier = {
46
+ action: 'withdraw',
47
+ submitTransactionHash: transactionHash,
48
+ sourceChainId: sourceChainId,
49
+ targetChainId: targetChainId,
50
+
51
+ targetEvent: null
52
+ }
53
+ const transaction = await Transaction.findOne({ where: uniqueIdentifier });
54
+
55
+ if (!transaction) {
56
+ return;
57
+ }
58
+
59
+ const tx = await event.getTransaction()
60
+
61
+ transaction.targetStatus = 'success'
62
+ transaction.targetErrors = []
63
+ transaction.targetTransactionHash = tx.hash
64
+ transaction.targetEvent = {
65
+ user,
66
+ token,
67
+ amount: amount.toString(),
68
+ sourceChainId,
69
+ targetChainId,
70
+ transactionHash,
71
+ }
72
+ transaction.status = 'success'
73
+
74
+ await transaction.save()
75
+
76
+ this.logger.info(
77
+ `Witdraw confirmation received: ${transaction.transactionHash} `
78
+ );
79
+ } catch (error) {
80
+ this.logger.error(error);
81
+ }
82
+ }
83
+
84
+ if (processedEvents > 0)
85
+ this.logger.info(`${processedEvents} events processed`);
86
+ }
87
+
88
+ async start(): Promise<void> {
89
+ this.contractAddress = addresses[this.chainId].interopXGateway;
90
+
91
+ this.provider = new ethers.providers.JsonRpcProvider(
92
+ getRpcProviderUrl(this.chainId)
93
+ );
94
+
95
+ this.contract = getContract<InteropXGateway>(
96
+ this.contractAddress,
97
+ abi.interopXGateway,
98
+ new ethers.Wallet(config.privateKey!, this.provider)
99
+ );
100
+
101
+ await super.start()
102
+ }
103
+ }
104
+
105
+ export default SyncWithdrawEvents;
@@ -0,0 +1,67 @@
1
+ import { BaseTask } from "../BaseTask";
2
+ import Logger from '@/logger';
3
+ import config from "@/config";
4
+ import { peerPool, protocol } from "@/net";
5
+ import { Transaction } from "@/db";
6
+ import { Op } from "sequelize";
7
+
8
+ class SyncTransactionStatusTask extends BaseTask {
9
+ pollIntervalMs: number = 60 * 1000
10
+ exceptLeadNode: boolean = true;
11
+
12
+ constructor() {
13
+ super({
14
+ logger: new Logger("SyncTransactionStatusTask"),
15
+ })
16
+ }
17
+
18
+ async pollHandler() {
19
+ // if transaction is pending for more than 1 hour, check lead node for status
20
+ const leadNode = peerPool.getLeadPeer();
21
+
22
+ if (!leadNode) {
23
+ return;
24
+ }
25
+
26
+ const transaction = await Transaction.findOne({
27
+ where: {
28
+ status: 'pending',
29
+ sourceCreatedAt: {
30
+ [Op.gte]: new Date(Date.now() - 60 * 60 * 1000),
31
+ },
32
+ }
33
+ })
34
+
35
+ if (!transaction) {
36
+ return;
37
+ }
38
+
39
+ this.logger.info(`Requesting transaction status for ${transaction.transactionHash}`)
40
+
41
+ const transactionStatus = await protocol.requestTransactionStatus(transaction.transactionHash, leadNode.id);
42
+
43
+ if (!transactionStatus) {
44
+ return;
45
+ }
46
+
47
+ this.logger.info(`Received transaction status for ${transaction.transactionHash}`)
48
+
49
+ transaction.sourceStatus = transactionStatus.sourceStatus
50
+ transaction.sourceTransactionHash = transactionStatus.sourceTransactionHash
51
+ transaction.sourceErrors = transactionStatus.sourceErrors
52
+ transaction.sourceLogs = transactionStatus.sourceLogs
53
+
54
+ transaction.targetStatus = transactionStatus.targetStatus
55
+ transaction.targetTransactionHash = transactionStatus.targetTransactionHash
56
+ transaction.targetErrors = transactionStatus.targetErrors
57
+ transaction.targetLogs = transactionStatus.targetLogs
58
+
59
+ transaction.status = transactionStatus.status
60
+
61
+ await transaction.save()
62
+
63
+ this.logger.info(`Updated transaction status for ${transaction.transactionHash}`)
64
+ }
65
+ }
66
+
67
+ export default SyncTransactionStatusTask;
@@ -1,13 +1,24 @@
1
1
  import { BaseTask } from "./BaseTask";
2
2
  import InteropXGatewayProcessDepositEvents from "./InteropXGateway/ProcessDepositEvents";
3
3
  import InteropXGatewaySyncDepositEvents from "./InteropXGateway/SyncDepositEvents";
4
+ import InteropXGatewaySyncWithdrawEvents from "./InteropXGateway/SyncWithdrawtEvents";
4
5
 
5
- import InteropBridgeSyncWithdrawEvents from "./InteropBridge/SyncWithdrawEvents";
6
6
  import InteropBridgeProcessWithdrawEvents from "./InteropBridge/ProcessWithdrawEvents";
7
+ import InteropBridgeSyncBurnEvents from "./InteropBridge/SyncBurnEvents";
8
+ import InteropBridgeSyncMintEvents from "./InteropBridge/SyncMintEvents";
9
+
10
+ import SyncTransactionStatusTask from "./Transactions/SyncTransactionStatusTask";
11
+
12
+ import AutoUpdateTask from "./AutoUpdateTask";
7
13
 
8
14
  export class Tasks {
9
15
 
10
16
  tasks: BaseTask[] = [
17
+ new SyncTransactionStatusTask(),
18
+ new AutoUpdateTask(),
19
+
20
+ // InteropXGateway
21
+
11
22
  new InteropXGatewaySyncDepositEvents({
12
23
  chainId: 43114
13
24
  }),
@@ -16,13 +27,26 @@ export class Tasks {
16
27
  chainId: 43114
17
28
  }),
18
29
 
19
- new InteropBridgeSyncWithdrawEvents({
20
- chainId: 137,
21
- itokenAddress: '0xEab02fe1F016eE3e4106c1C6aad35FeEe657268E',
30
+
31
+ new InteropXGatewaySyncWithdrawEvents({
32
+ chainId: 43114
22
33
  }),
23
34
 
35
+
36
+ // InteropBridge
37
+
24
38
  new InteropBridgeProcessWithdrawEvents({
25
39
  chainId: 137,
40
+ }),
41
+
42
+ new InteropBridgeSyncMintEvents({
43
+ chainId: 137,
44
+ itokenAddress: '0x62c0045f3277e7067cacad3c8038eeabb1bd92d1',
45
+ }),
46
+
47
+ new InteropBridgeSyncBurnEvents({
48
+ chainId: 137,
49
+ itokenAddress: '0x62c0045f3277e7067cacad3c8038eeabb1bd92d1',
26
50
  })
27
51
  ];
28
52