Сразу скажу, что я немного новичок в сетях и Ethereum в целом, но после просмотра некоторых руководств я решил, что хотел бы создать частную сеть/блокчейн для собственного использования и смарт-контрактов. Но хотя я могу подключить 2 одноранговых узла на одной машине, мне трудно подключить 2 одноранговых узла на разных машинах.
МЕТОД 1. Ниже приведен один из способов, которым я пробовал это (который работает для 2 одноранговых узлов на одной машине; в одном учебнике, который я видел, отсутствовали последние 3 флага, но я все равно решил их включить)
geth --datadir /path/to/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30001 --port 8081 console //компьютер 1
geth --datadir /other/path/to/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30002 --port 8082 console //машина 2
Затем на машине 1 получите admin.nodeInfo.enode (то есть "enode://d677...b4c5@[::]:8081?discport=0") и введите на машине 2 admin.addPeer("enode: //d677...b4c5@my.ip.address?discport=0).
Это возвращает true, но admin.peers остается пустым.
МЕТОД 2: Другой способ — сделать то же самое для машины 1, но вместо этого на машине 2 введите:
geth --datadir /other/path/to/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30002 --port 8082 --bootnodes enode:// d677...b4c5@my.ip.address?discport=0 консоль
Затем выполните тот же процесс admin.addPeer. Однако бывают такие же результаты.
Я действительно разрываюсь, в чем здесь проблема. Блоки генезиса одинаковы (хэши одинаковы), и я пробовал различные типы флагов после инициализации на обеих машинах. Я предполагаю, что мои часы не синхронизированы на обеих машинах (хотя я не уверен, как это сделать, кроме как sudo timedatectl set-ntp on), или что я ввожу неправильный IP-адрес (хотя я я пробовал почти все из них), так что, может быть, было бы неплохо какое-то направление в этих областях.
Я также пробовал использовать --verbosity 6, и возвращаемая ошибка: «обнаружение отключено» и «наберите tcp my.ip.address: 8081: getsockopt: соединение отклонено». Что странно, так как у меня не было проблем с этим, используя те же машины, но когда я сделал то же самое без --nodiscover, это все равно не сработало: ошибки были: 'dial tcp my.ip.addresss:8081: тайм-аут ввода/вывода ' и 'начальные узлы diskv4 не найдены' и 'ошибка разрешения узла'.
Мне очень жаль, если это действительно многословно, но просто я действительно не уверен, в чем настоящая проблема, и я просто повторял многие из этих изменений, в которых я уверен. Что еще хуже, я думаю, что Ethereum и geth постоянно обновляются, поэтому я не уверен, что информация, которую я вижу на этом сайте и в других местах, актуальна или точна. Я был бы очень, очень признателен за помощь здесь, потому что я действительно отчаянно нуждаюсь в помощи и разъяснениях.
1) Просто подтвердите, одинаковы ли оба происхождения... (используйте eth.getBlock(0)
на обоих узлах)
2) Попробуйте использовать admin.addPeer("enode....@IP другого узла:Порт") в своей консоли.
Вы можете проверить порт, используяadmin.nodeInfo
admin.addPeer("enode://93a29e6d51e58c8a313a295fc3b246b59cd2c8c4f9aa833ac351584882f7c23ac24f38ebc76213a23f8c84aeb8a2e7d46a504a3110775ad12f36b1fe1938cbad@YOUR_IP_2:30303")
3) Проверка пиров с помощьюnet.peerCount
Для подключения пиров на двух разных машинах у меня сработал следующий подход:
1) Как указано во многих ответах, убедитесь, что файл генезиса точно такой же на обоих узлах. Вы должны получить одинаковые значения сложности, генезиса, головы и сети при admin.nodeInfo.protocols.eth
запуске на соответствующих узлах.
2) Перейдите к настройкам брандмауэра (на машине Win: Панель управления> Система и безопасность> Брандмауэр Windows> Дополнительные настройки) и отключите все правила, связанные с geth, в опции «Правила для входящих подключений».
3) При запуске экземпляра geth используйте порт 30303 только на обеих машинах. У меня не сработало, когда я пробовал с другими номерами портов. Возможно, это связано с тем, что когда я просматривал исходящие правила в настройках брандмауэра, я обнаружил, что 30303 указан как разрешенный порт для TCP/UDP против geth. Не стесняйтесь проверить то же самое на своих машинах и соответствующим образом изменить номер порта.
4) Используйте admin.addPeer({enode})
для добавления пиров. Подробности {enode} можно взять из другого ответа.
Исмаэль
Авария