@instadapp/interop-x 0.0.0-dev.9387bd9 → 0.0.0-dev.fd6776c

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 (73) hide show
  1. package/.env.example +2 -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 +5 -1
  8. package/dist/constants/addresses.js +17 -2
  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/db/sequelize.js +2 -1
  14. package/dist/index.js +24 -3
  15. package/dist/net/peer/index.js +5 -5
  16. package/dist/net/pool/index.js +2 -2
  17. package/dist/net/protocol/dial/BaseDialProtocol.js +1 -1
  18. package/dist/net/protocol/dial/SignatureDialProtocol.js +11 -13
  19. package/dist/net/protocol/index.js +3 -3
  20. package/dist/tasks/BaseTask.js +2 -2
  21. package/dist/tasks/InteropXGateway/SyncDepositEvents.js +79 -0
  22. package/dist/tasks/index.js +9 -1
  23. package/dist/typechain/Erc20.js +2 -0
  24. package/dist/typechain/GnosisSafe.js +2 -0
  25. package/dist/typechain/InteropBridgeToken.js +2 -0
  26. package/dist/typechain/InteropXGateway.js +2 -0
  27. package/dist/typechain/common.js +2 -0
  28. package/dist/typechain/factories/Erc20__factory.js +367 -0
  29. package/dist/typechain/factories/GnosisSafe__factory.js +1174 -0
  30. package/dist/typechain/factories/InteropBridgeToken__factory.js +459 -0
  31. package/dist/typechain/factories/InteropXGateway__factory.js +265 -0
  32. package/dist/typechain/factories/index.js +14 -0
  33. package/dist/typechain/index.js +35 -0
  34. package/dist/utils/index.js +14 -2
  35. package/package.json +10 -3
  36. package/src/abi/erc20.json +350 -0
  37. package/src/abi/gnosisSafe.json +747 -0
  38. package/src/abi/index.ts +11 -0
  39. package/src/abi/interopBridgeToken.json +286 -0
  40. package/src/abi/interopXGateway.json +184 -0
  41. package/src/config/index.ts +7 -1
  42. package/src/constants/addresses.ts +17 -2
  43. package/src/constants/index.ts +1 -0
  44. package/src/constants/tokens.ts +104 -0
  45. package/src/db/index.ts +1 -1
  46. package/src/db/models/index.ts +1 -1
  47. package/src/db/models/transaction.ts +92 -0
  48. package/src/db/sequelize.ts +2 -1
  49. package/src/index.ts +29 -4
  50. package/src/net/peer/index.ts +3 -3
  51. package/src/net/pool/index.ts +2 -2
  52. package/src/net/protocol/dial/BaseDialProtocol.ts +1 -1
  53. package/src/net/protocol/dial/SignatureDialProtocol.ts +13 -16
  54. package/src/net/protocol/index.ts +3 -3
  55. package/src/tasks/BaseTask.ts +2 -3
  56. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +114 -0
  57. package/src/tasks/index.ts +4 -1
  58. package/src/typechain/Erc20.ts +491 -0
  59. package/src/typechain/GnosisSafe.ts +1728 -0
  60. package/src/typechain/InteropBridgeToken.ts +686 -0
  61. package/src/typechain/InteropXGateway.ts +407 -0
  62. package/src/typechain/common.ts +44 -0
  63. package/src/typechain/factories/Erc20__factory.ts +368 -0
  64. package/src/typechain/factories/GnosisSafe__factory.ts +1178 -0
  65. package/src/typechain/factories/InteropBridgeToken__factory.ts +466 -0
  66. package/src/typechain/factories/InteropXGateway__factory.ts +272 -0
  67. package/src/typechain/factories/index.ts +7 -0
  68. package/src/typechain/index.ts +12 -0
  69. package/src/types.ts +2 -2
  70. package/src/utils/index.ts +15 -2
  71. package/tsconfig.json +3 -0
  72. package/dist/db/models/execution.js +0 -38
  73. 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' });
@@ -5,9 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.sequelize = void 0;
7
7
  //@ts-ignore
8
+ const config_1 = __importDefault(require("@/config"));
8
9
  const expand_home_dir_1 = __importDefault(require("expand-home-dir"));
9
10
  const sequelize_1 = require("sequelize");
10
- const basePath = (0, expand_home_dir_1.default)('~/.interop-x/data');
11
+ const basePath = (0, expand_home_dir_1.default)(`~/.interop-x/data/${config_1.default.publicAddress}/${config_1.default.staging ? 'staging' : ''}`);
11
12
  exports.sequelize = new sequelize_1.Sequelize({
12
13
  dialect: 'sqlite',
13
14
  storage: `${basePath}/localDB.sqlite`,
package/dist/index.js CHANGED
@@ -3,12 +3,33 @@ 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 module_alias_1 = __importDefault(require("module-alias"));
7
+ module_alias_1.default.addAliases({
8
+ "@/": __dirname + "/",
9
+ "@/logger": __dirname + "/logger",
10
+ "@/tasks": __dirname + "/tasks",
11
+ "@/utils": __dirname + "/utils",
12
+ "@/net": __dirname + "/net",
13
+ "@/db": __dirname + "/db",
14
+ "@/config": __dirname + "/config",
15
+ "@/types": __dirname + "/types",
16
+ "@/abi": __dirname + "/abi",
17
+ "@/constants": __dirname + "/constants",
18
+ "@/typechain": __dirname + "/typechain"
19
+ });
20
+ (0, module_alias_1.default)();
6
21
  const assert_1 = __importDefault(require("assert"));
7
22
  const dotenv_1 = __importDefault(require("dotenv"));
8
- const logger_1 = __importDefault(require("./logger"));
9
23
  const ethers_1 = require("ethers");
10
24
  dotenv_1.default.config();
25
+ const logger_1 = __importDefault(require("@/logger"));
11
26
  const logger = new logger_1.default('Process');
27
+ if (process.argv.at(-1) === 'help') {
28
+ console.log('Usage:');
29
+ console.log(' PRIVATE_KEY=abcd1234 interop-x');
30
+ console.log(' PRIVATE_KEY=abcd1234 STAGING=true interop-x');
31
+ process.exit(0);
32
+ }
12
33
  (0, assert_1.default)(process.env.PRIVATE_KEY, "PRIVATE_KEY is not defined");
13
34
  try {
14
35
  new ethers_1.ethers.Wallet(process.env.PRIVATE_KEY);
@@ -17,8 +38,8 @@ catch (e) {
17
38
  logger.error('Invalid private key');
18
39
  process.exit(1);
19
40
  }
20
- const tasks_1 = require("./tasks");
21
- const net_1 = require("./net");
41
+ const tasks_1 = require("@/tasks");
42
+ const net_1 = require("@/net");
22
43
  async function main() {
23
44
  (0, net_1.startPeer)({});
24
45
  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 });