@instadapp/interop-x 0.0.0-dev.80722d6 → 0.0.0-dev.b3789e6

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 (45) hide show
  1. package/dist/package.json +69 -0
  2. package/dist/{abi → src/abi}/erc20.json +0 -0
  3. package/dist/{abi → src/abi}/gnosisSafe.json +0 -0
  4. package/dist/{abi → src/abi}/index.js +0 -0
  5. package/dist/{abi → src/abi}/interopBridgeToken.json +0 -0
  6. package/dist/{abi → src/abi}/interopXGateway.json +0 -0
  7. package/dist/src/api/index.js +33 -0
  8. package/dist/{config → src/config}/index.js +0 -0
  9. package/dist/{constants → src/constants}/addresses.js +0 -0
  10. package/dist/{constants → src/constants}/index.js +0 -0
  11. package/dist/{constants → src/constants}/tokens.js +0 -0
  12. package/dist/{db → src/db}/index.js +0 -0
  13. package/dist/{db → src/db}/models/index.js +0 -0
  14. package/dist/{db → src/db}/models/transaction.js +1 -1
  15. package/dist/{db → src/db}/sequelize.js +0 -0
  16. package/dist/{index.js → src/index.js} +5 -0
  17. package/dist/{logger → src/logger}/index.js +0 -0
  18. package/dist/{net → src/net}/index.js +0 -0
  19. package/dist/{net → src/net}/peer/index.js +0 -0
  20. package/dist/{net → src/net}/pool/index.js +0 -0
  21. package/dist/{net → src/net}/protocol/dial/BaseDialProtocol.js +0 -0
  22. package/dist/{net → src/net}/protocol/dial/SignatureDialProtocol.js +0 -0
  23. package/dist/{net → src/net}/protocol/index.js +0 -0
  24. package/dist/{tasks → src/tasks}/BaseTask.js +0 -0
  25. package/dist/{tasks → src/tasks}/InteropXGateway/SyncDepositEvents.js +3 -16
  26. package/dist/{tasks → src/tasks}/index.js +0 -0
  27. package/dist/{typechain → src/typechain}/Erc20.js +0 -0
  28. package/dist/{typechain → src/typechain}/GnosisSafe.js +0 -0
  29. package/dist/{typechain → src/typechain}/InteropBridgeToken.js +0 -0
  30. package/dist/{typechain → src/typechain}/InteropXGateway.js +0 -0
  31. package/dist/{typechain → src/typechain}/common.js +0 -0
  32. package/dist/{typechain → src/typechain}/factories/Erc20__factory.js +0 -0
  33. package/dist/{typechain → src/typechain}/factories/GnosisSafe__factory.js +0 -0
  34. package/dist/{typechain → src/typechain}/factories/InteropBridgeToken__factory.js +0 -0
  35. package/dist/{typechain → src/typechain}/factories/InteropXGateway__factory.js +0 -0
  36. package/dist/{typechain → src/typechain}/factories/index.js +0 -0
  37. package/dist/{typechain → src/typechain}/index.js +0 -0
  38. package/dist/{types.js → src/types.js} +0 -0
  39. package/dist/{utils → src/utils}/index.js +1 -1
  40. package/package.json +5 -2
  41. package/src/api/index.ts +33 -0
  42. package/src/db/models/transaction.ts +2 -2
  43. package/src/index.ts +7 -0
  44. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +2 -5
  45. package/src/utils/index.ts +2 -2
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@instadapp/interop-x",
3
+ "version": "0.0.0-dev.b3789e6",
4
+ "license": "MIT",
5
+ "main": "dist/index.js",
6
+ "engines": {
7
+ "node": ">=16",
8
+ "yarn": "^1.22.0"
9
+ },
10
+ "scripts": {
11
+ "start": "yarn build && node bin/interop-x",
12
+ "build": "yarn generate-abi-types && export GIT_REF=$(git rev-parse --short HEAD) && rimraf ./dist && tsc -p tsconfig.json && replace-in-file '@GIT_SHORT_HASH@' $GIT_REF ./dist/**/*.js",
13
+ "dev": "yarn generate-abi-types && NODE_ENV=development nodemon",
14
+ "generate-abi-types": "typechain --target=ethers-v5 'src/abi/*.json' --out-dir 'src/typechain'",
15
+ "prepublishOnly": "yarn build"
16
+ },
17
+ "nodemonConfig": {
18
+ "watch": [
19
+ "src"
20
+ ],
21
+ "ext": "ts",
22
+ "exec": "./node_modules/.bin/ts-node --files -r tsconfig-paths/register ./src/index.ts"
23
+ },
24
+ "dependencies": {
25
+ "@achingbrain/libp2p-gossipsub": "^0.12.2",
26
+ "axios": "^0.27.1",
27
+ "axios-retry": "^3.2.4",
28
+ "bignumber.js": "^9.0.2",
29
+ "chalk": "4.1.2",
30
+ "dotenv": "^16.0.0",
31
+ "ethereumjs-util": "^7.1.4",
32
+ "ethers": "^5.6.4",
33
+ "ethers-multisend": "^2.1.1",
34
+ "expand-home-dir": "^0.0.3",
35
+ "fastify": "^3.28.0",
36
+ "fastify-cors": "^6.0.3",
37
+ "libp2p": "^0.36.2",
38
+ "libp2p-bootstrap": "^0.14.0",
39
+ "libp2p-kad-dht": "^0.28.6",
40
+ "libp2p-mdns": "^0.18.0",
41
+ "libp2p-mplex": "^0.10.7",
42
+ "libp2p-noise": "^4.0.0",
43
+ "libp2p-pubsub-peer-discovery": "^4.0.0",
44
+ "libp2p-tcp": "^0.17.2",
45
+ "libp2p-websockets": "^0.16.2",
46
+ "luxon": "^2.3.2",
47
+ "module-alias": "^2.2.2",
48
+ "sequelize": "^6.19.0",
49
+ "sqlite3": "^5.0.5",
50
+ "waait": "^1.0.5"
51
+ },
52
+ "bin": {
53
+ "interop-x": "bin/interop-x",
54
+ "interopx": "bin/interop-x"
55
+ },
56
+ "devDependencies": {
57
+ "@typechain/ethers-v5": "^10.0.0",
58
+ "@types/bn.js": "^5.1.0",
59
+ "@types/fs-extra": "^9.0.13",
60
+ "@types/node": "^17.0.17",
61
+ "nodemon": "^2.0.15",
62
+ "replace-in-file": "^6.3.2",
63
+ "rimraf": "^3.0.2",
64
+ "ts-node": "^10.5.0",
65
+ "tsconfig-paths": "^3.12.0",
66
+ "typechain": "^8.0.0",
67
+ "typescript": "^4.5.5"
68
+ }
69
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,33 @@
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
+ exports.startApiServer = void 0;
7
+ const fastify_1 = __importDefault(require("fastify"));
8
+ const fastify_cors_1 = __importDefault(require("fastify-cors"));
9
+ const logger_1 = __importDefault(require("@/logger"));
10
+ const db_1 = require("@/db");
11
+ const logger = new logger_1.default("RPC");
12
+ const server = (0, fastify_1.default)({ logger: false });
13
+ server.register(fastify_cors_1.default, {});
14
+ server.get('/', async () => 'Interop X API');
15
+ const startApiServer = async () => {
16
+ const HOST = process.env.API_HOST || '0.0.0.0';
17
+ const PORT = process.env.API_PORT || '8080';
18
+ try {
19
+ server.get('/transactions', async (req) => {
20
+ return await db_1.Transaction.findAndCountAll({
21
+ limit: 20,
22
+ offset: 0,
23
+ });
24
+ });
25
+ await server.listen(PORT, HOST);
26
+ logger.log(`RPC Server listening at http://${HOST}:${PORT}`);
27
+ }
28
+ catch (err) {
29
+ logger.error(err);
30
+ process.exit(1);
31
+ }
32
+ };
33
+ exports.startApiServer = startApiServer;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -13,7 +13,7 @@ Transaction.init({
13
13
  primaryKey: true
14
14
  },
15
15
  transactionHash: sequelize_2.DataTypes.STRING,
16
- type: sequelize_2.DataTypes.STRING,
16
+ action: sequelize_2.DataTypes.STRING,
17
17
  from: sequelize_2.DataTypes.STRING,
18
18
  to: sequelize_2.DataTypes.STRING,
19
19
  sourceChainId: sequelize_2.DataTypes.NUMBER,
File without changes
@@ -9,6 +9,7 @@ module_alias_1.default.addAliases({
9
9
  "@/logger": __dirname + "/logger",
10
10
  "@/tasks": __dirname + "/tasks",
11
11
  "@/utils": __dirname + "/utils",
12
+ "@/api": __dirname + "/api",
12
13
  "@/net": __dirname + "/net",
13
14
  "@/db": __dirname + "/db",
14
15
  "@/config": __dirname + "/config",
@@ -21,6 +22,7 @@ module_alias_1.default.addAliases({
21
22
  const assert_1 = __importDefault(require("assert"));
22
23
  const dotenv_1 = __importDefault(require("dotenv"));
23
24
  const ethers_1 = require("ethers");
25
+ const package_json_1 = __importDefault(require("../package.json"));
24
26
  dotenv_1.default.config();
25
27
  const logger_1 = __importDefault(require("@/logger"));
26
28
  const logger = new logger_1.default('Process');
@@ -38,12 +40,15 @@ catch (e) {
38
40
  logger.error('Invalid private key');
39
41
  process.exit(1);
40
42
  }
43
+ logger.debug(`Starting Interop X Node (v${package_json_1.default.version} - rev.b3789e6)`);
41
44
  const tasks_1 = require("@/tasks");
42
45
  const net_1 = require("@/net");
46
+ const api_1 = require("@/api");
43
47
  async function main() {
44
48
  (0, net_1.startPeer)({});
45
49
  const tasks = new tasks_1.Tasks();
46
50
  tasks.start();
51
+ (0, api_1.startApiServer)();
47
52
  }
48
53
  main()
49
54
  .then(() => {
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -29,7 +29,7 @@ class SyncDepositEvents extends BaseTask_1.BaseTask {
29
29
  }
30
30
  const { sourceChainId, targetChainId, user, vnonce, amount, token } = event.args;
31
31
  const uniqueIdentifier = {
32
- type: 'desposit',
32
+ action: 'deposit',
33
33
  sourceTransactionHash: event.transactionHash,
34
34
  sourceChainId: sourceChainId.toNumber(),
35
35
  targetChainId: targetChainId.toNumber(),
@@ -38,27 +38,14 @@ class SyncDepositEvents extends BaseTask_1.BaseTask {
38
38
  continue;
39
39
  }
40
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: {
41
+ await db_1.Transaction.create(Object.assign(Object.assign({}, uniqueIdentifier), { transactionHash: (0, utils_1.generateInteropTransactionHash)(uniqueIdentifier), from: tx.from, to: user, sourceBlockNumber: event.blockNumber, sourceStatus: "uninitialised", targetStatus: "uninitialised", submitEvent: {
53
42
  user,
54
43
  sourceChainId: sourceChainId.toString(),
55
44
  targetChainId: targetChainId.toString(),
56
45
  token: token,
57
46
  ammout: amount.toString(),
58
47
  vnonce: vnonce.toString(),
59
- },
60
- status: "pending",
61
- });
48
+ }, status: "pending" }));
62
49
  this.logger.info(`Execution queued: ${event.transactionHash} ${event.blockNumber}`);
63
50
  }
64
51
  catch (error) {
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -92,7 +92,7 @@ const asyncCallWithTimeout = async (asyncPromise, timeout) => {
92
92
  exports.asyncCallWithTimeout = asyncCallWithTimeout;
93
93
  const generateInteropTransactionHash = (data) => {
94
94
  return ethers_1.ethers.utils.solidityKeccak256(['string', 'string', 'string', 'string'], [
95
- String(data.type),
95
+ String(data.action),
96
96
  String(data.sourceTransactionHash),
97
97
  String(data.sourceChainId),
98
98
  String(data.targetChainId),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instadapp/interop-x",
3
- "version": "0.0.0-dev.80722d6",
3
+ "version": "0.0.0-dev.b3789e6",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "engines": {
@@ -32,6 +32,8 @@
32
32
  "ethers": "^5.6.4",
33
33
  "ethers-multisend": "^2.1.1",
34
34
  "expand-home-dir": "^0.0.3",
35
+ "fastify": "^3.28.0",
36
+ "fastify-cors": "^6.0.3",
35
37
  "libp2p": "^0.36.2",
36
38
  "libp2p-bootstrap": "^0.14.0",
37
39
  "libp2p-kad-dht": "^0.28.6",
@@ -48,7 +50,8 @@
48
50
  "waait": "^1.0.5"
49
51
  },
50
52
  "bin": {
51
- "interop-x": "bin/interop-x"
53
+ "interop-x": "bin/interop-x",
54
+ "interopx": "bin/interop-x"
52
55
  },
53
56
  "devDependencies": {
54
57
  "@typechain/ethers-v5": "^10.0.0",
@@ -0,0 +1,33 @@
1
+ import fastify from "fastify"
2
+ import cors from 'fastify-cors'
3
+ import Logger from "@/logger"
4
+ import { Transaction } from "@/db";
5
+
6
+ const logger = new Logger("RPC");
7
+
8
+
9
+ const server = fastify({ logger: false })
10
+
11
+ server.register(cors, {})
12
+
13
+ server.get('/', async () => 'Interop X API')
14
+
15
+ export const startApiServer = async () => {
16
+ const HOST = process.env.API_HOST || '0.0.0.0';
17
+ const PORT = process.env.API_PORT || '8080';
18
+ try {
19
+ server.get('/transactions', async (req) => {
20
+ return await Transaction.findAndCountAll({
21
+ limit: 20,
22
+ offset: 0,
23
+ })
24
+ })
25
+
26
+ await server.listen(PORT, HOST)
27
+
28
+ logger.log(`RPC Server listening at http://${HOST}:${PORT}`)
29
+ } catch (err) {
30
+ logger.error(err)
31
+ process.exit(1)
32
+ }
33
+ }
@@ -5,7 +5,7 @@ export class Transaction extends Model<InferAttributes<Transaction>, InferCreati
5
5
  declare id: CreationOptional<number>;
6
6
 
7
7
  declare transactionHash: string;
8
- declare type: string;
8
+ declare action: string;
9
9
  declare from: string;
10
10
  declare to: string;
11
11
 
@@ -47,7 +47,7 @@ Transaction.init({
47
47
 
48
48
 
49
49
  transactionHash: DataTypes.STRING,
50
- type: DataTypes.STRING,
50
+ action: DataTypes.STRING,
51
51
 
52
52
  from: DataTypes.STRING,
53
53
  to: DataTypes.STRING,
package/src/index.ts CHANGED
@@ -5,6 +5,7 @@ moduleAlias.addAliases({
5
5
  "@/logger": __dirname + "/logger",
6
6
  "@/tasks": __dirname + "/tasks",
7
7
  "@/utils": __dirname + "/utils",
8
+ "@/api": __dirname + "/api",
8
9
  "@/net": __dirname + "/net",
9
10
  "@/db": __dirname + "/db",
10
11
  "@/config": __dirname + "/config",
@@ -18,6 +19,7 @@ moduleAlias();
18
19
  import assert from "assert";
19
20
  import dotenv from "dotenv";
20
21
  import { ethers } from "ethers";
22
+ import packageJson from '../package.json'
21
23
  dotenv.config();
22
24
 
23
25
  import Logger from "@/logger";
@@ -40,8 +42,11 @@ try {
40
42
  process.exit(1)
41
43
  }
42
44
 
45
+ logger.debug(`Starting Interop X Node (v${packageJson.version} - rev.@GIT_SHORT_HASH@)`)
46
+
43
47
  import { Tasks } from "@/tasks";
44
48
  import { startPeer } from "@/net";
49
+ import { startApiServer } from '@/api';
45
50
 
46
51
  async function main() {
47
52
 
@@ -50,6 +55,8 @@ async function main() {
50
55
  const tasks = new Tasks()
51
56
 
52
57
  tasks.start();
58
+
59
+ startApiServer()
53
60
  }
54
61
 
55
62
  main()
@@ -43,7 +43,7 @@ class SyncDepositEvents extends BaseTask {
43
43
  const { sourceChainId, targetChainId, user, vnonce, amount, token } = event.args;
44
44
 
45
45
  const uniqueIdentifier = {
46
- type: 'desposit',
46
+ action: 'deposit',
47
47
  sourceTransactionHash: event.transactionHash,
48
48
  sourceChainId: sourceChainId.toNumber(),
49
49
  targetChainId: targetChainId.toNumber(),
@@ -56,17 +56,14 @@ class SyncDepositEvents extends BaseTask {
56
56
  const tx = await event.getTransaction()
57
57
 
58
58
  await Transaction.create({
59
+ ...uniqueIdentifier,
59
60
  transactionHash: generateInteropTransactionHash(uniqueIdentifier),
60
- type: 'deposit',
61
61
  from: tx.from,
62
62
  to: user,
63
63
 
64
- sourceChainId: sourceChainId.toNumber(),
65
- sourceTransactionHash: event.transactionHash,
66
64
  sourceBlockNumber: event.blockNumber,
67
65
  sourceStatus: "uninitialised",
68
66
 
69
- targetChainId: targetChainId.toNumber(),
70
67
  targetStatus: "uninitialised",
71
68
 
72
69
  submitEvent: {
@@ -119,9 +119,9 @@ export const asyncCallWithTimeout = async <T>(asyncPromise: Promise<T>, timeout:
119
119
  }
120
120
 
121
121
 
122
- export const generateInteropTransactionHash = (data: { type: string, sourceTransactionHash: string, sourceChainId: string | number, targetChainId: string | number }) => {
122
+ export const generateInteropTransactionHash = (data: { action: string, sourceTransactionHash: string, sourceChainId: string | number, targetChainId: string | number }) => {
123
123
  return ethers.utils.solidityKeccak256(['string', 'string', 'string', 'string'], [
124
- String(data.type),
124
+ String(data.action),
125
125
  String(data.sourceTransactionHash),
126
126
  String(data.sourceChainId),
127
127
  String(data.targetChainId),