@instadapp/interop-x 0.0.0-dev.fabee70 → 0.0.0-dev.fded533

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. package/dist/package.json +2 -2
  2. package/dist/src/abi/interopBridgeToken.json +21 -9
  3. package/dist/src/abi/interopXGateway.json +11 -11
  4. package/dist/src/config/index.js +10 -1
  5. package/dist/src/constants/addresses.js +1 -1
  6. package/dist/src/constants/itokens.js +1 -1
  7. package/dist/src/index.js +28 -5
  8. package/dist/src/net/protocol/dial/{SignatureDialProtocol.1.js → TransactionStatusDialProtocol.js} +0 -0
  9. package/dist/src/net/protocol/index.js +6 -6
  10. package/dist/src/tasks/AutoUpdateTask.js +20 -7
  11. package/dist/src/tasks/BaseTask.js +4 -0
  12. package/dist/src/tasks/InteropBridge/{SyncWithdrawEvents.js → SyncBurnEvents.js} +10 -8
  13. package/dist/src/tasks/InteropBridge/SyncMintEvents.js +67 -0
  14. package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +14 -1
  15. package/dist/src/tasks/InteropXGateway/SyncDepositEvents.js +2 -2
  16. package/dist/src/tasks/InteropXGateway/SyncWithdrawtEvents.js +72 -0
  17. package/dist/src/tasks/index.js +16 -5
  18. package/dist/src/typechain/factories/InteropBridgeToken__factory.js +23 -11
  19. package/dist/src/typechain/factories/InteropXGateway__factory.js +14 -14
  20. package/dist/src/utils/index.js +6 -6
  21. package/package.json +2 -2
  22. package/src/abi/interopBridgeToken.json +21 -9
  23. package/src/abi/interopXGateway.json +11 -11
  24. package/src/config/index.ts +9 -1
  25. package/src/constants/addresses.ts +1 -1
  26. package/src/constants/itokens.ts +1 -1
  27. package/src/index.ts +41 -9
  28. package/src/net/protocol/dial/{SignatureDialProtocol.1.ts → TransactionStatusDialProtocol.ts} +0 -0
  29. package/src/net/protocol/index.ts +5 -5
  30. package/src/tasks/AutoUpdateTask.ts +24 -15
  31. package/src/tasks/BaseTask.ts +5 -0
  32. package/src/tasks/InteropBridge/{SyncWithdrawEvents.ts → SyncBurnEvents.ts} +10 -8
  33. package/src/tasks/InteropBridge/SyncMintEvents.ts +99 -0
  34. package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +18 -4
  35. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +2 -2
  36. package/src/tasks/InteropXGateway/SyncWithdrawtEvents.ts +105 -0
  37. package/src/tasks/index.ts +24 -5
  38. package/src/typechain/InteropBridgeToken.ts +23 -17
  39. package/src/typechain/InteropXGateway.ts +13 -13
  40. package/src/typechain/factories/InteropBridgeToken__factory.ts +23 -11
  41. package/src/typechain/factories/InteropXGateway__factory.ts +14 -14
  42. package/src/utils/index.ts +6 -6
@@ -6,27 +6,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Tasks = void 0;
7
7
  const ProcessDepositEvents_1 = __importDefault(require("./InteropXGateway/ProcessDepositEvents"));
8
8
  const SyncDepositEvents_1 = __importDefault(require("./InteropXGateway/SyncDepositEvents"));
9
- const SyncWithdrawEvents_1 = __importDefault(require("./InteropBridge/SyncWithdrawEvents"));
9
+ const SyncWithdrawtEvents_1 = __importDefault(require("./InteropXGateway/SyncWithdrawtEvents"));
10
10
  const ProcessWithdrawEvents_1 = __importDefault(require("./InteropBridge/ProcessWithdrawEvents"));
11
- const AutoUpdateTask_1 = __importDefault(require("./AutoUpdateTask"));
11
+ const SyncBurnEvents_1 = __importDefault(require("./InteropBridge/SyncBurnEvents"));
12
+ const SyncMintEvents_1 = __importDefault(require("./InteropBridge/SyncMintEvents"));
12
13
  const SyncTransactionStatusTask_1 = __importDefault(require("./Transactions/SyncTransactionStatusTask"));
14
+ const AutoUpdateTask_1 = __importDefault(require("./AutoUpdateTask"));
13
15
  class Tasks {
14
16
  constructor() {
15
17
  this.tasks = [
16
18
  new SyncTransactionStatusTask_1.default(),
17
19
  new AutoUpdateTask_1.default(),
20
+ // InteropXGateway
18
21
  new SyncDepositEvents_1.default({
19
22
  chainId: 43114
20
23
  }),
21
24
  new ProcessDepositEvents_1.default({
22
25
  chainId: 43114
23
26
  }),
24
- new SyncWithdrawEvents_1.default({
25
- chainId: 137,
26
- itokenAddress: '0xEab02fe1F016eE3e4106c1C6aad35FeEe657268E',
27
+ new SyncWithdrawtEvents_1.default({
28
+ chainId: 43114
27
29
  }),
30
+ // InteropBridge
28
31
  new ProcessWithdrawEvents_1.default({
29
32
  chainId: 137,
33
+ }),
34
+ new SyncMintEvents_1.default({
35
+ chainId: 137,
36
+ itokenAddress: '0x62c0045f3277e7067cacad3c8038eeabb1bd92d1',
37
+ }),
38
+ new SyncBurnEvents_1.default({
39
+ chainId: 137,
40
+ itokenAddress: '0x62c0045f3277e7067cacad3c8038eeabb1bd92d1',
30
41
  })
31
42
  ];
32
43
  }
@@ -57,11 +57,17 @@ const _abi = [
57
57
  name: "amount",
58
58
  type: "uint256",
59
59
  },
60
+ {
61
+ indexed: false,
62
+ internalType: "uint32",
63
+ name: "sourceChainId",
64
+ type: "uint32",
65
+ },
60
66
  {
61
67
  indexed: true,
62
- internalType: "uint256",
63
- name: "chainId",
64
- type: "uint256",
68
+ internalType: "uint32",
69
+ name: "targetChainId",
70
+ type: "uint32",
65
71
  },
66
72
  ],
67
73
  name: "Burn",
@@ -84,14 +90,20 @@ const _abi = [
84
90
  },
85
91
  {
86
92
  indexed: true,
87
- internalType: "uint256",
88
- name: "chainId",
89
- type: "uint256",
93
+ internalType: "uint32",
94
+ name: "sourceChainId",
95
+ type: "uint32",
96
+ },
97
+ {
98
+ indexed: false,
99
+ internalType: "uint32",
100
+ name: "targetChainId",
101
+ type: "uint32",
90
102
  },
91
103
  {
92
104
  indexed: true,
93
105
  internalType: "bytes32",
94
- name: "transactionHash",
106
+ name: "submitTransactionHash",
95
107
  type: "bytes32",
96
108
  },
97
109
  ],
@@ -222,9 +234,9 @@ const _abi = [
222
234
  type: "uint256",
223
235
  },
224
236
  {
225
- internalType: "uint256",
237
+ internalType: "uint32",
226
238
  name: "chainId",
227
- type: "uint256",
239
+ type: "uint32",
228
240
  },
229
241
  ],
230
242
  name: "burn",
@@ -306,9 +318,9 @@ const _abi = [
306
318
  type: "uint256",
307
319
  },
308
320
  {
309
- internalType: "uint256",
321
+ internalType: "uint32",
310
322
  name: "chainId",
311
- type: "uint256",
323
+ type: "uint32",
312
324
  },
313
325
  {
314
326
  internalType: "bytes32",
@@ -46,15 +46,15 @@ const _abi = [
46
46
  },
47
47
  {
48
48
  indexed: false,
49
- internalType: "uint256",
49
+ internalType: "uint32",
50
50
  name: "sourceChainId",
51
- type: "uint256",
51
+ type: "uint32",
52
52
  },
53
53
  {
54
54
  indexed: true,
55
- internalType: "uint256",
55
+ internalType: "uint32",
56
56
  name: "targetChainId",
57
- type: "uint256",
57
+ type: "uint32",
58
58
  },
59
59
  ],
60
60
  name: "LogGatewayDeposit",
@@ -83,15 +83,15 @@ const _abi = [
83
83
  },
84
84
  {
85
85
  indexed: true,
86
- internalType: "uint256",
86
+ internalType: "uint32",
87
87
  name: "sourceChainId",
88
- type: "uint256",
88
+ type: "uint32",
89
89
  },
90
90
  {
91
91
  indexed: false,
92
- internalType: "uint256",
92
+ internalType: "uint32",
93
93
  name: "targetChainId",
94
- type: "uint256",
94
+ type: "uint32",
95
95
  },
96
96
  {
97
97
  indexed: true,
@@ -148,9 +148,9 @@ const _abi = [
148
148
  type: "uint256",
149
149
  },
150
150
  {
151
- internalType: "uint256",
151
+ internalType: "uint32",
152
152
  name: "chainId_",
153
- type: "uint256",
153
+ type: "uint32",
154
154
  },
155
155
  ],
156
156
  name: "deposit",
@@ -176,9 +176,9 @@ const _abi = [
176
176
  type: "uint256",
177
177
  },
178
178
  {
179
- internalType: "uint256",
179
+ internalType: "uint32",
180
180
  name: "chainId_",
181
- type: "uint256",
181
+ type: "uint32",
182
182
  },
183
183
  ],
184
184
  name: "depositFor",
@@ -224,9 +224,9 @@ const _abi = [
224
224
  type: "address",
225
225
  },
226
226
  {
227
- internalType: "uint256",
227
+ internalType: "uint32",
228
228
  name: "chainId_",
229
- type: "uint256",
229
+ type: "uint32",
230
230
  },
231
231
  {
232
232
  internalType: "bytes32",
@@ -167,20 +167,20 @@ const buildWithdrawDataForTransaction = async (transaction, type) => {
167
167
  if (!transaction.submitEvent) {
168
168
  throw Error('Cannot build data for transaction without submitEvent');
169
169
  }
170
- const { to, amount, chainId, itoken: itokenAddress } = transaction.submitEvent;
171
- const itoken = constants_1.itokens[transaction.sourceChainId].find(token => token.address.toLowerCase() === itokenAddress.toLowerCase());
170
+ const { to, amount, sourceChainId, targetChainId, itoken: itokenAddress } = transaction.submitEvent;
171
+ const itoken = constants_1.itokens[sourceChainId].find(token => token.address.toLowerCase() === itokenAddress.toLowerCase());
172
172
  if (!itoken) {
173
173
  throw Error('Cannot build data for transaction without itoken');
174
174
  }
175
- const token = constants_1.tokens[chainId].find(t => t.symbol.toLowerCase() === itoken.symbol.toLowerCase());
175
+ const token = constants_1.tokens[targetChainId].find(t => t.symbol.toLowerCase() === itoken.symbol.toLowerCase());
176
176
  if (!token) {
177
177
  throw Error('Cannot build data for transaction without token');
178
178
  }
179
- const targetChainProvider = new ethers_1.ethers.providers.JsonRpcProvider((0, exports.getRpcProviderUrl)(transaction.targetChainId));
179
+ const targetChainProvider = new ethers_1.ethers.providers.JsonRpcProvider((0, exports.getRpcProviderUrl)(targetChainId));
180
180
  const targetWallet = new ethers_1.ethers.Wallet(config_1.default.privateKey, targetChainProvider);
181
- const gatewayAddress = constants_1.addresses[chainId].interopXGateway;
181
+ const gatewayAddress = constants_1.addresses[targetChainId].interopXGateway;
182
182
  const interopBridgeContract = getContract(gatewayAddress, abi_1.default.interopXGateway, targetWallet);
183
- const { data } = await interopBridgeContract.populateTransaction.systemWithdraw(ethers_1.ethers.BigNumber.from(amount.toString()), to, token.address, ethers_1.ethers.BigNumber.from(transaction.sourceChainId.toString()), transaction.submitTransactionHash);
183
+ const { data } = await interopBridgeContract.populateTransaction.systemWithdraw(ethers_1.ethers.BigNumber.from(amount.toString()), to, token.address, ethers_1.ethers.BigNumber.from(sourceChainId.toString()), transaction.submitTransactionHash);
184
184
  transactions.push({
185
185
  to: gatewayAddress,
186
186
  data: data,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instadapp/interop-x",
3
- "version": "0.0.0-dev.fabee70",
3
+ "version": "0.0.0-dev.fded533",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "engines": {
@@ -28,7 +28,6 @@
28
28
  "await-spawn": "^4.0.2",
29
29
  "axios": "^0.27.1",
30
30
  "axios-retry": "^3.2.4",
31
- "bignumber.js": "^9.0.2",
32
31
  "chalk": "4.1.2",
33
32
  "dotenv": "^16.0.0",
34
33
  "ethereumjs-util": "^7.1.4",
@@ -36,6 +35,7 @@
36
35
  "ethers-multisend": "^2.1.1",
37
36
  "expand-home-dir": "^0.0.3",
38
37
  "fastify": "^3.28.0",
38
+ "fs-extra": "^10.1.0",
39
39
  "libp2p": "^0.36.2",
40
40
  "libp2p-bootstrap": "^0.14.0",
41
41
  "libp2p-kad-dht": "^0.28.6",
@@ -46,11 +46,17 @@
46
46
  "name": "amount",
47
47
  "type": "uint256"
48
48
  },
49
+ {
50
+ "indexed": false,
51
+ "internalType": "uint32",
52
+ "name": "sourceChainId",
53
+ "type": "uint32"
54
+ },
49
55
  {
50
56
  "indexed": true,
51
- "internalType": "uint256",
52
- "name": "chainId",
53
- "type": "uint256"
57
+ "internalType": "uint32",
58
+ "name": "targetChainId",
59
+ "type": "uint32"
54
60
  }
55
61
  ],
56
62
  "name": "Burn",
@@ -73,14 +79,20 @@
73
79
  },
74
80
  {
75
81
  "indexed": true,
76
- "internalType": "uint256",
77
- "name": "chainId",
78
- "type": "uint256"
82
+ "internalType": "uint32",
83
+ "name": "sourceChainId",
84
+ "type": "uint32"
85
+ },
86
+ {
87
+ "indexed": false,
88
+ "internalType": "uint32",
89
+ "name": "targetChainId",
90
+ "type": "uint32"
79
91
  },
80
92
  {
81
93
  "indexed": true,
82
94
  "internalType": "bytes32",
83
- "name": "transactionHash",
95
+ "name": "submitTransactionHash",
84
96
  "type": "bytes32"
85
97
  }
86
98
  ],
@@ -164,7 +176,7 @@
164
176
  "inputs": [
165
177
  { "internalType": "address", "name": "to", "type": "address" },
166
178
  { "internalType": "uint256", "name": "amount", "type": "uint256" },
167
- { "internalType": "uint256", "name": "chainId", "type": "uint256" }
179
+ { "internalType": "uint32", "name": "chainId", "type": "uint32" }
168
180
  ],
169
181
  "name": "burn",
170
182
  "outputs": [],
@@ -206,7 +218,7 @@
206
218
  "inputs": [
207
219
  { "internalType": "address", "name": "to", "type": "address" },
208
220
  { "internalType": "uint256", "name": "amount", "type": "uint256" },
209
- { "internalType": "uint256", "name": "chainId", "type": "uint256" },
221
+ { "internalType": "uint32", "name": "chainId", "type": "uint32" },
210
222
  {
211
223
  "internalType": "bytes32",
212
224
  "name": "transactionHash",
@@ -35,15 +35,15 @@
35
35
  },
36
36
  {
37
37
  "indexed": false,
38
- "internalType": "uint256",
38
+ "internalType": "uint32",
39
39
  "name": "sourceChainId",
40
- "type": "uint256"
40
+ "type": "uint32"
41
41
  },
42
42
  {
43
43
  "indexed": true,
44
- "internalType": "uint256",
44
+ "internalType": "uint32",
45
45
  "name": "targetChainId",
46
- "type": "uint256"
46
+ "type": "uint32"
47
47
  }
48
48
  ],
49
49
  "name": "LogGatewayDeposit",
@@ -72,15 +72,15 @@
72
72
  },
73
73
  {
74
74
  "indexed": true,
75
- "internalType": "uint256",
75
+ "internalType": "uint32",
76
76
  "name": "sourceChainId",
77
- "type": "uint256"
77
+ "type": "uint32"
78
78
  },
79
79
  {
80
80
  "indexed": false,
81
- "internalType": "uint256",
81
+ "internalType": "uint32",
82
82
  "name": "targetChainId",
83
- "type": "uint256"
83
+ "type": "uint32"
84
84
  },
85
85
  {
86
86
  "indexed": true,
@@ -122,7 +122,7 @@
122
122
  "inputs": [
123
123
  { "internalType": "address", "name": "token_", "type": "address" },
124
124
  { "internalType": "uint256", "name": "amount_", "type": "uint256" },
125
- { "internalType": "uint256", "name": "chainId_", "type": "uint256" }
125
+ { "internalType": "uint32", "name": "chainId_", "type": "uint32" }
126
126
  ],
127
127
  "name": "deposit",
128
128
  "outputs": [],
@@ -134,7 +134,7 @@
134
134
  { "internalType": "address", "name": "to_", "type": "address" },
135
135
  { "internalType": "address", "name": "token_", "type": "address" },
136
136
  { "internalType": "uint256", "name": "amount_", "type": "uint256" },
137
- { "internalType": "uint256", "name": "chainId_", "type": "uint256" }
137
+ { "internalType": "uint32", "name": "chainId_", "type": "uint32" }
138
138
  ],
139
139
  "name": "depositFor",
140
140
  "outputs": [],
@@ -160,7 +160,7 @@
160
160
  { "internalType": "uint256", "name": "amount_", "type": "uint256" },
161
161
  { "internalType": "address", "name": "user_", "type": "address" },
162
162
  { "internalType": "address", "name": "token_", "type": "address" },
163
- { "internalType": "uint256", "name": "chainId_", "type": "uint256" },
163
+ { "internalType": "uint32", "name": "chainId_", "type": "uint32" },
164
164
  {
165
165
  "internalType": "bytes32",
166
166
  "name": "transactionHash_",
@@ -1,5 +1,7 @@
1
1
  import { ethers, Wallet } from "ethers"
2
2
  import { EventBus, EventBusType } from "@/types"
3
+ import fs from 'fs-extra'
4
+ import expandHomeDir from "expand-home-dir";
3
5
 
4
6
  class Config {
5
7
  public readonly events: EventBusType
@@ -9,15 +11,17 @@ class Config {
9
11
  public readonly wallet: Wallet
10
12
  public readonly staging: boolean
11
13
  public readonly autoUpdate: boolean
14
+ public readonly baseConfigPath: string
12
15
 
13
16
  constructor() {
14
17
  this.events = new EventBus() as EventBusType
15
- this.maxPeers = 10
18
+ this.maxPeers = 20
16
19
  this.privateKey = process.env.PRIVATE_KEY as string;
17
20
  this.staging = !! process.env.STAGING && process.env.STAGING === 'true';
18
21
  this.autoUpdate = !! process.env.AUTO_UPDATE && process.env.AUTO_UPDATE === 'true';
19
22
  this.wallet = new Wallet(this.privateKey);
20
23
  this.leadNodeAddress = '0x910E413DBF3F6276Fe8213fF656726bDc142E08E'
24
+ this.baseConfigPath = expandHomeDir(`~/.interop-x`);
21
25
  }
22
26
 
23
27
  get publicAddress(){
@@ -27,6 +31,10 @@ class Config {
27
31
  isLeadNode() {
28
32
  return ethers.utils.getAddress(this.leadNodeAddress) === ethers.utils.getAddress(this.wallet.address)
29
33
  }
34
+
35
+ isMaintenanceMode(){
36
+ return fs.existsSync(this.baseConfigPath + '/maintenance')
37
+ }
30
38
  }
31
39
 
32
40
  export default new Config()
@@ -12,6 +12,6 @@ export const addresses = {
12
12
  43114: {
13
13
  gnosisSafe: '0x31d7a5194Fe60AC209Cf1Ce2d539C9A60662Ed6b',
14
14
  multisend: '0x998739BFdAAdde7C933B942a68053933098f9EDa',
15
- interopXGateway: '0x8D27758751BA488690974B6Ccfcda771D462945f',
15
+ interopXGateway: '0xF0317C5Bc206F2291dd2f3eE9C4cDB5Bbb25418d',
16
16
  }
17
17
  }
@@ -2,7 +2,7 @@ export const itokens = {
2
2
  1: [],
3
3
  137: [
4
4
  {
5
- address: '0xEab02fe1F016eE3e4106c1C6aad35FeEe657268E',
5
+ address: '0x62C0045f3277E7067cAcad3c8038eEaBB1Bd92D1',
6
6
  symbol: 'USDC',
7
7
  }
8
8
  ],
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import moduleAlias from 'module-alias';
2
-
2
+ import expandHomeDir from "expand-home-dir";
3
+ import fs from 'fs-extra'
3
4
  moduleAlias.addAliases({
4
5
  "@/": __dirname + "/",
5
6
  "@/logger": __dirname + "/logger",
@@ -25,12 +26,30 @@ dotenv.config();
25
26
  import Logger from "@/logger";
26
27
  const logger = new Logger('Process')
27
28
 
29
+ const GIT_SHORT_HASH = '@GIT_SHORT_HASH@';
30
+
28
31
  const printUsage = () => {
32
+ console.log()
33
+ console.log(`Interop X Node (v${packageJson.version} - rev.${GIT_SHORT_HASH})`)
34
+ console.log()
35
+
29
36
  console.log('Usage:')
30
- console.log(' PRIVATE_KEY=abcd1234 interop-x')
31
- console.log(' PRIVATE_KEY=abcd1234 STAGING=true interop-x')
32
- console.log(' PRIVATE_KEY=abcd1234 AUTO_UPDATE=true interop-x')
33
- console.log(' PRIVATE_KEY=abcd1234 API_HOST=0.0.0.0 API_PORT=8080 interop-x')
37
+ console.log(' interop-x help Show this message')
38
+ console.log(' interop-x version Print out the installed version of Interop X')
39
+
40
+ console.log()
41
+
42
+ console.log(' interop-x down Put the node into maintenance mode')
43
+ console.log(' interop-x up Take the node out of maintenance mode')
44
+
45
+ console.log()
46
+
47
+ console.log(' PRIVATE_KEY=abcd1234 interop-x Start the node with the given private key')
48
+ console.log(' PRIVATE_KEY=abcd1234 STAGING=true interop-x Start the node in staging mode')
49
+ console.log(' PRIVATE_KEY=abcd1234 AUTO_UPDATE=true interop-x Start the node in auto update mode')
50
+ console.log(' PRIVATE_KEY=abcd1234 API_HOST=0.0.0.0 API_PORT=8080 interop-x Start the node with custom API host and port')
51
+ console.log()
52
+
34
53
  }
35
54
 
36
55
  if (process.argv.at(-1) === 'help') {
@@ -38,14 +57,27 @@ if (process.argv.at(-1) === 'help') {
38
57
  process.exit(0)
39
58
  }
40
59
 
41
- const GIT_SHORT_HASH = '@GIT_SHORT_HASH@';
60
+ const basePath = expandHomeDir(`~/.interop-x`);
61
+
62
+ if (process.argv.at(-1) === 'down') {
63
+ fs.outputFileSync(basePath + '/maintenance', Date.now().toString())
64
+ console.log(chalk.red('Maintenance mode enabled'))
65
+ process.exit(0)
66
+ }
67
+
68
+ if (process.argv.at(-1) === 'up') {
69
+ fs.removeSync(basePath + '/maintenance')
70
+ console.log(chalk.green('Maintenance mode disabled'))
71
+ process.exit(0)
72
+ }
73
+
42
74
 
43
75
  if (process.argv.at(-1) === 'version') {
44
76
  console.log(`Interop X Node (v${packageJson.version} - rev.${GIT_SHORT_HASH})`)
45
77
  process.exit(0)
46
78
  }
47
79
 
48
- if(! process.env.PRIVATE_KEY) {
80
+ if (!process.env.PRIVATE_KEY) {
49
81
  console.error(chalk.bgRed.white.bold('Please provide a private key\n'))
50
82
  printUsage()
51
83
  process.exit(1)
@@ -80,10 +112,10 @@ async function main() {
80
112
  if (!peerPool.isLeadNode(payload.peerId)) {
81
113
  const peer = peerPool.getPeer(payload.peerId)
82
114
 
83
- if(! peer) {
115
+ if (!peer) {
84
116
  return;
85
117
  }
86
-
118
+
87
119
  logger.info(`ignored transaction status from ${payload.peerId} ${shortenHash(peer.publicAddress)} `)
88
120
  return;
89
121
  }
@@ -6,7 +6,7 @@ import { IPeerInfo, peerPool } from "..";
6
6
  import config from "@/config";
7
7
  import { Event } from "@/types";
8
8
  import { Transaction } from "@/db";
9
- import { TransactionStatusDialProtocol } from "./dial/SignatureDialProtocol.1";
9
+ import { TransactionStatusDialProtocol } from "./dial/TransactionStatusDialProtocol";
10
10
 
11
11
  export interface ProtocolOptions {
12
12
  /* Handshake timeout in ms (default: 8000) */
@@ -66,11 +66,11 @@ class Protocol extends EventEmitter {
66
66
  Buffer.from(transaction.transactionHash),
67
67
 
68
68
  Buffer.from(transaction.sourceStatus),
69
- Buffer.from(transaction.sourceTransactionHash),
69
+ Buffer.from(transaction.sourceTransactionHash || ''),
70
70
  transaction.sourceErrors ? transaction.sourceErrors.map((e) => Buffer.from(e)) : [],
71
71
 
72
72
  Buffer.from(transaction.targetStatus),
73
- Buffer.from(transaction.targetTransactionHash),
73
+ Buffer.from(transaction.targetTransactionHash || ''),
74
74
  transaction.targetErrors ? transaction.targetErrors.map((e) => Buffer.from(e)) : [],
75
75
 
76
76
  Buffer.from(transaction.status),
@@ -79,11 +79,11 @@ class Protocol extends EventEmitter {
79
79
  transactionHash: transactionHash.toString(),
80
80
 
81
81
  sourceStatus: sourceStatus.toString(),
82
- sourceTransactionHash: sourceTransactionHash.toString(),
82
+ sourceTransactionHash: sourceTransactionHash.toString() || null,
83
83
  sourceErrors: sourceErrors.map((e) => e.toString()),
84
84
 
85
85
  targetStatus: targetStatus.toString(),
86
- targetTransactionHash: targetTransactionHash.toString(),
86
+ targetTransactionHash: targetTransactionHash.toString()|| null,
87
87
  targetErrors: targetErrors.map((e) => e.toString()),
88
88
 
89
89
  status: status.toString(),
@@ -1,15 +1,16 @@
1
1
  import { BaseTask } from "./BaseTask";
2
2
  import Logger from '@/logger';
3
- import { http } from "@/utils";
4
- import spawn from 'await-spawn';
3
+ import spawnAsync from 'await-spawn';
4
+ import { spawn } from 'child_process'
5
5
  import config from "@/config";
6
6
  import wait from "waait";
7
7
  import packageJson from "../../package.json";
8
8
 
9
9
  const currentVersion = packageJson.version;
10
+ const tag = config.staging ? 'dev' : 'latest';
10
11
 
11
12
  class AutoUpdateTask extends BaseTask {
12
- pollIntervalMs: number = 60 * 5 * 1000
13
+ pollIntervalMs: number = 60 * 10 * 1000
13
14
 
14
15
  constructor() {
15
16
  super({
@@ -23,22 +24,26 @@ class AutoUpdateTask extends BaseTask {
23
24
 
24
25
  async getInstalledVersion() {
25
26
  try {
26
- const stdout = await spawn('npm', ['-g', 'ls', '--depth=0', '--json'])
27
-
28
-
27
+ const stdout = await spawnAsync('npm', ['-g', 'ls', '--depth=0', '--json'])
29
28
  return JSON.parse(stdout.toString()).dependencies[packageJson.name].version
30
29
  } catch (error) {
31
30
  this.logger.error(error)
32
-
33
31
  return currentVersion
34
32
  }
35
33
  }
36
34
 
37
- async pollHandler() {
38
-
39
- const { data } = await http.get('https://registry.npmjs.org/@instadapp/interop-x')
35
+ async getLatestVersion() {
36
+ try {
37
+ const stdout = await spawnAsync('npm', ['view', `${packageJson.name}@${tag}`, 'version'])
38
+ return stdout.toString().trim()
39
+ } catch (error) {
40
+ this.logger.error(error)
41
+ return currentVersion
42
+ }
43
+ }
40
44
 
41
- const version = data['dist-tags'].latest
45
+ async pollHandler() {
46
+ const version = await this.getLatestVersion()
42
47
 
43
48
  if (version === currentVersion) {
44
49
  return;
@@ -46,10 +51,9 @@ class AutoUpdateTask extends BaseTask {
46
51
 
47
52
  this.logger.warn(`New version ${version} available.`)
48
53
 
49
-
50
54
  this.logger.info('Updating...')
51
55
 
52
- await spawn('npm', ['-g', 'install', '@instadapp/interop-x', '-f']);
56
+ await spawnAsync('npm', ['-g', 'install', `@instadapp/interop-x@${tag}`, '-f']);
53
57
 
54
58
  await wait(5000)
55
59
 
@@ -61,11 +65,16 @@ class AutoUpdateTask extends BaseTask {
61
65
  this.logger.warn(`Installed version ${version}`)
62
66
  this.logger.warn(`Restarting...`)
63
67
 
64
- spawn(process.argv[0], process.argv.slice(1), {
68
+
69
+ // TODO: its restarting in the bg, but it should be in the fg
70
+ const subprocess = spawn(process.argv[0], process.argv.slice(1), {
65
71
  cwd: process.cwd(),
66
- stdio: "inherit"
72
+ stdio: "inherit",
73
+ // shell: process.env.SHELL,
67
74
  });
68
75
 
76
+ subprocess.unref();
77
+
69
78
  process.exit()
70
79
  }
71
80
  }
@@ -46,6 +46,11 @@ export class BaseTask extends EventEmitter implements IBaseTask {
46
46
  }
47
47
 
48
48
  prePollHandler(): boolean {
49
+ if(config.isMaintenanceMode()){
50
+ this.logger.warn('Maintenance mode is enabled. Skipping task.')
51
+ return false
52
+ }
53
+
49
54
  if (this.exceptLeadNode) {
50
55
  return !config.isLeadNode();
51
56
  }