No se pueden unir nodos/pares a la red privada

OBJECIÓN al problema de duplicado: La supuesta respuesta duplicada NO funciona. La redacción del problema es similar, pero el problema en sí requiere una solución diferente.

Creé una cadena privada local como la siguiente

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

Al iniciar la billetera, tengo que omitir la búsqueda de pares porque nunca termina. Después de abrir puedo ver que estoy en PRIVATE-NET pero con 0 compañeros.

Me di cuenta de que necesitaba 12 pares para la validación de contratos, así que intenté crear 1 o 2 nodos para ver si funcionaba. Utilicé el siguiente tutorial y algunos otros que olvidé.

https://github.com/ethereum/go-ethereum/wiki/Conectando-a-la-red

Inicialmente, creé otra carpeta con geth.exe. luego usó el siguiente comando en una consola separada mientras el geth.exe principal ya se estaba ejecutando.

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

Usé admin.nodeInfo.enodeen la consola geth del nodo para obtener el valor del enodo. Luego usó el siguiente comando en la consola principal de geth para agregar como par.

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

EDITAR Agregar "antes y después de que enode regrese true, pero admin.peers aún no devuelve nada.

esto vuelve(anonymous): Line 1:20 Unexpected token :

Luego copié el archivo de génesis que usé para crear la cadena de bloques, eliminé todo lo demás y ejecuté exactamente el mismo comando dentro de la carpeta del nodo. Recuperé la línea del enodo y lo intenté de nuevo. El error fue el mismo.

¿Estoy malinterpretando cómo debería funcionar esto o hay algo más que me estoy perdiendo?

Gracias.

EDITAR Casi allí Algunos registros que capturé. Parece que casi se conectan y luego se caen debido a una identificación de red que no coincide, pero ¿de dónde diablos obtiene ese número? No tengo nada con networkID 1602902873 y declaro explícitamente el networkID de manera diferente en todos los comandos.

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)

VERGÜENZA... VERGÜENZA... VERGÜENZA... suena la campana Así que al tratar de entender cómo aparece un ID de red mágico aleatorio en lugar del que di. Noté que era un número entero si estaba escrito sin comillas. Tenía un número más allá del valor de int máximo. Cuando lo arreglé a algo aceptable, funcionó de inmediato.

Respuestas (2)

En la función admin.addPeer() , deberá mencionar la dirección IP en lugar de [::]. Parece que estás trabajando en la misma estación de trabajo. En este caso, mencione la dirección del host local al agregar un compañero. Su comando debe ser:

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

De manera similar, si está trabajando en una estación de trabajo diferente en la red local, debe usar la dirección IP privada.

Debe utilizar el mismo archivo de génesis y el mismo ID de red para todos los nodos. Cada nodo debe tener un número de puerto diferente, un número de puerto rpc diferente y un directorio de datos diferente (si se trabaja en el mismo sistema).

Consulte esta página para obtener más información.

Borré los archivos de la cadena de nodos, luego los recreé usando la misma génesis que geth --genesis ...\customchain1\node1\CustomGenesis.json --datadir ...\customchain1\node1\chain --networkid 123 --ipcpath ~/Library/Ethereum/node1/geth.ipc --port 30302 --rpcport 8102 --maxpeers 15 consoleDiferentes puertos e ipcpath para el nodo2. Luego obtuve los enodos y usé addPeer con IP. Probé desde el nodo principal y nuevos nodos. Todo devolvió verdadero pero admin.peers está vacío en todos los nodos :(
Compruebe si net.listening devuelve verdadero antes de agregar los pares. Verifique con net.peerCount si realmente tiene los pares conectados. Por favor, consulte este enlace y avíseme si todavía tiene problemas.
es verdad. peerCount es 0 siempre. Hice exactamente los mismos comandos geth en el enlace. Actualización del texto de la pregunta.
Tenga en cuenta que la URL del enodo cambia cada vez que crea una nueva instancia con diferentes parámetros. No necesita agregar "enode://pubkey@ip:port" al archivo static.json. Le recomiendo que elimine todo y comience de nuevo el proceso con el mismo archivo de génesis y diferentes directorios de datos vacíos .
Creo que ahora estamos muy cerca. Su sugerencia con la corrección de IP estática eliminó el error de letra que aparecía todo el tiempo e hizo que el verdadero problema finalmente fuera visible. Gracias por tu tiempo y esfuerzo.

El primer problema fue la sintaxis incorrecta en static-nodes.json como señaló @galahad. A continuación se muestra el correcto.

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

En segundo lugar, los nodos de ID de red incorrectos estaban tratando de conectarse. Después de resolver el error anterior, seguía arrojando networkID mismatcherrores al intentar conectarse. Asignó una ID de int aleatoria cuando la que tengo estaba por encima del valor máximo. Obtener networkID por debajo del valor max int resolvió ese problema.