@instadapp/interop-x 0.0.0-dev.92afe89 → 0.0.0-dev.f78418c

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. package/bin/interop-x +1 -1
  2. package/dist/abi/erc20.json +350 -0
  3. package/dist/abi/gnosisSafe.json +747 -0
  4. package/dist/abi/index.js +15 -0
  5. package/dist/abi/interopBridgeToken.json +286 -0
  6. package/dist/abi/interopXGateway.json +184 -0
  7. package/dist/config/index.js +1 -1
  8. package/dist/constants/addresses.js +18 -3
  9. package/dist/constants/index.js +1 -0
  10. package/dist/constants/tokens.js +107 -0
  11. package/dist/db/models/index.js +1 -1
  12. package/dist/db/models/transaction.js +52 -0
  13. package/dist/index.js +14 -5
  14. package/dist/net/peer/index.js +5 -5
  15. package/dist/net/pool/index.js +2 -2
  16. package/dist/net/protocol/dial/BaseDialProtocol.js +1 -1
  17. package/dist/net/protocol/dial/SignatureDialProtocol.js +11 -13
  18. package/dist/net/protocol/index.js +3 -3
  19. package/dist/tasks/BaseTask.js +2 -2
  20. package/dist/tasks/InteropXGateway/SyncDepositEvents.js +79 -0
  21. package/dist/tasks/index.js +9 -1
  22. package/dist/typechain/Erc20.js +2 -0
  23. package/dist/typechain/GnosisSafe.js +2 -0
  24. package/dist/typechain/InteropBridgeToken.js +2 -0
  25. package/dist/typechain/InteropXGateway.js +2 -0
  26. package/dist/typechain/common.js +2 -0
  27. package/dist/typechain/factories/Erc20__factory.js +367 -0
  28. package/dist/typechain/factories/GnosisSafe__factory.js +1174 -0
  29. package/dist/typechain/factories/InteropBridgeToken__factory.js +459 -0
  30. package/dist/typechain/factories/InteropXGateway__factory.js +265 -0
  31. package/dist/typechain/factories/index.js +14 -0
  32. package/dist/typechain/index.js +35 -0
  33. package/dist/utils/index.js +14 -2
  34. package/package.json +23 -3
  35. package/src/abi/erc20.json +350 -0
  36. package/src/abi/gnosisSafe.json +747 -0
  37. package/src/abi/index.ts +11 -0
  38. package/src/abi/interopBridgeToken.json +286 -0
  39. package/src/abi/interopXGateway.json +184 -0
  40. package/src/config/index.ts +1 -1
  41. package/src/constants/addresses.ts +18 -3
  42. package/src/constants/index.ts +1 -0
  43. package/src/constants/tokens.ts +104 -0
  44. package/src/db/index.ts +1 -1
  45. package/src/db/models/index.ts +1 -1
  46. package/src/db/models/transaction.ts +92 -0
  47. package/src/index.ts +16 -5
  48. package/src/net/peer/index.ts +3 -3
  49. package/src/net/pool/index.ts +2 -2
  50. package/src/net/protocol/dial/BaseDialProtocol.ts +1 -1
  51. package/src/net/protocol/dial/SignatureDialProtocol.ts +13 -16
  52. package/src/net/protocol/index.ts +3 -3
  53. package/src/tasks/BaseTask.ts +2 -3
  54. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +114 -0
  55. package/src/tasks/index.ts +4 -1
  56. package/src/typechain/Erc20.ts +491 -0
  57. package/src/typechain/GnosisSafe.ts +1728 -0
  58. package/src/typechain/InteropBridgeToken.ts +686 -0
  59. package/src/typechain/InteropXGateway.ts +407 -0
  60. package/src/typechain/common.ts +44 -0
  61. package/src/typechain/factories/Erc20__factory.ts +368 -0
  62. package/src/typechain/factories/GnosisSafe__factory.ts +1178 -0
  63. package/src/typechain/factories/InteropBridgeToken__factory.ts +466 -0
  64. package/src/typechain/factories/InteropXGateway__factory.ts +272 -0
  65. package/src/typechain/factories/index.ts +7 -0
  66. package/src/typechain/index.ts +12 -0
  67. package/src/types.ts +2 -2
  68. package/src/utils/index.ts +15 -2
  69. package/tsconfig.json +3 -0
  70. package/dist/db/models/execution.js +0 -38
  71. package/src/db/models/execution.ts +0 -57
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Transaction = void 0;
4
+ const sequelize_1 = require("@/db/sequelize");
5
+ const sequelize_2 = require("sequelize");
6
+ class Transaction extends sequelize_2.Model {
7
+ }
8
+ exports.Transaction = Transaction;
9
+ Transaction.init({
10
+ id: {
11
+ type: sequelize_2.DataTypes.INTEGER,
12
+ autoIncrement: true,
13
+ primaryKey: true
14
+ },
15
+ transactionHash: sequelize_2.DataTypes.STRING,
16
+ type: sequelize_2.DataTypes.STRING,
17
+ from: sequelize_2.DataTypes.STRING,
18
+ to: sequelize_2.DataTypes.STRING,
19
+ sourceChainId: sequelize_2.DataTypes.NUMBER,
20
+ sourceTransactionHash: sequelize_2.DataTypes.STRING,
21
+ sourceBlockNumber: sequelize_2.DataTypes.NUMBER,
22
+ sourceStatus: sequelize_2.DataTypes.STRING,
23
+ sourceErrors: {
24
+ type: sequelize_2.DataTypes.JSON,
25
+ // defaultValue: [],
26
+ },
27
+ sourceCreatedAt: {
28
+ type: sequelize_2.DataTypes.DATE,
29
+ defaultValue: Date.now()
30
+ },
31
+ sourceDelayUntil: sequelize_2.DataTypes.STRING,
32
+ targetChainId: sequelize_2.DataTypes.NUMBER,
33
+ targetTransactionHash: sequelize_2.DataTypes.STRING,
34
+ targetBlockNumber: sequelize_2.DataTypes.NUMBER,
35
+ targetStatus: sequelize_2.DataTypes.STRING,
36
+ targetErrors: {
37
+ type: sequelize_2.DataTypes.JSON,
38
+ // defaultValue: [],
39
+ },
40
+ targetCreatedAt: sequelize_2.DataTypes.DATE,
41
+ targetDelayUntil: sequelize_2.DataTypes.DATE,
42
+ submitEvent: sequelize_2.DataTypes.JSON,
43
+ sourceEvent: sequelize_2.DataTypes.JSON,
44
+ targetEvent: sequelize_2.DataTypes.JSON,
45
+ metadata: sequelize_2.DataTypes.JSON,
46
+ status: {
47
+ type: sequelize_2.DataTypes.STRING,
48
+ defaultValue: 'pending'
49
+ },
50
+ createdAt: sequelize_2.DataTypes.DATE,
51
+ updatedAt: sequelize_2.DataTypes.DATE,
52
+ }, { sequelize: sequelize_1.sequelize, tableName: 'transactions' });
package/dist/index.js CHANGED
@@ -3,14 +3,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const console_1 = require("console");
6
+ require("module-alias/register");
7
+ const assert_1 = __importDefault(require("assert"));
7
8
  const dotenv_1 = __importDefault(require("dotenv"));
8
- const tasks_1 = require("tasks");
9
- const logger_1 = __importDefault(require("./logger"));
10
- const net_1 = require("./net");
9
+ const ethers_1 = require("ethers");
11
10
  dotenv_1.default.config();
12
- (0, console_1.assert)(process.env.PRIVATE_KEY, "PRIVATE_KEY is not defined");
11
+ const logger_1 = __importDefault(require("@/logger"));
13
12
  const logger = new logger_1.default('Process');
13
+ (0, assert_1.default)(process.env.PRIVATE_KEY, "PRIVATE_KEY is not defined");
14
+ try {
15
+ new ethers_1.ethers.Wallet(process.env.PRIVATE_KEY);
16
+ }
17
+ catch (e) {
18
+ logger.error('Invalid private key');
19
+ process.exit(1);
20
+ }
21
+ const tasks_1 = require("@/tasks");
22
+ const net_1 = require("@/net");
14
23
  async function main() {
15
24
  (0, net_1.startPeer)({});
16
25
  const tasks = new tasks_1.Tasks();
@@ -11,7 +11,7 @@ const libp2p_websockets_1 = __importDefault(require("libp2p-websockets"));
11
11
  //@ts-ignore
12
12
  const libp2p_mplex_1 = __importDefault(require("libp2p-mplex"));
13
13
  const libp2p_noise_1 = require("libp2p-noise");
14
- const logger_1 = __importDefault(require("../../logger"));
14
+ const logger_1 = __importDefault(require("@/logger"));
15
15
  const libp2p_bootstrap_1 = __importDefault(require("libp2p-bootstrap"));
16
16
  const waait_1 = __importDefault(require("waait"));
17
17
  const libp2p_gossipsub_1 = __importDefault(require("@achingbrain/libp2p-gossipsub"));
@@ -21,8 +21,8 @@ const libp2p_mdns_1 = __importDefault(require("libp2p-mdns"));
21
21
  const libp2p_kad_dht_1 = __importDefault(require("libp2p-kad-dht"));
22
22
  //@ts-ignore
23
23
  const libp2p_pubsub_peer_discovery_1 = __importDefault(require("libp2p-pubsub-peer-discovery"));
24
- const protocol_1 = require("../protocol");
25
- const config_1 = __importDefault(require("../../config"));
24
+ const net_1 = require("@/net");
25
+ const config_1 = __importDefault(require("@/config"));
26
26
  const logger = new logger_1.default("Peer");
27
27
  let node;
28
28
  // Known peers addresses
@@ -79,14 +79,14 @@ const startPeer = async ({}) => {
79
79
  });
80
80
  logger.info("Peer ID:", node.peerId.toB58String());
81
81
  await node.start();
82
- protocol_1.protocol.start({
82
+ net_1.protocol.start({
83
83
  libp2p: node
84
84
  });
85
85
  node.on("peer:discovery", (peer) => logger.log(`Discovered peer ${peer}`)); // peer disc.
86
86
  node.connectionManager.on("peer:connect", (connection) => logger.log(`Connected to ${connection.remotePeer.toB58String()}`));
87
87
  logger.log("Peer discovery started");
88
88
  await (0, waait_1.default)(1000);
89
- setInterval(() => protocol_1.protocol.sendPeerInfo({
89
+ setInterval(() => net_1.protocol.sendPeerInfo({
90
90
  publicAddress: config_1.default.wallet.address,
91
91
  }), 5000);
92
92
  };
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.peerPool = exports.PeerPool = void 0;
7
- const types_1 = require("../../types");
8
- const config_1 = __importDefault(require("../../config"));
7
+ const types_1 = require("@/types");
8
+ const config_1 = __importDefault(require("@/config"));
9
9
  class PeerPool {
10
10
  constructor() {
11
11
  this.PEERS_CLEANUP_TIME_LIMIT = 1;
@@ -13,7 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.BaseDialProtocol = void 0;
14
14
  const it_pipe_1 = __importDefault(require("it-pipe"));
15
15
  const peer_id_1 = __importDefault(require("peer-id"));
16
- const utils_1 = require("../../../utils");
16
+ const utils_1 = require("@/utils");
17
17
  const waait_1 = __importDefault(require("waait"));
18
18
  class BaseDialProtocol {
19
19
  constructor(libp2p, protocol) {
@@ -4,15 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.SignatureDialProtocol = void 0;
7
- const utils_1 = require("../../../utils");
8
7
  const BaseDialProtocol_1 = require("./BaseDialProtocol");
9
8
  const waait_1 = __importDefault(require("waait"));
10
- const config_1 = __importDefault(require("config"));
11
- const constants_1 = require("../../../constants");
12
- const db_1 = require("db");
9
+ const config_1 = __importDefault(require("@/config"));
10
+ const db_1 = require("@/db");
13
11
  class SignatureDialProtocol extends BaseDialProtocol_1.BaseDialProtocol {
14
12
  constructor(libp2p) {
15
- super(libp2p, '/signatures');
13
+ super(libp2p, '/interop-x/signatures');
16
14
  this.timeout = 30000;
17
15
  }
18
16
  async response(data) {
@@ -20,7 +18,7 @@ class SignatureDialProtocol extends BaseDialProtocol_1.BaseDialProtocol {
20
18
  let event;
21
19
  let maxTimeout = 20000;
22
20
  do {
23
- event = await db_1.Execution.findOne({ where: { vnonce: data.vnonce.toString() } });
21
+ event = await db_1.Transaction.findOne({ where: { transactionHash: data.transactionHash } });
24
22
  if (!event) {
25
23
  await (0, waait_1.default)(1000);
26
24
  maxTimeout -= 1000;
@@ -33,15 +31,15 @@ class SignatureDialProtocol extends BaseDialProtocol_1.BaseDialProtocol {
33
31
  error: 'Event not found'
34
32
  };
35
33
  }
36
- const signedData = await (0, utils_1.signGnosisSafeTx)({
37
- to: constants_1.addresses[event.chainId].multisend,
38
- data: 'TODO',
39
- chainId: event.chainId,
40
- safeTxGas: data.safeTxGas,
41
- }, { signer });
34
+ // const signedData = await signGnosisSafeTx({
35
+ // to: addresses[event.chainId as ChainId].multisend,
36
+ // data: 'TODO',
37
+ // chainId: event.chainId as ChainId,
38
+ // safeTxGas: data.safeTxGas,
39
+ // }, { signer });
42
40
  return {
43
41
  signer: signer.address,
44
- data: signedData,
42
+ data: null, //signedData,
45
43
  };
46
44
  }
47
45
  }
@@ -8,8 +8,8 @@ const stream_1 = require("stream");
8
8
  const ethereumjs_util_1 = require("ethereumjs-util");
9
9
  const SignatureDialProtocol_1 = require("./dial/SignatureDialProtocol");
10
10
  const __1 = require("..");
11
- const config_1 = __importDefault(require("config"));
12
- const types_1 = require("types");
11
+ const config_1 = __importDefault(require("@/config"));
12
+ const types_1 = require("@/types");
13
13
  class Protocol extends stream_1.EventEmitter {
14
14
  constructor() {
15
15
  super(...arguments);
@@ -28,7 +28,7 @@ class Protocol extends stream_1.EventEmitter {
28
28
  }
29
29
  start({ libp2p, topic = null, }) {
30
30
  this.libp2p = libp2p;
31
- this.topic = topic || 'protocol';
31
+ this.topic = topic || 'itnerop-x-protocol';
32
32
  if (this.libp2p.isStarted())
33
33
  this.init();
34
34
  this.on('PeerInfo', (payload) => {
@@ -4,10 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BaseTask = void 0;
7
- const config_1 = __importDefault(require("config"));
7
+ const config_1 = __importDefault(require("@/config"));
8
8
  const events_1 = __importDefault(require("events"));
9
9
  const waait_1 = __importDefault(require("waait"));
10
- const logger_1 = __importDefault(require("../logger"));
10
+ const logger_1 = __importDefault(require("@/logger"));
11
11
  class BaseTask extends events_1.default {
12
12
  constructor({ logger }) {
13
13
  super();
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const BaseTask_1 = require("../BaseTask");
7
+ const logger_1 = __importDefault(require("@/logger"));
8
+ const ethers_1 = require("ethers");
9
+ const abi_1 = __importDefault(require("@/abi"));
10
+ const db_1 = require("@/db");
11
+ const utils_1 = require("@/utils");
12
+ const constants_1 = require("@/constants");
13
+ const config_1 = __importDefault(require("@/config"));
14
+ class SyncDepositEvents extends BaseTask_1.BaseTask {
15
+ constructor({ chainId }) {
16
+ super({
17
+ logger: new logger_1.default("InteropXGateway::SyncDepositEvents"),
18
+ });
19
+ this.chainId = chainId;
20
+ }
21
+ async pollHandler() {
22
+ const currentBlock = await this.provider.getBlockNumber();
23
+ const events = await this.contract.queryFilter(this.contract.filters.LogGatewayDeposit(), currentBlock - 2000, currentBlock);
24
+ let processedEvents = 0;
25
+ for (const event of events) {
26
+ try {
27
+ if (!event.args) {
28
+ continue;
29
+ }
30
+ const { sourceChainId, targetChainId, user, vnonce, amount, token } = event.args;
31
+ const uniqueIdentifier = {
32
+ type: 'desposit',
33
+ sourceTransactionHash: event.transactionHash,
34
+ sourceChainId: sourceChainId.toNumber(),
35
+ targetChainId: targetChainId.toNumber(),
36
+ };
37
+ if (await db_1.Transaction.findOne({ where: uniqueIdentifier })) {
38
+ continue;
39
+ }
40
+ const tx = await event.getTransaction();
41
+ await db_1.Transaction.create({
42
+ transactionHash: (0, utils_1.generateInteropTransactionHash)(uniqueIdentifier),
43
+ type: 'deposit',
44
+ from: tx.from,
45
+ to: user,
46
+ sourceChainId: sourceChainId.toNumber(),
47
+ sourceTransactionHash: event.transactionHash,
48
+ sourceBlockNumber: event.blockNumber,
49
+ sourceStatus: "uninitialised",
50
+ targetChainId: targetChainId.toNumber(),
51
+ targetStatus: "uninitialised",
52
+ submitEvent: {
53
+ user,
54
+ sourceChainId: sourceChainId.toString(),
55
+ targetChainId: targetChainId.toString(),
56
+ token: token,
57
+ ammout: amount.toString(),
58
+ vnonce: vnonce.toString(),
59
+ },
60
+ status: "pending",
61
+ });
62
+ this.logger.info(`Execution queued: ${event.transactionHash} ${event.blockNumber}`);
63
+ }
64
+ catch (error) {
65
+ this.logger.error(error);
66
+ }
67
+ }
68
+ if (processedEvents > 0)
69
+ this.logger.info(`${processedEvents} events processed`);
70
+ }
71
+ async start() {
72
+ this.logger.info(`Starting execution watcher on interop chain`);
73
+ this.contractAddress = constants_1.addresses[this.chainId].interopXGateway;
74
+ this.provider = new ethers_1.ethers.providers.JsonRpcProvider((0, utils_1.getRpcProviderUrl)(this.chainId));
75
+ this.contract = new ethers_1.ethers.Contract(this.contractAddress, abi_1.default.interopXGateway, new ethers_1.ethers.Wallet(config_1.default.privateKey, this.provider));
76
+ await super.start();
77
+ }
78
+ }
79
+ exports.default = SyncDepositEvents;
@@ -1,9 +1,17 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Tasks = void 0;
7
+ const SyncDepositEvents_1 = __importDefault(require("./InteropXGateway/SyncDepositEvents"));
4
8
  class Tasks {
5
9
  constructor() {
6
- this.tasks = [];
10
+ this.tasks = [
11
+ new SyncDepositEvents_1.default({
12
+ chainId: 43114
13
+ })
14
+ ];
7
15
  }
8
16
  async start() {
9
17
  for (const task of this.tasks) {
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });