Я создал приватный блокчейн на двух разных машинах. Теперь я хочу, чтобы эти узлы соединялись друг с другом как «пиры». Я использую geth
консоль.
Я пробовал следующую команду:
> admin.addPeer("enode://3414c01c19aa75a34f2dbd2f8d0898dc79d6b219ad77f8155abf1a287ce2ba60f14998a3a98c0cf14915eabfdacf914a92b27a01769de18fa2d049dbf4c17694@10.10.23.196:30301");
Вот 10.10.23.196
IP второй машины и 30301
порт, на котором она работает.
Значение true
отображается, но когда я набираю:
> admin.peers
[]
отображается.
Что-то не так с подходом? Если это поможет, я использую следующую команду для запуска geth на обеих машинах.
geth --identity "Sukhi" --genesis CustomGenesis.json \
--rpc --rpcport "8001" --rpccorsdomain "*" \
--datadir "chaindata" --port "30301" \
--ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" \
--rpcapi "db,eth,net,web3" --autodag --networkid 1900 --nat "any" console
Более того, одна и та же процедура работает для двух уникальных узлов на одной машине.
Ваша проблема, вероятно, в том же блоке генезиса. Вам нужно указать тот же файл genesis json и быть уверенным, что он используется со всеми командами (и с init тоже). Установите уровень детализации на 10, чтобы понять, что происходит.
Пожалуйста, опубликуйте вывод вашей команды geth.
Убедитесь, что порт RPC ( --rpcport
) и порт eth ( --port
) различаются во всех экземплярах geth. Если машины не находятся в одной сети, вам придется использовать общедоступный IP-адрес при добавлении узла. Чтобы проверить, работают ли экземпляры в частной цепочке блоков, проверьте наличие аналогичного сообщения после запуска экземпляра geth:
I0920 08:59:31.877152 10724 backend.go:303] Successfully wrote genesis block. New genesis hash = 6e92f8b2..........
Вместо этого, если вы получите сообщение, похожее на это, могут быть проблемы с вашим файлом генезиса:
I0920 08:59:31.877152 10724 backend.go:303] WARNING: Wrote default Ethereum Genesis Block.
Используйте net.listening
команду в консоли JS и проверьте, возвращает ли она значение true.
Не уверен, что вы уже решили свою проблему, но у меня была аналогичная проблема некоторое время назад.
Для меня проблема заключалась в том, что сеть по умолчанию использует IP-адрес локального хоста (127.0.0.1). Вы должны добавить флаг «--rpcaddr», за которым следует ваш IP-адрес. Итак, это должно выглядеть так:
--rpcaddr 10.10.23.196
Надеюсь, это помогло!
Сначала убедитесь, что между двумя машинами существует неограниченная связь: например, порты заблокированы каким-то брандмауэром.
Если это не проблема, и вы используете тот же файл генезиса, то может случиться так, что вы установили низкую начальную сложность в файле генезиса. До тех пор, пока сложность не изменится, блоки будут добавляться очень быстро, и два узла не успеют синхронизироваться.
Если это не поможет, не могли бы вы предоставить вывод консоли geth с включенной отладочной информацией?
Если вы не указали неправильный IP-адрес или порт, проблема должна быть в блоке генезиса. Чтобы убедиться, что у вас одинаковые блоки генезиса на каждом узле, используйте:
web3.eth.getBlock(0);
Проверьте поле hash
, оно должно быть одинаковым на обоих узлах. Если это не так, узлы не будут подключаться.
Если они совпадают, значит, у вас проблемы с сетью, проверьте правила брандмауэра, номера портов и тому подобное.
Также может быть вероятность, что ваши узлы имеют одинаковые ключи узлов. Это может произойти, если вы скопируете каталог блокчейна с расширением cp -r
. Затем на одном из узлов вы должны удалить nodekey
файл, чтобы можно было восстановить новый ключ для узла.
Убедитесь, что порт, указанный вами с помощью флага «--port», открыт на второй машине.
Чтобы открыть этот порт на второй машине (30301 в вашем случае):
sudo ufw allow 30301
Я новичок в этом, и я два дня боролся с этим..!
Ай.