Как запустить собственную загрузочную ноду в Ethereum?

Как запустить собственный узел начальной загрузки? Я имею в виду, как заставить мой гет предоставлять информацию только о пирах, а не о блокчейне. А также как geth узнает, является ли узел загрузочным узлом или обычным узлом? Becz, не зная разницы, geth начнет запрашивать блок-цепочку на загрузочном узле.

Параметр командной строки bootnodesпозволяет нам добавлять узлы начальной загрузки, а addPeerметод JavaScript позволяет нам добавлять обычные узлы. Итак, если я добавлю обычную ноду bootnodes, не будет ли мой экземпляр geth запрашивать блокчейн у загрузочной ноды?

Ответы (1)

Исполняемый файл для запуска загрузочного узла — bootnode. В Ubuntu это установлено вместе /usr/bin/gethс /usr/bin/bootnode.

Вам нужно будет сгенерировать ключ для запуска вашего загрузочного узла:

user@Kumquat:/tmp$ bootnode -genkey nodekeyfile
user@Kumquat:/tmp$ cat nodekeyfile 
3bed8e0fa771475049cddac0fcc20a6cf1005e271e2b12ef339f213218b2dbdb
user@Kumquat:/tmp$ bootnode -nodekey nodekeyfile 
I1001 23:17:42.874776 p2p/discover/udp.go:217] Listening, enode://d3b75b24a4fd718b1358d28ba576b2e98f73a7465326c4504f21cc0d124466a91919de18fb72a634f9108f0eedd5ef943aea5c250b41c974c4a7fb7c159b9968@[::]:30301

В отдельном окне я запустил netstatкоманду для просмотра прослушиваемого порта UDP 30301 bootnode:

user@Kumquat:/tmp$ sudo netstat -anp | grep boot
[sudo] password for user: 
udp6       0      0 :::30301                :::*                                8317/bootnode   

Эта bootnodeпрограмма служит только в качестве узла начальной загрузки и не обеспечивает передачу данных блокчейна.

Теперь вы должны иметь возможность использовать enode://d3b75b24a4fd718b1358d28ba576b2e98f73a7465326c4504f21cc0d124466a91919de18fb72a634f9108f0eedd5ef943aea5c250b41c974c4a7fb7c159b9968@[::]:30301в качестве geth --bootnodesзначения параметра, где вы заменяете [::]IP-адрес вашего компьютера с загрузочным узлом.



Обновлять

Если у вас есть проблемы с работой однорангового обнаружения, добавьте --verbosity 6перед consoleпараметром geth. Вы должны увидеть связь с загрузочным узлом в действии.

Вы также можете добавить в команду параметр verbosity bootnode:

user@Kumquat:/tmp$ bootnode -nodekey nodekeyfile -verbosity 9
I1001 23:17:42.874776 p2p/discover/udp.go:217] Listening, enode://d3b75b24a4fd718b1358d28ba576b2e98f73a7465326c4504f21cc0d124466a91919de18fb72a634f9108f0eedd5ef943aea5c250b41c974c4a7fb7c159b9968@[::]:30301
I1001 23:39:12.546003 p2p/discover/udp.go:453] >>> 192.168.1.14:54991 discover.pong
I1001 23:39:12.546145 p2p/discover/udp.go:521] <<< 192.168.1.14:54991 *discover.ping: ok
I1001 23:39:12.546226 p2p/discover/database.go:183] failed to retrieve node b68ed408e685e6dc75ea457b65f945fa2c6f2171c8bfaf26e32d6362c3ebe9ed3ef3aeb682991e3a01250f93f2a68ea8ca1a98676e669cc007ed227c35d7c3f1: leveldb: not found
I1001 23:39:12.546337 p2p/discover/table.go:473] Bonding b68ed408e685e6dc: known=false, fails=0 age=409813h39m12.54632801s
I1001 23:39:12.547012 p2p/discover/udp.go:453] >>> 192.168.1.14:54991 discover.ping
I1001 23:39:12.549582 p2p/discover/udp.go:521] <<< 192.168.1.14:54991 *discover.pong: ok
I1001 23:39:12.556974 p2p/discover/udp.go:453] >>> 192.168.1.14:54991 discover.neighbors
I1001 23:39:12.557059 p2p/discover/udp.go:521] <<< 192.168.1.14:54991 *discover.findnode: ok

А последнюю документацию по протоколу обнаружения P2P можно найти по адресу RLPx: Cryptographic Network & Transport Protocol .

Я думаю, что в протоколе devp2p отсутствует информация о возможностях. Я думаю, что узел должен объявить, является ли он загрузочным узлом или нет.