Skip to content
This repository was archived by the owner on Oct 19, 2022. It is now read-only.

Commit 2db44e7

Browse files
authored
Merge pull request #3 from ForestCrazy/dev
Release 1.2.2
2 parents 5cabf3e + 6446702 commit 2db44e7

File tree

6 files changed

+260
-54
lines changed

6 files changed

+260
-54
lines changed

.gitignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ yarn-error.log*
1111
lerna-debug.log*
1212

1313
# Diagnostic reports (https://nodejs.org/api/report.html)
14-
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
14+
# report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
1515

1616
# Runtime data
1717
pids
@@ -145,4 +145,5 @@ build/
145145

146146
# End of https://www.toptal.com/developers/gitignore/api/node,visualstudiocode
147147
node_list.txt
148-
fetch_node_list.py
148+
fetch_node_list.py
149+
input_node_list.py

CONFIG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# chia-node-append-setting.json
2+
3+
## setting_version
4+
setting file version
5+
6+
## node_source (str)
7+
* source of the node list
8+
* there are two configurations: `file name` or `node_list_firestore` if you assign it to a file name, for example `node_list.txt` script will use node list from node_list.txt file. But if you define it as `node_list_firestore` script will use the node list from the node list firestore database
9+
10+
## firestore.firestore (int)
11+
* set how many loops every number of loops to retrieve the node list from the node list firestore database
12+
* required when you define **node_source** as `node_list_firestore`
13+
* it is advisable to configure a large number of numbers so as not to affect firebase firestore data usage (firebase is now free version, if you want to support firebase price you can donate at [DONATE](https://github.com/ForestCrazy/chia-node-append#donate-for-development-))
14+
15+
## firestore.firestore_update (int)
16+
* set how many loops every number of loops to insert node to node list firestore database
17+
* required when you define **node_source** as `node_list_firestore`
18+
* it is advisable to configure a large number of numbers so as not to affect firebase firestore data usage
19+
20+
## disconnect_node (boolean)
21+
disconnect if the node you are connecting is not a full node
22+
23+
## remove_node (boolean)
24+
* remove a node that connot connect to
25+
* required when you define **node_source** as `node_list_firestore`

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ Tool to automatically add peer nodes up to 100 connections
55

66
## chia-node-append installer
77
* download **chia-node-append** from [last release](https://github.com/ForestCrazy/chia-node-append/releases/tag/v1.2.0)
8-
* [optional] create ``node_list.txt`` and add node list [(example ``node_list.txt`` file)](https://github.com/ForestCrazy/chia-node-append/blob/master/node_list.txt) if you do not create the file `node_list.txt` script will find node list from firestore database and add peer node
8+
* [optional] create `node_list.txt` and add node list [(example `node_list.txt` file)](https://github.com/ForestCrazy/chia-node-append/blob/master/node_list.txt) if you do not create the file `node_list.txt` script will find node list from firestore database
9+
* [optional] create `chia-node-append-setting.json` and copy setting from [chia-node-append-setting.json](https://github.com/ForestCrazy/chia-node-append/blob/master/chia-node-append-setting.json) if you do not create the file `chia-node-append-setting.json` script will use default setting
910
* run **chia-node-append**
1011

1112
## How to build project

chia-node-append-setting.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"setting_version": "1.0",
3+
"node_source": "node_list.txt",
4+
"firestore": {
5+
"firestore": 20,
6+
"firestore_update": 100
7+
},
8+
"disconnect_node": true,
9+
"remove_node": true
10+
}

index.js

Lines changed: 63 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { readFileSync, existsSync } = require('fs');
1+
const { readFileSync, existsSync, writeFileSync } = require('fs');
22
const { Connection, constants, ApiClient } = require('chia-api');
33
const { homedir } = require('os');
44
const { join } = require('path');
@@ -43,49 +43,47 @@ const { combine, timestamp, label, printf } = format;
4343
databaseURL: "https://chia-controller-75c1e.firebaseio.com", // Realtime Database
4444
});
4545
var while_loop_round = 0;
46-
var setting = {
47-
firestore: 10,
48-
node_length: 20
49-
}
5046
while (true) {
51-
var resource_node_list = null;
52-
const node_list_file = 'node_list.txt';
53-
if (existsSync(node_list_file)) {
54-
logger.info('import node list from node_list.txt');
55-
resource_node_list = 'node_list_file';
56-
var node_obj = readFileSync(node_list_file, function(err, data) {
57-
if (err) throw err;
58-
}).toString().split('\n');
59-
for (const property in node_obj) {
60-
node_obj[property] = {
61-
node_ip: node_obj[property].split(':')[0],
62-
node_port: parseInt(node_obj[property].split(':')[1])
63-
}
47+
if (existsSync('chia-node-append-setting.json')) {
48+
logger.info('use setting from chia-node-append-setting.json');
49+
const setting_obj = JSON.parse(readFileSync('chia-node-append-setting.json', { encoding: 'utf8', flag: 'r' }));
50+
var setting = {
51+
node_source: setting_obj.node_source,
52+
node_source_type: null,
53+
firestore: setting_obj.firestore.firestore,
54+
firestore_update: setting_obj.firestore.firestore_update,
55+
disconnect_node: setting_obj.disconnect_node,
56+
remove_node: setting_obj.remove_node
6457
}
6558
} else {
59+
logger.info('use default setting');
60+
var setting = {
61+
node_source: existsSync('node_list.txt') ? 'node_list.txt' : 'node_list_firestore',
62+
node_source_type: null,
63+
firestore: 10,
64+
firestore_update: 100,
65+
disconnect_node: true,
66+
remove_node: true
67+
}
68+
}
69+
if (setting.node_source == 'node_list_firestore') {
6670
logger.info('import node list from firestore database');
67-
resource_node_list = 'node_list_firebase';
71+
setting.node_source_type = 'node_list_firebase';
6872
if (while_loop_round % setting.firestore == 0) {
6973
const firestore_node_list = await app.firestore().collection('node_list').get();
7074
var node_obj = firestore_node_list.docs.map(doc => doc.data());
7175
}
72-
}
73-
74-
const node_list_length = Object.keys(node_obj).length;
75-
if (node_list_length <= 10) {
76-
setting = {
77-
firestore: 10,
78-
node_length: 100
79-
}
80-
} else if (node_list_length <= 100) {
81-
setting = {
82-
firestore: 10,
83-
node_length: 10
84-
}
8576
} else {
86-
setting = {
87-
firestore: 1,
88-
node_length: 1
77+
logger.info('import node list from node_list.txt');
78+
setting.node_source_type = 'node_list_file';
79+
var node_obj = readFileSync(setting.node_source, function(err, data) {
80+
if (err) throw err;
81+
}).toString().split('\n');
82+
for (const property in node_obj) {
83+
node_obj[property] = {
84+
node_ip: node_obj[property].split(':')[0],
85+
node_port: parseInt(node_obj[property].split(':')[1])
86+
}
8987
}
9088
}
9189

@@ -101,36 +99,51 @@ const { combine, timestamp, label, printf } = format;
10199
port: node_chia[property].node_port
102100
});
103101
} catch (exception) {
104-
logger.error('failed to add node connection : ' + exception);
102+
logger.error('failed to add node connection : ' + node_chia[property].node_ip + ':' + node_chia[property].node_port);
103+
if (setting.remove_node == true && setting.node_source != 'node_list_firestore') {
104+
var node_arr_file = readFileSync(setting.node_source, { encoding: 'utf8', flag: 'r' }).split('\n');
105+
for (const property in node_arr_file) {
106+
node_arr_file[property] = node_arr_file[property].replace('\r', '');
107+
}
108+
const node_index = node_arr_file.indexOf(node_chia[property].node_ip + ':' + node_chia[property].node_port);
109+
node_arr_file.splice(node_index, 1);
110+
var node_list_str = null;
111+
for (const property in node_arr_file) {
112+
node_list_str = node_list_str == null ? node_arr_file[property] : node_list_str + '\n' + node_arr_file[property];
113+
}
114+
writeFileSync(setting.node_source, node_list_str);
115+
logger.info('remove node : ' + node_chia[property].node_ip + ':' + node_chia[property].node_port + ' from file ' + setting.node_source);
116+
}
105117
}
106118
}
107119

108-
const filter_node_conn = lodash.filter(JSON.parse(JSON.stringify(await fullNode.getConnections()))['connections'], function(node_type) { return node_type.type != 1 });
109-
110-
if (Object.keys(filter_node_conn).length > 0) {
111-
for (const property in filter_node_conn) {
112-
if (filter_node_conn[property].peer_host !== '127.0.0.1') {
113-
try {
114-
logger.info('close connection node with node_id : ' + filter_node_conn[property].node_id)
115-
const closeNodeConnection = await fullNode.closeNodeConnection({
116-
node_id: filter_node_conn[property].node_id
117-
});
118-
} catch (exception) {
119-
logger.error('failed to close connection node : ' + exception);
120+
if (setting.disconnect_node == true) {
121+
const filter_node_conn = lodash.filter(JSON.parse(JSON.stringify(await fullNode.getConnections()))['connections'], function(node_type) { return node_type.type != 1 });
122+
if (Object.keys(filter_node_conn).length > 0) {
123+
for (const property in filter_node_conn) {
124+
if (filter_node_conn[property].peer_host !== '127.0.0.1') {
125+
try {
126+
logger.info('close connection node with node_id : ' + filter_node_conn[property].node_id)
127+
const closeNodeConnection = await fullNode.closeNodeConnection({
128+
node_id: filter_node_conn[property].node_id
129+
});
130+
} catch (exception) {
131+
logger.error('failed to close connection node : ' + exception);
132+
}
120133
}
121134
}
122135
}
123136
}
124137

125138
if (while_loop_round % setting.node_length == 0) {
126-
if (resource_node_list !== 'node_list_firebase') {
139+
if (setting.node_source_type !== 'node_list_firebase') {
127140
var node_obj = await app.firestore().collection('node_list').get();
128141
node_obj = node_obj.docs.map(doc => doc.data());
129142
}
130143
const currConnections = lodash.filter(JSON.parse(JSON.stringify(await fullNode.getConnections()))['connections'], obj_item => obj_item.type === 1);
131144
const filter_node_list = currConnections.filter(({ peer_host: node_1 }) => !node_obj.some(({ node_ip: node_2 }) => node_2 === node_1));
132145
for (const property in filter_node_list) {
133-
logger.info('insert node ip: ' + currConnections[property].peer_host + ' port: ' + currConnections[property].peer_server_port);
146+
logger.info('insert node ip: ' + currConnections[property].peer_host + ' port: ' + currConnections[property].peer_server_port + 'to firestore node list');
134147
const newChiaNode = await app.firestore().collection('node_list').doc().set({
135148
node_ip: currConnections[property].peer_host,
136149
node_port: currConnections[property].peer_server_port

node_list.txt

Lines changed: 157 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,4 +261,160 @@ node-apne.chia.net:8444
261261
89.1.28.186:8444
262262
1.20.34.21:8444
263263
58.41.3.175:8444
264-
5.173.13.69:8444
264+
5.173.13.69:8444
265+
111.20.82.6:8444
266+
36.48.79.36:8444
267+
106.6.52.215:8444
268+
58.8.154.18:8444
269+
1.81.255.195:8444
270+
49.48.95.76:8444
271+
2.85.50.94:8444
272+
49.48.22.95:8444
273+
197.47.10.1:8444
274+
49.48.85.78:8444
275+
24.17.12.91:8444
276+
94.31.86.18:8444
277+
49.49.31.71:8444
278+
81.13.62.27:8444
279+
190.115.4.2:8444
280+
37.21.31.7:8444
281+
171.4.212.55:8444
282+
91.239.42.49:8444
283+
3.86.166.83:8444
284+
60.177.34.2:8444
285+
2.132.83.52:8444
286+
58.59.136.65:8444
287+
1.2.214.208:8444
288+
1.1.225.134:8444
289+
37.3.119.17:8444
290+
1.58.249.16:8444
291+
36.6.46.191:8444
292+
85.3.13.134:8444
293+
49.48.90.92:8444
294+
116.8.95.56:8444
295+
5.173.57.13:8444
296+
14.241.85.9:8444
297+
1.197.241.73:8444
298+
46.165.5.30:8444
299+
46.99.2.223:8444
300+
39.120.75.35:8444
301+
223.64.67.5:8444
302+
176.64.4.98:8444
303+
1.46.68.140:8444
304+
37.57.204.3:8444
305+
89.77.96.21:8444
306+
74.14.207.94:8444
307+
171.7.24.38:8444
308+
183.89.161.6:8444
309+
65.30.6.123:8444
310+
117.63.76.5:8444
311+
62.47.158.20:8444
312+
45.8.90.22:8444
313+
42.49.52.53:8444
314+
172.90.160.8:8444
315+
184.22.20.84:8444
316+
192.0.4.17:8444
317+
14.0.165.96:8444
318+
31.223.2.73:8444
319+
49.76.75.42:8444
320+
39.130.99.84:8444
321+
83.21.66.49:8444
322+
1.47.239.16:8444
323+
1.20.11.35:8444
324+
96.52.66.27:8444
325+
1.1.175.191:8444
326+
5.9.102.52:8444
327+
76.64.73.85:8444
328+
128.0.185.10:8444
329+
86.42.167.4:8444
330+
14.8.1.97:8444
331+
171.96.19.5:8444
332+
27.38.61.64:8444
333+
46.22.56.155:8444
334+
111.60.82.25:8444
335+
24.35.29.33:8444
336+
175.9.90.1:8444
337+
61.90.22.146:8444
338+
125.27.21.95:8444
339+
1.20.24.81:8444
340+
58.11.10.63:8444
341+
121.3.92.41:8444
342+
171.6.95.53:8444
343+
88.3.108.25:8444
344+
75.85.186.56:8444
345+
1.80.94.179:8444
346+
89.1.61.109:8444
347+
218.65.6.38:8444
348+
27.18.7.106:8444
349+
49.48.82.64:8444
350+
82.9.7.120:8444
351+
59.53.23.89:8444
352+
1.193.79.14:8444
353+
78.30.42.67:8444
354+
1.4.150.187:8444
355+
219.145.1.56:8444
356+
94.63.2.98:8444
357+
88.250.11.80:8444
358+
83.26.57.83:8444
359+
49.0.80.209:8444
360+
1.4.244.48:8444
361+
95.29.8.23:8444
362+
59.63.44.114:8444
363+
58.136.3.90:8444
364+
219.136.1.80:8444
365+
49.228.43.82:8444
366+
5.189.201.93:8444
367+
119.48.197.225:8444
368+
188.72.187.104:8444
369+
79.203.237.107:8444
370+
14.207.164.207:8444
371+
118.100.37.241:8444
372+
134.101.164.254:8444
373+
192.24.191.145:8444
374+
119.48.197.225:8444
375+
31.162.90.158:8444
376+
3.239.86.171:8444
377+
192.168.1.15:8444
378+
1.10.251.140:8444
379+
112.38.119.1:8444
380+
31.0.49.178:8444
381+
49.75.229.198:8444
382+
219.138.161.162:8444
383+
43.239.122.83:8444
384+
118.168.2.218:8444
385+
198.48.177.180:8444
386+
183.15.181.222:8444
387+
27.154.215.40:8444
388+
125.27.36.108:8444
389+
185.166.252.150:8444
390+
58.247.169.2:8444
391+
183.88.85.59:8444
392+
178.165.113.239:8444
393+
178.183.111.130:8444
394+
171.6.164.162:8444
395+
213.195.122.53:8444
396+
1.194.133.77:8444
397+
49.228.96.26:8444
398+
58.8.84.240:8444
399+
93.93.169.60:8444
400+
58.22.1.76:8444
401+
62.84.234.252:8444
402+
62.84.234.252:8444
403+
180.183.121.57:8444
404+
180.183.121.57:8444
405+
95.112.143.216:8444
406+
95.112.143.216:8444
407+
222.211.166.43:8444
408+
61.170.175.36:8444
409+
61.170.175.36:8444
410+
184.22.128.27:8444
411+
86.195.56.202:8444
412+
86.195.56.202:8444
413+
180.183.26.164:8444
414+
114.45.110.50:8444
415+
1.204.50.62:8444
416+
77.76.1.139:8444
417+
36.6.36.225:8444
418+
83.249.174.141:8444
419+
178.126.205.188:8444
420+
62.171.16.155:8444

0 commit comments

Comments
 (0)