@instadapp/interop-x 0.0.0-dev.ee3d74b → 0.0.0-dev.ef7acff

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. package/dist/package.json +3 -1
  2. package/dist/src/abi/index.js +2 -0
  3. package/dist/src/abi/instList.json +232 -0
  4. package/dist/src/api/index.js +7 -0
  5. package/dist/src/constants/addresses.js +4 -2
  6. package/dist/src/db/models/transaction.js +15 -7
  7. package/dist/src/errors/index.js +17 -0
  8. package/dist/src/gnosis/actions/aaveV2/source.js +15 -4
  9. package/dist/src/gnosis/actions/aaveV2/target.js +78 -0
  10. package/dist/src/index.js +1 -1
  11. package/dist/src/tasks/InteropX/{ProcessSubmitSubmitEvents.js → ProcessSubmitEvents.js} +29 -5
  12. package/dist/src/tasks/InteropX/ProcessValidateEvents.js +184 -0
  13. package/dist/src/tasks/InteropX/SyncLogExecuteEvents.js +112 -0
  14. package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +1 -0
  15. package/dist/src/tasks/InteropX/SyncLogValidateEvents.js +105 -0
  16. package/dist/src/tasks/index.js +13 -5
  17. package/dist/src/typechain/InstList.js +2 -0
  18. package/dist/src/typechain/factories/InstList__factory.js +249 -0
  19. package/dist/src/typechain/factories/index.js +3 -1
  20. package/dist/src/typechain/index.js +3 -1
  21. package/dist/src/utils/async.js +18 -0
  22. package/dist/src/utils/dsa.js +24 -0
  23. package/dist/src/utils/formatting.js +17 -0
  24. package/dist/src/utils/gnosis.js +62 -0
  25. package/dist/src/utils/http.js +10 -0
  26. package/dist/src/utils/index.js +21 -219
  27. package/dist/src/utils/interop.js +16 -0
  28. package/dist/src/utils/validate.js +23 -0
  29. package/dist/src/utils/web3.js +92 -0
  30. package/package.json +3 -1
  31. package/src/abi/index.ts +2 -0
  32. package/src/abi/instList.json +232 -0
  33. package/src/api/index.ts +8 -0
  34. package/src/constants/addresses.ts +5 -3
  35. package/src/db/models/transaction.ts +134 -80
  36. package/src/errors/index.ts +13 -0
  37. package/src/gnosis/actions/aaveV2/source.ts +19 -5
  38. package/src/gnosis/actions/aaveV2/target.ts +130 -2
  39. package/src/tasks/InteropX/{ProcessSubmitSubmitEvents.ts → ProcessSubmitEvents.ts} +35 -7
  40. package/src/tasks/InteropX/ProcessValidateEvents.ts +272 -0
  41. package/src/tasks/InteropX/SyncLogExecuteEvents.ts +160 -0
  42. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +3 -4
  43. package/src/tasks/InteropX/SyncLogValidateEvents.ts +150 -0
  44. package/src/tasks/index.ts +16 -5
  45. package/src/typechain/InstList.ts +402 -0
  46. package/src/typechain/factories/InstList__factory.ts +253 -0
  47. package/src/typechain/factories/index.ts +1 -0
  48. package/src/typechain/index.ts +2 -0
  49. package/src/utils/async.ts +22 -0
  50. package/src/utils/dsa.ts +30 -0
  51. package/src/utils/formatting.ts +15 -0
  52. package/src/utils/gnosis.ts +123 -0
  53. package/src/utils/http.ts +6 -0
  54. package/src/utils/index.ts +8 -365
  55. package/src/utils/interop.ts +28 -0
  56. package/src/utils/validate.ts +24 -0
  57. package/src/utils/web3.ts +131 -0
@@ -0,0 +1,160 @@
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
+
17
+ export default class SyncLogExecuteEvents extends BaseTask {
18
+ contractAddress: string;
19
+ provider: ethers.providers.JsonRpcProvider;
20
+ contract: InteropX;
21
+ targetChainId: ChainId;
22
+
23
+ constructor({ targetChainId }: { targetChainId: ChainId }) {
24
+ super({
25
+ logger: new Logger("InteropX::SyncLogExecuteEvents"),
26
+ });
27
+ this.targetChainId = targetChainId;
28
+ }
29
+
30
+ async pollHandler() {
31
+ const currentBlock = await this.provider.getBlockNumber();
32
+
33
+ const events = await this.contract.queryFilter(
34
+ this.contract.filters.LogExecute(),
35
+ currentBlock - 2000,
36
+ currentBlock
37
+ );
38
+
39
+ let processedEvents = 0;
40
+
41
+ for (const event of events) {
42
+ try {
43
+ if (!event.args) {
44
+ continue;
45
+ }
46
+
47
+ const {
48
+ sourceSpells,
49
+ targetSpells,
50
+ position,
51
+ actionId,
52
+ actionIdHash,
53
+ sourceSender,
54
+ sourceDsaId,
55
+ targetDsaId,
56
+ sourceChainId,
57
+ targetChainId,
58
+ vnonce,
59
+ metadata,
60
+ } = event.args;
61
+
62
+ const uniqueIdentifier = {
63
+ actionId,
64
+ vnonce: vnonce.toString(),
65
+ sourceSender: sourceSender.toString(),
66
+ sourceChainId: sourceChainId.toNumber(),
67
+ targetChainId: targetChainId.toNumber(),
68
+ sourceDsaId: sourceDsaId.toString(),
69
+ targetDsaId: targetDsaId.toString(),
70
+ };
71
+
72
+ let transactionHash = generateInteropTransactionHash(uniqueIdentifier);
73
+
74
+ const transaction = await Transaction.findOne({
75
+ where: {
76
+ transactionHash,
77
+ executeEvent: { [Op.eq]: null },
78
+ },
79
+ });
80
+
81
+ if (!transaction) {
82
+ continue;
83
+ }
84
+
85
+ if (transaction.targetStatus != "success") {
86
+ transaction.targetStatus = "success";
87
+ }
88
+
89
+ if (transaction.status != "success") {
90
+ transaction.status = "success";
91
+ }
92
+
93
+ if (!transaction.targetCreatedAt) {
94
+ transaction.targetCreatedAt = new Date();
95
+ }
96
+
97
+ transaction.targetTransactionHash = event.transactionHash;
98
+ transaction.targetBlockNumber = event.blockNumber;
99
+ transaction.targetLogs = [];
100
+ transaction.executeEvent = {
101
+ actionId,
102
+ actionIdHashHash: actionIdHash,
103
+ actionIdHash,
104
+ vnonce: vnonce.toString(),
105
+ sourceSpells: sourceSpells.map(({ connector, data }) => ({
106
+ connector,
107
+ data,
108
+ })),
109
+ targetSpells: targetSpells.map(({ connector, data }) => ({
110
+ connector,
111
+ data,
112
+ })),
113
+ position: {
114
+ withdraw: position.withdraw.map((v) => ({
115
+ sourceToken: v.sourceToken,
116
+ targetToken: v.targetToken,
117
+ amount: v.amount.toString(),
118
+ })),
119
+ supply: position.supply.map((v) => ({
120
+ sourceToken: v.sourceToken,
121
+ targetToken: v.targetToken,
122
+ amount: v.amount.toString(),
123
+ })),
124
+ },
125
+ sourceChainId: sourceChainId.toNumber(),
126
+ targetChainId: targetChainId.toNumber(),
127
+ sourceSender,
128
+ sourceDsaId: sourceDsaId.toString(),
129
+ targetDsaId: targetDsaId.toString(),
130
+ metadata,
131
+ };
132
+
133
+ await transaction.save();
134
+
135
+ this.logger.info(`New InteropX tranaction: ${transactionHash} `);
136
+ } catch (error) {
137
+ this.logger.error(error);
138
+ }
139
+ }
140
+
141
+ if (processedEvents > 0)
142
+ this.logger.info(`${processedEvents} events processed`);
143
+ }
144
+
145
+ async start(): Promise<void> {
146
+ this.contractAddress = addresses[this.targetChainId].interopX;
147
+
148
+ this.provider = new ethers.providers.JsonRpcProvider(
149
+ getRpcProviderUrl(this.targetChainId)
150
+ );
151
+
152
+ this.contract = getContract<InteropX>(
153
+ this.contractAddress,
154
+ abi.interopX,
155
+ new ethers.Wallet(config.privateKey!, this.provider)
156
+ );
157
+
158
+ await super.start();
159
+ }
160
+ }
@@ -13,7 +13,7 @@ import { ChainId } from "@/types";
13
13
  import config from "@/config";
14
14
  import { InteropX } from "@/typechain";
15
15
 
16
- class SyncLogSubmitEvents extends BaseTask {
16
+ export default class SyncLogSubmitEvents extends BaseTask {
17
17
  contractAddress: string;
18
18
  provider: ethers.providers.JsonRpcProvider;
19
19
  contract: InteropX;
@@ -86,6 +86,7 @@ class SyncLogSubmitEvents extends BaseTask {
86
86
  submitEvent: {
87
87
  actionId,
88
88
  actionIdHashHash,
89
+ actionIdHash: actionIdHashHash,
89
90
  vnonce: vnonce.toString(),
90
91
  position: {
91
92
  withdraw: position.withdraw.map((v) => ({
@@ -133,6 +134,4 @@ class SyncLogSubmitEvents extends BaseTask {
133
134
 
134
135
  await super.start();
135
136
  }
136
- }
137
-
138
- export default SyncLogSubmitEvents;
137
+ }
@@ -0,0 +1,150 @@
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
+
17
+ export default class SyncLogValidateEvents extends BaseTask {
18
+ contractAddress: string;
19
+ provider: ethers.providers.JsonRpcProvider;
20
+ contract: InteropX;
21
+ chainId: ChainId;
22
+
23
+ constructor({ chainId }: { chainId: ChainId }) {
24
+ super({
25
+ logger: new Logger("InteropX::SyncLogValidateEvents"),
26
+ });
27
+ this.chainId = chainId;
28
+ }
29
+
30
+ async pollHandler() {
31
+ const currentBlock = await this.provider.getBlockNumber();
32
+
33
+ const events = await this.contract.queryFilter(
34
+ this.contract.filters.LogValidate(),
35
+ currentBlock - 2000,
36
+ currentBlock
37
+ );
38
+
39
+ let processedEvents = 0;
40
+
41
+ for (const event of events) {
42
+ try {
43
+ if (!event.args) {
44
+ continue;
45
+ }
46
+
47
+ const {
48
+ sourceSpells,
49
+ position,
50
+ actionId,
51
+ actionIdHash,
52
+ sourceSender,
53
+ sourceDsaId,
54
+ targetDsaId,
55
+ sourceChainId,
56
+ targetChainId,
57
+ vnonce,
58
+ metadata,
59
+ } = event.args;
60
+
61
+ const uniqueIdentifier = {
62
+ actionId,
63
+ vnonce: vnonce.toString(),
64
+ sourceSender: sourceSender.toString(),
65
+ sourceChainId: sourceChainId.toNumber(),
66
+ targetChainId: targetChainId.toNumber(),
67
+ sourceDsaId: sourceDsaId.toString(),
68
+ targetDsaId: targetDsaId.toString(),
69
+ };
70
+
71
+ let transactionHash = generateInteropTransactionHash(uniqueIdentifier);
72
+
73
+ const transaction = await Transaction.findOne({
74
+ where: {
75
+ transactionHash,
76
+ validateEvent: { [Op.eq]: null },
77
+ },
78
+ });
79
+
80
+ if (!transaction) {
81
+ continue;
82
+ }
83
+
84
+ if (transaction.sourceStatus != "success") {
85
+ transaction.sourceStatus = "success";
86
+ }
87
+
88
+ if (!transaction.sourceCreatedAt) {
89
+ transaction.sourceCreatedAt = new Date();
90
+ }
91
+
92
+ transaction.sourceTransactionHash = event.transactionHash;
93
+ transaction.sourceBlockNumber = event.blockNumber;
94
+ transaction.sourceLogs = [];
95
+ transaction.validateEvent = {
96
+ actionId,
97
+ actionIdHashHash: actionIdHash,
98
+ actionIdHash,
99
+ vnonce: vnonce.toString(),
100
+ sourceSpells: sourceSpells.map(({ connector, data }) => ({
101
+ connector,
102
+ data,
103
+ })),
104
+ position: {
105
+ withdraw: position.withdraw.map((v) => ({
106
+ sourceToken: v.sourceToken,
107
+ targetToken: v.targetToken,
108
+ amount: v.amount.toString(),
109
+ })),
110
+ supply: position.supply.map((v) => ({
111
+ sourceToken: v.sourceToken,
112
+ targetToken: v.targetToken,
113
+ amount: v.amount.toString(),
114
+ })),
115
+ },
116
+ sourceChainId: sourceChainId.toNumber(),
117
+ targetChainId: targetChainId.toNumber(),
118
+ sourceSender,
119
+ sourceDsaId: sourceDsaId.toString(),
120
+ targetDsaId: targetDsaId.toString(),
121
+ metadata,
122
+ }
123
+ await transaction.save();
124
+
125
+ this.logger.info(`New InteropX tranaction: ${transactionHash} `);
126
+ } catch (error) {
127
+ this.logger.error(error);
128
+ }
129
+ }
130
+
131
+ if (processedEvents > 0)
132
+ this.logger.info(`${processedEvents} events processed`);
133
+ }
134
+
135
+ async start(): Promise<void> {
136
+ this.contractAddress = addresses[this.chainId].interopX;
137
+
138
+ this.provider = new ethers.providers.JsonRpcProvider(
139
+ getRpcProviderUrl(this.chainId)
140
+ );
141
+
142
+ this.contract = getContract<InteropX>(
143
+ this.contractAddress,
144
+ abi.interopX,
145
+ new ethers.Wallet(config.privateKey!, this.provider)
146
+ );
147
+
148
+ await super.start();
149
+ }
150
+ }
@@ -6,20 +6,31 @@ 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
+ import SyncLogValidateEvents from "./InteropX/SyncLogValidateEvents";
11
+ import ProcessValidateEvents from "./InteropX/ProcessValidateEvents";
12
+ import SyncLogExecuteEvents from "./InteropX/SyncLogExecuteEvents";
10
13
 
11
14
  export class Tasks {
12
15
 
13
16
  tasks: BaseTask[] = [
14
- // new SyncTransactionStatusTask(),
15
17
  new AutoUpdateTask(),
16
18
 
17
19
  // InteropX
18
20
  new SyncLogSubmitEvents({ chainId: 137 }),
19
21
  new SyncLogSubmitEvents({ chainId: 43114 }),
20
22
 
21
- new ProcessSubmitSubmitEvents({ chainId: 137 }),
22
- new ProcessSubmitSubmitEvents({ chainId: 43114 }),
23
+ new ProcessSubmitEvents({ chainId: 137 }),
24
+ new ProcessSubmitEvents({ chainId: 43114 }),
25
+
26
+ new SyncLogValidateEvents({ chainId: 137 }),
27
+ new SyncLogValidateEvents({ chainId: 43114 }),
28
+
29
+ new ProcessValidateEvents({ chainId: 137 }),
30
+ new ProcessValidateEvents({ chainId: 43114 }),
31
+
32
+ new SyncLogExecuteEvents({ targetChainId: 137 }),
33
+ new SyncLogExecuteEvents({ targetChainId: 43114 }),
23
34
 
24
35
  new SyncTransactionStatusTask(),
25
36
  ];
@@ -28,7 +39,7 @@ export class Tasks {
28
39
  for (const task of this.tasks) {
29
40
  try {
30
41
  task.start();
31
- await wait(1000)
42
+ await wait(300)
32
43
  } catch (error) {
33
44
  console.error(`Error starting task: ${task.constructor.name}`);
34
45
  }