Не удается подключить узлы/пиры к частной сети

ВОЗРАЖЕНИЕ против дублирования проблемы: предполагаемый дублирующий ответ НЕ работает. Формулировка задачи похожа, но сама проблема требует другого решения.

Я создал локальную частную цепочку, как показано ниже.

geth --genesis ...CustomGenesis.json --verbosity 6 --datadir ...customchain1\chain --identity SomeChain --blockchainversion 12 --networkid 123 --rpcport 8101 --maxpeers 15 console 

Запуская кошелек, мне приходится пропускать поиск пиров, потому что он никогда не заканчивается. После открытия я вижу, что я в PRIVATE-NET, но с 0 пирами.

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

https://github.com/ethereum/go-ethereum/wiki/Подключение к сети

Изначально я создал еще одну папку с geth.exe в ней. затем использовал приведенную ниже команду на отдельной консоли, когда основной geth.exe уже был запущен.

geth --datadir="...\customchain1\node1\chain" --verbosity 6 --networkid 123 --ipcdisable --port 30302 --rpcport 8102 console

Я использовал admin.nodeInfo.enodeна консоли node geth, чтобы получить значение enode. Затем используйте приведенную ниже команду на основной консоли geth для добавления в качестве равноправного узла.

admin.addPeer("enode://7a68ad5995ed4fa02a20f582e0c41bd6afad609102edda3fe3b443b618e56b11282d78cbeddfd2b8fb846a36ed6230d446fb41dc5fd77ff97bf20502e7ce0568@[::]:30302")

РЕДАКТИРОВАТЬ Добавление "до и после возврата enode, trueно admin.peers ничего не возвращает.

Это возвращает(anonymous): Line 1:20 Unexpected token :

Затем я скопировал исходный файл, который использовал для создания блокчейна, удалил все остальное и запустил точно такую ​​же команду в папке узла. Я получил строку enode и попробовал еще раз. Ошибка была такая же.

Я неправильно понимаю, как это должно работать, или есть что-то еще, что мне не хватает?

Спасибо.

РЕДАКТИРОВАТЬ Почти готово Некоторые журналы, которые я захватил. Кажется, что они почти подключаются, а затем обрываются из-за несоответствия networkID, но откуда, черт возьми, он берет этот номер? У меня нет ничего с идентификатором сети 1602902873, и я явно указываю идентификатор сети по-разному во всех командах.

10:42:11.869273 p2p/server.go:428] new task: static dial 07837c0f7f31ad77 127.0.0.1:30301
10:42:11.869273 p2p/server.go:428] new task: static dial b708f0574d3b88af 127.0.0.1:30302
10:42:11.869273 p2p/server.go:428] new task: static dial 38754ca3bd38f3b7 127.0.0.1:30303
10:42:11.869273 p2p/server.go:428] new task: discovery lookup
10:42:11.869273 p2p/dial.go:263] dial tcp 127.0.0.1:30301 (07837c0f7f31)
10:42:11.870275 p2p/dial.go:263] dial tcp 127.0.0.1:30302 (b708f0574d3b)
10:42:11.870275 p2p/dial.go:263] dial tcp 127.0.0.1:30303 (38754ca3bd38) 
10:42:11.876277 p2p/server.go:477] <-posthandshake: static dial conn 07837c0f7f31ad77 127.0.0.1:30301 
10:42:11.877278 p2p/server.go:477] <-posthandshake: static dial conn b708f0574d3b88af 127.0.0.1:30302
10:42:11.878279 p2p/server.go:483] <-addpeer: static dial conn 07837c0f7f31ad77 127.0.0.1:30301
10:42:11.878279 p2p/server.go:672] Added Peer 07837c0f7f31ad77 127.0.0.1:30301
10:42:11.878279 p2p/server.go:467] <-taskdone: static dial 07837c0f7f31ad77 127.0.0.1:30301
10:42:11.878279 p2p/peer.go:301] Peer 07837c0f7f31ad77 127.0.0.1:30301: Starting protocol eth/63
10:42:11.879280 eth/handler.go:231] Peer 07837c0f7f31ad77 [eth/63]: peer connected [Geth/v1.4.4-stable/windows/go1.5.1/CustomChainPOCNode2]
10:42:11.879280 p2p/server.go:483] <-addpeer: static dial conn b708f0574d3b88af 127.0.0.1:30302
10:42:11.879280 p2p/server.go:672] Added Peer b708f0574d3b88af 127.0.0.1:30302
10:42:11.879280 eth/handler.go:236] Peer 07837c0f7f31ad77 [eth/63]: handshake failed: NetworkId mismatch - 1602902873 (!= 123)
10:42:11.879280 p2p/peer.go:308] Peer 07837c0f7f31ad77 127.0.0.1:30301: Protocol eth/63 error: NetworkId mismatch - 1602902873 (!= 123)
10:42:11.879280 p2p/peer.go:177] Peer 07837c0f7f31ad77 127.0.0.1:30301: protocol error: NetworkId mismatch - 1602902873 (!= 123) (Subprotocol error)
10:42:11.879280 p2p/server.go:477] <-posthandshake: static dial conn 38754ca3bd38f3b7 127.0.0.1:30303
10:42:11.880280 p2p/server.go:467] <-taskdone: static dial b708f0574d3b88af 127.0.0.1:30302
10:42:11.882281 p2p/peer.go:301] Peer b708f0574d3b88af 127.0.0.1:30302: Starting protocol eth/63
10:42:11.882281 eth/handler.go:231] Peer b708f0574d3b88af [eth/63]: peer connected [Geth/v1.4.4-stable/windows/go1.5.1/CustomChainPOCNode1]
10:42:11.882281 eth/handler.go:236] Peer b708f0574d3b88af [eth/63]: handshake failed: NetworkId mismatch - 1602902873 (!= 123)
10:42:11.884283 p2p/peer.go:308] Peer b708f0574d3b88af 127.0.0.1:30302: Protocol eth/63 error: NetworkId mismatch - 1602902873 (!= 123)
10:42:11.884283 p2p/peer.go:177] Peer b708f0574d3b88af 127.0.0.1:30302: protocol error: NetworkId mismatch - 1602902873 (!= 123) (Subprotocol error)
10:42:11.881281 p2p/server.go:626] static dial conn 38754ca3bd38f3b7 127.0.0.1:30303 failed checkpoint posthandshake: Connected to self
10:42:11.882281 p2p/server.go:499] <-delpeer: Peer 07837c0f7f31ad77 127.0.0.1:30301
10:42:11.888287 p2p/server.go:467] <-taskdone: static dial 38754ca3bd38f3b7 127.0.0.1:30303
10:42:11.888287 p2p/server.go:499] <-delpeer: Peer b708f0574d3b88af 127.0.0.1:30302
10:42:11.882281 p2p/server.go:688] Removed Peer 07837c0f7f31ad77 127.0.0.1:30301 (Subprotocol error)
10:42:11.890288 p2p/server.go:688] Removed Peer b708f0574d3b88af 127.0.0.1:30302 (Subprotocol error)

СТЫД... СТЫД... СТЫД... звенит звонок Итак, пытаясь понять, как появляется случайный магический networkID вместо того, который я дал. Я заметил, что это целое число, если оно написано без кавычек. У меня было число за максимальным значением int. Когда я исправил его на что-то приемлемое, он сразу же заработал.

Ответы (2)

В функции admin.addPeer() вам нужно указать IP-адрес вместо [::]. Похоже, вы работаете на одной рабочей станции. В этом случае укажите адрес локального хоста при добавлении узла. Ваша команда должна быть:

admin.addPeer("enode://7a68ad5995ed4fa02a20f582e0c41bd6afad609102edda3fe3b443b618e56b11282d78cbeddfd2b8fb846a36ed6230d446fb41dc5fd77ff97bf20502e7ce0568@127.0.0.1:30302")

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

Вам необходимо использовать один и тот же файл генезиса и сетевой идентификатор для всех узлов. У каждого узла должен быть другой номер порта, другой номер порта rpc и другой каталог данных (если он работает в одной системе).

Проверьте эту страницу для получения дополнительной информации.

Я очистил файлы цепочки узлов, а затем воссоздал их, используя тот же генезис, что geth --genesis ...\customchain1\node1\CustomGenesis.json --datadir ...\customchain1\node1\chain --networkid 123 --ipcpath ~/Library/Ethereum/node1/geth.ipc --port 30302 --rpcport 8102 --maxpeers 15 consoleи различные порты и ipcpath для node2. Затем получил эноды и использовал addPeer с IP. Я пробовал с основного узла и новых узлов. Все вернули true, но admin.peers пуст во всех узлах :(
Перед добавлением пиров проверьте, возвращает ли net.listening true. Проверьте с помощью net.peerCount, действительно ли у вас подключены одноранговые узлы. Пожалуйста, проверьте эту ссылку и дайте мне знать, если у вас все еще есть проблемы.
это так. peerCount всегда равен 0. Я сделал точно такие же команды geth в ссылке. Обновление текста вопроса.
Обратите внимание, что URL-адрес enode меняется каждый раз, когда вы создаете новый экземпляр с другими параметрами. Вам не нужно добавлять «enode://pubkey@ip:port» в файл static.json. Я рекомендую вам удалить все и начать процесс заново с тем же файлом генезиса и другими пустыми каталогами данных .
Я думаю, что мы действительно близки сейчас. Ваше предложение с исправлением статического IP-адреса удалило буквенную ошибку, которая появлялась все время, и, наконец, сделала истинную проблему видимой. Спасибо за ваше время и усилия.

Первой проблемой был неправильный синтаксис в static-nodes.json, как указал @galahad. Ниже правильный.

[
  "enode://abc13b392a70743a2c1226e84f0c1fbf00768d44854730db4745952d0c91efcba2fd8cc6b7df3ad68ecac99333560376b6888ac114e61c83c8d45b0a53b92223@10.222.6.87:30301",
  "enode://2520136e29c92473064edb44db63d7c4e2589bb3e0558524af8b0158e156d86e6c0e2ec8f4e372691626c44e184518c9b6a78557d613620d8939abab033c3a11@10.222.6.87:30302"
]

Во-вторых, узлы с неправильным идентификатором сети пытались подключиться. После устранения вышеуказанной ошибки он продолжал выдавать networkID mismatchошибки при попытке подключения. Он присваивал случайный идентификатор int, когда тот, который у меня был, был выше максимального значения. Получение networkID ниже максимального значения int решило эту проблему.