¿Cómo agregar pares en una red privada?

Creé una cadena de bloques privada en dos máquinas diferentes. Ahora quiero que estos nodos se conecten entre sí como "pares". Estoy usando gethla consola.

He probado el siguiente comando:

> admin.addPeer("enode://3414c01c19aa75a34f2dbd2f8d0898dc79d6b219ad77f8155abf1a287ce2ba60f14998a3a98c0cf14915eabfdacf914a92b27a01769de18fa2d049dbf4c17694@10.10.23.196:30301");

Aquí 10.10.23.196está la IP de la segunda máquina y 30301es el puerto en el que se ejecuta.

Se truemuestra un valor, pero cuando escribo:

> admin.peers

[]se visualiza.

¿Hay algo mal con el enfoque? Si ayuda, estoy usando el siguiente comando para ejecutar el geth en ambas máquinas.

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

Además, el mismo procedimiento funciona para dos nodos únicos en la misma máquina.

Me pregunto cómo se encuentran los dos nodos.

Respuestas (7)

Su problema es probablemente el mismo bloque de génesis. Debe especificar el mismo archivo genesis json y asegurarse de que se use con todos los comandos (y el inicio también). Establezca la verbosidad en 10 para comprender lo que sucede.

Hola. En julio dijiste "Necesitas especificar el mismo archivo json de génesis y asegurarte de que se use con todos los comandos". ¿Cómo especificas un archivo de génesis APARTE de cuando estás haciendo el inicio? ¿Como para una invocación normal de fo geth? Tengo el mismo problema que OP. (Mi nodo problemático es geth, mis dos buenos nodos son Parity si eso ayuda). También probé admin.addPeer y admin.peers me da [] como OP.
github.com/paritytech/parity/wiki/Chain-specification que necesita para que la paridad convierta su archivo de génesis al formato de paridad.
Creo que lo malinterpretas. Los nodos de paridad funcionan bien. La pregunta es cómo hacer que geth funcione. Así que necesito ir en la otra dirección, de paridad a geth.
Haz lo contrario. geth también usa un archivo de génesis. Convierta su paridad uno a formato geth.
¿Puedes decirme cómo hacer esto? Tengo un archivo de génesis que creé manualmente y creo que se basa correctamente en el archivo de paridad. Pero no se conecta, por lo que necesitaría algunos detalles si los tiene, por favor.
  • El genesis.json tiene que ser exactamente el mismo en todos los nodos. Si no está seguro, intente verificarlo con una suma de verificación
  • Por favor, asegúrese de que no haya problemas de red. Si usa una VM, intente usar una red con puente o una red NAT, para que los nodos puedan comunicarse fácilmente entre sí.
  • Por favor, tenga cuidado con los números de puerto. Los diferentes nodos deben tener diferentes números de puerto, como se explica aquí .
  • El nuevo nodo debe extraerse un poco para poder sincronizarse con la cadena de bloques en su red de prueba privada. (desde aquí ).

Publique el resultado de su comando geth.

Asegúrese de que el puerto RPC ( --rpcport) y el puerto eth ( --port) sean diferentes en todas las instancias de geth. Si las máquinas no están en la misma red, deberá usar la dirección IP pública mientras agrega pares. Para verificar si las instancias se ejecutan en una cadena de bloques privada, busque un mensaje similar después de iniciar la instancia de geth:

I0920 08:59:31.877152   10724 backend.go:303] Successfully wrote genesis block. New genesis hash = 6e92f8b2..........

En cambio, si recibe un mensaje similar a este, es posible que haya problemas con su archivo de génesis:

I0920 08:59:31.877152 10724 backend.go:303] WARNING: Wrote default Ethereum Genesis Block.

Use net.listeningel comando en la consola JS y verifique si está devolviendo verdadero.

No estoy seguro si ya resolviste tu problema, pero tuve un problema similar hace un tiempo.

Para mí, el problema fue que la red tiene como valor predeterminado la dirección IP del host local (127.0.0.1). Debe agregar el indicador "--rpcaddr" seguido de su dirección IP. Así que debería verse como:

--rpcaddr 10.10.23.196

¡Espero que esto haya ayudado!

también puede establecerlo en 0.0.0.0 para aceptar todas las direcciones

Primero asegúrese de que haya conectividad sin restricciones entre las 2 máquinas: por ejemplo, los puertos están bloqueados por algún tipo de firewall.

Si eso no es un problema y está utilizando el mismo archivo de génesis, entonces lo que puede suceder es que establezca la dificultad inicial en un nivel bajo en el archivo de génesis. Hasta que los bloques de ajuste de dificultad se agreguen muy rápido y los dos nodos no tendrán tiempo de sincronizarse.

Si esto no ayuda, ¿podría proporcionar una salida de la consola geth con la información de depuración habilitada?

Si no puso la dirección IP o el puerto incorrectos, el problema debe estar en el bloque de génesis. Para verificar que tiene los mismos bloques de génesis en cada nodo, use:

web3.eth.getBlock(0);

Verifique el campo hash, debe ser el mismo número en ambos nodos. Si no es así, los nodos no se conectarán.

Si coincide, entonces tiene problemas de red, verifique las reglas del firewall, los números de puerto y cosas por el estilo.

También podría haber la posibilidad de que sus nodos tengan las mismas claves de nodo. Esto puede suceder si copia el directorio de blockchain con cp -r. Luego, en uno de los nodos, debe eliminar nodekeyel archivo para que se pueda regenerar una nueva clave para el nodo.

Asegúrese de que el puerto que especificó con el indicador "--port" esté abierto en la segunda máquina.

Para abrir este puerto en la segunda máquina (30301 en su caso):

sudo ufw allow 30301

¡Soy nuevo en esto y luché dos días con esto ...!