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

Sign up to get free protection for your applications and to get access to all the features.
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),