@instadapp/interop-x 0.0.0-dev.8a0297a → 0.0.0-dev.8a917f1

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 (54) hide show
  1. package/dist/package.json +7 -6
  2. package/dist/src/abi/interopBridgeToken.json +21 -9
  3. package/dist/src/abi/interopXGateway.json +11 -11
  4. package/dist/src/api/index.js +3 -3
  5. package/dist/src/config/index.js +11 -1
  6. package/dist/src/constants/addresses.js +1 -1
  7. package/dist/src/constants/itokens.js +1 -1
  8. package/dist/src/index.js +69 -7
  9. package/dist/src/net/peer/index.js +2 -1
  10. package/dist/src/net/pool/index.js +25 -9
  11. package/dist/src/net/protocol/dial/SignatureDialProtocol.js +11 -4
  12. package/dist/src/net/protocol/dial/TransactionStatusDialProtocol.js +28 -0
  13. package/dist/src/net/protocol/index.js +41 -1
  14. package/dist/src/tasks/AutoUpdateTask.js +70 -0
  15. package/dist/src/tasks/BaseTask.js +11 -3
  16. package/dist/src/tasks/InteropBridge/ProcessWithdrawEvents.js +146 -0
  17. package/dist/src/tasks/InteropBridge/SyncBurnEvents.js +71 -0
  18. package/dist/src/tasks/InteropBridge/SyncMintEvents.js +67 -0
  19. package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +32 -21
  20. package/dist/src/tasks/InteropXGateway/SyncDepositEvents.js +5 -6
  21. package/dist/src/tasks/InteropXGateway/SyncWithdrawtEvents.js +72 -0
  22. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +53 -0
  23. package/dist/src/tasks/index.js +25 -0
  24. package/dist/src/typechain/factories/InteropBridgeToken__factory.js +23 -11
  25. package/dist/src/typechain/factories/InteropXGateway__factory.js +14 -14
  26. package/dist/src/utils/index.js +71 -11
  27. package/package.json +7 -6
  28. package/src/abi/interopBridgeToken.json +21 -9
  29. package/src/abi/interopXGateway.json +11 -11
  30. package/src/api/index.ts +2 -2
  31. package/src/config/index.ts +11 -1
  32. package/src/constants/addresses.ts +1 -1
  33. package/src/constants/itokens.ts +1 -1
  34. package/src/index.ts +90 -9
  35. package/src/net/peer/index.ts +2 -1
  36. package/src/net/pool/index.ts +33 -13
  37. package/src/net/protocol/dial/SignatureDialProtocol.ts +12 -4
  38. package/src/net/protocol/dial/TransactionStatusDialProtocol.ts +31 -0
  39. package/src/net/protocol/index.ts +57 -1
  40. package/src/tasks/AutoUpdateTask.ts +82 -0
  41. package/src/tasks/BaseTask.ts +13 -3
  42. package/src/tasks/InteropBridge/ProcessWithdrawEvents.ts +231 -0
  43. package/src/tasks/InteropBridge/SyncBurnEvents.ts +121 -0
  44. package/src/tasks/InteropBridge/SyncMintEvents.ts +99 -0
  45. package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +37 -25
  46. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +5 -7
  47. package/src/tasks/InteropXGateway/SyncWithdrawtEvents.ts +105 -0
  48. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +65 -0
  49. package/src/tasks/index.ts +37 -0
  50. package/src/typechain/InteropBridgeToken.ts +23 -17
  51. package/src/typechain/InteropXGateway.ts +13 -13
  52. package/src/typechain/factories/InteropBridgeToken__factory.ts +23 -11
  53. package/src/typechain/factories/InteropXGateway__factory.ts +14 -14
  54. package/src/utils/index.ts +93 -12
@@ -0,0 +1,231 @@
1
+ import { BaseTask } from "../BaseTask";
2
+ import Logger from '@/logger';
3
+ import { BigNumber, ethers } from "ethers";
4
+ import abi from "@/abi";
5
+ import { Transaction } from "@/db";
6
+ import { buildDataForTransaction, buildSignatureBytes, getContract, getRpcProviderUrl, Signature } from "@/utils";
7
+ import { addresses } from "@/constants";
8
+ import { ChainId } from "@/types";
9
+ import config from "@/config";
10
+ import { GnosisSafe, InteropXGateway } from "@/typechain";
11
+ import { Op } from "sequelize";
12
+ import wait from "waait";
13
+ import { peerPool, protocol } from "@/net";
14
+ import { LogDescription } from "ethers/lib/utils";
15
+
16
+ const generateGnosisTransaction = async (transactionData: any, safeContract: GnosisSafe) => {
17
+ console.log(transactionData);
18
+
19
+ let isExecuted = await safeContract.dataHashes(
20
+ await safeContract.getTransactionHash(
21
+ transactionData.to,
22
+ transactionData.value,
23
+ transactionData.data,
24
+ transactionData.operation,
25
+ transactionData.safeTxGas,
26
+ transactionData.baseGas,
27
+ transactionData.gasPrice,
28
+ transactionData.gasToken,
29
+ transactionData.refundReceiver,
30
+ transactionData.nonce
31
+ )
32
+ )
33
+
34
+ while (isExecuted == 1) {
35
+ transactionData.safeTxGas = BigNumber.from(String(transactionData.safeTxGas)).add(1).toString()
36
+
37
+ isExecuted = await safeContract.dataHashes(
38
+ await safeContract.getTransactionHash(
39
+ transactionData.to,
40
+ transactionData.value,
41
+ transactionData.data,
42
+ transactionData.operation,
43
+ transactionData.safeTxGas,
44
+ transactionData.baseGas,
45
+ transactionData.gasPrice,
46
+ transactionData.gasToken,
47
+ transactionData.refundReceiver,
48
+ transactionData.nonce
49
+ )
50
+ )
51
+ }
52
+
53
+ return transactionData
54
+ }
55
+
56
+ class ProcessWithdrawEvents extends BaseTask {
57
+ provider: ethers.providers.JsonRpcProvider;
58
+ chainId: ChainId;
59
+ leadNodeOnly = true
60
+
61
+ constructor({ chainId }: { chainId: ChainId }) {
62
+ super({
63
+ logger: new Logger("InteropXGateway::ProcessWithdrawEvents"),
64
+ })
65
+ this.chainId = chainId;
66
+ }
67
+
68
+ async pollHandler() {
69
+ const blockNumber = await this.provider.getBlockNumber()
70
+
71
+ const transaction = await Transaction.findOne({
72
+ where: {
73
+ status: 'pending',
74
+ sourceStatus: 'success',
75
+ targetStatus: 'uninitialised',
76
+ action: 'withdraw',
77
+ sourceCreatedAt: {
78
+ [Op.gte]: new Date(Date.now() - 12 * 60 * 60 * 1000),
79
+ },
80
+ targetDelayUntil: {
81
+ [Op.or]: {
82
+ [Op.is]: null,
83
+ [Op.lt]: new Date(),
84
+ }
85
+ },
86
+ sourceBlockNumber: {
87
+ [Op.lt]: blockNumber - 12,
88
+ },
89
+ sourceChainId: this.chainId,
90
+ }
91
+ })
92
+
93
+ if (!transaction) {
94
+ return;
95
+ }
96
+
97
+ console.log(`Processing transaction ${transaction.transactionHash}`);
98
+
99
+ transaction.targetStatus = 'pending';
100
+ await transaction.save();
101
+
102
+ // refresh event data?
103
+
104
+ const targetChainProvider = new ethers.providers.JsonRpcProvider(
105
+ getRpcProviderUrl(transaction.targetChainId as ChainId)
106
+ );
107
+
108
+ const targetWallet = new ethers.Wallet(config.privateKey!, targetChainProvider);
109
+
110
+ const safeAddress = addresses[transaction.targetChainId].gnosisSafe;
111
+
112
+
113
+ const safeContract = getContract<GnosisSafe>(
114
+ safeAddress,
115
+ abi.gnosisSafe,
116
+ targetWallet
117
+ )
118
+
119
+ const ownersThreshold = await safeContract.getThreshold();
120
+ await wait(10000);
121
+
122
+ let gnosisTx = await generateGnosisTransaction({
123
+ baseGas: "0",
124
+ data: await buildDataForTransaction(transaction),
125
+ gasPrice: "0",
126
+ gasToken: "0x0000000000000000000000000000000000000000",
127
+ nonce: '0',
128
+ operation: "1",
129
+ refundReceiver: "0x0000000000000000000000000000000000000000",
130
+ safeAddress: safeAddress,
131
+ safeTxGas: "79668",
132
+ to: addresses[transaction.targetChainId].multisend,
133
+ value: "0",
134
+ }, safeContract);
135
+
136
+ const owners = await safeContract.getOwners().then(owners => owners.map(owner => owner.toLowerCase()));
137
+
138
+ const ownerPeerIds = peerPool.activePeers.filter(peer => owners.includes(peer.publicAddress.toLowerCase())).map(peer => peer.id)
139
+
140
+ console.log(`Collecting signatures for execution ${transaction.transactionHash}`)
141
+
142
+ console.log(ownerPeerIds);
143
+
144
+ const signatures = await protocol.requestSignatures({
145
+ type: 'source',
146
+ transactionHash: transaction.transactionHash,
147
+ safeTxGas: gnosisTx.safeTxGas,
148
+ safeNonce: gnosisTx.nonce
149
+ }, ownerPeerIds)
150
+
151
+
152
+ const validSignatures = signatures.filter(s => !!s.data && s.data !== '0x') as Signature[];
153
+
154
+ console.log({ signatures, validSignatures, ownersThreshold: ownersThreshold.toString() });
155
+
156
+ if (validSignatures.length === 0 || ownersThreshold.gt(validSignatures.length)) {
157
+ await transaction.save();
158
+ transaction.targetDelayUntil = new Date(Date.now() + 30 * 1000);
159
+ transaction.targetStatus = 'uninitialised'
160
+
161
+ await transaction.save();
162
+ const errorMessage = signatures.find(s => !!s.error)?.error;
163
+ throw new Error(`Not enough signatures` + (errorMessage ? `: ${errorMessage}` : ''));
164
+ }
165
+
166
+
167
+ console.log(`Executing transaction for execution ${transaction.transactionHash}`)
168
+
169
+ const { data: txData } = await safeContract.populateTransaction.execTransaction(
170
+ gnosisTx.to,
171
+ gnosisTx.value,
172
+ gnosisTx.data,
173
+ gnosisTx.operation,
174
+ gnosisTx.safeTxGas,
175
+ gnosisTx.baseGas,
176
+ gnosisTx.gasPrice,
177
+ gnosisTx.gasToken,
178
+ gnosisTx.refundReceiver,
179
+ buildSignatureBytes(validSignatures)
180
+ );
181
+
182
+ console.log({
183
+ from: targetWallet.address,
184
+ gasPrice: BigNumber.from(120 * 10 ** 9).toString(),
185
+ to: safeAddress,
186
+ data: txData,
187
+ })
188
+
189
+
190
+ const txSent = await targetWallet.sendTransaction({
191
+ from: targetWallet.address,
192
+ gasPrice: BigNumber.from(120 * 10 ** 9),
193
+ to: safeAddress,
194
+ data: txData,
195
+ })
196
+
197
+ const receipt = await txSent.wait();
198
+
199
+ const parsedLogs: LogDescription[] = [];
200
+
201
+ receipt.logs.forEach((log) => {
202
+ try {
203
+ parsedLogs.push(safeContract.interface.parseLog(log));
204
+ } catch (e) { }
205
+ });
206
+
207
+ if (parsedLogs.find(e => e.name === 'ExecutionSuccess')) {
208
+ console.log('ExecutionSuccess')
209
+ transaction.targetStatus = 'success'
210
+ transaction.targetTransactionHash = txSent.hash
211
+ transaction.status = 'success'
212
+ await transaction.save();
213
+ } else {
214
+ console.log('ExecutionFailure')
215
+ transaction.targetStatus = 'failed'
216
+ transaction.targetTransactionHash = txSent.hash
217
+ transaction.status = 'failed'
218
+ await transaction.save();
219
+ }
220
+ }
221
+
222
+ async start(): Promise<void> {
223
+ this.provider = new ethers.providers.JsonRpcProvider(
224
+ getRpcProviderUrl(this.chainId)
225
+ );
226
+
227
+ await super.start()
228
+ }
229
+ }
230
+
231
+ export default ProcessWithdrawEvents;
@@ -0,0 +1,121 @@
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 { generateInteropTransactionHash, getContract, getRpcProviderUrl } from "@/utils";
7
+ import { ChainId } from "@/types";
8
+ import config from "@/config";
9
+ import { InteropBridgeToken } from "@/typechain";
10
+
11
+ class SyncBurnEvents 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::SyncBurnEvents"),
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.Burn(),
31
+ currentBlock - 2000,
32
+ currentBlock,
33
+ );
34
+
35
+ let processedEvents = 0;
36
+
37
+ for (const event of events) {
38
+
39
+ try {
40
+ if (!event.args) {
41
+ continue;
42
+ }
43
+
44
+ const { to, amount, sourceChainId, targetChainId } = event.args;
45
+
46
+ const uniqueIdentifier = {
47
+ action: 'withdraw',
48
+ submitTransactionHash: event.transactionHash,
49
+ sourceChainId: sourceChainId,
50
+ targetChainId: targetChainId,
51
+ }
52
+
53
+ if (await Transaction.findOne({ where: uniqueIdentifier })) {
54
+ continue;
55
+ }
56
+
57
+ const tx = await event.getTransaction()
58
+
59
+ await Transaction.create({
60
+ ...uniqueIdentifier,
61
+ transactionHash: generateInteropTransactionHash(uniqueIdentifier),
62
+ from: tx.from,
63
+ to,
64
+
65
+
66
+ submitTransactionHash: event.transactionHash,
67
+ submitBlockNumber: event.blockNumber,
68
+
69
+ // submit & source are the same
70
+ sourceTransactionHash: event.transactionHash,
71
+ sourceBlockNumber: event.blockNumber,
72
+ sourceStatus: "success",
73
+
74
+ targetStatus: "uninitialised",
75
+
76
+ submitEvent: {
77
+ to,
78
+ amount: amount.toString(),
79
+ itoken: this.itokenAddress,
80
+ sourceChainId: sourceChainId,
81
+ targetChainId: targetChainId,
82
+ },
83
+
84
+ sourceEvent: {
85
+ to,
86
+ amount: amount.toString(),
87
+ itoken: this.itokenAddress,
88
+ sourceChainId: sourceChainId,
89
+ targetChainId: targetChainId,
90
+ },
91
+ status: "pending",
92
+ })
93
+
94
+ this.logger.info(
95
+ `Withdraw queued: ${event.transactionHash} ${event.blockNumber}`
96
+ );
97
+ } catch (error) {
98
+ this.logger.error(error);
99
+ }
100
+ }
101
+
102
+ if (processedEvents > 0)
103
+ this.logger.info(`${processedEvents} events processed`);
104
+ }
105
+
106
+ async start(): Promise<void> {
107
+ this.provider = new ethers.providers.JsonRpcProvider(
108
+ getRpcProviderUrl(this.chainId)
109
+ );
110
+
111
+ this.contract = getContract<InteropBridgeToken>(
112
+ this.itokenAddress,
113
+ abi.interopBridgeToken,
114
+ new ethers.Wallet(config.privateKey!, this.provider)
115
+ );
116
+
117
+ await super.start()
118
+ }
119
+ }
120
+
121
+ 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;
@@ -15,7 +15,7 @@ import { LogDescription } from "ethers/lib/utils";
15
15
 
16
16
  const generateGnosisTransaction = async (transactionData: any, safeContract: GnosisSafe) => {
17
17
  console.log(transactionData);
18
-
18
+
19
19
  let isExecuted = await safeContract.dataHashes(
20
20
  await safeContract.getTransactionHash(
21
21
  transactionData.to,
@@ -79,6 +79,12 @@ class ProcessDepositEvents extends BaseTask {
79
79
  sourceCreatedAt: {
80
80
  [Op.gte]: new Date(Date.now() - 12 * 60 * 60 * 1000),
81
81
  },
82
+ targetDelayUntil: {
83
+ [Op.or]: {
84
+ [Op.is]: null,
85
+ [Op.lt]: new Date(),
86
+ }
87
+ },
82
88
  sourceBlockNumber: {
83
89
  [Op.lt]: blockNumber - 12,
84
90
  },
@@ -90,11 +96,11 @@ class ProcessDepositEvents extends BaseTask {
90
96
  return;
91
97
  }
92
98
 
99
+ console.log(`Processing transaction ${transaction.transactionHash}`);
93
100
 
94
101
  transaction.targetStatus = 'pending';
95
102
  await transaction.save();
96
103
 
97
-
98
104
  // refresh event data?
99
105
 
100
106
  const targetChainProvider = new ethers.providers.JsonRpcProvider(
@@ -115,9 +121,23 @@ class ProcessDepositEvents extends BaseTask {
115
121
  const ownersThreshold = await safeContract.getThreshold();
116
122
  await wait(10000);
117
123
 
124
+ let data;
125
+
126
+ try {
127
+ data = await buildDataForTransaction(transaction);
128
+ } catch (error) {
129
+ console.log(error);
130
+ transaction.targetStatus = 'failed';
131
+ transaction.targetErrors = [error.message];
132
+ transaction.status = 'failed'
133
+ await transaction.save();
134
+ protocol.sendTransaction(transaction)
135
+ return;
136
+ }
137
+
118
138
  let gnosisTx = await generateGnosisTransaction({
119
139
  baseGas: "0",
120
- data: await buildDataForTransaction(transaction),
140
+ data,
121
141
  gasPrice: "0",
122
142
  gasToken: "0x0000000000000000000000000000000000000000",
123
143
  nonce: '0',
@@ -135,6 +155,8 @@ class ProcessDepositEvents extends BaseTask {
135
155
 
136
156
  console.log(`Collecting signatures for execution ${transaction.transactionHash}`)
137
157
 
158
+ console.log(ownerPeerIds);
159
+
138
160
  const signatures = await protocol.requestSignatures({
139
161
  type: 'source',
140
162
  transactionHash: transaction.transactionHash,
@@ -150,32 +172,16 @@ class ProcessDepositEvents extends BaseTask {
150
172
  if (validSignatures.length === 0 || ownersThreshold.gt(validSignatures.length)) {
151
173
  await transaction.save();
152
174
  transaction.targetDelayUntil = new Date(Date.now() + 30 * 1000);
153
- transaction.targetStatus = 'pending'
175
+ transaction.targetStatus = 'uninitialised'
154
176
 
155
177
  await transaction.save();
156
178
  const errorMessage = signatures.find(s => !!s.error)?.error;
157
179
  throw new Error(`Not enough signatures` + (errorMessage ? `: ${errorMessage}` : ''));
158
180
  }
159
181
 
160
- const execTransactionParams = [
161
- gnosisTx.to,
162
- gnosisTx.value,
163
- gnosisTx.data,
164
- gnosisTx.operation,
165
- gnosisTx.safeTxGas,
166
- gnosisTx.baseGas,
167
- gnosisTx.gasPrice,
168
- gnosisTx.gasToken,
169
- gnosisTx.refundReceiver,
170
- buildSignatureBytes(validSignatures),
171
- ];
172
182
 
173
183
  console.log(`Executing transaction for execution ${transaction.transactionHash}`)
174
184
 
175
- console.log({
176
- execTransactionParams
177
- })
178
-
179
185
  const { data: txData } = await safeContract.populateTransaction.execTransaction(
180
186
  gnosisTx.to,
181
187
  gnosisTx.value,
@@ -192,16 +198,14 @@ class ProcessDepositEvents extends BaseTask {
192
198
  console.log({
193
199
  from: targetWallet.address,
194
200
  gasPrice: BigNumber.from(120 * 10 ** 9).toString(),
195
- gasLimit: BigNumber.from(6_000_000).toString(),
196
201
  to: safeAddress,
197
202
  data: txData,
198
203
  })
199
- return;
204
+
200
205
 
201
206
  const txSent = await targetWallet.sendTransaction({
202
207
  from: targetWallet.address,
203
208
  gasPrice: BigNumber.from(120 * 10 ** 9),
204
- gasLimit: BigNumber.from(6_000_000),
205
209
  to: safeAddress,
206
210
  data: txData,
207
211
  })
@@ -218,14 +222,22 @@ class ProcessDepositEvents extends BaseTask {
218
222
 
219
223
  if (parsedLogs.find(e => e.name === 'ExecutionSuccess')) {
220
224
  console.log('ExecutionSuccess')
225
+ transaction.targetStatus = 'success'
226
+ transaction.targetTransactionHash = txSent.hash
227
+ transaction.status = 'success'
228
+ await transaction.save();
221
229
  } else {
222
230
  console.log('ExecutionFailure')
231
+ transaction.targetStatus = 'failed'
232
+ transaction.targetTransactionHash = txSent.hash
233
+ transaction.status = 'failed'
234
+ await transaction.save();
223
235
  }
236
+
237
+ protocol.sendTransaction(transaction)
224
238
  }
225
239
 
226
240
  async start(): Promise<void> {
227
- this.logger.info(`Starting execution watcher on interop chain`);
228
-
229
241
  this.contractAddress = addresses[this.chainId].interopXGateway;
230
242
 
231
243
  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 })) {
@@ -77,7 +77,7 @@ class SyncDepositEvents extends BaseTask {
77
77
  sourceChainId: sourceChainId.toString(),
78
78
  targetChainId: targetChainId.toString(),
79
79
  token: token,
80
- ammout: amount.toString(),
80
+ amount: amount.toString(),
81
81
  vnonce: vnonce.toString(),
82
82
  },
83
83
 
@@ -86,14 +86,14 @@ class SyncDepositEvents extends BaseTask {
86
86
  sourceChainId: sourceChainId.toString(),
87
87
  targetChainId: targetChainId.toString(),
88
88
  token: token,
89
- ammout: amount.toString(),
89
+ amount: amount.toString(),
90
90
  vnonce: vnonce.toString(),
91
91
  },
92
92
  status: "pending",
93
93
  })
94
94
 
95
95
  this.logger.info(
96
- `Execution queued: ${event.transactionHash} ${event.blockNumber}`
96
+ `Deposit queued: ${event.transactionHash} ${event.blockNumber}`
97
97
  );
98
98
  } catch (error) {
99
99
  this.logger.error(error);
@@ -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(