Почему у моего узла Ethereum нет пиров?

Я запускаю узел Ethereum, используя geth, и он не может найти пиров. Я уже пробовал команду синхронизации времени, предложенную на вики . У меня хорошая пропускная способность.

Я получаю PeerCount равным нулю даже после того, как попробовал это admin.addPeer("enode:ip:portnumb"). Это дает true, когда я выполнил его в командной строке cmd, но net.peerCount равен 0> admin.addPeer("enode@169.254. 102.232:30340?discport=0") true > web3.net.peerCount 0 > net.peerCount 0 >

Ответы (3)

По умолчанию gethиспользует порт 30303 для подключения к другим узлам. Возможно, вам придется изменить брандмауэр, чтобы разрешить трафик через этот порт.

Вы можете проверить количество пиров, а также получить список пиров при подключении к консоли javascript ( geth attach).

instance: Geth/v1.3.2/darwin/go1.5.1
datadir: /Users/home/Library/Ethereum
coinbase: 0xd3cda913deb6f67967b99d67acdfa1712c293601
at block: 864339 (Sun, 17 Jan 2016 16:00:07 MST)
modules: admin:1.0 db:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 shh:1.0 txpool:1.0 web3:1.0
> net.peerCount
5
> admin.peers
[{
    caps: ["eth/61", "eth/62"],
    id: "03743aa20db17dc12d2e355f32b75964653408eaab2c6e0fad7b2600fef49b3c2ec938d436fc48e86582d732d8eb64935edddee7d5c9caf726261add05cf46fe",
    name: "Geth/v1.2.2/linux/go1.5",
    network: {
      localAddress: "10.0.1.48:30303",
      remoteAddress: "87.106.88.35:35646"
    },
    protocols: {
      eth: {
        difficulty: 2283869820384174300,
        head: "d0d57a2f8fea1c834ce277d031727fecc1baf617b69e4d169f87f7e2d56f04c6",
        version: 62
      }
    },
    ...
]

Если у вас есть исправный узел geth, работающий где-то еще, вы можете попробовать загрузить одноранговое соединение с помощью этой admin.addPeerфункции. Функцию следует вызывать с адресом узла в формате, admin.addPeer("enode://<id>@<ip_address>:<port>")где значения ip_addressи portберутся из remoteAddressчасти информации об одноранговом узле, а the idпредставляет собой большую длинную шестнадцатеричную строку под idключом для информации об одноранговом узле. Для коллеги выше это будет:

 admin.addPeer("enode://03743aa20db17dc12d2e355f32b75964653408eaab2c6e0fad7b2600fef49b3c2ec938d436fc48e86582d732d8eb64935edddee7d5c9caf726261add05cf46fe@87.106.88.35:35646")

Это может быть полезно, если вы каким-то образом потеряете соединение со всеми своими пирами через какой-то несетевой механизм. Однако отсутствие пиров, вероятно, будет проблемой сети, и ручное добавление пиров потенциально может быть только сервером в качестве временного решения в лучшем случае.

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

Хорошо, что вы проверили время, но наиболее распространенной причиной невозможности найти пиры является конфигурация брандмауэра и сети. Если брандмауэр работает, попробуйте отключить его.

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

#!/usr/bin/env bash
trap "exit" INT

LOCALIP=(192.168.10.11)   (put your machines IP here)

IP=$(dig +short myip.opendns.com @resolver1.opendns.com)

echo "Local IP: $LOCALIP"
echo "Public IP: $IP"

echo "Starting eth"
eth --bootstrap --peers 50 --remote 52.16.188.185:30303 --mining off  --public-ip $IP --listen-ip $LOCALIP -- listen 30303

Предупреждение - это не то, что вы должны использовать по умолчанию .. это сожжет пропускную способность интернета как сумасшедшую.